后缀LL为long long类型
这是对某件事情非常基本的。后缀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 user1619447 2013-05-09 22:05:14