提问者:小点点

为什么不能对常量的指针进行引用,分配字符串文本


我可以使指针指向字符串文本,它会将字符串文本强制转换为常量指针,但是对指针的引用不能分配字符串文本,例如const char*&text=“hello,world\n”;这是一个错误,编译器说不能将数组强制转换为指针引用,我很好奇,为什么不正确?


共3个答案

匿名用户

常量char*的转换可以看作是临时返回的值。 不能将引用绑定到非常量临时。 要延长临时文件的寿命,您还必须使指针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;
}
foo
bar

匿名用户

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

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

匿名用户

编译器告诉你的是你需要一个常量指针。

您的构造是对指向常量char的指针的引用,因此指针也必须是常量。

不能将临时引用绑定到非常量引用,除非它也是常量。

const char *const &text = "Hello, World\n";

你甚至可以做:

char* const& text = "Hello, World\n";

而且它可能会在大多数编译器中编译,但是出于明显的安全原因,C++标准不允许使用指向字符串的非常量指针。