【问题标题】:Strange use of conditional operator [duplicate]条件运算符的奇怪使用
【发布时间】:2013-03-13 03:49:01
【问题描述】:

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

复制粘贴,不加修改:

filename = filename ? : h->filename;

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

以前有人见过吗?谢谢。

【问题讨论】:

标签: c++ c conditional-operator


【解决方案1】:

这是一个 gcc 扩展。

x = a ? : b;

几乎和

一样
x = a ? a : b;

除了a 只被评估一次,这在a 有任何副作用或评估成本高昂时很有用。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-10-21
      • 2011-12-10
      • 2019-11-17
      • 2015-02-01
      • 2010-12-16
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 2021-09-16
      相关资源
      最近更新 更多