Вот пример кода:
enum Foo // or enum class whatever
{ BAR
, STUFF
};
inline const char* to_string( const Foo& foo )
{
static const char* const NAMES[] =
{ "BAR"
, "STUFF"
};
// let assume I have some boundary checks here, it not the point
return NAMES[foo];
};
Эта функция встроена, находится в заголовке, используемом в нескольких единицах компиляции. Цель состоит в том, чтобы заставить компилятор ничего не делать, если эта функция не используется.
Вопросы:
- Предоставляет ли стандарт С++, что NAMES будет существовать только в одном объектном файле или оставить его компилятору, чтобы решить или он гарантирует, что каждый объектный файл будет иметь его копию?
- Если будет несколько копий, будет ли это проблемой связывания (я предполагаю, что не могу проверить достаточное количество компиляторов, чтобы проверить это).
- Будет ли gcc, msvc и clang оптимизировать этот случай, если в конечном бинарнике будет только один экземпляр NAMES?