不知道为什么在下面的代码片段中增量运算符不起作用:
int main()
{
int a = 10;
int b = sizeof(a++);
cout<<"a: "<<a<<endl;
cout<<"b: "<<b<<endl;
return 0;
}
输出-
a: 10
b: 4
不知道为什么在下面的代码片段中增量运算符不起作用:
int main()
{
int a = 10;
int b = sizeof(a++);
cout<<"a: "<<a<<endl;
cout<<"b: "<<b<<endl;
return 0;
}
输出-
a: 10
b: 4
sizeof
不会评估其参数。它在编译时静态计算参数的大小,而不导致任何代码执行。
int main()
{
int a = 10;
int b = sizeof(int[a++ ? 1 : 1]);
cout<<"a: "<<a<<endl;
cout<<"b: "<<b<<endl;
return 0;
}
a
的值输出为11
,但也可能输出10
,这取决于编译器是否足够聪明以省略评估a++
,从而推导出int [10]
的sizeof在编译时计算。int(*)[a++]
。sizeof
运算符的操作数是未使用的,它不会被计算。这是标准行为。a
既用于确定 sizeof(a++)
,又用于输出。 - Sebastian Machsizeof在C中不是一个函数。
它的参数不会被真正地计算,只有它的类型会在编译时进行计算。 在您的代码中,该赋值与以下赋值等效(在您的架构中):
int b = 4
void f();
sizeof(f()); // f not called