当前位置:  开发笔记 > 编程语言 > 正文

没有第二个操作数的三元运算符

如何解决《没有第二个操作数的三元运算符》经验,为你挑选了2个好方法。

这是一个两条腿的问题:一个用于C,一个用于C++.

关于以下ternary(?:)运算符的使用,C和C++标准有什么说法:

const char* opt = /* possible NULL pointer */;
const char* str = opt ?: "";

什么时候合法?它是编译器扩展吗?对第一个操作数有什么要求(可以隐式转换为bool/ int)?



1> TartanLlama..:

GCC将此作为扩展.这不是C++标准.

语义是如果条件非零,则表达式的值是条件的值.

隐含的要求是条件必须与第三个操作数类型兼容,即一个可以按照通常的条件运算符规则转换为另一个.

重要的是要注意,如果条件是从具有副作用的函数计算的,则不会使用此扩展名重新计算该值:

opt() ?: ""; //opt called once
opt() ? opt() : ""; //opt called twice



2> 101010..:

省略中间操作数的三元运算符:

const char* str = opt ?: "";

是GNU扩展,它不是标准的C++.


TartanLlama已经给出了答案.
推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有