此代码在 cout 行崩溃。谁能解释为什么这不起作用?
#include <iostream>
#include <string>
using namespace std;
class myclass {
const string& m_str;
public:
myclass(string s) : m_str(s) {}
const string& getString() const { return m_str; }
};
int main () {
const string str("honey");
myclass mc(str);
cout << mc.getString() << "\n";
return 0;
}
最佳答案
myclass
构造函数按值获取字符串,这使其成为临时字符串。然后您将这个临时绑定(bind)到 m_str
成员。一旦构造函数退出,您的成员引用就会变得无效。相反:myclass(const string& s) : m_str(s) {}
即便如此,这也未必是个好主意。一般来说,使用引用作为成员可能是危险的,因为您必须非常清楚生命周期语义。您应该考虑在您的类中按值存储字符串,除非您有特定的理由不这样做。
关于c++ - 访问对字符串的引用时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6901494/