我还没有在这里或通过谷歌找到类似的问题,可能是因为我不知道我是否提出了正确的问题,所以不确定标题是否是对。但我正在使用看起来像这样的代码:
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 :(得分:3)
'富'是一个不变的参考。您可以通过foo.fred,foo.method()等访问其成员,但您无法更改任何数据成员或调用任何非const方法。
答案 1 :(得分:0)
foo
方法中的变量add
是一个常量引用。它的行为就像一个指针,它不会复制对象:你与它交互就好像它是对象本身一样。与指针不同,引用不能是NULL
,也不能重新分配。您使用点.
运算符而不是->
运算符与它进行交互。
void add(const Foo & foo){
cout << foo.first_member << endl;
foo.const_member_function();
}
由于foo
是常量引用,您可以阅读foo
的成员,但无法分配它们。此外,foo
引用上的任何成员函数调用仅限于明确标记为const
的函数。
只要add
不是foo
,就可以使用解除引用的foo
来呼叫NULL
。通过解除引用NULL
指针来进行引用是未定义的行为。