use*_*292 8 c++ operators sizeof
可能重复:
为什么sizeof(x ++)不能递增x?
只是想知道为什么增量运算符不能在下面的代码片段中工作:
int main()
{
int a = 10;
int b = sizeof(a++);
cout<<"a: "<<a<<endl;
cout<<"b: "<<b<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出 -
a:10
b:4
当sizeof的表达式类型不是可变修改的数组类型时,则不评估表达式,因为该类型在编译时是完全已知的.int没有可变的修改部分.
在C++中(至少C++ 11),没有可变的修改类型(至少不像C的概念那样 - 你可以说它new int[a++]使用了一种可变的修改过的数组类型;但是这种类型不会逃避任何其他部分语言.特别是,不是sizeof),所以在C++中,从不评估sizeof的表达式.在C中,如果表达式不会影响可变修改数组类型的大小,则不确定是否进行计算.例如
int main()
{
int a = 10;
int b = sizeof(int[a++ ? 1 : 1]);
cout<<"a: "<<a<<endl;
cout<<"b: "<<b<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在C(从C99起),这可以输出11为a,但它还可输出10,取决于编译器是否足够聪明省略评估a++,推断出sizeof运算int[10]是在编译时计算的.
脚注:可变修改的数组类型也称为VLA(可变长度数组)类型.简而言之,可变修改类型是VLA类型或依赖于VLA类型的类型.例如int(*)[a++].