Const变量声明

时间:2015-06-29 23:44:57

标签: c++ const correctness

我有一个函数返回对象的const引用,如下所示:

const &Foo getFoo() {
    return foo;
}

如果我有另外一项功能如下:

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

在qwerty之前是const必要还是最佳实践?

1 个答案:

答案 0 :(得分: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),需要一个理由来选择其中一个。