为什么类型为long的赋值中的字面值在C ++的末尾仍然有一个'L'?

时间:2011-12-03 21:17:11

标签: c++

似乎无法找到答案,我确信这很简单,但只是想了解这一点,以便继续前进。

我正在查看整数类型,我想知道为什么:

long number = 645456645;

具有与以下相同的效果:

long number = 654456654L;

最后用'L'这个字母有什么意义?与未签名案例的“U”相同。

4 个答案:

答案 0 :(得分:3)

  

我在看整数类型,我想知道为什么这个 -

long number = 645456645;
     

与 -

具有相同的效果
long number = 654456654L;

严格来说,两者并不相同。

  • 在前者中,您的文字645456645的类型为int已转换long进行初始化。
  • 在后者中,它已经是long,因此不会执行转换。

在这个简单的示例中,显然没有功能差异,但在long的范围与int的范围不同的平台上,您可能会发现拥有< / em>使用L后缀来实际获取有效的文字。

答案 1 :(得分:3)

文字类型说明符确定文字的类型

裸整数文字总是具有尽可能小的int - 它们适合的类型,但是使用说明符可以明确表示您希望考虑的小类型:

12:    int             12U:    unsigned int
12L:   long int        12UL:   unsigned long int
12LL:  long long int   12ULL:  unsigned long long int

想象一下:

template <typename T> void foo(T, T);

现在foo(12, 12L)失败,因为它不明确,但foo(12U, 12U)有效(而T推断为unsigned int)。因此,当您需要控制文字表达式的实际类型时,文字类型说明符非常重要。

答案 2 :(得分:2)

指定整数文字的类型。 L将其设为longU将其设为无符号。

使用它的情况如下:

long long number = 123456789123456;
long long number = 123456789123456LL;

由于123456789123456不适合默认int,因此有些编制者会抱怨第一个编译器。

使用它的另一种情况是消除重载函数之间的歧义。


编辑:(见评论)

<强>的main.cpp

int main(){

    long long number = 123456789123456;

    return 0;
}

编译它给出:

alex-desktop:~/Desktop/vm_shared> g++ main.cpp
main.cpp:3: warning: integer constant is too large for ‘long’ type
alex-desktop:~/Desktop/vm_shared> 

gcc版本:4.4.3

答案 3 :(得分:1)

通常,像这样的文字将被解释为整数,有时你想要指定一个对整数来说太大的文字(&gt; INT_MAX),在这些情况下你使用这样的后缀,LLLU等),它告诉编译器将文字视为long(和long long