Показаны сообщения с ярлыком явные/неявные вызовы. Показать все сообщения
Показаны сообщения с ярлыком явные/неявные вызовы. Показать все сообщения

четверг, 22 марта 2012 г.

Неявный вызов конструктора копирования (С++)


- Какая разница между пуганой вороной и письменным столом?
"Вот это совсем другой разговор! - подумала Алиса.- Загадки-то я люблю! Поиграем!"
- Кажется, сейчас отгадаю,- прибавила она вслух.
- Ты думаешь, что могла бы отыскать отгадку? - удивленно спросил Заяц...
                 Льюис Керролл "Алиса в стране чудес"

Чем отличается выражение
1)     Entity cowedCrow( 1);
от выражения
2)     Entity desk = 1;
кроме названия объектов, конечно же?
На удивление многие программисты дают неверный ответ. Менее опытные ошибочно полагают, что во втором случае сначала вызывается конструктор без аргументов, а затем оператор присваивания. Более опытные наивно полагают, что данные выражения эквивалентны (по сути, не отличаются). И, наконец, опытные убеждены, что знают правильный ответ, и готовы прекратить чтение статьи.
Что же, попробуем доставить немного удовольствия опытным программистам, а заодно и развеять заблуждения менее опытных.