Можно ли создать C-строки или std::string
как constexpr
или они должны быть созданы во время выполнения?
С gcc 4.9.2 я могу это сделать:
constexpr const char foo[] = "blee";
(К сожалению, ноябрьский показ технологии Customer Technology Preview не позволяет Visual Studio поддерживать это: qaru.site/info/133608/...)
Но даже с gcc 4.9.2 я не могу этого сделать:
constexpr const std::string foo = "blee";
Я получаю сообщение об ошибке:
error: the type 'const string {aka const std::basic_string<char>}' of constexpr variable 'foo'
is not literal
constexpr const std::string foo = "blee";
^
note: 'std::basic_string<char>' is not literal because:
class basic_string
^
note: 'std::basic_string<char>' has a non-trivial destructor
Но я хотел бы получить больше разъяснений по поводу того, почему std::string
не является литералом. То есть: Почему строка должна быть построена во время выполнения?
Как уже указывалось, на этот вопрос можно частично ответить следующим образом: Можно ли использовать std::string в constexpr?, но он не затрагивает причины std::string
не может быть литералом, который является ключевым для вопроса.