是int
默認signed long int
在C++?在C++中,默認情況下是`int long`嗎?
它是依賴於平臺和/或編譯器嗎?如果是這樣,怎麼樣?
[編輯]
以下任何一項是否保證重複?
signed short int
signed int
signed long int
signed long long int
unsigned short int
unsigned int
unsigned long int
unsigned long long int
是int
默認signed long int
在C++?在C++中,默認情況下是`int long`嗎?
它是依賴於平臺和/或編譯器嗎?如果是這樣,怎麼樣?
[編輯]
以下任何一項是否保證重複?
signed short int
signed int
signed long int
signed long long int
unsigned short int
unsigned int
unsigned long int
unsigned long long int
所有的整數類型是不同的,即你可以安全地重載所有這些函數,你不會有任何衝突。但是,有些時候使用相同數量的比特來表示。即使他們使用相同數量的位,有符號和無符號類型的總是有不同的範圍。除了char
之外,使用任何不帶signed
的整數類型等同於使用signed
,即signed int
和int
是等同的。 char
是與signed char
和unsigned char
不同的類型,但char
具有與signed char
或unsigned char
相同的表示形式和範圍。您可以使用std::numeric_limits<char>::is_signed
找出它使用的是哪一個。
談到更有趣的方面。以下所有條件:
7 <= std::numeric_limits<signed char>::digits
sizeof(char) == 1
sizeof(char) == sizeof(signed char)
sizeof(char) == sizeof(unsigned char)
15 <= std::numeric_limits<short>::digits
sizeof(char) <= sizeof(short)
31 <= std::numeric_limits<long>::digits
sizeof(int) <= sizeof(long)
63 <= std::numeric_limits<long long>::digits
sizeof(long) <= sizeof(long long)
sizeof(X) == sizeof(signed X)
sizeof(signed X) == sizeof(unsigned X)
(其中 「X」 是一個char
,short
,int
,long
,和long long
)。
這意味着所有整數類型的大小可以是相同的,只要這種類型的保持至少64位(顯然的Cray X-MP是這樣一個獸)。在當代機器通常sizeof(int) == sizeof(long)
但有機器,其中sizeof(int) == sizeof(short)
。 long
是32位還是64位取決於實際架構,目前這兩種類型都在使用。
您的模板參數因爲看起來像HTML標籤而消失,使用逐字標記(反引號)來防止這種情況。另外,我很確定你保證的'std :: numeric_limits
'std :: numeric_limits
平原int
簽訂後,它是否是相同的大小long int
是與平臺相關的。
什麼保證的是,
sizeof (int) <= sizeof (long)
和int
是大到足以容納至少所有數值爲-32767至32767
標準說什麼:(部分[basic.fundamental]
:
有五種標準符號整數類型:
signed char
,short int
,int
,long int
和long long int
。在這個列表中,每種類型至少提供與列表中前面那些相同的存儲空間。也可能有實現定義的擴展有符號整數類型。標準和擴展的有符號整數類型統稱爲有符號整數類型。 Plainint
s具有執行環境架構所建議的自然大小;提供其他有符號整數類型以滿足特殊需求。
+1,對於其他讀者來說:第一句中有一個重要的細節:'int'和'signed long int' **從不**相同*類型*,但它們可以有相同的* size *。 – 2011-12-29 23:59:13
普通int
相當於signed int
。這很標準。任何過去的事情都不能保證; int
和long
是不同的類型,即使您的特定編譯器使它們具有相同的大小。您唯一的保證是long
是至少大到int
。
long
和short
修飾符不完全像signed
和unsigned
。後兩者可以放在任何整數類型上,但是如果將它們關閉,那麼對於每個整數類型(char
除外),signed
是默認。所以int
和signed int
是相同的類型。
對於long
和short
,如果將它們關閉,則不會選擇,但結果類型不同。 long int
,short int
和int
都是不同的類型,其中short int
< = int
< = long int
。
的int
後long
,short
,signed
和unsigned
是可選的:signed int
和signed
是相同的類型。
signed
和int
默認情況下與signed int
相同。
兩者都不是signed short int
或signed long int
。
在C++ int
默認爲signed int
,所以沒有問題。但是,在C++中,int
和long int
是不同的類型,所以從語言的角度來看這是不一樣的。 int
和long int
的實現是平臺/編譯器特定的 - 它們都是可能相同的整型。 C++標準強加的唯一限制是sizeof(long int) >= sizeof(int)
。
'linux-amd64'' int'有32位,而'long'有64位。 – 2011-12-29 23:37:17
這很明顯:爲什麼語言會燒掉一個關鍵字來表示相同的東西? – 2011-12-29 23:43:26
不能同意這一點。它不總是理想上沒有歧義和冗餘。 – qazwsx 2011-12-29 23:47:51