假设我有一个这样的类:
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
};
Run Code Online (Sandbox Code Playgroud)
现在,通过a访问这个类的对象之间有什么实际的区别Foo&,而const Foo&不是这两个是两个不同的类型吗?
访问它们的字段应该没有任何区别,因为const它们将通过const T&无论如何被访问.
但是,作为一个整体来说,这是否有任何区别?或许与模板有关?什么?
既然templatetypedef已经写了一个很好的答案,遗憾的是在这种情况下没有用,我认为很好地强调一下,当你已经有了一个引用(注意所有这些"访问")时你会做些什么呢?,而不是你可以绑定到参考.
所以,你可以假设ref已经存在,绑定到某个对象.现在一切都是关于它可以做些什么.
tem*_*def 13
我不确定这是否是您正在寻找的,但请考虑以下功能:
void DoSomething(Foo& fooRef);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,你不能打电话
DoSomething(Foo()); // Error- can't bind a reference to a temporary
Run Code Online (Sandbox Code Playgroud)
但是,如果我们有这个功能:
void DoSomethingConst(const Foo& fooRef);
Run Code Online (Sandbox Code Playgroud)
那我们确实可以打电话
DoSomethingConst(Foo()); // Okay - const reference can bind to a temporary
Run Code Online (Sandbox Code Playgroud)
因此,当非引用不能时,const引用可能会绑定到临时值Foo,这有一点点差别const.因此,您可能希望使用Foos中的函数来接受const Foo&而不是Foo&使用临时函数来调用函数.
希望这可以帮助!