这是一个示例代码:
enum Foo // or enum class whatever
{ BAR
, STUFF
};
inline const char* to_string( const Foo& foo )
{
static const char* const NAMES[] =
{ "BAR"
, "STUFF"
};
// let's assume I have some boundary checks here, it's not the point
return NAMES[foo];
};
这个函数是内联的,在几个编译单元中使用的一个头文件中。这里的目标是如果不使用这个函数,编译器什么也不做。
问题:
- C++ 标准是否保证 NAMES 只存在于一个目标文件中,还是由编译器决定,还是保证每个目标文件都有它的副本?
- 如果会有多个副本,是否会出现链接问题(我假设我无法测试足够的编译器来检查)。
- gcc、msvc 和 clang 是否都会通过使最终的二进制文件只有一个 NAMES 实例来优化这种情况?