我是 C++ 新手,我正在使用 C++ Primer 来学习。
long对我来说,变量具有像和long longfor这样的“子类型”是有意义的int,这样它们就可以容纳更大的值,即使它们是用不太大的值初始化的。
但我似乎无法理解为什么人们可能需要重写整数文字的默认类型,例如42使其long long代替默认类型int?这不像文字必须保存另一个值,因为它实际上是一个常量。
当您直接在表达式中使用文字(而不是仅仅使用指定类型初始化变量)时,文字的类型将很重要,因为算术表达式受特定整数类型的影响。
例如:
1 << 32
Run Code Online (Sandbox Code Playgroud)
这里1有类型int,因此,在 32 位宽的系统上int,这将具有未定义的行为:您不能将整数左移超过 w-1,其中w是其宽度。
另一方面
1LL << 32
Run Code Online (Sandbox Code Playgroud)
保证没问题,因为1LL有类型long long并且该类型保证至少为 64 位宽。
类似地,重载决策可以根据操作数/参数的类型选择不同的函数来调用。因此,用作1LL参数而不是1可能会调用具有不同行为的不同重载。