为什么此代码生成错误C2105而不是C3892?

时间:2016-05-19 11:49:06

标签: c++ visual-studio visual-c++ lvalue

  

IDE:MS Visual Studio 2008版本9.0.21022.8 RTM

     

编译器:Microsoft(R)32位C / C ++优化编译器版本   15.00.21022.08适用于80x86

代码:

<li>
    <a href="about.html">ABOUT US</a>
    <div class="submenu">
        <div class="col-md-5">
            <h2>ABOUT US</h2>
            <img src="images/sub-menu-img-about.jpg" alt="img"></div>
        <div class="col-md-7">
            <ul>
                <li><a href="#">SUB MENU</a></li>
                <li><a href="#">SUB MENU</a></li>
                <li><a href="#">SUB MENU</a></li>
                <li><a href="#">SUB MENU</a></li>
            </ul>
        </div>
    </div>
</li>

编译器期望抛出错误C2105的// 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); } 是什么?

1 个答案:

答案 0 :(得分:3)

x 左值,因此诊断消息具有误导性。

这是一个实施质量问题,即一个错误。

检测到const的任何例程都会被检查xx++不是右值的表达式{{1}}的例程所破坏。

最终结果是一样的!因此,任何人都不太可能非常关心。你可以在Microsoft Connect上提出这个问题并查看它是否会出现在任何地方,但是你应该首先在新版本上测试你的代码,因为2008年就是很久以前了。

为了它的价值,我在Visual Studio 2012 Express中获得了相同的结果; Intellisense澄清它是&#34; 可修改的左值&#34;它希望:

Screenshot of the result in VS2012