ошибка: преобразование из ‘char’ в нескалярный тип ‘std::string {он же std::basic_string}’ в C

#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=() , для которого существует подходящая перегрузка для одного символа.