我不明白至少在没有警告的情况下该代码如何编译:
#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::string
,所以b
引用了一个临时的左值,因此是一个悬空的引用。为什么行得通?