c++ - 返回静态常量值
问题描述
在 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 编译器
解决方案
在 getter 函数中声明静态 const 数组是保持代码连贯性的合理方法吗?
有可能。如果您不需要它,它也可能会变得不必要地复杂。是否有更好的选择取决于你打算用它做什么。
给出了非常混乱的汇编程序
非优化装配的混乱性很少重要。
推荐阅读
- python - 如何在 python 3 中使用 tweepy 查找 POST 友谊/创建限制?
- python - Pandas 合并通过索引合并和列合并给出不同的答案
- python - PySpark 2.4.4 toPandas 失败,ValueError 没有足够的值来解包(预期 3,得到 2)
- css - 如何使用 react-native 根据不同语言动态更改字体系列
- javascript - 如何向我们服务器上具有特定角色的所有成员发送消息?
- mysql - 每天选择和统计数据
- unit-testing - 如何编写应该失败的单元测试?
- java - 使用java检索唯一的永久机器(笔记本电脑/计算机)ID
- python-3.x - 矩阵加法给出错误答案
- c++ - 可以将任意大小的 constexpr 数组用作 switch 语句中的 case 吗?