C++ long-long类型的后缀LL

C++ long-long类型的后缀LL,c++,C++,这是一个非常基本的问题 定义类型long时,表达式如下所示 long long x=5435666LL; 我不明白为什么LL是后期修复的,因为即使没有后期修复,编译器也很清楚地分配了正确的内存空间(vc++中为8字节),而在没有后期修复的情况下,它总是这样做的 那么,“LL”post fix的作用是什么呢?如果没有后缀,编译器将选择值适合的int、long int和long long int中的第一个。但是,您可能特别希望适合int的值为long-long-int类型。为此,您将使用LL后缀

这是一个非常基本的问题

定义类型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);
}
对我来说,这将产生:

4 8

您的代码相当于

long long x;
x = 5435666LL

如果没有
LL
后缀,
5435666
int
。在这两种情况下,结果都是相同的,因为
5435666
适合
int
,除非您使用的是16位平台。

在您的示例中,它仅用于修饰

我可以想到下面的例子,它可能会产生不同,因为文字被假定为
int

enum {
    Flag1 = 1 << 0,
    Flag2 = 1 << 33,
    Flag3 = 1LL << 33;
}
enum{

Flag1=1,请帮助我。即使有或没有LL编译器也会分配8个字节(长-长类型的内存空间),而不是4个字节(int类型的内存空间)那么,使用后缀又有什么意义呢?也许是习惯或一致性,以便在重要的时候也使用后缀。@user1619447:调用重载的函数时可能很重要。例如,如果存在
void foo(long)
void foo(int)
,则
foo(1L)
选择
long
重载,而
foo(1)
选择
int
重载。使用
L
前缀,您可以强制执行
long
重载,而无需知道您的数字是否适合
int
重载。因此,请在这方面帮助我。即使有或没有LL编译器,也会分配8个字节(long-long类型的内存空间)而不是4字节(int类型的内存空间)那么,使用后缀又有什么意义呢?@user1619447不,没有后缀,如果它适合
int
,那么它就是
int
,并且将使用
int
占用的字节数。有一次我这样做了long long x=5435666LL;cout@user1619447您将
x
定义为
long
x
本身当然具有
long
的大小。整数文本的大小不同。
enum {
    Flag1 = 1 << 0,
    Flag2 = 1 << 33,
    Flag3 = 1LL << 33;
}