似乎无法找到答案,我确信这很简单,但只是想了解这一点,以便继续前进。
我正在查看整数类型,我想知道为什么:
long number = 645456645;
具有与以下相同的效果:
long number = 654456654L;
最后用'L'这个字母有什么意义?与未签名案例的“U”相同。
答案 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
将其设为long
,U
将其设为无符号。
使用它的情况如下:
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),在这些情况下你使用这样的后缀,L
和LL
(U
等),它告诉编译器将文字视为long
(和long long
)