2010-12-09 63 views
3

我有這樣的示例代碼:根據標準,這是有效的C++代碼嗎?

struct A 
{ 
    bool test() const 
    { 
     return false; 
    } 
}; 


template <typename T = A> 
class Test 
{ 
public: 
    Test(const T& t = T()) : t_(t){} 

    void f() 
    { 
     if(t_.test()) 
     { 
      //Do something 
     } 
    } 
private: 
    const T& t_; 
}; 

int main() 
{ 
    Test<> a; 
    a.f(); 
} 

基本上我擔心的Test我在哪裏存儲const引用到一個臨時變量和methof f使用它的構造。臨時對象引用是否在f內保持有效?

+1

我認爲 - 沒有。編譯器無法跟蹤(通常情況下)引用的去向以及它是否持久存儲。但最簡單的是寫一個示例應用程序,看看會發生什麼。 – valdo 2010-12-09 09:21:40

+0

它適用於VS2008,但我不太相信它的權利。 – Naveen 2010-12-09 09:22:19

回答

7

它不會保持有效。臨時對象在初始化a後將被銷燬。當您撥打f時,您會致電test調用未定義的行爲。只有以下有效:

// Valid - both temporary objects are alive until after the 
// full expression has been evaluated. 
Test<>().f();