gpt4 book ai didi

c++ - 为什么将 const std::string& 传递给构造函数不允许您将其绑定(bind)到初始化列表中的 const std::string& 成员变量?

转载 作者:搜寻专家 更新时间:2023-10-31 02:06:58 25 4
gpt4 key购买 nike

好的,我这里发生了一件奇怪的事情。 (至少我认为这很奇怪,但我可能犯了一个根本性错误)

所以,我有一个像这样的构造函数:

Module(const std::string& name) : m_name(name)
{
std::cout<<"Module String Constructor"<<std::endl;
std::cout<<"Constructed with name "<<m_name<<std::endl;
}

成员变量m_name如下所示:

 const std::string& m_name;

我已经验证了构造函数被调用并且 m_name 已正确设置为这些控制台输出。

但是,当我在将来某个时候尝试使用以下方法检索名称时:

 inline const std::string& GetName()
{
return m_name;
}

我得到一个长度为零的空对象。

我可以通过从成员变量中删除 const& 说明符使其正常工作

我在这里错过了什么?

最佳答案

but then I can't call the constructor with a string literal.

如果您从字符串文字初始化对象,一个临时的std::string 将被用来传递给Module 的构造函数。临时变量可以绑定(bind)到左值引用到常量,但它会在整个表达式之后立即被销毁,之后成员引用 m_name 变为悬挂状态。从 Module::GetName() 获取它并取消引用它会导致 UB。

您可以使用命名变量来初始化对象;你仍然需要注意变量的生命周期。或者停止使用成员引用。

关于c++ - 为什么将 const std::string& 传递给构造函数不允许您将其绑定(bind)到初始化列表中的 const std::string& 成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49450973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com