3

以下では&&、ユニバーサルリファレンスですか?

template <class Function = std::greater<int> > void f(Function&& f = Function());
4

3 に答える 3

7

この用語は、通常の右辺値参照、つまりテンプレートコード内の右辺universal reference値参照を区別するためにScottMeyersによって作成された用語です。これは、テンプレートコードに関係する参照折りたたみルールのために重要です。したがって、この用語は、教育を支援するために使用されます。それがaと呼ばれる理由は、それが何にでもバインドできるからです。int&&T&&unversal reference

universal referenceC ++言語にFunction&&はaのようなものはなく、言語に関する限り、右辺値の参照であることに注意してください。しかし、そうです、スコット・マイヤーの作り上げられた用語でFunction&&は、universal referenceあなたの例ではそうです。

于 2013-03-03T02:39:49.347 に答える
3

&&はユニバーサルリファレンスですか?

ある種。イースターバニーやサンタクロースのように、実際には普遍的な参照のようなものはありません(私があなたのためにそれを台無しにした場合は申し訳ありません)。ユニバーサルリファレンスという用語は、標準には表示されません。これは、「特別な控除ルール」がアクティブな場合にテンプレート化された右辺値参照を説明するために、ScottMeyersによって造られた用語です。

表示するの有効なコードです。この場合、特別控除規則が適用されます。つまり、左辺値引数Aをに渡すとfFunctionはに推論されA&ます。したがって、スコットの定義によれば、そうFunctionです、「普遍的な参照」です。

于 2013-03-03T02:39:31.607 に答える
1

それのように見えますが、関数で呼び出されたときに引数の型をstd::forward<Function>正しく転送します。

于 2013-03-03T02:43:26.927 に答える