微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C返回一个std :: string&

std::string &func(int vlu)
{
    std::string str;
    str = std::to_string(vlu) + "something";

    return str;
}

上述功能明显不安全.
以下是另一个版本.

std::string &func(int vlu)
{
    return std::to_string(vlu) + "something";
}

我有一些问题:
编译器(gcc),在第二个版本中,没有给我任何警告.安全吗?
我只是认为编译器(或其他什么?)将创建一个临时变量来保存表达式std :: to_string(vlu)“something”的返回.所以第二个版本也不安全.而我呢?

解决方法

不,这两个计划都不安全.在这两种情况下,返回的引用都是悬空的,使用引用的行为将是未定义的.

第二个程序也是格式错误的,因为它试图将左值引用(返回)绑定到右值(临时).第二个程序可能被认为“不太安全”,因为编译器可能会选择不编译它.

修复函数:当目的是返回一个新对象时,不要尝试返回引用.返回一个值.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐