0

これは非常に基本的なことです。

long long 型を定義している間、式は次のようになります。

long long x=5435666LL;

ポストフィックスがなくてもコンパイラが適切なメモリ空間(vc ++で8バイト)を割り当てることは非常に明確であるため、ポストフィックスがない場合でもLLがポストフィックスされる理由を理解できません。

では、'LL' 後置はどのような目的で使用されるのでしょうか?

4

3 に答える 3

4

あなたのコードはと同等です

long long x;
x = 5435666LL

LL接尾辞がない場合5435666は、int. どちらの場合でも、16 ビット プラットフォームを使用していない限り、 に5435666適合するため、結果は同じです。int

于 2013-05-09T21:50:30.797 に答える
3

接尾辞がない場合、コンパイラは、値が収まる最初intlong intとを選択します。long long intただし、 に適合する値を特定intlong 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して)、次の例を検討してください。long 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 に答える