2013-03-22 28 views
2

LL在標準中的任何地方定義的(硬性術語)?LL是什麼意思?

ideone接受代碼

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

,並打印

8 
4 

但是這是什麼意思?

回答

3

它在段落2.14中指定。在C++ 11標準的2:

2.14.2整數常量

[...]

長長後綴:的

一個
ll LL 

第2.14.2/2,並且特別是表6,那張指定後綴爲十進制,八和十六進制常數,並且它們被給定類型的含義。

由於0是一個八進制文字,的0LL類型是long long int

#include <type_traits> 

int main() 
{ 
    // Won't fire 
    static_assert(std::is_same<decltype(0LL), long long int>::value, "Ouch!"); 
} 
2

LL是long-long的後綴,在大多數(所有?)C/C++實現中都是64位。因此,0LL是一個值爲0的64位文字。

這與L是長文字的後綴相似,在大多數32位和64位C/C++實現中,其大小與非長的int。 (在16位實現中,int的大小通常爲16位,所以後綴L將指示32位整數字面量,而默認值爲16位。)

1

0LL是整數字面。它的後綴是LL,它確定了它可能具有的可能類型集。對於十進制常量,類型將爲long long int。對於八進制或十六進制常量,如果需要,類型將爲long long intunsigned long long int。在0LL的情況下,文字的類型爲long long int

整數常量的類型是表6中相應列表中的第一個,其值可以表示。

表6 - 整數類型的常量

Suffix  Decimal constants Octal or hexadecimal constant 
... 
ll or LL long long int  long long int 
           unsigned long long int 
... 
+0

何時八進制和十六進制的文字變成無符號的「必要時」,利用我們在這裏不會提及其他後綴時除外? – unwind 2013-03-22 16:19:22

+0

@unwind當該值不適合'long long int'但適合在'unsigned long long int'內。只有當它不適合'long long int'時才被考慮。 – 2013-03-22 16:19:53

+0

@unwind當它們不符合簽名類型時。說,整數是16位。 0x7fff適合int。 0x8000不適合int,但符合unsigned int。 – 2013-03-22 16:20:37