我知道的標準如下:字面類型在VC
- 積分從0開始被解釋爲八進制。
- 以0x或0X開頭的積分被解釋爲十六進制。
類型字面整數取決於它的價值和符號:
- 小數默認情況下籤署,並具有最小的類型爲int,長,很長很長的,它的值相符。
- 十六進制和八進制可以是有符號或無符號的,並且具有最小類型的int,unsigned int,long,unsigned long,long long,unsigned long long,其中文字值適合。
- 沒有短文字的文字,但可以用後綴覆蓋。
但是VC++怎麼樣?!它似乎在處理十進制,八進制和十六進制,並且對於小數也允許相同和無符號類型。
類似下面的代碼:
cout << typeid(4294967295).name() << endl;
cout << typeid(4294967296).name() << endl;
cout << typeid(0xffffffff).name() << endl;
cout << typeid(0x100000000).name() << endl;
給出:
unsigned long
__int64
unsigned int
__int64
這是預期的,爲什麼它是從標準有什麼不同?
您認爲這與標準有什麼不同? –
在C++ 11中,4294967295應該適合long long類型,所以它永遠不會有無符號類型。但是,unsigned long是C++ 11之前的有效結果。 – hvd
哪個版本的VC++,BTW? – Angew