2016-05-19 13 views
3

IDE: MS Visual Studio 2008 Version 9.0.21022.8 RTMWarum generiert dieser Code den Fehler C2105 anstelle von C3892?

Compiler: Microsoft (R) 32-Bit-C/C++ Optimizing Compiler Version 15.00.21022.08 für 80x86

Code:

// 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); 
} 

Was l-value ist Compiler erwartet, Fehler C2105 zu werfen?

+0

Weil sie semantisch 2 verschiedene Operationen sind? – NathanOliver

+0

@Abhinet: Besser, danke. Habe eine neue Antwort auf die geklärte Frage gepostet. –

Antwort

3

xist ein Lvalue, so dass die Diagnosemeldung irreführend ist.

Dies ist ein Qualitätsproblem der Implementierung, d.h. ein Fehler.

Welche Routine, die die const erkennt, ist mit der Routine, die für den Ausdruck x in Ihrem x++ kein Rvalue überprüft wird.

Das Endergebnis ist das gleiche! Es ist also unwahrscheinlich, dass sich jemand ernsthaft darum kümmert. Sie könnte dieses Problem auf Microsoft Connect auslösen und sehen, ob es irgendwo geht, aber Sie sollten wahrscheinlich Ihren Code auf neuere Versionen zuerst testen, seit 2008 war ziemlich lange her.

Für was es wert ist, bekomme ich das gleiche Ergebnis in Visual Studio 2012 Express; Intellisense stellt klar, dass es ein „modifizierbar lvalue“, dass es Hoffnung auf:

Screenshot of the result in VS2012

+1

Wow ... bist du nicht schnell :) – Abhineet

+1

@Abhinet: Das ist, was sie gesagt hat. Äh, warte ... –

+1

Du gehst episch. Ich kann mein Lachen nicht kontrollieren. – Abhineet

Verwandte Themen