繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM