为什么不能为常量分配字符串文字引用指针
Why Can't Make a Reference To Pointer for Constant Assign a String Literal
我可以让指针指向字符串文字,它会将字符串文字转换为常量指针,但对指针的引用不能分配字符串文字,例如:
const char *&text = "Hello, World\n";
出现错误,编译器说我不能将数组转换为指针引用,我很好奇,为什么不正确?
不正确,因为字符串文字不是指针。它是一个数组。文字确实隐式转换为指向数组第一个元素的指针(就像所有数组一样),但转换的结果是右值。并且对非常量的左值引用不能绑定到右值。
根本没有理由这么写。添加不必要的间接寻址没有任何好处。 const char* text = "Hello, World\n";
更简单,也更正确。
编译器告诉你的是你需要一个常量指针。
您的构造是对指向 const char 的指针的引用,因此该指针也必须是常量。
不能将临时引用绑定到非常量引用,除非它也是常量。
const char *const &text = "Hello, World\n";
你甚至可以这样做:
char* const& text = "Hello, World\n";
它可能会在大多数编译器中编译,但出于明显的安全原因,C++ 标准不允许非 const 指针指向字符串文字。
到const char*
的转换可以看作是按值返回的临时值。您不能将引用绑定到非 const
临时对象。要延长临时文件的寿命,您还必须制作指针 const
。如果这不是一个选项,您必须将引用绑定到一个 not 临时指针。
示例:
#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
我可以让指针指向字符串文字,它会将字符串文字转换为常量指针,但对指针的引用不能分配字符串文字,例如:
const char *&text = "Hello, World\n";
出现错误,编译器说我不能将数组转换为指针引用,我很好奇,为什么不正确?
不正确,因为字符串文字不是指针。它是一个数组。文字确实隐式转换为指向数组第一个元素的指针(就像所有数组一样),但转换的结果是右值。并且对非常量的左值引用不能绑定到右值。
根本没有理由这么写。添加不必要的间接寻址没有任何好处。 const char* text = "Hello, World\n";
更简单,也更正确。
编译器告诉你的是你需要一个常量指针。
您的构造是对指向 const char 的指针的引用,因此该指针也必须是常量。
不能将临时引用绑定到非常量引用,除非它也是常量。
const char *const &text = "Hello, World\n";
你甚至可以这样做:
char* const& text = "Hello, World\n";
它可能会在大多数编译器中编译,但出于明显的安全原因,C++ 标准不允许非 const 指针指向字符串文字。
到const char*
的转换可以看作是按值返回的临时值。您不能将引用绑定到非 const
临时对象。要延长临时文件的寿命,您还必须制作指针 const
。如果这不是一个选项,您必须将引用绑定到一个 not 临时指针。
示例:
#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