给 long long c++ 赋值时应该使用 LL
Should I use LL when assigning a value to long long c++
在 C++ 中为 long long
赋值时,我应该始终使用 LL
吗?
假设我有
long long myVar = 10LL;
或者如果我有一个long long
类型的成员变量,我应该总是使用LL
吗?
A::A()
: m_myVar(0LL)
{
}
不写LL
或写L
可能有什么危险?
已编辑
从答案、评论和进一步谷歌搜索来看,这种情况很危险
m_myVar = 1000000000 * 100;
如果 LL
将被遗忘 1000000000
或 100
将发生溢出。
在此代码段中
long long myVar = 10LL;
无需指定后缀 LL
。代码是安全的。使用了通常的算术转换。
至于这段代码
A::A()
: m_myVar(0LL)
{
}
那么最好使用后缀,因为在这种情况下代码的reader可以确定数据成员的类型m_myVar
。这是自我记录的可取之处。:)
不,您不需要这样做。 C++ 编译器将进行转换。
(为避免疑义,long long a = 5000000000;
在具有 32 位 int
和 long
的平台上是 明确定义的。 )
但有时,尤其是在使用模板时,您需要让编译器知道您需要的文字类型。
例如,如果 a
是一个 unsigned
那么 std::max(a, 1)
将失败,因为 1 是一个有符号类型:你需要写 1U
或类似的东西.
在 C++ 中为 long long
赋值时,我应该始终使用 LL
吗?
假设我有
long long myVar = 10LL;
或者如果我有一个long long
类型的成员变量,我应该总是使用LL
吗?
A::A()
: m_myVar(0LL)
{
}
不写LL
或写L
可能有什么危险?
已编辑 从答案、评论和进一步谷歌搜索来看,这种情况很危险
m_myVar = 1000000000 * 100;
如果 LL
将被遗忘 1000000000
或 100
将发生溢出。
在此代码段中
long long myVar = 10LL;
无需指定后缀 LL
。代码是安全的。使用了通常的算术转换。
至于这段代码
A::A()
: m_myVar(0LL)
{
}
那么最好使用后缀,因为在这种情况下代码的reader可以确定数据成员的类型m_myVar
。这是自我记录的可取之处。:)
不,您不需要这样做。 C++ 编译器将进行转换。
(为避免疑义,long long a = 5000000000;
在具有 32 位 int
和 long
的平台上是 明确定义的。 )
但有时,尤其是在使用模板时,您需要让编译器知道您需要的文字类型。
例如,如果 a
是一个 unsigned
那么 std::max(a, 1)
将失败,因为 1 是一个有符号类型:你需要写 1U
或类似的东西.