[英]What does sizeof(int(123)) mean?
我很惊讶为什么下面的代码会编译:
#include <stdio.h>
int main(){
printf("%lu",sizeof(int(123)));
return 0;
}
输出是4,这里的(123)是什么意思?
我发现这行代码可以用g ++编译,但不是gcc,这是什么原因?
这是C ++, int(123)
是一个函数式转换为int
。 这当然毫无意义,因为123
无论如何都是一个int
-typed文字。
函数式转换不是C的一部分,这就是它不能用C编译器构建的原因。
为了回答更多问题,会发生的操作是sizeof
编译时计算其参数的大小(以char
单位)。 参数的类型为int
,因此您在平台上输出int
的大小为4。
你也可以使用一个普通的sizeof 123
,它将用C构建,或者sizeof (int)
用于显式的类型,而不是从一个值派生它。 请注意,括号是参数的一部分(类型名称写为C样式转换), sizeof
不是函数。
sizeof
是一个关键字 ,但它是一个编译时运算符,用于确定变量或数据类型的大小(以字节为单位)。
sizeof
运算符可用于获取类,结构,联合和任何其他用户定义数据类型的大小。
使用sizeof
的语法如下:
sizeof
(数据类型)其中数据类型是所需的数据类型,包括类,结构,联合和任何其他用户定义的数据类型。
尝试以下示例以了解C ++中可用的所有sizeof运算符。 在test.cpp文件中复制并粘贴以下C ++程序并编译并运行该程序。
#include <iostream>
using namespace std;
int main() {
cout << "Size of char : " << sizeof(char) << endl;
cout << "Size of int : " << sizeof(int) << endl;
cout << "Size of short int : " << sizeof(short int) << endl;
cout << "Size of long int : " << sizeof(long int) << endl;
cout << "Size of float : " << sizeof(float) << endl;
cout << "Size of double : " << sizeof(double) << endl;
cout << "Size of wchar_t : " << sizeof(wchar_t) << endl;
return 0;
}
编译并执行上述代码时,会产生以下结果,这可能因机器而异:
Size of char : 1
Size of int : 4
Size of short int : 2
Size of long int : 4
Size of float : 4
Size of double : 8
Size of wchar_t : 4
int(123)
是使用显式类型转换的表达式。
来自C ++标准(5.2.3显式类型转换( 功能表示法 ))
1简单类型说明符(7.1.6.2)或类型名称说明符(14.6)后跟带括号的表达式列表,在给定表达式列表的情况下构造指定类型的值。 如果表达式列表是单个表达式,则类型转换表达式与相应的强制转换表达式(5.4)等效(在定义中,如果在含义中定义)...
至于sizeof
运算符那么(C ++ STandard,5.3.3 Sizeof)
1 sizeof运算符产生其操作数的对象表示中的字节数。 操作数是一个表达式,它是一个未评估的操作数(第5章),或带括号的type-id ...
因此在这个表达中
sizeof(int(123))
有用于文本类型的整数的显式转换int
的类型int
(不使大的意义上)和sizeof运算符被施加到产生的类型的结果表达size_t
。
实际上这个表达式相当于
sizeof(int)
或者在这种特殊情况下
sizeof(123)
因为整数文字123
的类型为int
。
函数表示法的显式转换形式仅在C ++中有效。 在C中,没有这种转换符号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.