为什么此代码生成错误 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 澄清它是一个“可修改 左值”,它希望: