所有const类的`T&`和`const T&`之间的区别

时间:2012-02-13 18:55:20

标签: c++ const language-lawyer

假设我有一个这样的类:

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已经存在,绑定到某个对象。现在一切都是关于它可以做些什么。

1 个答案:

答案 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&,以便可以使用临时函数调用该函数。

希望这有帮助!