此代码在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;
}
Run Code Online (Sandbox Code Playgroud)
该myclass构造正在由值的字符串,这使得它暂时的.然后,您将此临时绑定到该m_str成员.随着构造函数退出您的成员引用变得无效.代替:myclass(const string& s) : m_str(s) {}
即便如此,这可能不是一个好主意.一般来说,使用引用作为成员可能很危险,因为您必须非常清楚生命周期语义.您应该考虑只在类中存储字符串,除非您有特殊原因不这样做.
| 归档时间: |
|
| 查看次数: |
363 次 |
| 最近记录: |