C++ long-long类型的后缀LL
这是一个非常基本的问题 定义类型long时,表达式如下所示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 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;
}