2013-06-19 37 views
2

爲什麼我不能確定這個功能,錯誤參考預選賽

int *clone() const & 
{ 
    return new int(10); 
} 

int x; 
int *clone() const && 
{ 
    return new int(std::move(x)) ; 
} 

我應該能夠添加const修飾功能。我是否應該包含任何標題?

+4

什麼是'&'和''&&應該做的嗎? –

+0

Luchian Grigore說。另外,如果x是一個成員變量而clone()是一個const方法,那麼如果允許編譯(因爲它允許修改x),std :: move(x)將違反const正確性。 – Medinoc

+0

而不是返回一個int指針,它可能更好地返回int本身 – Enigma

回答

0

您可以使用移動分配的參數R值的參考,例如或移動的構造。 看來鏗鏘一直在嘗試extension被稱爲「這個」的「被稱爲右值引用」,但我建議你首先通過move構造函數和賦值操作符。

+0

C++ 11明確指定函數的ref-qualifier。見'8.3.5 [dcl.fct]'。 [gcc support](http://gcc.gnu.org/ml/gcc-patches/2013-04/msg00024.html)。你們都需要讓OP休息一下。 –

0

因爲函數名稱後的任何限定符都適用於此指針。 如果你想定這個指針
你應該只是不超載:INT *的clone()const的

+1

那麼我什麼時候使用引用限定符? –

+0

@TamimAdDari函數名後?永遠不要 – kassak

+0

@kassak是正確的 你不能重載函數使用eference限定符後功能名稱,就是這個指針 –

3

我是新來的C++,我和你有同樣的錯誤。 我編譯了來自C++ Primer 5th Edition的示例代碼,該代碼描述了引用限定符。但是,我的GNU編譯器向我顯示錯誤。我想現在的編譯器不支持C++ 11中引入的這個新特性。而且似乎沒有多少人知道這一點,因爲很少有信息可以在互聯網上找到。也許以後的編譯器會支持這個功能。

許多C++ 11功能尚未得到支持......我以前見過一些功能。

這是示例代碼的一部分,類似於你:

Foo sorted() &&; 
Foo sorted() const & 
+0

謝謝,唯一有點道理的人。 upvoted。 –