最近我意識到,你可以使用GCC和鐺三元運營商沒有中間(?:
或? :
作品),它會插入第一個表達式到中:沒有中間表達三元操作符
// outputs 2
cout << (2 ?: 4);
// outputs 3
cout << (0 ? : 3);
標準在哪裏?我看了看,並沒有看到任何關於它的事情。
最近我意識到,你可以使用GCC和鐺三元運營商沒有中間(?:
或? :
作品),它會插入第一個表達式到中:沒有中間表達三元操作符
// outputs 2
cout << (2 ?: 4);
// outputs 3
cout << (0 ? : 3);
標準在哪裏?我看了看,並沒有看到任何關於它的事情。
它完全不在標準中。
你所觀察是一個GCC擴展:https://gcc.gnu.org/onlinedocs/gcc/Conditionals.html
如果你忽略它,它的值從第一個操作數之前,上下文轉換採取bool
。
擴展的價值在於不重複副作用並減少源代碼的大小。
這就是我想感謝。當然,它在叮噹中也是有意義的。 – Czipperz
擁有僅適用於GCC/Clang的C++代碼是一個好主意嗎? – Ilya
@Ilya在合理的情況下編寫乾淨而便攜的代碼是一個不錯的主意,不會花費太多精力或無法接受地損害您的性能。總之,幾乎從不。 – Deduplicator
它不會將第一個表達式插入到中間。它使用中間第一個表達式的_result_。所以如果第一個表達式是一個函數,那麼該函數不會執行兩次。 – ldanilek