为什么类型长赋值中的文本值在 C++ 的末尾仍然有一个'L'?

Why does the literal value in a type long assignment still have an 'L' at the end in C++?

本文关键字:有一个 C++ 赋值 类型 文本 为什么      更新时间:2023-10-16

似乎找不到这个问题的答案,我相信这很简单,但只是想了解这个问题,以便我可以继续前进。

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

long number = 645456645;

的效果与

相同
long number = 654456654L;

在结尾用字母"L"有什么意义?

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

long number = 645456645;

与-

的效果相同
long number = 654456654L;

严格来说,两者是不等价的。

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

在这个简单的示例中,显然没有功能差异,但是在long的范围与int的范围不相同的平台上,您可能会发现必须首先使用L后缀来实际获得有效的文字。

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

裸整数字面值总是具有它们适合的最小的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)。因此,当您需要控制文字表达式的实际类型时,文字类型说明符非常重要。

用来指定整型文字的类型。L使其为long, U使其为unsigned

它的用法如下:

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 version: 4.4.3

通常情况下,这样的文字将被解释为整数,偶尔你想指定一个对于整数(> INT_MAX)来说太大的文字,在这些情况下,你使用这样的后缀,LLL (U等),这告诉编译器将文字视为long(和long long)

相关文章: