首页 > 解决方案 > 为什么 const char* const & = "hello" 可以编译?

问题描述

我正在阅读书中的代码片段并找到以下内容:

const char* const & a = "hello"; //can compile 
const char*& a = "hello"; //cannot

我所知道的是,在初始化引用时,不会发生数组到指针的转换。

const char* const &,对 a 的引用const pointer,指针指向const char

const char*&,对 a 的引用pointer,指针指向 const char

那么,为什么要添加一个 extra const,表明指针是 a const,允许它编译呢?

标签: c++referenceconstantslanguage-lawyer

解决方案


它基本上遵循这个公式

T const & a = something_convertible_to_T;

T 在哪里const char*。在第一种情况下,可以实现一个临时指针,分配文字的地址,然后将其自身绑定到引用。在第二种情况下,由于左值引用不是 const,它不会发生。更多相同的另一个例子

const char* && a = "hello"; // rvalue ref makes a no into a yes.

现在临时指针绑定到一个右值引用。


推荐阅读