我目前正在将一些Unix代码移植到Windows,并且遇到了一个相当奇怪的使用条件运算符,根据Visual Studio(2010或2012),它不是有效的语法。
无需修改即可复制和粘贴:
filename = filename ? : h->filename;
没有条件!我假设它是对空字符串(const char*
排序)的检查,或者是对null和&空虚,因为我无法想到其他任何事情。
以前有人见过这个吗?谢谢。
答案 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是结构的成员变量。