Const变量声明

Const variable declaration

本文关键字:声明 变量 Const      更新时间:2023-10-16

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

const &Foo getFoo() {
    return foo;
}

如果我有以下另一个功能:

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

前面带const的qwerty是必要的还是最佳实践?

首先,这既不是必要的,也不是最佳实践——这是不够的。你也需要打字。一旦您填写了它,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),并且需要一个理由来选择其中一个。