C++ char, unsigned char, signed char
C语言中的 char, unsigned char, signed char
一、他们是什么?
signed char是有符号的,但是unsigned char没有符号,两者在存储上没有任何区别都是8位。
区别在于如何理解这两个byte,假设一种场景我们要将其赋值给一个int。
如果是signed char由于高位为符号位,那么会对最高位进行扩展,但是对于unsinged char不会进行扩展。
至于char是有符号还是无符号,要取决于具体的编译器。
二、三者的类型无法进行自动转换
假设我们使用template定义了一个fill函数,对于字符串类型C语言已经有了现成的实现memset函数,这里我们想调用它,也就是对于字符串我们打算将其定义为一个特例来处理。
template <class T>
void fille(Iterator<T> *begin,Iterator<T> * end,T t){
....
}
void fill(char * begin,char * end,char t){
memeset(begin,end-begin,t);
}
void fill(unsigned char * begin,unsigned char * end,char t){
memeset(begin,end-begin,t);
}
void fill(signed char * begin,signed char * end,char t){
memeset(begin,end-begin,t);
}
这里的问题是为什么要定义三个,关键是这里的这三个函数是普通的函数,我们无法使用模板的特性,对于这样的普通函数要适应多种参数类型,只能是类型的自动转换,但是这三种char都无法进行自动转换,所以需要每个都要定义一个。
参考资料:
[1] http://www.cnblogs.com/qytan36/archive/2010/09/27/1836569.html
[2] http://blog.csdn.net/zx824/article/details/6884352
最新文章
- iOS开发——项目篇—高仿百思不得姐 05——发布界面、发表文字界面、重识 bounds、frame、scrollView
- iOS 一个控件只能拥有一个父类
- [问题2014A13] 复旦高等代数 I(14级)每周一题(第十五教学周)
- Mysql时间函数
- 首先,定义描述学生的类——Student,包括学号(int)、 姓名(String)、年龄(int)等属性;二个方法:Student(int stuNo,String name,int age) 用于对对象的初始化,outPut()用于输出学生信息。其次,再定义一个主类—— TestClass,在主类的main方法中创建多个Student类的对象,使用这些对象来测 试Student类的功能。
- Ubuntu 14.10 下awk命令详解
- 阿里云centos增加swap(虚拟内存)
- GSM、3G、LTE、4G
- Slave延迟很大的优化方法总结(MySQL优化)
- Apache CXF 3.0: CDI 1.1 Support as Alternative to Spring--reference
- iOS push全方位解析(二)【译文】";——生成OpenSSL证书,Provisioning Profile
- BootStrap 智能表单系列 七 验证的支持
- Windows Phone开发(15):资源
- form异步无刷新提交,提交后可以显示弹出框,否则弹出框会被刷新不见,使用 preventDefault
- linux的基本java环境搭建
- 基于FPGA的肤色识别算法实现
- [INet] WebSocket 协议中的数据收发过程
- Linux之prink原理
- WebKit最新特性srcset简介(转)
- 【IDEA】【6】Maven打包
热门文章
- ReactPHP── PHP版的Node.js(转)
- stark组件开发之提取公共视图函数
- JFinal Web开发学习(九)后台添加前台显示博客
- Task 和 ThreadPool
- C# 切换到二级域名,使用Cookie
- gulp中pipe的作用和来源
- c++计时
- PAT 1008 数组元素循环右移问题 (20)(代码)
- BZOJ 3932 [CQOI2015]任务查询系统 - 差分 + 主席树
- swift 属性值变化