這是對某件事情非常基本的。後綴LL爲long long類型
定義類型long long時,表達式就像。
long long x=5435666LL;
我不能明白爲什麼LL被交固定,因爲即使沒有後固定其相當清晰的編譯器來分配權存儲空間(在VC 8個字節),它反正在沒有修復後的一樣。
'LL'post-fix有什麼用途?
這是對某件事情非常基本的。後綴LL爲long long類型
定義類型long long時,表達式就像。
long long x=5435666LL;
我不能明白爲什麼LL被交固定,因爲即使沒有後固定其相當清晰的編譯器來分配權存儲空間(在VC 8個字節),它反正在沒有修復後的一樣。
'LL'post-fix有什麼用途?
如果沒有後綴,編譯器會選擇其中值適合的第一個int
,long int
和long 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);
}
證明這些文字有不同的尺寸(假設int
和long long int
有不同的大小在您的實現),考慮the following example:
#include <iostream>
int main()
{
std::cout << sizeof(0) << ' ' << sizeof(0LL) << std::endl;
}
對於我來說,這個輸出:
4 8
您的代碼就相當於
long long x;
x = 5435666LL
沒有LL
後綴,5435666
是int
。在這兩種情況下,結果是一樣的,因爲5435666
適合在int
,除非你是一個16位平臺上。
所以請幫助我。即使有或沒有LL編譯器分配8個字節(長的long類型的內存空間)而不是4個字節(int類型的內存空間),所以使用後綴的要點又是什麼? – user1619447 2013-05-09 22:00:07
也許習慣或一致性,以便一個人也可以做它的時間,當它很重要。 – TheUndeadFish 2013-05-10 01:01:20
@ user1619447:當您調用過載的函數時,它可能很重要。例如。,如果有'void foo(long)'和'void foo(int)',那麼'foo(1L)'選擇'long'重載,'foo(1)'選擇'int'重載。使用'L'前綴可以強制'long'重載,而不必知道你的號碼是否適合'int'。 – 2013-05-10 08:02:20
在你的例子中它只有一個美容目的。
我能想到以下examle那裏可以有所作爲的,因爲字面被假定爲int
:
enum {
Flag1 = 1 << 0,
Flag2 = 1 << 33,
Flag3 = 1LL << 33;
}
所以請幫助我在此。即使有或沒有LL編譯器分配8個字節(長的long類型的內存空間)而不是4個字節(int類型的內存空間),所以使用後綴的要點又是什麼? – user1619447 2013-05-09 22:00:28
@ user1619447不,不帶後綴這是一個'int'它是否適合在'int'並會使用,但是許多字節的'int'佔用。對於後綴,它將總是佔用「long long」所需的字節數。 – 2013-05-09 22:03:07
有一次我做了這麼久很久x = 5435666LL; cout << sizeof(x)<< endl;第二次長龍x = 5435666LL; cout << sizeof(x)<< endl;兩者都給出了8的結果,不是說它指定長期不分? – user1619447 2013-05-09 22:05:14