在函数调用上调用sizeof会跳过实际调用该函数!}

时间:2012-04-26 06:54:03

标签: c++ sizeof

我碰巧偶然发现了这段代码。

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 /文件等)?

5 个答案:

答案 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。