2013-05-09 411 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; 
}