c++ - No compilation error comparing integer with string? -
probably many, typed typo
int = 0; cout << < " "; //note '<'
however, msvc++ compiler threw warning
warning c4552: '<' : operator has no effect; expected operator side-effect
though expected compilation error. indeed standard complaint code? implicit type conversion or overloading happen make code valid? confused whether <
operator comparing string " "
integer a
or result of cout << a
a related post here.
the <<
operator has higher precedence <
, parsed as
(cout << a) < " ";
you not comparing string integer. instead, comparing return value of ostream::operator<<
, std::cout
itself, string literal. isn't legal (in sense has unspecified result, , not meaningful) either, clang
warns:
warning: result of comparison against string literal unspecified
the reason why compiles until c++11, std::ostream
can implicitly converted void *
. also, string literal of type const char[2]
decays pointer of type const char *
. so, <
operator takes 2 pointers, permitted, although result not specified, because 2 pointers don't point same object.
Comments
Post a Comment