首页 > 解决方案 > 返回静态常量值

问题描述

在 getter 函数中声明静态 const 数组是保持代码连贯性的合理方法吗?我以前从未见过它,但在代码审查中我发现了这样的东西:

static const std::array<std::string, 4>& fooArrayGetter()
{
  static const std::array<std::string, 4> fooArray =
    {"foo" ,"bar", "baz", "qux"};
  return fooArray;
}

看起来是正确的:数组只分配一次,非常优雅,因为 getter 与其值相结合,但在 Godbolt https://godbolt.org/z/K8Wv94中运行它与以更标准的方式进行整个操作相比,会产生非常混乱的汇编程序。作为编写此代码的动机,我收到了 Meyers 的 Efficient C++ 中对第 4 条的引用

编辑:带有 --std=c++11 标志的 GCC 编译器

标签: c++optimizationstatic

解决方案


在 getter 函数中声明静态 const 数组是保持代码连贯性的合理方法吗?

有可能。如果您不需要它,它也可能会变得不必要地复杂。是否有更好的选择取决于你打算用它做什么。

给出了非常混乱的汇编程序

非优化装配的混乱性很少重要。


推荐阅读