c – 警告C4172:返回对绑定到局部变量的const std :: string的引用.它有多安全?

我刚刚在工作中构建了一个项目,我看到添加一个功能
const std::string& ClassName::MethodName() const
{
   return "";
}

编译器发出警告:

Warning C4172: returning address of local variable or temporary

我认为编译器是对的.这个功能有多安全?

请注意,该函数不会返回const char *,因为字符串文字具有静态存储持续时间,所以它是正常的.它返回对const std :: string的引用

解决方法

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

正如你评论的那样:
是的,临时绑定到常量引用的生命周期增加到常量的生命周期.但是这需要调用者接受const引用中的返回值,因此该函数本身不安全.

从C标准:
C 03 12.2临时物体:

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

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

相关文章

对象的传值与返回说起函数,就不免要谈谈函数的参数和返回值...
从实现装饰者模式中思考C++指针和引用的选择最近在看...
关于vtordisp知多少?我相信不少人看到这篇文章,多半是来自...
那些陌生的C++关键字学过程序语言的人相信对关键字并...
命令行下的树形打印最近在处理代码分析问题时,需要将代码的...
虚函数与虚继承寻踪封装、继承、多态是面向对象语言的三大特...