Преимущества и недостатки:
const std::string mystring = "blah";
Это в значительной степени стандартный C ++ способ работы со строками. С этим вы можете делать все, что вам когда-либо понадобится со строкой. Основным недостатком является то, что это медленнее. Там есть динамическое распределение. Кроме того, если .find
полагается на char[]
под сценами, вы теряете всю эту кучу работы, и, возможно, даже придется сделать больше, чтобы получить массив c-usable внутри.
const char mystring[] = "blah";
Это распределяет вашу 5-байтовую строку в стеке, так что это приятно и быстро. Недостатком является то, что если .find
использует std :: string, то в любом случае ему придется делать это распределение, и он будет делать это каждый вызов, а не один раз здесь. Кроме того, если вам когда-нибудь придется с ним что-то делать (например, добавлять к нему «.txt»), это было бы гораздо проще сделать с помощью std :: string.
static const char * mystring = "blah";
Если это за пределами области видимости, это означает, что он остается локальным для вашего исходного файла. C ++ способ сделать это с помощью неназванных пространств имен вместо static
. Единственным преимуществом такого способа является то, что он совместим с C (или, по крайней мере, с достаточно новыми компиляторами, которые знают, что такое const).
Обычно я бы использовал std :: string. За исключением особых или крайних случаев, простота использования превосходит скорость.