2014-04-14 107 views
1

我还没有能够在这里或通过谷歌找到类似的问题,也许是因为我不知道我是否问正确的问题,所以不知道标题是否正确。但我的代码看起来像这样的工作:将值传递给const引用参数?

Foo * foo = new Foo(); 
add(*foo); //Couldnt find any similar questions on this syntax? 

void add(const Foo & foo){ 

//What exactly is foo here? How can i manipulate its members, foo. or foo-> ? 

} 

回答

0

变量fooadd方法内是恒定的参考。它的行为就像一个指针,它不会复制对象:您与它交互,就好像它是对象本身一样。与指针不同,引用不能为NULL,并且不能重新分配。您使用点.运算符而不是->运算符与它进行交互。

由于foo是一个恒定的参考,你可以阅读foo的成员,但你不能为它们分配。此外,foo参考上的任何成员函数调用仅限于明确标记为const的函数。

调用add与解除引用foo是好的,只要foo不是NULL。通过取消引用NULL指针来进行引用是未定义的行为。

+0

它的行为就像对象本身,而不是像指针一样。 – EJP

+0

@EJP我澄清了我关于引用类似于指针的观点。 – dasblinkenlight

3

'foo'是一个常量引用。您可以通过foo.fred,foo.method()等访问其成员,但不能更改任何数据成员或调用任何非const方法。