左辺値、右辺値の学習中なのですが、よく分からないところがありまして。
① 関数やコンストラクタの引数は、呼び出し元が右辺値でも、引数は、左辺値ですよね。
② &参照の引数は、参照元が右辺値の場合、左辺値参照になるのでしょうか?
③ 以下のようなコンストラクタで値をセットした場合、③-1のmoveで左辺値strをコンストラクタ引数nameへmove。③-2でコンストラクタ内の_nameへmove。しているとおも思いますが、なぜmoveではなくfowordを使うのでしょうか?
C++
1struct Test 2{ 3 std::string name; 4 Test( std::string&& _name ) 5 : name( std::forward<std::string>( _name ) ) // ③−2 6 { 7 } 8} 9 10int main( void ) 11{ 12 std::string str = "AAA"; 13 Test sample( std::move(str) ); // ③−1 14 15 return 0; 16}
> ③ 以下のようなコンストラクタで値をセットした場合
当該コードが文法的に成立していないようです。
foword って何ですか?
<utility> の forward のつもりですか?
コンストラクタのメンバ初期化子リストの書き方を間違っていませんか?
失礼しました。修正させていただきました。
https://cpplover.blogspot.com/2009/11/rvalue-reference_23.html
# なんかいつもこのリンクを紹介する人になってる。。。
回答3件
あなたの回答
tips
プレビュー