0

为什么我不能编译这个程序?

void foo( const char* & str ) {
    str = "bar";
 }


 foo( "foo" ); //Compiler Error!! Why?

 const char* str = "foo";
 foo( str ); // No Erro

我怎样才能对我的论点进行硬编码?喜欢 foo( "MyString" )吗?

4

4 回答 4

1

Aconst char* &是对某处存在的某个指针的引用。

在这里,没有这样的指针可以引用。有一个字符数组,但创建数组不会创建指针

foo( "foo" ); //Compiler Error!! Why?

在这里,既有一个数组,也有"foo" 一个指向该数组的指针。

const char* str = "foo";
foo( str ); // No Erro

从评论编辑:

那为什么我写不出来foo( &"foo" )??“foo”数组的地址?

试着这样想。

这与您不能编写&&&&&&"foo"来创建char*******.

Achar*******将是一个指向内存的指针,那里有一个指向内存的指针......(你明白了)

C++ 不会自动为您在内存中创建所有这些东西。

于 2013-04-03T19:22:13.343 回答
1

文字不能绑定到非常量左值引用。

同样的原因你不能这样做:

void foo(int& x) {}
// ..
foo(5);

您可以使用右值引用:

 void foo( const char* && str ) {
    str = "bar";
 }

不过我不推荐这个。

无论如何,修改指针是没有意义的,因为它是临时的,无论如何都会立即超出范围。你为什么做这个?您真的打算const char* const&将哪个绑定到两者吗?

于 2013-04-03T19:23:02.783 回答
1

"foo"有类型char const[4],没有char const*。数组不能绑定到对指针的引用,因为数组不是指针。

于 2013-04-03T19:32:34.773 回答
0

"foo" 不是 const char* 类型

第二个声明是。

于 2013-04-03T19:20:29.587 回答