Re[3]: какой код эффективнее?
От: CiViLiS Россия  
Дата: 08.09.06 06:20
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Не могу понять почему в случае классов лишний вызов конструктора?

Могу предложить поэксперементировать вот с этим примером:
struct A
{
  A()
    {
     i = -15;
       std::cout << __FUNCTION__ << std::endl;
    }
    int i;
}

struct B
{
   A a;
   B() 
     {  // <- вот здесь инициализируются все поля класса B. То есть вызывается A::A(). 
       std::cout << i << std::endl;
        a.i = 10; // а здесь уже не инициализация, а изменение.
       std::cout << i << std::endl;
     }
}

B b;

Программа выведет

A::A
-15
10


А если немного изменить класс A -- убрать дефолтный конструктор, то есть конструктор без параметров:
struct A
{
  A(int q)
    {
     i = q;
       std::cout << __FUNCTION__ << std::endl;
    }
    int i;
}


то компилятор на ругнется в конструкторе B():

error C2512: 'A' : no appropriate default constructor available


За подробностями лучше почитать Липпмана или Страуструпа. К сожалению сейчас ни того ни другого под рукой нету, поэтому цитаты не приведу. Зато естб стандарт, но там искать влом
... << RSDN@Home 1.2.0 alpha rev. 655>>
"Бог не терпит голой сингулярности" -- Роджер Пенроуз
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.