头文件中的静态const std::string

static const std::string in header file

本文关键字:std string const 静态 文件      更新时间:2023-10-16

在我的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中很酷吗?

这没有什么错,除了我没有看到任何理由甚至为std::string的小开销而烦恼。一个简单的char数组就足够了:

static const char VERSION_STRING[]="@VERSION_STRING@";
static const int VERSION_MAJOR=@VERSION_MAJOR@;

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

无论哪种方式,都不会对代码产生明显的影响。但我建议将字符串放在c/cpp文件中,并在头文件中有外部引用,这作为副作用,您只需要在更改时重新编译一个小文件。