Мне нужен заголовочный файл с нецелой константой, например, класс. Обратите внимание, что константа не должна быть константой времени компиляции.
static const std::string Ten = "10";
Это компилируется, но нежелательно, поскольку каждый модуль компиляции теперь имеет свою собственную копию Ten.
const std::string Ten = "10";
Это скомпилируется, но не удастся с ошибкой компоновщика для множества определенных Ten.
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
переменные не разрешены стандартом.
- Есть ли в стандарте c ++ что-то, что внешняя версия должна работать, или мне просто повезло, что она работает с GCC?
- Есть ли веская причина не разрешать встроенные переменные?
- Есть ли лучший способ с c ++ 03 или будет лучший путь с c ++ 0x?