INFO: Casting Difference Between C and C++ May Cause C2105Last reviewed: September 30, 1997Article ID: Q88434 |
The information in this article applies to:
SUMMARYIn C++, the result of a cast to a reference type is an lvalue; casts to any other type are not lvalues. This is explicitly stated in the "C++ Annotated Reference Manual," by Ellis and Stroustrup, on page 69. In a .C file, explicit casting to any data type results in an lvalue only if Microsoft language extensions are enabled. The same error is generated in a .C file if Microsoft extensions are disabled. This difference can cause problems in code that compiles without error using a C compiler. The sample code below illustrates this with a simple increment of a casted result. If it is compiled as a C source file, no errors are generated (although using warning level 4 generates "C4213: nonstandard extension used : cast on l-value"). However, if it is compiled as a C++ source file, the following error is generated:
error C2105: '++' needs lvalueMicrosoft C/C++ does provide a mechanism for achieving this by implementing a cast to a reference that achieves the same effect.
++(long*&)p; Sample Code
/* Compile options needed: none */ void main() { char *p; ((long *)p)++; // If the file is saved as a .CPP, this will } // cause an error. Keywords : CLngIss CPPLngIss kbcode Version : MS-DOS:7.0;WINDOWS:1.0,1.5;WINDOWS:1.0,2.0,2.1,4.0,5.0 Platform : MS-DOS NT WINDOWS Issue type : kbinfo |
================================================================================
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |