15

N4295によると、C++17 を使用すると、未知数の引数の合計を次のように計算できます。

template<typename ... T>
int sum(T...t)
{
    return (... + t);
}

ドキュメントには、+ の代わりに == や > などの演算子を使用できるとさらに記載されています。そのような構成で == または > を使用したい場合の賢明な例を誰か思いつくことができますか?

(私は人々が == と > を定義して奇妙なクラスに奇妙なことをすることができることを認識していますが、それは確かに良い習慣に違反しています. 書くa > b > c > dことは決して良い考えではありませんね?)

4

3 に答える 3

11

連鎖比較が Python のように処理され、 が の単一の評価であるa < b < cと解釈される場合、興味深い機能になります。残念ながら、これは C++ には当てはまりません。奇妙なケースでさえ、折り畳み比較演算子はほとんど意味がありません。a < b and b < cb

フォールド式で処理される演算子から、演算子、、、、およびを実際に削除するという提案(P0313)があったことに注意してください。2016 年 6 月にオウルで開催された委員会で議論されました。削除の動機はかなり簡潔でした。==!=<><=>=

比較演算子は、fold-expression ではあまり意味がありません。それらは驚くべき効果を持つ式に展開されるため、dsl メタプログラマーのみに役立ちます。[...] のような表現を修正できるといいですねa < b < c。それにはタイムマシンが必要です。折り畳み式の問題を繰り返さないことは実行可能のようです。

つまり、その提案は却下されたということです。

于 2016-05-21T12:53:47.363 に答える