Для строковых литералов и только для строковых констант, которые приходят из литералов, я бы использовал const char[]
.Основным преимуществом std::string
является то, что он имеет бесплатное управление памятью, но это не проблема со строковыми литералами.
В любом случае, это фактический тип литерала, и его можно напрямую использовать в любомAPI, который требует либо строки с нулевым символом в конце старого стиля C, либо строк C ++ (включается неявное преобразование).Вы также получаете реализацию размера времени компиляции, используя массив вместо указателя.
Теперь, когда определяются интерфейсы функций, и даже если предполагается передавать константы, я бы предпочел std::string
, а не const char*
, так как в последнем случае размер теряется, и, возможно, потребуется его пересчет.
Исходя из моего собственного опыта.Я состарился, когда писал .c_str()
при каждом обращении к библиотеке журналов (в которой использовались переменные аргументы) для литеральных строк с сообщениями об информации / ошибках.