为什么此代码生成错误 C2105 而不是 C3892?
Why this code is generating error C2105 instead of C3892?
IDE: MS Visual studio 2008 Version 9.0.21022.8 RTM
Compiler: Microsoft (R) 32-bit C/C++ Optimizing Compiler Version
15.00.21022.08 for 80x86
代码:
// main.cpp - compiled as cpp file
int main()
{
const int x = 10;
x++; // error C2105: '++' needs l-value
x = x+1; // error C3892: 'x' : you cannot assign to a variable that is const
return(0);
}
编译器希望抛出错误 C2105 是什么l-value
?
x
是一个左值,因此诊断信息具有误导性。
这是实施质量问题,即错误。
任何检测 const
的例程都被检查 x++
中的表达式 x
不是右值的例程所破坏。
最后的结果是一样的!所以不太可能有人非常关心。您 可以 在 Microsoft Connect 上提出这个问题,看看它是否会出现问题,但您可能应该先在较新版本上测试您的代码,因为 2008 年是很久以前的事了。
不管怎样,我在 Visual Studio 2012 Express 中得到了相同的结果; Intellisense 澄清它是一个“可修改 左值”,它希望:
IDE: MS Visual studio 2008 Version 9.0.21022.8 RTM
Compiler: Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86
代码:
// main.cpp - compiled as cpp file
int main()
{
const int x = 10;
x++; // error C2105: '++' needs l-value
x = x+1; // error C3892: 'x' : you cannot assign to a variable that is const
return(0);
}
编译器希望抛出错误 C2105 是什么l-value
?
x
是一个左值,因此诊断信息具有误导性。
这是实施质量问题,即错误。
任何检测 const
的例程都被检查 x++
中的表达式 x
不是右值的例程所破坏。
最后的结果是一样的!所以不太可能有人非常关心。您 可以 在 Microsoft Connect 上提出这个问题,看看它是否会出现问题,但您可能应该先在较新版本上测试您的代码,因为 2008 年是很久以前的事了。
不管怎样,我在 Visual Studio 2012 Express 中得到了相同的结果; Intellisense 澄清它是一个“可修改 左值”,它希望: