头文件中的static const std :: string

时间:2015-08-19 02:16:48

标签: c++ c++11

在我的CMake构建系统中,我自动生成一个头文件。以前,我正在做这样的事情

// old_auto_gen_file.hpp
#define VERSION_STRING "@VERSION_STRING@"
#define VERSION_MAJOR @VERSION_MAJOR@

通过CMake填充@...@

如果可能,我想丢失#define。我在想这样的事情

// new_auto_gen_file.hpp
static const std::string VERSION_STRING("@VERSION_STRING@");
static const int VERSION_MAJOR(@VERSION_MAJOR@);

然而,如果这是合法的,我会感到非常困惑吗?用c ++ 11这很酷吗?

2 个答案:

答案 0 :(得分:1)

这没有什么不妥,除非我没有看到任何理由甚至打扰char的小开销。一个简单的static const char VERSION_STRING[]="@VERSION_STRING@"; static const int VERSION_MAJOR=@VERSION_MAJOR@; 数组就足够了:

rm -rf ///Trash://*

答案 1 :(得分:0)

取决于你的工具链,你可能会得到const的多个实例,否则链接器可能足够聪明地做"合并字符串"。

无论哪种方式,这应该对您的代码没有明显的影响。但我建议将字符串放在c / cpp文件中,并在标题中包含extern参考,作为副作用,您只需要在更改时重新编译一个小文件。