1

現在、一部の Unix コードを Windows に移植していますが、Visual Studio (2010 または 2012) によると、有効な構文ではない条件演算子のかなり奇妙な使用法に遭遇しました。

変更せずにコピーして貼り付けます:

filename = filename ? : h->filename;

条件はありません!空の文字列(const char*一種の)に対するチェック、またはnullと空に対するチェックのいずれかであると思います。他に考えられることはありません。

誰もこれを見たことがありますか?ありがとうございました。

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 が 2 つの異なる変数であることにも注意してください。filename は通常の変数で、h->filename は構造体のメンバー変数です。

于 2013-03-23T08:28:10.060 に答える