Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 22.04.2018
Сообщений: 21
1

Присвоение переменной типа std::string значение bool

02.03.2019, 18:34. Просмотров 1377. Ответов 5
Метки нет (Все метки)

Объясните, почему компилируется такой код:

C++
1
2
std::string str;
str = true;
а такой нет:

C++
1
2
3
4
std::string str = true;
 
// error C2440 cannot convert from "bool" to 
// "std::basic_string<char,std::char_traits<char>,std::allocator<char>>"
MSVS 2017
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.03.2019, 18:34
Ответы с готовыми решениями:

Поменять значение по указанному адресу в переменной типа std::string
Здравствуйте форумчане. Не получается никак правильно использовать средства С++. Задача такова:...

Присваивание целочисленного значения переменной типа std::string
имеется вот такой синтаксис: int tmp=0; std::string a=tmp++; if(max&gt;var) cout&lt;&lt;a&lt;&lt;edl; ...

Как текст из заданного файла присвоить переменной типа std::string?
Здравствуйте, у меня есть файл с текстом, нужно этот текст присвоить переменной string, как это...

Из переменной типа std::string записать в файл большое количество данных (2 Mb)
Нужно записать в файл большое количество данных. Предполагается, что в переменной большое...

5
141 / 90 / 34
Регистрация: 30.01.2018
Сообщений: 463
02.03.2019, 18:44 2
Цитата Сообщение от ctrong Посмотреть сообщение
str = true;
Присваивание
Цитата Сообщение от ctrong Посмотреть сообщение
std::string str = true;
Вызов конструктора, то есть
C++
1
std::string str (true);
Нужного под это условие конструктора нет
0
587 / 282 / 64
Регистрация: 17.05.2015
Сообщений: 849
02.03.2019, 19:00 3
Лучший ответ Сообщение было отмечено ctrong как решение

Решение

Цитата Сообщение от ctrong Посмотреть сообщение
почему компилируется такой код:
std::string str;
str = true;
Это - вредный побочный эффект.

Строке можно присвоить символ:
Код
string& operator= (const string& str);
string& operator= (const char* s);
[B]string& operator= (char c);[/B]
Можно сделать вот так:

C++
1
2
std::string s;
s = 'h';
Буль - обычное целочисленное число, может конвертироваться в char
Потому что char это тоже обычное целочисленное число.

Поэтому, в строке:
C++
1
str = true;
Происходит неявное преобразование:
C++
1
2
char tmp = true;
str = tmp;

Цитата Сообщение от ctrong Посмотреть сообщение
а такой нет:
std::string str = true;
Здесь инициализация.
А это значит, что работает конструктор.

Запись эквивалентна:

C++
1
std::string str = std::string(true);
К счастью, для строки не предусмотрен конструктор,
который может принять целочисленный тип данных.

Поэтому, в конструктор не получится запихать всякую гадость.
1
0 / 0 / 0
Регистрация: 22.04.2018
Сообщений: 21
02.03.2019, 19:54  [ТС] 4
спасибо.
существуют ли какие-то общие рекомендации, как избежать ошибок, связанных с неявным приведением типов, может быть директивы компилятору?

Добавлено через 15 минут
или хотя бы ворнинги чтоб сыпались, ведь очевидная опечатка
0
141 / 90 / 34
Регистрация: 30.01.2018
Сообщений: 463
02.03.2019, 19:59 5
C++
1
static_cast
0
587 / 282 / 64
Регистрация: 17.05.2015
Сообщений: 849
02.03.2019, 20:10 6
Цитата Сообщение от ctrong Посмотреть сообщение
существуют ли какие-то общие рекомендации, как избежать ошибок, связанных с неявным приведением типов, может быть директивы компилятору?
Поститься, молиться, использовать волшебные ключи /WX /W4, не забывать, что юнит-тесты - ваши лучшие друзья

Добавлено через 7 минут
Цитата Сообщение от ctrong Посмотреть сообщение
или хотя бы ворнинги чтоб сыпались, ведь очевидная опечатка
Скажем PVS-Studio спасибо! За наше счастливое детство
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.03.2019, 20:10

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Присвоение объекту типа string рандомный элемент из массива типа string
Добрый вечер, дорогие форумчане. Я столкнулся с проблемой. Как присвоить объекту типа string...

как правильно понять тип bool ? bool true(const string &str) и что дает это значение ?
задам может глупый вопрос, но прошу ответить. как правильно понять тип bool ? bool...

Операция std::cout для Объекта типа std::string
Кто детально объяснит почему не выводит ? Дает вот так &quot;Отсутствует оператор &quot;&lt;&lt;&quot;, соответствующий...

Как присвоить переменной типа string значение из файла
Название файла неизвестно, задается пользователем в командой строке при вызове программы. Т.е....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.