1

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

复制粘贴不做修改:

filename = filename ? : h->filename;

没有条件!我认为它要么是对空字符串(const char*排序)的检查,要么是对空和空的检查,因为我想不出它可以是什么。

有人见过这个吗?谢谢你。

4

2 回答 2

2

这是一个 gcc 扩展。

x = a ? : b;

几乎一样_

x = a ? a : b;

a除了只评估一次的事实,如果a有任何副作用或评估成本很高,这很有用。

于 2013-03-23T08:22:12.393 回答
2

在此特定上下文中,给定代码的工作方式类似于以下代码,

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

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

于 2013-03-23T08:28:10.060 回答