【发布时间】:2013-11-21 02:53:07
【问题描述】:
sizeof 运算符的返回类型是什么? cppreference.com & msdn 说 sizeof 返回 size_t。它真的返回 size_t 吗? 我正在使用 VS2010 Professional,并针对 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;
}
我有这个问题是因为第一行没有发出任何警告,而第二行却发出了警告。即使我将其更改为 char 大小,我也不会收到任何警告。
【问题讨论】:
-
怎么样
decltype(sizeof(int))... -
它可能不是警告,因为 sizeof 的结果对于编译器是静态已知的;它是一个常数,所以不用担心像 strlen 那样被截断。
-
请注意,更聪明的编译器(例如
gcc)也会在编译时确定length,因此也不会针对该转换发出警告。 -
@AdamD.Rupee 字符名称[CHAR_MAX + 5];字符大小 = sizeof(name); -> size 设置为-124,编译器应该能找到这个吧?
-
@MarcGlisse,我知道整数提升。根据 Adam 的回复(“它是一个常量,因此无需担心像 strlen 那样被截断”),我编写了导致截断的代码,编译器似乎没有对此发出警告。
标签: c++ visual-studio-2010 sizeof