Есть символьные литералы и строковые литералы в 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().
[Эта ссылка] (http://en.cppreference.com/w/cpp/string/basic_string/basic_string), объясняет это достаточно хорошо для меня. –