首页 > 解决方案 > 为什么我可以将 `std::string` 右值存储到 `const std::string &`

问题描述

我不明白这段代码是如何在没有警告的情况下编译的:

#include <string>
#include <iostream>

int main()
{
    const std::string a = "/42";
    const std::string &b = a.substr(1);

    std::cout << "A without slash is " << b << std::endl;
}

因为a.substr(1)返回一个新的std::stringb正在引用一个临时左值,因此是一个悬空引用。为什么它有效?

标签: c++

解决方案


推荐阅读