![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| AlexNor |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 11.6.2004 Репутация: нет Всего: 2 |
В этом коде при создании обьекта А в принципе должен выполнятся копирующий конструктор, но почему-то не выполняется. Почему? Из-за оптимизации кода компилятором что-ли?
У меня выдаёт: Object A in constructor 0 Object B in copy constructor 1 Вроде в строке "A a = A ();" должно происходить создание временного обьекта которым потом при помоща копирующего конструктора должен инициализироваться a. Но этого не происходит. Где я не прав? --------------------
"... зачем тратить время на учение, если невежество даётся даром..."" .... но невежество обходится, порой, слишком дорого... " |
|||
|
||||
| srd |
|
||||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Нет, в строке "A a = A();" конструктор копирования вызываться не должен. Эта строка эквивалентна строке "A a();" (или "A a;")! При проектировании языка Си++ были приложены усилия для того, чтобы определяемые пользователем типы вели себя, как встроенные. Было бы глупо ожидать, что на строке
будет создаваться временная переменная, а потом её значение записываться в n. Кстати, попробуй написать
-------------------- Не смей читать мою подпись!!! |
||||
|
|||||
| AlexNor |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 11.6.2004 Репутация: нет Всего: 2 |
srd
ну для int да, я согласен - но ведь это простой тип. А с классом: с одной стороны свиду "A a;" и "A a = A()" эквивалентны, но с другой стороны я всё таки пишу не "A a" а именно "A a = A()". "При проектировании языка Си++ были приложены усилия для того, чтобы определяемые пользователем типы вели себя, как встроенные." -> тогда ясно почему именно так реализовали. а почему происходит глюк с n2? --------------------
"... зачем тратить время на учение, если невежество даётся даром..."" .... но невежество обходится, порой, слишком дорого... " |
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
C n2 нет глюка. Конструктор по умолчанию существует для всех простых типов. Я же говорил, что "были приложены усилия, для того, чтобы определяемые пользователем типы вели себя, как встроенные"
Добавлено @ 18:24 Это позволяет писать например так:
Здесь параметром шаблона может быть класс с дефолтным конструктором, а может быть простой тип. -------------------- Не смей читать мою подпись!!! |
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Обрати внимание на вывод этой программы. При создании переменной класса дефолтный конструктор вызывается в любом случае и при первой форме записи и при второй. А для простой целой переменной в первом случае конструктор не вызывается, а во втором - вызывается, и он инициализирует значение переменной. Забавно, да? -------------------- Не смей читать мою подпись!!! |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |