为什么此代码给出错误“无法将‘char*&’类型的非常量左值引用绑定到‘char*’类型的右值”

问题描述 投票:0回答:1

为什么下面的代码会出现这个错误:

无法将

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++
1个回答
8
投票

原因是 C++ 标准不允许非常量引用绑定到临时变量,并且

std::string::data
按值返回指针。只有
const
引用可以做到这一点,并延长临时对象的寿命。

在你的情况下,你要么需要使你的引用常量。

const auto& r = p.data();

或者更好的是,只需创建一个变量来存储指针,因为复制指针的成本很低。

const char* r = p.data();
© www.soinside.com 2019 - 2024. All rights reserved.