2015-06-29 173 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),并且需要选择其中一个或另一个的理由。