大小运算符的返回类型是什么
What is the return type of sizeof operator?
sizeof
运算符的返回类型是什么?cppreference.com 和msdn说sizeof
返回size_t
。它真的返回size_t
吗?我使用的是VS2010专业版,并以x64为目标。
int main()
{
int size = sizeof(int); // No warning
int length = strlen("Expo"); //warning C4267: 'initializing' : conversion from 'size_t' to 'int', possible loss of data
return 0;
}
我有这个问题是因为第一行没有发出任何警告,而第二行发出了。即使我将其更改为字符大小,也不会收到任何警告。
C++11, §5.3.3 ¶6
sizeof
和sizeof...
的结果是std::size_t
类型的常量。[ 注意:标准::size_t 在 标准标头 (18.2)。— 尾注 ]
您还可以进行快速检查:
#include <iostream>
#include <typeinfo>
#include <cstdlib>
int main()
{
std::cout<<(typeid(sizeof(int))==typeid(std::size_t))<<std::endl;
return 0;
}
在我的机器上正确输出1
。
正如 @Adam D. Ruppe 在评论中所说,编译器可能不会抱怨,因为它已经知道结果,所以它知道这种"转换"并不危险
size_t是一些实现定义的无符号整型的别名。在与 C 相反C++中,sizeof 运算符可以应用于 VLA 数组,则不计算 sizeof 运算符的操作数(在运行时)。这是一个常数。如果 sizeof 运算符的值可以适合 int 类型,则编译器不会发出警告。在第二个示例中,std::strlen 在运行时进行评估,因此其结果不适合 int,因此编译器发出警告。你可以用你自己的constexpr函数(一些递归函数)替换std:;strlen。在这种情况下,如果结果可以适合 int,我认为编译器不会发出警告。
sizeof 运算符用于获取类型或变量的大小(以字节为单位)。返回至少为 16 位的无符号整数类型。它用于获得可移植性。
此警告是因为定义了size_t的无符号整数。
相关文章:
- c++运算符重载-我实际返回的操作数类型是什么
- 运算符和返回类型是什么意思?
- STD :: SETW,STD :: SETFILL等的真实返回类型是什么?
- C++中以下函数的返回类型是什么
- 此函数的返回类型是什么
- 提升的返回类型是什么::apply_visitor(延迟版本)
- C 中构造函数的返回类型是什么
- 如果返回了向量的一个项,lambda表达式的返回类型是什么
- 工厂函数的最佳智能指针返回类型是什么
- 大小运算符的返回类型是什么
- C++中运算符的返回类型是什么
- 在 valarray 上 "count" 的 STL 算法的返回类型是什么
- CONFIGRET返回类型是什么意思?
- 双&号返回类型是什么意思?
- 使用 c++ 中的构造函数时 ffi 的返回类型是什么
- 赋值操作符的返回类型是什么?
- ClassName&作为返回类型是什么意思?
- 赋值运算符的返回类型是什么
- boost::bind的返回类型是什么
- C ++中新运算符的返回类型是什么?为什么我们可以将返回值分配给变量(非指针)?