这是关于一些非常基本的事情。
在定义类型 long long 时,表达式就像。
long long x=5435666LL;
我不明白为什么 LL 是后修复的,因为即使没有后修复,编译器也很清楚地分配正确的内存空间(vc++ 中的 8 个字节),无论如何它在没有后修复的情况下都会这样做。
那么“LL”后修复服务的目的是什么?
这是关于一些非常基本的事情。
在定义类型 long long 时,表达式就像。
long long x=5435666LL;
我不明白为什么 LL 是后修复的,因为即使没有后修复,编译器也很清楚地分配正确的内存空间(vc++ 中的 8 个字节),无论如何它在没有后修复的情况下都会这样做。
那么“LL”后修复服务的目的是什么?
您的代码相当于
long long x;
x = 5435666LL
没有LL
后缀5435666
的是int
. 在任何一种情况下,结果都是相同5435666
的,因为适合int
,除非您使用的是 16 位平台。
如果没有后缀,编译器将选择 中的第一个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
具有不同的大小),请考虑以下示例:
#include <iostream>
int main()
{
std::cout << sizeof(0) << ' ' << sizeof(0LL) << std::endl;
}
对我来说,这输出:
4 8
在您的示例中,它仅具有美容目的。
我可以想到以下示例,它可能会有所作为,因为文字被假定为int
:
enum {
Flag1 = 1 << 0,
Flag2 = 1 << 33,
Flag3 = 1LL << 33;
}