C++11、C99下的sizeof
sizeof运算符
- 简单定义
sizeof是获取表达式结果的类型或一个类型占用内存空间大小的运算符。
- 标准上带来的Tips
- C99以前,sizeof的值是编译过程就决定了的,C99以后,引入了可变长数组,sizeof的值便也可以在运行时决定。
例子:
运行结果:int main(){ int n; scanf(%d,&n); int a[n];//可变长数组,内存空间还是在栈上 printf("%d\n", sizeof(a)); return 0; }
![class]()
注:本gcc版本为4.9.2, 已支持C99标准
分析:
以上结果说明,sizeof运算符也可以在运行时取值。
2. C++11标准中,允许使用作用域运算符对类成员进行sizeof取值,而不局限于使用类对象获取类成员。因为sizeof仅是对表达式结果的类型取所占用空间大小,而不会实际使用该对象
例子:
执行结果:struct A{ double a; int b; }; int main(){ printf("%d\n", sizeof(A::a)); printf("%d\n", sizeof(A::b)); return 0; }
注:本g++编译器支持C++11 - C99以前,sizeof的值是编译过程就决定了的,C99以后,引入了可变长数组,sizeof的值便也可以在运行时决定。

浙公网安备 33010602011771号