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:支持的初始化器語法禁止**縮小**轉換。隱含的擴展轉換仍然發生。 –