Elu*_*awk 4 c++ conditional-operator
这个三元,当按原样使用时,会吐出一个指针:
std::stringstream ss;
ss << pair.second ? pair.second->toString() : "null";
std::cout << ss.str() << '\n';
Run Code Online (Sandbox Code Playgroud)
这是一个示例输出:
{
"glossary": 000002B96B321F48
}
Run Code Online (Sandbox Code Playgroud)
但是,当我将三元运算符括在括号中时,它可以正常工作并为我提供 toString() 或“null”的内容。
ss << (pair.second ? pair.second->toString() : "null");
Run Code Online (Sandbox Code Playgroud)
此外,将其扩展为适当的 if/else 也可以修复它:
if (pair.second)
{
ss << pair.second->toString();
}
else
{
ss << "null";
}
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?
mch*_*mch 11
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()将被评估并丢弃结果。
表达方式
ss << pair.second ? pair.second->toString() : "null"
Run Code Online (Sandbox Code Playgroud)
被分组为
(ss << pair.second) ? pair.second->toString() : "null"
Run Code Online (Sandbox Code Playgroud)
pair.second是一个指针,并且选择了 的const void*重载ostream <<。三元条件的两个分支都对输出没有影响。
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |