1) и 2) работают точно так же. Оба создают 6-элементный массив, не содержащий кучу, и копируют в массив во время выполнения или время загрузки символы 'h'
, , 'l'
, 'l'
, 'o'
, '\0'
.
3) создает экземпляр std::string
и вызывает его конструктор, который копирует символы 'h'
, 'e'
, 'l'
, 'l'
, 'o'
(, '\0'
) * его внутренний буфер памяти. (* The '\0'
не требуется хранить в буфере памяти.)
Существует еще один способ объявить строку в C++, используя указатель на char
:
const char* greeting = "hello";
Это не будет ничего копировать. Он просто укажет указатель на первый символ 'h'
строки "hello"
с нулевым завершением, который находится где-то в памяти. Строка также доступна только для чтения (ее изменение вызывает неопределенное поведение), поэтому здесь следует использовать указатель-на-const
.
Если вам интересно, какой из них использовать, выберите std::string
, это самый безопасный и простой.
Ответил ли этот вопрос на ваш вопрос? http://stackoverflow.com/a/1287357/248756 –
Обратите внимание, что первые два предназначены для строк C-стиля - только # 3 создает строку C++. См. Также [этот вопрос] (http://stackoverflow.com/questions/801209/char-vs-stdstring-in-c). –
Первые два идентичны. У вас пока нет возможности: 'char * greeting =" hello ";' и аналогичный 'const char * greeting =" hello ";' –