LL
在标准中的任何地方都有定义(很难找到)?
ideone接受代码
int main()
{
std::cout << sizeof(0LL) << std::endl;
std::cout << sizeof(0);
}
并打印
8
4
但是这是什么意思?
它在 C++11 标准的第 2.14.2 段中指定:
[...]
long-long-suffix:其中之一
ll LL
第 2.14.2/2 段,特别是表 6,继续指定十进制、八进制和十六进制常量的后缀的含义,以及它们给出的类型。
因为0
是八进制文字,所以类型0LL
是long long int
:
#include <type_traits>
int main()
{
// Won't fire
static_assert(std::is_same<decltype(0LL), long long int>::value, "Ouch!");
}
LL
是 long-long 的后缀,在大多数(全部?)C/C++ 实现中是 64 位的。0LL
值为 0 的 64 位文字也是如此。
这类似于L
作为 long 文字的后缀,在大多数 32 位和 64 位 C/C++ 实现中,它的大小与 non-long 相同int
。(在 16 位实现中, 的大小int
通常为 16 位,因此L
后缀将指示 32 位整数文字,而不是默认的 16 位。)
0LL
是一个整数文字。它的后缀LL
决定了它可能具有的可能类型集。对于十进制常量,类型将为long long int
. 对于八进制或十六进制常量,类型将是long long int
orunsigned long long int
如果需要。在 的情况下0LL
,文字的类型是long long int
。
整数文字的类型是表 6 中可以表示其值的相应列表中的第一个。
表 6 - 整数常量的类型
Suffix Decimal constants Octal or hexadecimal constant ... ll or LL long long int long long int unsigned long long int ...
我们将从一个例子开始:
std::cout << 2LL << endl;
这个结果将是 2,并且会发生这种情况,因为根据数据大小,为了正确修复它,我们希望在某些情况下使用 2 一样长,这正是发生的情况。给出的输出是 long long 类型,表示常量 int 2。
unsigned int : 整数常量末尾的字符 u 或 U。
long int : 整数常量末尾的字符 l 或 L。
unsigned long int : 整数常量末尾的字符 ul 或 UL。
long long int : 整数常量末尾的字符 ll 或 LL。unsigned long long int:整数常量末尾的字符ull或ULL。