为什么局部变量或临时变量的返回地址只是警告而不是错误?

2024-04-01

刚刚收到编译器针对此函数的警告:

template<class T>
Matrix3x3<T> & operator - (Matrix3x3<T> const & p)
{
    auto m = Matrix3x3<T>(p);

    m.m11 = -m.m11; m.m12 = -m.m12; m.m13 = -m.m13;
    m.m21 = -m.m21; m.m22 = -m.m22; m.m23 = -m.m23;
    m.m31 = -m.m31; m.m32 = -m.m32; m.m33 = -m.m33;

    return m;
}

,我想知道为什么返回局部变量或临时变量的地址不值得错误。是否存在必须这样做的情况?这只是“未定义的行为”而不是语言限制的理由是什么?

我想不出任何一个。


没有充分的理由说明它不应该是一个错误,只是C++标准 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf不这样对待这种情况,并且符合标准的编译器遵守该标准。

但是,鼓励发出警告:

§12.2.5.2函数返回语句 (6.6.3) 中绑定到返回值的临时变量的生命周期不会延长;临时变量在 return 语句中完整表达式的末尾被销毁.

[...]

[注意:这可能会引入悬空引用,并且鼓励实施 在这种情况下发出警告。 ——尾注]

重点是我的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么局部变量或临时变量的返回地址只是警告而不是错误? 的相关文章

随机推荐