int main()
{
short n1 = 8ll; // no warning
// warning C4305: 'initializing': truncation from '__int64' to 'short'
// warning C4309: 'initializing': truncation of constant value
short n2 = 88888ll;
}
我的编译器的Visual Studio 2017C++是否允许将任何整数文字隐式转换为短整型?
根据cppref:
的类型整数文字的是其中值 可以适合,从类型列表中的第一类型的取决于哪个数字库 以及使用了哪个整数后缀。
带后缀ll
的整数字面值应为long long int
;所以short n1 = 8ll
应该会触发像short n2 = 88888ll
这样的警告。
C++是否允许任何整数文字被隐式转换为short int
如果它足够小?
“应该触发警告” - 编译器对于警告非常自由。当标准表示需要诊断时,他们可能会发出警告,但他们也可能在标准保持沉默的情况下给予警告。编译器可以很聪明。它知道它自己的限制,所以它可以给出'88888LL'的警告,而不是'8LL'。 – MSalters
您可以使用大括号来禁用隐式转换,例如'short n2 = {88888LL};'(此功能是在C++ 11中添加的) –
@ M.M:支持的初始化器语法禁止**缩小**转换。隐含的扩展转换仍然发生。 –