C++中的引用初始化

sky*_*oor 9 c++ reference rvalue lvalue const-reference

任何人都可以向我解释为什么这两个陈述之间存在差异?

class A{};

const A& a = A();         // correct 

A& b = A();               // wrong
Run Code Online (Sandbox Code Playgroud)

它表示类型A&的临时类型的非const引用的无效初始化A

为什么const这里很重要?

Pet*_*der 14

必须使用l值初始化非const引用.如果你可以用临时工具初始化它们,那么下面会做什么呢?

int& foo = 5;
foo = 6; // ?!
Run Code Online (Sandbox Code Playgroud)

const引用具有延长裁判员生命的特殊属性,因为它们是const,所以你不可能尝试修改不在记忆中的东西.例如:

const int& foo = 5;
foo = 6; // not allowed, because foo is const.
Run Code Online (Sandbox Code Playgroud)

请记住,引用实际上必须引用某些东西,而不仅仅是临时变量.例如,以下内容有效:

int foo = 5;
int& bar = foo;
bar = 6;
assert(foo == 6);
Run Code Online (Sandbox Code Playgroud)

  • 是的,你可以使用它.临时将持续只要引用变量的作用:http://herbsutter.spaces.live.com/blog/cns!2D4327CC297151BB!378.entry (2认同)