Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
PointsEqual
ниначмуроФ
839 / 523 / 110
Регистрация: 12.10.2009
Сообщений: 1,915
#1

Вызов конструкторов

16.11.2011, 11:22. Просмотров 1510. Ответов 7
Метки нет (Все метки)

привет

почему здесь вызывается только 1 конструктор?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
using namespace std;
 
class A
{
    public:
        A(){cout << "A()";}
        A(int x){cout<<"A(int)";}
        A(const A&) {cout << "copy";}
};
 
 
int main()
{
 
    A a = A(8);
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2011, 11:22
Ответы с готовыми решениями:

Явный вызов конструкторов перемещения
Для перемещения предлагается такая запись: TYPE a; TYPE b = std::move(a); Но...

Наследование - вызов конструкторов и деструкторов
Делаю два класса - предок и потомок: class class_1_type { private: int...

Вызов конструкторов/деструкторов при наследовании
Объясните пожалуйста, как получается вывод на экран 2531 #include &lt;iostream&gt;...

Вызов лишних конструкторов и деструкторов в std::vector
почему вызывает лишние конструкторы и вообще делает не то, что ожидаешь class...

Наследование конструкторов?
Сдаю лабораторную на тему наследования в С++ : #include &lt;iostream&gt; using...

7
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
16.11.2011, 11:24 #2
Потому что компилятор хитрее программиста.
0
solar_wind
761 / 752 / 58
Регистрация: 06.07.2009
Сообщений: 2,992
Завершенные тесты: 1
16.11.2011, 11:25 #3
PointsEqual, А сколько надо? Какой вызвал, тот и работает....
0
PointsEqual
ниначмуроФ
839 / 523 / 110
Регистрация: 12.10.2009
Сообщений: 1,915
16.11.2011, 11:28  [ТС] #4
Цитата Сообщение от vitaly1981 Посмотреть сообщение
А сколько надо? Какой вызвал, тот и работает
я ожидал A(8) - конструктор с Int
и A a = A(8) - к копирования
0
solar_wind
761 / 752 / 58
Регистрация: 06.07.2009
Сообщений: 2,992
Завершенные тесты: 1
16.11.2011, 11:31 #5
PointsEqual, Компилятор скорее всего просто оптимизировал программу, и поэтому вызвал один конструктор.
0
PointsEqual
ниначмуроФ
839 / 523 / 110
Регистрация: 12.10.2009
Сообщений: 1,915
16.11.2011, 11:31  [ТС] #6
ну или 2 конструктора с int
но не 1
0
Van111
212 / 191 / 22
Регистрация: 03.08.2011
Сообщений: 2,659
Записей в блоге: 12
16.11.2011, 17:00 #7
Цитата Сообщение от PointsEqual Посмотреть сообщение
я ожидал A(8) - конструктор с Int
и A a = A(8) - к копирования
а почему не сделать
C++
1
 A a(8);
0
Сыроежка
Заблокирован
16.11.2011, 17:59 #8
Цитата Сообщение от PointsEqual Посмотреть сообщение
привет

почему здесь вызывается только 1 конструктор?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
using namespace std;
 
class A
{
    public:
        A(){cout << "A()";}
        A(int x){cout<<"A(int)";}
        A(const A&) {cout << "copy";}
};
 
 
 
int main()
{
 
    A a = A(8);
 
    return 0;
}
Согласно стандарту языка С++ компилятору разрешается оптимизировать этот код и вместо вызова двух конструкторовБ конструктора с параметром и копирующего конструктора, компилятору разрешается сразу же создать объект в области принадлежащей переменной a без использования конструктора копирования.

То есть приведенный вами код эквивалентен коду

C++
1
A a( 8 );
Но при этом, чтобы такая оптимизация была выполнена тем не менее конструктор копирования должен быть доступным, даже елси он и не вызывается. Кроме того если в конструкторе копирования у вас есть какие-то побочные эффекты, которые отсутствуют в конструкторе с параметром, то естественно они будут проигнорированы, так как конструктор копирования не будет вызван.
1
16.11.2011, 17:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2011, 17:59

Наследование конструкторов
если при наследовании классов отсутствует конструктор в базовом классе, то что...

Наследование конструкторов
Вопрос по теории наследования: Есть некоторый базовый класс с двумя...

Перегрузка конструкторов
Написал прогу - в зависимости от ввода даты печатает ее в определенном формате:...


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

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

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