最近、私は移動セマンティクスを理解しようとしていて、質問がありました。std :: forward実装の違い
質問は既に説明済みですhere。
Iは第一の変形を実施して、L値又はR値を返すかどうかをチェック:
#include <iostream>
using namespace std;
template <typename T>
T&& my_forward(T&& x) {
return static_cast<T&&> (x);
}
int main() {
int a = 5;
&my_forward(a); // l-value
return 0;
}
IのL値を渡す場合、私が取ることができるので、それで、それは、コンパイル(L値を返しますL値からアドレス)と私はそれを行う場合:my_forwardはr値を返したため
&my_forward(int(5)); // r-value with int&& type
私のコードは、コンパイルされません。上記の質問では、この実装と標準的な実装(std :: remove_referenceと2つの異なる引数はそれぞれ&と& &)との違いは、私の実装が常にl-valueを返すことですが、 r値とl値の両方を返します。
私はstd :: forwardをそのように実装できないのでしょうか?どのような特定のケースでは、それはstandartの違いを示しますか?また、Tをテンプレートとして指定する必要があり、引数型でそれ自体を定義させることができないのはなぜですか?
は、なぜあなたは右辺値参照のアドレスを取得しようとしていますか? – xinaiz
@BlackMoses r値をチェックします。 – LogicStuff
@LogicStuffああ、大丈夫、 '&'使い方の誤解だと思った: – xinaiz