我在看下面的表格代碼:值初始化一個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