这是一个非常基本的东西。
虽然定义类型long long,但表达式就像。
long long x=5435666LL;
我无法理解为什么LL会被修复,因为即使没有后期修复,编译器也很清楚分配正确的内存空间(vc ++中的8个字节),无论如何都没有修复后。
那么“LL”后期修复的目的是什么?
答案 0 :(得分:4)
您的代码等同于
long long x;
x = 5435666LL
如果没有LL
后缀,则5435666
为int
。在任何一种情况下,结果都是相同的,因为5435666
适合int
,除非您使用的是16位平台。
答案 1 :(得分:3)
如果没有后缀,编译器将选择值适合的int
,long int
和long long int
中的第一个。但是,您可能特别想要一个适合int
的{{1}}类型的值。为此,您将使用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
在您的实施中有不同的尺寸),请考虑the following example:
long long int
对我来说,这会输出:
#include <iostream>
int main()
{
std::cout << sizeof(0) << ' ' << sizeof(0LL) << std::endl;
}
答案 2 :(得分:1)
在你的例子中,它只是一个美化目的。
我可以想到以下考试可能会有所作为,因为文字被认为是int
:
enum {
Flag1 = 1 << 0,
Flag2 = 1 << 33,
Flag3 = 1LL << 33;
}