假设我有一个这样的类:
class Foo : boost::noncopyable
{
public:
Foo(int a, int b);
const int something;
const int something_else;
const std::string another_field;
// and that's that, no more methods nor fields
};
现在,通过Foo&
访问此类的对象与const Foo&
相比,是否有任何实际差异,除了这两个是两种不同的类型?
访问字段应该没有任何区别,因为它们是const
,因此无论如何都会通过const T&
访问它们。
但是当涉及到整个类时,是否有任何的区别?或许与模板有关?什么?
既然templatetypedef has written a nice answer,在这种情况下不幸没有帮助,我认为强调它是非常好的当你已经有了参考时你能做什么(注意所有这些“访问”),而不是关于你可以绑定到引用的内容。
所以,你可以假设ref已经存在,绑定到某个对象。现在一切都是关于它可以做些什么。
答案 0 :(得分:13)
我不确定这是否是你要找的,但请考虑这个功能:
void DoSomething(Foo& fooRef);
在这种情况下,无法调用
DoSomething(Foo()); // Error- can't bind a reference to a temporary
但是,如果我们有这个功能:
void DoSomethingConst(const Foo& fooRef);
然后我们确实可以打电话
DoSomethingConst(Foo()); // Okay - const reference can bind to a temporary
因此,如果非const
引用不能,Foo
引用可能会绑定到临时const
,则会略有不同。因此,您可能希望Foo
中的函数接受const Foo&
而不是Foo&
,以便可以使用临时函数调用该函数。
希望这有帮助!