Я сижу и думаю о том, нужно ли мне часто использовать const char*
или const std::string&
, когда я разрабатываю интерфейсы классов, и когда дело доходит до него, я часто чувствую, что там 6 в одной руке с полдюжины в другом.
Возьмите следующие два прототипа функций:
void foo(const char* str);
void foo(std::string str);
Если функция foo
должна была хранить строку, я бы сказал, что вторая - лучший вариант из-за способности передавать строку и использовать семантику перемещения, где это возможно. Однако, если foo
нужно было только прочитать строку, было бы лучше решение const char*
?
С точки зрения производительности временный std::string
не нужно создавать. Однако вызов функции с уже существующей строкой в качестве аргумента выглядит навязчивым: foo(mystr.c_str())
. Хуже того, если более сложные операции необходимо выполнить в массиве в какой-то момент по дороге или если копия должна быть сохранена, тогда интерфейс должен измениться.
Итак, мои вопросы таковы:
Есть ли четко определенные, личные или иные соглашения, которые правило, когда std::string
или const char*
является лучшим выбором? Кроме того, при запуске нового проекта лучше всего быть совместимым с использованием или просто взять тот, который лучше всего подходит для текущего фрагмента кода?