我在看下面的表格代码:值初始化一个const成员的引用
class foo
{
public:
foo() {}
//...
};
class bar
{
public:
bar() : ref() {}
private:
const foo &ref;
};
正在初始化以这种方式使用的临时正确的参考?我知道可以使用临时变量初始化一个局部变量的const引用,并且这样做延长了临时变量的生存期,
const foo &tmp = funcThatReturnsByValue(); //OK
然而,答案相关的initialize reference in initialization list之一表明,有“短命”和“长寿命”的引用,而如上初始化ref
是不确定的行为(即使ref
之间的差异是const
参考)。
标准中的12.2.5部分说“在构造函数的ctor-initializer中引用成员的临时绑定一直存在,直到构造函数退出”。这是描述这种情况吗?
你能修复你的代码,以便它实际上涉及临时? – 2010-11-10 19:34:09
ref()不会将ref绑定到foo的临时实例?对不起,如果我的术语不准确......我正在尽我所能去理解这段代码片段。 – user168715 2010-11-10 19:42:21
也许这个评论是毫无价值的(我不知道你在看这段代码的上下文),但是如果'ref'是一个指针,问题就会消失。关键是引用不能被初始化,但指针可以(它们被初始化为零)。而且,大多数编译器(至少MSVC)都会发出警告,无法生成默认赋值运算符。作为一个指导原则,无论何时你想要一个引用成员,你实际上需要一个指针...... – 2010-11-10 21:03:01