2013-05-09 409 views
0

這是對某件事情非常基本的。後綴LL爲long long類型

定義類型long long時,表達式就像。

long long x=5435666LL; 

我不能明白爲什麼LL被交固定,因爲即使沒有後固定其相當清晰的編譯器來分配權存儲空間(在VC 8個字節),它反正在沒有修復後的一樣。

'LL'post-fix有什麼用途?

回答

3

如果沒有後綴,編譯器會選擇其中值適合的第一個intlong intlong long int。但是,您可能特別需要一個適合int的值爲long long int類型。爲此,您可以使用LL後綴。

人爲的例子:

template <typename T> 
void foo(T x) { 
    static_assert(std::is_same<T, long long>::value, "Must be long long!"); 
} 

int main() 
{ 
    foo(0); // Error because 0 without a suffix is an int 
    foo(0LL); 
} 

證明這些文字有不同的尺寸(假設intlong long int有不同的大小在您的實現),考慮the following example

#include <iostream> 

int main() 
{ 
    std::cout << sizeof(0) << ' ' << sizeof(0LL) << std::endl; 
} 

對於我來說,這個輸出:

4 8 
+0

所以請幫助我在此。即使有或沒有LL編譯器分配8個字節(長的long類型的內存空間)而不是4個字節(int類型的內存空間),所以使用後綴的要點又是什麼? – user1619447 2013-05-09 22:00:28

+0

@ user1619447不,不帶後綴這是一個'int'它是否適合在'int'並會使用,但是許多字節的'int'佔用。對於後綴,它將總是佔用「long long」所需的字節數。 – 2013-05-09 22:03:07

+0

有一次我做了這麼久很久x = 5435666LL; cout << sizeof(x)<< endl;第二次長龍x = 5435666LL; cout << sizeof(x)<< endl;兩者都給出了8的結果,不是說它指定長期不分? – user1619447 2013-05-09 22:05:14

4

您的代碼就相當於

long long x; 
x = 5435666LL 

沒有LL後綴,5435666int。在這兩種情況下,結果是一樣的,因爲5435666適合在int,除非你是一個16位平臺上。

+0

所以請幫助我。即使有或沒有LL編譯器分配8個字節(長的long類型的內存空間)而不是4個字節(int類型的內存空間),所以使用後綴的要點又是什麼? – user1619447 2013-05-09 22:00:07

+0

也許習慣或一致性,以便一個人也可以做它的時間,當它很重要。 – TheUndeadFish 2013-05-10 01:01:20

+0

@ user1619447:當您調用過載的函數時,它可能很重要。例如。,如果有'void foo(long)'和'void foo(int)',那麼'foo(1L)'選擇'long'重載,'foo(1)'選擇'int'重載。使用'L'前綴可以強制'long'重載,而不必知道你的號碼是否適合'int'。 – 2013-05-10 08:02:20

1

在你的例子中它只有一個美容目的。

我能想到以下examle那裏可以有所作爲的,因爲字面被假定爲int

enum { 
    Flag1 = 1 << 0, 
    Flag2 = 1 << 33, 
    Flag3 = 1LL << 33; 
}