![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
не знаю как найти, из-за чего тут нет ошибки? Добавлено через 1 минуту и 25 секунд компиляции |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
из-за того, что operator == реализован не в виде члена класса std::string, а свободной функцией и в этом случае к левому операнду можно применять приведение и так как существует конструктор с параметром const char* левый операнд приводится к std::string и работает оператор сравнения для строк.
Короче потому, что operator == не член класса. Добавлено через 1 минуту и 43 секунды |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
хех, я чето думал, конструктор преобразования у basic_string explicit
тогда еще вопрос - он не explicit именно задля ("STRING" == str)? Или по другим причинам? |
|||
|
||||
| Fazil6 |
|
||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
не совсем въехал причем здесь expicit... используется вот этот конструктор
и , чесно говоря не вижу смысла иметь его expicit , ибо по идее он должен работать как для const char* так и для char* и для строковых литералов, кои вообще являются массивами Добавлено через 1 минуту и 17 секунд
нет. он для
|
||||||||
|
|||||||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
насколько я помню, то explicit делается потому же, из-за чего не рекомендуются операторы каста разве при explicit эта конструкция не будет работать? не будет работать
|
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
не будет
если запустить, то как и ожидалось получим вызов конструктора с параметром, а если сделать этот конструктор explicit , то не скомпилится, т.к. всетаки нужно приведение типа от типа литерала (const char[8]) к const char* |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
помойму ты что-то путаешь...
explicit не может САМ вызываться неявно, а не "не может допускать неявное приведение типа в своем параметре" именно потому его и рекомендуют почаще тыкать |
|||
|
||||
| Fazil6 |
|
||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
сори, я неправильно понял твою мысль.
Ты прав, я просто не то имел в виду. Ведь если имеем код
то абсолютно привычно вызвать ее, например вот так
это я и мел в виду, поэтому мне удивительно почему ты вспомнил про explicit применительно к operator==... |
||||||||
|
|||||||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
не к тому применительно просто казалось, что если это уж такое "правило" - ставить explicit у конструкторов преобразования, то у basic_string он уж точно таков оказалось, что не тут то было... |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
ну ты же понимаешь, что правило правилом, но до маразма тоже доводить не нужно. Преобразование char* -> std::string вполне логично и запрещать неявное преобразование в таком случае смысла , я например, не вижу |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |