这是一个两条腿的问题:一个用于C,一个用于C++.
关于以下ternary(?:
)运算符的使用,C和C++标准有什么说法:
const char* opt = /* possible NULL pointer */; const char* str = opt ?: "";
什么时候合法?它是编译器扩展吗?对第一个操作数有什么要求(可以隐式转换为bool
/ int
)?
GCC将此作为扩展.这不是C++标准.
语义是如果条件非零,则表达式的值是条件的值.
隐含的要求是条件必须与第三个操作数类型兼容,即一个可以按照通常的条件运算符规则转换为另一个.
重要的是要注意,如果条件是从具有副作用的函数计算的,则不会使用此扩展名重新计算该值:
opt() ?: ""; //opt called once opt() ? opt() : ""; //opt called twice
省略中间操作数的三元运算符:
const char* str = opt ?: "";
是GNU扩展,它不是标准的C++.