c++ - 我应该更喜欢类或命名空间范围内的静态 const 变量吗?
问题描述
一个比另一个有什么切实的好处吗?我开始使用后者是因为它不会用静态 const 声明污染头文件,所以它更容易阅读。我经常只在几个成员函数中使用这些常量。
班级范围:
.hpp
class MyType
{
private:
static const std::wstring kFoo;
}
.cpp
const wstring MyType::kFoo(L"foo");
...
void MyType::parse(const wstring& input)
{
if (input == kFoo) { do1; }
...
}
相对
命名空间范围
.cpp
const wstring kFoo(L"foo");
...
void MyType::parse(const wstring& input)
{
if (input == kFoo) { do1; }
...
}
解决方案
首先,
const wstring kFoo(L"foo");
在全局范围内,而不是在namespace
. 您可以轻松地将其包装在一个匿名的namespace
.
namespace
{
const wstring kFoo(L"foo");
}
static
对于使用类成员还是 a 中的成员是否更好的问题namespace
,答案取决于团队编码风格指南以及个人偏好。
我的建议是将它放在namespace
.cpp 文件中的匿名下。这样,它可以保留实现细节,并且类定义不会被实现细节污染。
附言
请注意,类中的静态字符串常量与常量 [c++] 的命名空间中的问题解决了该问题,但有所不同。在另一篇文章中,用户希望static
在多个文件之间共享成员变量。在您的帖子中,您已明确将static
成员变量作为private
成员,因此不会跨文件共享。如果该评估不正确,则您的问题与另一个问题重复,因此应该关闭。
推荐阅读
- azure - Azure 无法创建 SendGrid 帐户,验证失败
- python - 如何在 Python Flask 中使用 Wrapper 对象包装 REST API 响应
- kotlin - kotlin 如何以及何时让运行?
- google-cloud-platform - Google Cloud Platform - 我可以找出 403 响应的原因吗?
- python - 使用 Docker 设置 python 开发环境(在 vscode 中使用 linting 和代码完成)
- python - 预训练的 Fasttext 模型为词汇表外的单词返回乱码
- sass - 不明确的 SCSS 错误意外字符 '' (1:4)
- azure - 跨项目和环境共享/转换应用程序设置
- regex - 使用正则表达式从 .log 文件中提取数据
- sapui5 - 如何在 SAPUI5 甘特图的每一行上呈现不同的形状?