Почему C++ позволяет целому числу быть присвоенным строке?

4 ответа

Поскольку строка назначается из char , а int неявно конвертируется в char .

27
ответ дан 29 November 2019 в 23:23
поделиться

Для класса std :: string определен следующий оператор присваивания:

string& operator=( char ch );

Этот оператор вызывается неявным преобразованием unsigned int в char .

В третьем случае вы используете явный конструктор для создания экземпляра std :: string , ни один из доступных конструкторов не может принимать unsigned int или использовать неявное преобразование from unsigned int :

string();
string( const string& s );
string( size_type length, const char& ch );
string( const char* str );
string( const char* str, size_type length );
string( const string& str, size_type index, size_type length );
string( input_iterator start, input_iterator end );
22
ответ дан 29 November 2019 в 23:23
поделиться

Это определенно operator = (char ch) call - в это вмешался мой отладчик. И мой MS VS 2005 компилируется без ошибок.

std::string my_string("");
unsigned int my_number = 1234;
my_string = my_number;
my_string.operator=(my_number);
0
ответ дан 29 November 2019 в 23:23
поделиться

Я могу объяснить первую и третью ситуации:

my_string = 1234;

Это работает, потому что строка имеет переопределение operator = (char). Фактически вы назначаете символ (с переполнением данных) в строку. Я не знаю, почему второй случай приводит к ошибке компиляции. Я пробовал код с помощью GCC, и он компилируется.

std::string my_string(1234);

не будет работать, потому что нет строкового конструктора, который принимает аргумент char или int.

-1
ответ дан 29 November 2019 в 23:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: