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
类型的文字。
函数式强制转换不是 C 的一部分,这就是为什么它不会使用 C 编译器构建的原因。
为了回答更多问题,发生的情况是运算符sizeof
编译时计算为其参数的大小(以char
s 为单位)。参数的类型为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
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 当我们说在执行程序时将操作系统的控制权传递给main()函数时,我们的意思是什么
- 这句话在c++中的意思是什么
- 这个typedef的意思是什么
- 这句话的意思是什么
- 意思是什么
- 这个句法的意思是什么?