0

这是关于一些非常基本的事情。

在定义类型 long long 时,表达式就像。

long long x=5435666LL;

我不明白为什么 LL 是后修复的,因为即使没有后修复,编译器也很清楚地分配正确的内存空间(vc++ 中的 8 个字节),无论如何它在没有后修复的情况下都会这样做。

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

4

3 回答 3

4

您的代码相当于

long long x;
x = 5435666LL

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

于 2013-05-09T21:50:30.797 回答
3

如果没有后缀,编译器将选择 中的第一个intlong 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);
}

为了证明这些文字具有不同的大小(假设在您的实现intlong long int具有不同的大小),请考虑以下示例

#include <iostream>

int main()
{
    std::cout << sizeof(0) << ' ' << sizeof(0LL) << std::endl;
}

对我来说,这输出:

4 8
于 2013-05-09T21:50:21.700 回答
1

在您的示例中,它仅具有美容目的。

我可以想到以下示例,它可能会有所作为,因为文字被假定为int

enum {
    Flag1 = 1 << 0,
    Flag2 = 1 << 33,
    Flag3 = 1LL << 33;
}
于 2013-05-09T21:57:04.577 回答