Я разрабатываю кроссплатформенную библиотеку C++. Мне нужен лучший способ определения моих строковых констант, которые будут использоваться во всей программе. Какой из них лучше static const char * или static const std::string? Делает ли constexpr какое-либо из них лучше старого объявления?
static const char *str = "hello world";
vs
static const string str = "hello world";
Зачем мне это нужно: моей программе, возможно, придется инициализировать много статических переменных типа строковых литералов перед запуском приложения. И я не могу обойтись без статических переменных, потому что они используются во всем файле. Если мне нужно увеличить производительность, но сократить время инициализации статической переменной. В идеале я хотел бы, чтобы большинство вещей происходило во время компиляции, а не во время выполнения. какой из них будет лучшим выбором?
string.length()
или вы хотите использоватьstrlen()
. В этом отношении вы можете#define STRCONST1 "My String Const"
и так далее. Это зависит от того, как вы хотите использовать его в своем коде. Очевидно, чтоchar *
будет менее требовательным к компилятору и ресурсам, а#define
и того меньше, ноstd::string
предлагает много, ни один из них не требует небольших дополнительных затрат. - person David C. Rankin   schedule 09.04.2019string_view
, который заменяетconst char*
в современном C++ (и который работает сconstexpr
, который вы должны использовать в этом случае). - person Matthieu Brucher   schedule 09.04.2019char const*
std::string
. Почему бы не использовать новый синтаксис, который позволяет указать литералstd::string
.static const string str = "hello world"s;
(обратите внимание на последнюю букву s) en.cppreference.com/w /cpp/string/basic_string/operator%22%22s - person Martin York   schedule 09.04.2019