没有第二个操作数的三元运算符[重复]
Posted
技术标签:
【中文标题】没有第二个操作数的三元运算符[重复]【英文标题】:Ternary operator without second operand [duplicate] 【发布时间】:2016-04-13 07:00:37 【问题描述】:这是一个两方面的问题:一个是针对 C 的,一个是针对 C++ 的。
C 和 C++ 标准对以下三元 (?:
) 运算符的使用有什么看法:
const char* opt = /* possible NULL pointer */;
const char* str = opt ?: "";
什么时候开始合法的?它是编译器扩展吗?第一个操作数有什么要求(隐式转换为bool
/int
)?
【问题讨论】:
【参考方案1】:省略中间操作数的三元运算符:
const char* str = opt ?: "";
是一个 GNU 扩展,它不是标准的 C++。
【讨论】:
谢谢。对它的第一个操作数有什么要求? @YSC:条件值和真值合并:opt ?: ""
等价于opt ? opt : ""
。
TartanLlama 已经给出了答案。
@101010 其实这个答案是在 Tartan 之前提供的。【参考方案2】:
GCC 将其作为extension 提供。这不在 C++ 标准中。
语义是如果条件不为零,则表达式的值就是条件的值。
隐含的要求是条件必须与第三个操作数类型兼容,即一个可以按照通常的条件运算符规则转换为另一个。
重要的是要注意,如果条件是从具有副作用的函数计算的,则该值将不会使用此扩展重新计算:
opt() ?: ""; //opt called once
opt() ? opt() : ""; //opt called twice
【讨论】:
以上是关于没有第二个操作数的三元运算符[重复]的主要内容,如果未能解决你的问题,请参考以下文章