Я хочу, чтобы в нем заголовочный файл с неизменной константой, например. класс. Обратите внимание, что константа не должна быть константой времени компиляции.
static const std::string Ten = "10";
Это компилируется, но нежелательно, так как каждая единица компиляции теперь имеет свою собственную копию из десяти.
const std::string Ten = "10";
Это скомпилируется, но с ошибкой компоновщика с ошибкой умножится.
constexpr std::string Ten = "10"s;
Это будет работать, но только если конструктор строк был constexpr. Это будет, но я не могу рассчитывать на каждую нецелую константу, чтобы иметь конструктор constexpr... или я могу?
extern const std::string Ten = "10";
Кажется, что это работает, но я боюсь, что у меня получится ошибка компоновщика, если я дышу на ней неправильно.
inline const std::string Ten( ) { return "10"; }
У этого есть все, что я хочу, кроме чистого синтаксиса. Плюс теперь мне нужно передать константу в качестве вызова функции Ten()
.
inline const std::string = "10";
Это идеальное решение. Разумеется, переменные inline
не допускаются стандартом.
- Есть ли что-то в стандарте С++, в котором говорится, что внешняя версия должна работать, или мне просто повезло, что она работает с GCC?
- Есть ли веская причина не допускать встроенных переменных?
- Есть ли лучший способ с С++ 03 или будет лучший способ в С++ 0x?