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

What does sizeof(int(123)) mean?

本文关键字:意思 是什么 int sizeof      更新时间:2023-10-16

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

#include <stdio.h>
int main(){
printf("%lu",sizeof(int(123)));
return 0;
}

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

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

这是C++,int(123)是用于int的函数式强制转换。这当然没有意义,因为无论如何123都是int类型的文字。

函数式强制转换不是 C 的一部分,这就是为什么它不会使用 C 编译器构建的原因。

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

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

int(123)是一个使用显式类型转换的表达式。

来自C++标准(5.2.3显式类型转换(函数表示法))

1

简单类型说明符 (7.1.6.2) 或类型名说明符 (14.6) 后跟一个带括号的表达式列表构造一个值 给定表达式列表的指定类型。如果表达式列表是 单个表达式,类型转换表达式等效(在 定义性,如果定义在含义上)到相应的演员表 表达式 (5.4)...

至于sizeof运算符,那么(C++标准,5.3.3 大小)

1 sizeof 运算符产生对象中的字节数 表示其操作数。操作数要么是一个表达式, 是未计算的操作数(第 5 条)或括号 类型标识...

因此在这个表达式中

sizeof(int(123))

使用了将类型为int的整数文本显式转换为类型int(这没有多大意义),并且 sizeof 运算符应用于生成类型size_t结果的表达式。

实际上这个表达式等效于

sizeof(int)

或在此特定情况下

sizeof(123)

因为整数文本123的类型为int.

函数表示法的显式转换形式仅在C++有效。在 C 语言中,没有这样的转换符号。

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