2015-06-29 213 views
-2

我有一個函數返回一個常量引用的對象如下:CONST變量聲明

const &Foo getFoo() { 
    return foo; 
} 

如果我有另一個功能如下:

void bar() { 
    const qwerty = asdf.getFoo(); 
    int x = qwerty.x + 5; 
    // something here 
} 

與常量必要或最好前述QWERTY實踐?

+0

當你刪除const時編譯器是否抱怨? –

+1

必要:試一下,編譯器會告訴你。最佳實踐:Primarilly意見爲主。 – John3136

回答

4

嗯,首先,這既不必要也不是最佳實踐 - 這是不夠的。你也需要一個類型。一旦填寫完畢,const仍然不是必需的,除非您嘗試通過非const參考。我們有三個選擇,可以編譯:

Foo qwerty = asdf.getFoo();  // (A) 
const Foo qwerty = asdf.getFoo(); // (B) 
const Foo& qwerty = asdf.getFoo(); // (C) 

鑑於getFoo()返回到const參考,最有效的事就是把它作爲參考const爲好,避免一個副本。除非,也就是你想要副本 - 在這種情況下做(A)(B),這取決於你是否需要一個可修改的副本。除非Foo是不可複製的,在這種情況下,(C)是您唯一的選擇。

最終,這取決於您想要用qwerty做什麼。我會默認爲(C),並且需要選擇其中一個或另一個的理由。