为什么我不能编译这个程序?
void foo( const char* & str ) {
str = "bar";
}
foo( "foo" ); //Compiler Error!! Why?
const char* str = "foo";
foo( str ); // No Erro
我怎样才能对我的论点进行硬编码?喜欢 foo( "MyString" )
吗?
Aconst char* &
是对某处存在的某个指针的引用。
在这里,没有这样的指针可以引用。有一个字符数组,但创建数组不会创建指针。
foo( "foo" ); //Compiler Error!! Why?
在这里,既有一个数组,也有"foo"
一个指向该数组的指针。
const char* str = "foo";
foo( str ); // No Erro
从评论编辑:
那为什么我写不出来
foo( &"foo" )
??“foo”数组的地址?
试着这样想。
这与您不能编写&&&&&&"foo"
来创建char*******
.
Achar*******
将是一个指向内存的指针,那里有一个指向内存的指针......(你明白了)
C++ 不会自动为您在内存中创建所有这些东西。
文字不能绑定到非常量左值引用。
同样的原因你不能这样做:
void foo(int& x) {}
// ..
foo(5);
您可以使用右值引用:
void foo( const char* && str ) {
str = "bar";
}
不过我不推荐这个。
无论如何,修改指针是没有意义的,因为它是临时的,无论如何都会立即超出范围。你为什么做这个?您真的打算const char* const&
将哪个绑定到两者吗?
"foo"
有类型char const[4]
,没有char const*
。数组不能绑定到对指针的引用,因为数组不是指针。
"foo" 不是 const char* 类型
第二个声明是。