常量变量声明
Const variable declaration
我有一个函数返回对对象的 const 引用,如下所示:
const &Foo getFoo() {
return foo;
}
如果我还有如下功能:
void bar() {
const qwerty = asdf.getFoo();
int x = qwerty.x + 5;
// something here
}
在 qwerty 前面加上 const 是必要的还是最好的做法?
嗯,首先,这既不是必需的,也不是最佳实践——这是不够的。你也需要一个类型。填写后,const
仍然不是必需的,除非您尝试通过非 const
引用来获取它。我们有三个选项可以编译:
Foo qwerty = asdf.getFoo(); // (A)
const Foo qwerty = asdf.getFoo(); // (B)
const Foo& qwerty = asdf.getFoo(); // (C)
鉴于 getFoo()
returns 对 const
的引用,最有效的方法是将其也作为对 const
的引用,这样可以避免复制.除非,也就是说,您 想要 一个副本 - 在这种情况下 (A)
或 (B)
,取决于您是否想要一个可修改的副本。除非 Foo
是不可复制的,在这种情况下 (C)
是您唯一的选择。
最终,这取决于您想用 qwerty
做什么。我会默认为 (C)
,并且需要一个理由来代替选择一个或另一个。
我有一个函数返回对对象的 const 引用,如下所示:
const &Foo getFoo() {
return foo;
}
如果我还有如下功能:
void bar() {
const qwerty = asdf.getFoo();
int x = qwerty.x + 5;
// something here
}
在 qwerty 前面加上 const 是必要的还是最好的做法?
嗯,首先,这既不是必需的,也不是最佳实践——这是不够的。你也需要一个类型。填写后,const
仍然不是必需的,除非您尝试通过非 const
引用来获取它。我们有三个选项可以编译:
Foo qwerty = asdf.getFoo(); // (A)
const Foo qwerty = asdf.getFoo(); // (B)
const Foo& qwerty = asdf.getFoo(); // (C)
鉴于 getFoo()
returns 对 const
的引用,最有效的方法是将其也作为对 const
的引用,这样可以避免复制.除非,也就是说,您 想要 一个副本 - 在这种情况下 (A)
或 (B)
,取决于您是否想要一个可修改的副本。除非 Foo
是不可复制的,在这种情况下 (C)
是您唯一的选择。
最终,这取决于您想用 qwerty
做什么。我会默认为 (C)
,并且需要一个理由来代替选择一个或另一个。