为什么下面的代码会出现这个错误:
无法将
类型的非常量左值引用绑定到char*&
类型的右值char*
#include <string>
int main()
{
std::string p {"Test string"};
auto &r = p.data();
return 0;
}
std::string::data
返回的指针类型为char *
。变量r
的类型是char *&
。那么为什么在这种情况下,char *
的类型不能被char *
的类型引用呢?
原因是 C++ 标准不允许非常量引用绑定到临时变量,并且
std::string::data
按值返回指针。只有const
引用可以做到这一点,并延长临时对象的寿命。
在你的情况下,你要么需要使你的引用常量。
const auto& r = p.data();
或者更好的是,只需创建一个变量来存储指针,因为复制指针的成本很低。
const char* r = p.data();