gpt4 book ai didi

c++ - 比较整数和字符串没有编译错误?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:36 24 4
gpt4 key购买 nike

可能和很多人一样,我打错了字

int a = 0;
cout << a < " "; //note the '<'

但是,MSVC++ 编译器只抛出一个警告

warning C4552: '<' : operator has no effect; expected operator with side-effect

尽管我预计会出现编译错误。它确实是标准的投诉代码吗?是否发生任何使代码有效的隐式类型转换或重载?我也很困惑是否<运算符正在比较字符串 " "用一个整数 a或结果为 cout << a

相关的 SO 帖子是 here .

最佳答案

<<运算符的优先级高于 < , 所以这被解析为

(cout << a) < " ";

您实际上并不是在比较字符串和整数。相反,您正在比较 ostream::operator<< 的返回值,即 std::cout本身,到字符串文字。这也不合法(从某种意义上说,它具有未指定的结果,并且没有意义),clang警告:

warning: result of comparison against a string literal is unspecified

它编译的原因是直到 C++11,std::ostream可以隐式转换为 void * .此外,类型为 const char[2] 的字符串文字衰减为 const char * 类型的指针.所以,<运算符现在采用两个指针,这是允许的,尽管未指定其结果,因为这两个指针不指向同一个对象。

关于c++ - 比较整数和字符串没有编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17775831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com