C++ 为什么此代码生成错误C2105而不是C3892?
IDE:MS Visual studio 2008版本9.0.21022.8 RTM 编译器:Microsoft(R)32位C/C++优化编译器版本 对于80x86,为15.00.21022.08 代码: 编译器希望抛出错误C2105的C++ 为什么此代码生成错误C2105而不是C3892?,c++,visual-studio,visual-c++,lvalue,C++,Visual Studio,Visual C++,Lvalue,IDE:MS Visual studio 2008版本9.0.21022.8 RTM 编译器:Microsoft(R)32位C/C++优化编译器版本 对于80x86,为15.00.21022.08 代码: 编译器希望抛出错误C2105的l值是什么?x是左值,因此诊断消息具有误导性。 这是一个实施质量问题,即一个bug 检测常量的任何例程都会与检查x++中表达式x是否为右值的例程发生冲突 结果是一样的!因此,不太可能有人会非常在意。您可以在MicrosoftConnect上提出这个问题,看看它是否
l值是什么?x
是左值,因此诊断消息具有误导性。
这是一个实施质量问题,即一个bug
检测常量的任何例程都会与检查x++
中表达式x
是否为右值的例程发生冲突
结果是一样的!因此,不太可能有人会非常在意。您可以在MicrosoftConnect上提出这个问题,看看它是否适用于任何地方,但您可能应该首先在较新版本上测试您的代码,因为2008年是很久以前的事了
值得一提的是,我在Visual Studio 2012 Express中得到了相同的结果;Intellisense澄清说,这是一个“可修改的左值”,它希望:
因为它们在语义上是两种不同的操作?@Abhineet:更好,谢谢。已经发布了澄清问题的新答案。哇……你不是很快吗:)你真是太棒了。我无法控制我的笑声。FWIW 2015也做了同样的事情,但它将intelliSense错误放在相关编译器错误的旁边。
// 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);
}