gpt4 book ai didi

c++ - 警告 C4172:返回对绑定(bind)到局部变量的 const std::string 的引用。它有多安全?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:14 25 4
gpt4 key购买 nike

我刚刚在工作中构建我们的一个项目,我看到添加了一个新功能:

const std::string& ClassName::MethodName() const
{
return "";
}

编译器给出警告:

Warning C4172: returning address of local variable or temporary

我认为编译器是对的。 这个函数的安全性如何?

请注意,该函数不会返回 const char*,这没有问题,因为字符串文字具有静态存储持续时间。它返回对 const std::string

的引用

最佳答案

是的,它不安全。
返回局部变量或临时变量的地址并取消引用它会导致未定义的行为。

正如您评论的那样:
是的,绑定(bind)到常量引用的临时对象的生命周期会增加到常量的生命周期。但这需要调用者接受常量引用中的返回值,因此函数本身并不安全。

来自 C++ 标准:
C++03 12.2 临时对象:

第二个上下文是引用绑定(bind)到临时对象。引用绑定(bind)到的临时对象或作为临时对象绑定(bind)的子对象的完整对象的临时对象在引用的生命周期内持续存在,除非下面指定...

在构造函数的 ctor-initializer (12.6.2) 中临时绑定(bind)到引用成员,直到构造函数退出。临时绑定(bind)到引用函数调用 (5.2.2) 中的参数一直存在,直到包含调用的完整表达式完成。函数返回语句 (6.6.3) 中返回值的临时绑定(bind)一直存在,直到函数退出

关于c++ - 警告 C4172:返回对绑定(bind)到局部变量的 const std::string 的引用。它有多安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7039324/

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