std::string をラップするためのクラスが必要であり、他のすべての詳細に加えて、型キャスト演算子を使用して std::string への自動変換を提供するとします。
class MyWrappedString {
std::string m_value;
/* ... */
public:
inline operator std::string() const {
return m_value;
}
};
そのため、オペレーターはラップされた文字列オブジェクトのコピーを返します。
しかし、なぜ次のコードは正しいように見えるのでしょうか?
MyWrappedString x;
const std::string& y = x;
// now, y should be a reference to a temporary, right?
std::cout << "y is: " << y << std::endl;
変換演算子は m_value の一時的なコピーを返すため、const std::string& y = x
その一時的なコピーへの参照を作成します。
なぜこれが機能するのですか?参照されるオブジェクトの有効期間が延長されたのを覚えていますが、よくわかりません。
そして 2 番目の質問: const 参照を返す型キャスト演算子を使用することは可能ですか?
例えば:
inline operator const std::string &() const {
return m_value;
}
では、上記のコードは一時コピーで動作する必要はありませんか?
PS: この質問は少し関連しています: Lifetime of temporariesですが、それでも別の問題です。