2015-01-08 14 views
8

私は最近、新しいC++ 11の機能を学んでいます。しかし、私は十分な価値について一つのことを理解していません。rvaluesはC++にどこに格納されていますか?

コード次の検討:

string getText() 
{ 
    return "Fabricati diem"; 
} 

string newText = getText(); 

コールgetText()にはnewText変数にコピーされたR値を作成します。しかし、この値はどこに保存されていますか?コピーした後はどうなりますか?

+1

実際には、[戻り値の最適化]のためコピーされません(http://en.wikipedia.org/wiki/Return_value_optimization) – CoryKramer

+7

@Cyber​​ *と* RVOされません。どちらか一方、おそらく後者です。 – juanchopanza

+0

良いキャッチ、あなたは正しいです。私は私のコメントを編集しました。 – CoryKramer

答えて

8

getText()を呼び出すと、newText変数にコピーされるr値が作成されます。

一時的なエラーが発生する可能性があります。これはcopy elisionが許可されている状況の1つで、newTextは関数の戻り値によって直接初期化される可能性が高く、一時的なものはありません。

ただし、この右辺値は正確にどこに格納されていますか?

一時的なものを保存する場所はコンパイラによって異なります。標準では寿命のみが指定されています。通常、自動変数のように扱われ、レジスタや関数のスタックフレームに格納されます。

コピーした後はどうなりますか?

一時的なライフタイムは、それを作成した完全表現の終わりまで伸びます(refereneceを初期化するために使用されていない限り、その参照と同じ長さになります)。ここでは、それを使用した直後に破棄され、newTextを初期化します。

関連する問題