使用以下代码,“hello2”不会显示,因为在第 3 行创建的临时字符串在第 4 行执行之前死亡。在第 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 是错误的,按值存储不会影响性能。