奇怪的使用条件运算符

时间:2013-03-23 08:14:39

标签: c++ c conditional-operator

我目前正在将一些Unix代码移植到Windows,并且遇到了一个相当奇怪的使用条件运算符,根据Visual Studio(2010或2012),它不是有效的语法。

无需修改即可复制和粘贴:

filename = filename ? : h->filename;

没有条件!我假设它是对空字符串(const char*排序)的检查,或者是对null和&空虚,因为我无法想到其他任何事情。

以前有人见过这个吗?谢谢。

2 个答案:

答案 0 :(得分:2)

这是一个gcc扩展。

x = a ? : b;

几乎

相同
x = a ? a : b;

a一次评估这一事实外,如果a有任何副作用或评估费用很高,这很有用。

答案 1 :(得分:2)

给定代码与此特定上下文中的以下代码类似,

if (!filename) {
    filename = h->filename;
}

另请注意,在此示例中,filename和h-> filename是两个不同的变量。 filename是普通变量,h-> filename是结构的成员变量。