>>117
もっと詳しく書くと、直前から次のように書かれています:
# Xref<String>はXref<string>の写し間違いでした。
string x {"There and back again"};
template <typename T>
T&& std::forward(typename remove_reference<T>::type& t) noexcept;
template <typename T>
T&& std::forward(typename remove_reference<T>::type&& t) noexcept;
ここで望まれるのは、不純なコピーを一切作ることなく、
make_unique<T>(arg)がargからTを構築することである。
その実現には左辺値と右辺値の区別を管理することが重要だ。
次の例を考えてみよう:
template<typename TT, typename A>
unique_ptr<TT> make_unique(int i, A&& a) // make_sharedのちょっとした変種
{
return unique_ptr<TT>{new TT{i,forward<A>(a)}};
}
auto p1 = make_unique<Xref<string>>(7,"Here");
ここで、"Here"は右辺値なので、右辺値を引数にしてforward(string&&)
が呼び出される。
そして、"Here"を格納しているstringのムーブを行なうために、
Xref(int,string&&)が呼び出されることになる。
# 個人の感想: これは、A=stringと考えられます。
もっと興味深い(しかも分かりにくい)のが、次のものだ:
auto p2 = make_unique<Xref<string>>(9,x);
ここで、xが左辺値なので、左辺値を引数にforward(string&)が呼び出される。
forward()のTは、string& と導出される。そのため、返却値は string & &&となる。
もちろんそれは string & を意味する(§7.7.3)。その結果、左辺のxに対して、
Xref(int,string&)が呼び出されて、xがコピーされる。
# 個人の感想: これは、A=string&と考えられます。
C++相談室 part162
■ このスレッドは過去ログ倉庫に格納されています
118デフォルトの名無しさん (オイコラミネオ MM71-ZKGJ)
2022/11/15(火) 12:51:05.19ID:+zOZoQ9YM■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 人間の髪の毛は押し出されるのではなく「引っ張られる」ことで成長する [少考さん★]
- グリコが「ポッキー」など600万個自主回収 チョコに香辛料の香り [少考さん★]
- (社説)スパイ防止法の策定 民主社会の基盤を崩さないか:朝日新聞 [少考さん★]
- 【国内総生産】実質GDP、年2.3%減に下方修正 設備投資落ち込み 7~9月期改定値 [ぐれ★]
- 世界的DJ沖野修也、高市早苗首相のアーティスト海外展開支援めぐり疑問「補償が先ではないですか?」 ★2 [muffin★]
- パナソニックHD、野球部休部へ 来期、構造改革の一環で [征夷大将軍★]
- 地方創生☆チクワクティクスでひなビタお🏡を萌え起こしめう!
- 高市「減反します」→叩かれたため「多様なコメの増産を進める!」と言い始める😮 [931948549]
- 元外交官や大学教授「原因は高市が作った。発言を撤回せよ」記者会見を開く [931948549]
- 高市首相「多様なコメの増産を進める」 [256556981]
- 🏡👊😅👊なにここ珍百景👊😅👊🏡
- ウインナーの不味い食い方
