1.1. sizeof操作符
sizeof操作符用于获得一个表达式的类型的大小,表达式可以是一个运算式、变量或类型,当sizeof后面是单个标识符时,不需要括号。如果sizeof表达式作为整个表达式的一部分时最好使用括号,除非你很清楚各运算符的优选级。sizeof的优先级是一元运算符中最低的,但高于所有二元运算符。使用sizeof获得C++内置类型的值可能为(不同CPU、不同编译器都可能不同):
数据类型 | sizeof | 备注 |
bool | 1 | 一般都是1,尚未发现不为1的编译器 |
char unsigned char signed char | 1 | C++标准定义 |
short [int] unsigned short [int] shigned short [int] | 2 | C++标准规定至少为不比char小,绝大多数编译器都是2,尚未发现有编译器为其它值 |
int unsigned int signed int | 1,2,4,8 | 不同CPU不同,8位单片机可能为1(可能会有编译器选项设为4);16位单片机为2(可能有编译器选项改为4);32位CPU一般为4,64位CPU多数编译器也默认为4,可能有编译选项设为8 |
long [int] unsigned long [int] signed long [int] | 4, 8 | C++标准规定至少为4,但绝大多数编译器也都是4,但有些编译器提供了编译选项,可以设为8 |
long long [int] unsigned long long [int] | 4, 8 | 一般为8,但在一些嵌入式设备的编译器中可能只支持到4个字节的精度 |
float | 4 | 绝大多数编译器都实现为4个字节的精度 |
double | 4,8 | 绝大多数编译器都实现为8个字节的精度,但有些嵌入式编译器可能只支持4个字节 |
long double | 4, 8, 12 | 一般为12,但有些编译器特别是嵌入式编译器可能只支持8字节精度,甚至只支持4字节精度 |
void*, char*, short*, int* , boo*, long*, long long*, float*, double*, long double* | 2,4,8 | 在8、16位单片机上为2,在32位机上为4,在64位机上为64 |
enum | 4,8 | 一般为4,但有的编译器可以支持enum的值定义为long long型扩展到8字节(如VC++ 2010、gcc 4.3.4),有的编译器严格检查定义的值,超过4字节时则给出编译错误(如C++Builder 2010),C++标准并没有规定具体大小。 |
1.1.1. 提高程序的易维护性
合更地使用sizeof可以更好的提高软件的易维护性,例如下面的代码,当我们添加或删除数组中的元素时for循环里的循环条件无需修改。
char* arr[] = {"str1", "str2", "str3", "str4"};
for(int i=0; i
cout<<"arr["<
std::size_t len = static_strlen("Hello") ;
std::cout<<"length of '"<