【发布时间】:2017-03-13 01:15:21
【问题描述】:
我用来放置常量,例如:
const QString DATETIME_FORMAT {"yyyy-MM-dd hh:mm:ss.zzz"};
在一个单独的文件中,main.h。实际上我把它放在一个命名空间上,比如:
namespace projectx {
const QString DATETIME_FORMAT {"yyyy-MM-dd hh:mm:ss.zzz"};
}
然后,当我想使用 DATETIME_FORMAT 时,我必须:
#include "../../main.h"
using namespace projectx;
根据使用 main.h 的文件所在的位置,路径 ../../main.h 会发生变化。这有点烦人。
这种方法是标准的吗?有什么办法?
【问题讨论】:
-
把它们放在需要的地方。不要将它们暴露在它们不存在的地方。
-
命名空间范围的
const对象默认为static,因此将在每个包含您的标头的 TU 中放置一个单独的对象(可能会或可能不会优化为单个对象链接器)。 不理想。 -
TU是什么意思?
-
对于给定的常量用例,似乎 constexpr 比 const 和 static 更适合(在 c++11 及更高版本中)。
-
在编译器中使用 -I 选项来避免“../../etc”。
projectx::DATETIME_FORMAT不需要使用命名空间