在 C++ 中初始化引用不起作用,但初始化 const 引用有效,为什么?

initializing references in c++ doesn't work but initializing const references works, why?

本文关键字:引用 初始化 有效 为什么 const 不起作用 C++      更新时间:2023-10-16
const string& s = "rajat";

工作时

string& s = "rajat";

不。为什么?

"rajat"不是std::string,它是一个以零结尾的六个char数组,即 char[6]

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

std::string s = "rajat";

当你想要初始化一个string&你必须有一个string来绑定引用,所以编译器试图从char数组构造一个string并将引用绑定到该数组,即

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

但是,这是非法的,因为构造的string是临时对象,非常量引用无法绑定到临时对象,请参阅为什么非常量引用不能绑定到临时对象?

这将隐式构造一个临时string从 RHS 上的字符串文字。然后将临时绑定到引用:

const string& s = "rajat";
//                 ^^^^^ temporary string is constructed from "rajat" literal

该语言只允许const引用绑定到临时,所以这

string& s = "rajat";

是非法的,因为它试图将非常量引用绑定到临时string

请参阅此相关的GotW帖子,其中也涉及终身问题。