#string #c 14
#строка #c 14
Вопрос:
#include <iostream>
using namespace std;
int main() {
string str;
cin >> str;
string str1 = str[0]; // statement1
str1 = str[0]; // statement2
cout << str1 << endl;
}
Statement1 показывает ошибку, в то время как statement2 выполняется нормально. Кто-нибудь может объяснить, почему это происходит?
Комментарии:
1.
string str1 = str[0];
как вы думаете, что делает эта строка?2.
str[0]
является ли символ с индексом 0, в cplusplus.com/reference/string/string/string вы можете увидеть конструкторы для std::string , ни один из конструкторов std::string не принимает символ в качестве первого аргумента; конструктор # 5 принимает указатель на символ вместе с количеством байтов, хотя вы могли бы использовать это, напримерstring str1(amp;str[0],1);
Ответ №1:
Оператор 1 пытается использовать конструктор std::string
для инициализации str1
(даже если вы используете =
, он все равно вызывает конструктор), однако нет конструктора, который создает a std::string
из одного символа. С другой стороны, оператор 2 вызывает std::string::operator=()
, для которого существует подходящая перегрузка для одного символа.