LINUX.ORG.RU

type cast или конструктор копирования?


0

0

есть такой код:

class AA{
public:
int a;

AA(){
cout << "AA()" << endl;
}

AA(const AA& x){
cout << "const AA()" << endl;
}


operator AA() {
cout << " go AA" << endl;
return AA();
}
};

class BB : public AA{
public:
operator AA() {
cout << " go AA in BB" << endl;
return AA();
}
};

где то в коде...
BB x;
((AA) x);// приводить к вызову конструктора копирования - почему?

потому что x и так типа AA (имеет subobject типа AA), и компилятору незачем заниматься ненужным приведением типов в "(AA) x". Далее объект как обычно копируется, используя конструктор копирования.

Убери наследование от AA, тогда будет вызываться оператор преобразования типов BB::operator AA(). И кстати, в этом случае не факт, что конструктор копирования будет вызван.

alex_custov ★★★★★
()
Ответ на: комментарий от alex_custov

И ИМХО не стоит использовать сишное приведение типов в C++. Лучше использовать *_cast<>().

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.