在C ++中为LL
分配值时,我是否应始终使用long long
?
假设我有
long long myVar = 10LL;
或者如果我有long long
类型的成员变量,我应该始终使用LL
吗?
A::A()
: m_myVar(0LL)
{
}
不写LL
或写L
会有什么危险?
EDITED 从答案,评论和进一步谷歌搜索危险是这样的情况
m_myVar = 1000000000 * 100;
如果LL
或1000000000
忘记100
,则会发生溢出。
答案 0 :(得分:7)
不,你不需要这样做。 C ++编译器将进行转换。
(为避免疑问,long long a = 5000000000;
在具有32位int
和long
的平台上定义良好。)
有时候,特别是当您使用模板时,您需要让编译器知道您需要的文字类型。
例如,如果a
是unsigned
,则std::max(a, 1)
将失败,因为1是签名类型:您需要编写1U
或类似内容。< / p>
答案 1 :(得分:5)
在此代码段中
long long myVar = 10LL;
无需指定后缀LL
。代码是安全的。使用了通常的算术转换。
至于此代码段
A::A()
: m_myVar(0LL)
{
}
然后需要使用后缀,因为在这种情况下,代码的读者可以确定数据成员m_myVar
的类型。这是自我记录的理想选择。:)