次のコードでは、3 行目で作成された一時的な文字列が 4 行目の実行前に破棄されるため、"hello2" は表示されません。1 行目のように #define を使用するとこの問題を回避できますが、#define を使用せずにこの問題を回避する方法はありますか? (C++11 コードは問題ありません)
#include <iostream>
#include <string>
class C
{
public:
C(const std::string& p_s) : s(p_s) {}
const std::string& s;
};
int main()
{
#define x1 C(std::string("hello1")) // Line 1
std::cout << x1.s << std::endl; // Line 2
const C& x2 = C(std::string("hello2")); // Line 3
std::cout << x2.s << std::endl; // Line 4
}
説明:
Boost uBLAS は参照を保存すると信じていることに注意してください。これが、コピーを保存したくない理由です。値で保存することをお勧めする場合は、Boost uBLAS が間違っていて、値で保存してもパフォーマンスに影響しない理由を説明してください。