c++ - 在 C++ 中初始化引用不起作用,但初始化 const 引用却起作用,为什么?

标签 c++ reference constants

const string& s = "rajat";

工作时

string& s = "rajat";

没有。为什么?

最佳答案

"rajat" 不是 std::string,它是一个由 6 个 char 组成的以 null 结尾的数组,即 字符[6]

您可以从以 null 结尾的 char 数组构造一个 std::string,这就是您编写时会发生的情况:

std::string s = "rajat";

当您想要初始化string&时,您必须有一个string作为要绑定(bind)的引用,因此编译器会尝试构造一个string 来自 char 数组并将引用绑定(bind)到该数组,即

std::string& s = std::string("rajat");

但是这是非法的,因为构造的string是一个临时对象,非常量引用不能绑定(bind)到临时对象,请参阅How come a non-const reference cannot bind to a temporary object?

关于c++ - 在 C++ 中初始化引用不起作用,但初始化 const 引用却起作用,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17132190/

相关文章:

c++ - 无法将此指针从 const Class<T> 转换为 Class<T>&

c++ - 从 C++ 中的 const 成员函数修改引用成员

c++ - 使用嵌套的 for 循环进行向上和向下计数

c++ - 在成员初始化器列表中,我可以创建对不在列表中的成员变量的引用吗?

python - boost python : passing large data structure to python

c# - System.Data.SQLite.DLL 在切换目标框架后不再加载

multithreading - 如果我与多个线程共享不可变引用,为什么我需要实现 `Copy` 和 `Clone`?

c++ - c++中异步线程的实现

c++ - 为什么 set/get_default_resource 使用指针而不是引用?

c++ - 为什么是非法的: copying vector of pointers into a vector of pointers to constants