win*_*ght 4 c++ compiler-errors compiler-warnings
可能和很多人一样,我输入了这个错字
int a = 0;
cout << a < " "; //note the '<'
Run Code Online (Sandbox Code Playgroud)
但是,MSVC++编译器只发出警告
警告C4552:'<':运算符无效; 预期的操作员有副作用
虽然我预计会出现编译错误.它确实是标准的投诉代码吗?是否发生了使代码有效的隐式类型转换或重载?我也很困惑<运算符是将字符串" "与整数a或结果进行比较cout << a
相关的SO帖子就在这里.
小智 7
该<<经营者具有比优先级高<,所以这被分析为
(cout << a) < " ";
Run Code Online (Sandbox Code Playgroud)
你不是真的在比较字符串和整数.相反,您将比较ostream::operator<<其std::cout自身的返回值与字符串文字.,这是不合法的(在某种意义上,它具有未指明的结果,并且没有意义),clang警告:
warning: result of comparison against a string literal is unspecified
Run Code Online (Sandbox Code Playgroud)
它编译的原因是直到C++ 11,才std::ostream可以隐式转换为void *.此外,类型的字符串文字const char[2]衰减为类型的指针const char *.因此,<操作符现在需要两个指针,这是允许的,尽管未指定结果,因为两个指针不指向同一个对象.
| 归档时间: |
|
| 查看次数: |
186 次 |
| 最近记录: |