はcppreference.comによると、move
は署名なぜstd :: moveはrvalue参照を引数として取るのですか?
template< class T >
typename std::remove_reference<T>::type&& move(T&& t) noexcept;
なぜそれがそのarugmentとして右辺値参照T&& t
を取るんを持っていますか?私は次のコード
void foo(int&& bar) {
cout << "baz" << endl;
}
int main(){
int a;
foo(a);
}
をしようとしたとき
はまた、私は何が起こっているかを「右辺値参照は左辺値にバインドすることはできません」コンパイラから
をエラーが発生しましたか?私は困惑している。
あなたは 'T && t'がrvalue参照であると仮定しました。これは時期尚早です。 'T && t'が何であるかを知るまでは、' T && t'がrvlaue参照であるかどうかを言う方法がありません。 'T 'が推論されるとき、外的状況に応じて左辺値と左辺値の間で' T && t'が切り替わるように、言語規則(型減算と参照崩壊)が故意に作られる。 – AnT
それは混乱しています。ダブルアンプ&&は、コンテキストに応じて2つの意味のいずれかを持ちます。テンプレートパラメータでは、 "転送参照"を表します。 –