c++ - 为什么这个三元会导致打印指针?
问题描述
这个三元组,当按原样使用时,会吐出一个指针:
std::stringstream ss;
ss << pair.second ? pair.second->toString() : "null";
std::cout << ss.str() << '\n';
这是一个示例输出:
{
"glossary": 000002B96B321F48
}
但是当我将三元运算符括在括号中时,它可以正常工作并给我 toString() 或“null”的内容。
ss << (pair.second ? pair.second->toString() : "null");
此外,将其扩展为适当的 if/else 也可以修复它:
if (pair.second)
{
ss << pair.second->toString();
}
else
{
ss << "null";
}
这是怎么回事?
解决方案
https://en.cppreference.com/w/cpp/language/operator_precedence
<<
优先级高于?
ss << pair.second ? pair.second->toString() : "null";
被分组为(ss << pair.second) ? pair.second->toString() : "null";
(ss << pair.second)
评估流的状态,通常是true
,因此 pair.second->toString()
将被评估并丢弃结果。
推荐阅读
- gulp - 如何使用 gulp 将版本添加到文件中?
- java - 使用 Jackson 将 XML 属性添加到手动构建的节点树
- javascript - 切换滚动条可见性在 Safari 上不起作用(在 Chrome 上工作)
- wordpress - 更改 wordpress URL - 域和服务器位于不同的提供商中
- php - PHP 无法识别来自 Android HttpsURLConnection 的 POST
- c - 静态变量未初始化为零
- php - 准备好的语句没有错误并且不起作用
- c# - 视图中的 ASP.NET Core 端点路由链接生成
- vagrant - Vagrant 无法运行触发器:未知配置部分“触发器”
- python - 有没有办法散布/交叉两个较大二维数组的块并获得两者之间的梯度/斜率?