2016-08-20 3 views

答えて

6

まず、"HelloWorld!"は左辺値です。 (const charの配列)。

しかし、あなたのコードは、過負荷使用しています:

template< class T > 
T&& forward(typename std::remove_reference<T>::type&& t); 

C文字列リテラルはchar const *に減衰し、一時的なstd::stringを初期化するために使用されることにより、std::string&&に特異的に結合することができます。

なお、文の最後に既存の一時停止するので、rstr後に未定義ことになる行動を使用。そのrstrさんへの一時的な寿命のための寿命延長はrstrははxValueが、拡張子にバインドされているため、参照がprvalueにバインドされている場合にのみ起こり、ありません。 rstr`がスコープの外に出る `まで

+1

'のstd ::文字列&& RSTR = ... '明示的に一時的の寿命を延ばします。 –

+0

@DanielScheplerそうではありません!一時的なものには*直接*バインドする必要がありますが、ここではそうではありません。 – Quentin

+2

@DanielScheplerいいえ、そうではありません。 'rstr'はこのコードのxvalueに束縛されます。ライフタイム拡張は、参照がprvalueにバインドされている場合にのみ発生します。 –

関連する問題