Когда объекты constexpr
построены относительно не-t20 > нелокальных объектов со статической продолжительностью хранения? Они начинают свою жизнь до инициализации любых других объектов, то есть до динамической инициализации?
Я размышляю, было бы разумно иметь string_literal
класс (живой пример), который используется, например, для сравнения std::string
с определенным ключевые слова:
class string_literal
{
// private members
public:
constexpr string_literal(char const* b);
bool operator== (std::string const& other) const;
bool operator!= (std::string const& other) const;
// other member functions
};
constexpr string_literal hello("hello");
void f(std::string const& s) {
if (s == hello) {
// do something
}
}
Поскольку string_literal
мог анализировать строковый литерал во время компиляции, чтобы найти первый нулевой символ, я мог представить, что эти сравнения можно сделать быстрее, чем сравнение std::string
с строковым литералом. Однако, чтобы быть в безопасности, необходимо, чтобы объект hello
был легко сконструирован, когда первый конструктор выполняется во время выполнения во время статической инициализации: в противном случае эти объекты могут случайно получить доступ, если они еще не сконструированы.