2015-04-12 6 views
1

я делаю некоторые учебник, и имел эту линиюинициализации строки в двойные кавычки

const std::string spaces(greeting.size(), " "); 

Однако это не сработало, пока я не изменил двойные кавычки в одинарные кавычки, как

const std::string spaces(greeting.size(), ' '); 

Что такое точка о кавычках в инициализации строк? Я попытался проверить http://www.cplusplus.com/reference/string/string/, но не нашел что-то, что объясняло бы мне это

+0

[Эта ссылка] (http://en.cppreference.com/w/cpp/string/basic_string/basic_string), объясняет это достаточно хорошо для меня. –

ответ

1

Есть символьные литералы и строковые литералы в C++.

Например, символ, заключенный в одинарные кавычки типа «A», обозначает буквенный символ и представляет один символ и имеет тип char.

Если вы заключите символ А в двойных кавычках, как "A" тогда вы получите строковый литерал, который имеет тип cont char[2] и имеет внутреннее представление, как

{ 'A', '\0' } 

, который состоит из двух символов, включая завершающий ноль.

Вы можете увидеть разницу выполнения этой простой порграммы

#includde <iostream> 

int main() 
{ 
    std::cout << "sizeof('A') = " << sizeof('A') << std::endl; 
    std::cout << "sizeof(\"A\") = " << sizeof("A") << std::endl; 
} 

Класс станд :: basic_string (или станд :: строка) имеет следующий конструктор

basic_string(size_type n, charT c, const Allocator& a = Allocator()); 

и в этой декларации

const std::string spaces(greeting.size(), ' '); 

этот конструктор используется. Он инициализирует строку символом heleting.size().

1

Это потому, что вы используете этот конструктор: string (size_t n, char c) (номер 6 в ссылке, которую вы связали), которая заполняет недавно построенный строка с n chars c. Если вы используете двойные кавычки, вы создаете строковый литерал, одинарные кавычки означают символы.

+0

Вижу, спасибо, что указал на меня. – Avdept

2

в двойных кавычках " " является строка символов в C++ (в лице const char [N]), в то время как в одинарных кавычках ' ' является литерой (char), так что вы звонили (std::size_t, const char [N]) конструктор.

Это не существует, поэтому вы получаете ошибку компиляции.

Вы должны изменить его на один из доступных конструкторов, как:

string (size_t n, char c); 
string (const char* s); 

(которые вы уже сделали, изменив второй параметр для ' ')

Смежные вопросы