我碰巧偶然发现了这段代码。
int x(int a){
std::cout<<a<<std::endl;
return a + 1;
}
int main()
{
std::cout<<sizeof(x(20))<<std::endl;
return 0;
}
我预计它会打印20跟随4.但它只是打印4.为什么会这样?优化函数是否不正确,这有副作用(打印到IO /文件等)?
答案 0 :(得分:15)
sizeof
是一个编译时运算符,永远不会计算操作数。
答案 1 :(得分:4)
sizeof
实际上是一个运算符,它在编译时进行评估。
编译器可以对其进行评估,因为返回类型x
的大小是固定的;它在程序执行期间无法改变。
答案 2 :(得分:2)
sizeof的结果是在C ++编译时计算的。所以有函数调用x(20)
答案 3 :(得分:2)
sizeof()
给出数据类型的大小。在您的情况下,它不需要调用函数来获取数据类型。
我怀疑sizeof也是在编译时而不是运行时的业务......
答案 4 :(得分:2)
让我引用c ++ 03标准,#5.3.3。
sizeof运算符产生对象中的字节数 表示其操作数。操作数是表达式, 未评估,或带括号的type-id。