类型为long long的Postfix LL

时间:2013-05-09 21:46:24

标签: c++

这是一个非常基本的东西。

虽然定义类型long long,但表达式就像。

long long x=5435666LL;

我无法理解为什么LL会被修复,因为即使没有后期修复,编译器也很清楚分配正确的内存空间(vc ++中的8个字节),无论如何都没有修复后。

那么“LL”后期修复的目的是什么?

3 个答案:

答案 0 :(得分:4)

您的代码等同于

long long x;
x = 5435666LL

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

答案 1 :(得分:3)

如果没有后缀,编译器将选择值适合的intlong intlong 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;
}