为什么不能为常量分配一个字符串字面量引用指针

Ala*_*ian 5 c++ pointers reference constants const-pointer

我可以使指针指向字符串文字,它将字符串文字转换为常量指针,但对指针的引用不能分配字符串文字,例如:

 const char *&text = "Hello, World\n"; 
Run Code Online (Sandbox Code Playgroud)

有一个错误,编译器说我不能将数组转换为指针引用,我很好奇,为什么它不正确?

eer*_*ika 8

这是不正确的,因为字符串文字不是指针。它是一个数组。文字确实隐式转换为指向数组第一个元素的指针(就像所有数组一样),但转换的结果是一个右值。对非常量的左值引用不能绑定到右值。

根本没有理由这么写。添加不必要的间接引用没有任何好处。const char* text = "Hello, World\n";更简单,正确。


Ted*_*gmo 2

到 a 的转换const char*可以看作是临时按值返回。您无法将引用绑定到非const临时对象。为了延长临时指针的寿命,您还必须制作指针const。如果这不是一个选项,则必须将引用绑定到非临时指针。

例子:

#include <iostream>

int main() {
    const char* foo = "foo\n";
    const char* bar = "bar\n";
    const char*& text = foo;
    
    std::cout << text;
    foo = bar;
    std::cout << text;
}
Run Code Online (Sandbox Code Playgroud)
foo
bar
Run Code Online (Sandbox Code Playgroud)