sizeof(int(123))是什么意思?

Gst*_*tso 3 c++ syntax casting sizeof

我很惊讶为什么下面的代码会编译:

#include <stdio.h>

int main(){
    printf("%lu",sizeof(int(123)));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是4,这里的(123)是什么意思?

我发现这行代码可以用g ++编译,但不是gcc,这是什么原因?

unw*_*ind 7

这是C++,int(123)是一个函数式转换int.这当然是毫无意义的,因为无论如何123都是一个int字面的文字.

函数式转换不是C的一部分,这就是它不能用C编译器构建的原因.

为了回答更多问题,所发生的是运算符sizeof的编译时计算char其参数的大小(以s为单位).参数是类型int,因此您输出int平台上的大小为4.

你也可以只使用一个普通的sizeof 123,用C语言构建,或者sizeof (int)明确表示类型,而不是从值中派生它.请注意,括号是参数的一部分(类型名称写为C样式转换),sizeof不是函数.