Информация об изменениях

Сообщение Re: Адрес конструктора от 10.07.2019 15:22

Изменено 10.07.2019 15:24 rg45

Re: Адрес конструктора
Здравствуйте, nen777w, Вы писали:

N>По каким соображением в С++ запретили брать адрес конструктора, если по сути он есть обычная функция?

N>И есть ли возможность таки этот адрес получить?

В том-то и дело, что конструкторы — это не обычные функции, а специальные. Кострукторы не имеют имен, и используются только для инициализации объеков. Повторный вызов конструктора для объекта недопустим и не возможен (не путать с inplace конструированием, которое является инициализацией НОВОГО объекта с повторым использованием хранилища (storage)). В то же время указатели на функции-члены подразумевают использование с инициализированными объектами, что идет в разрез с требованиями, предъявляемыми к конструкторам.

15.1 Constructors
2 A constructor is used to initialize objects of its class type. Because constructors do not have names, they are never found during name lookup; however an explicit type conversion using the functional notation (8.2.3) will cause a constructor to be called to initialize an object. [ Note: For initialization of objects of class type see 15.6. —end note ]

Re: Адрес конструктора
Здравствуйте, nen777w, Вы писали:

N>По каким соображением в С++ запретили брать адрес конструктора, если по сути он есть обычная функция?

N>И есть ли возможность таки этот адрес получить?

В том-то и дело, что конструкторы — это не обычные функции, а специальные. Кострукторы не имеют имен, и используются только для инициализации объеков. Повторный вызов конструктора для объекта недопустим и невозможен (не путать с inplace конструированием, которое является инициализацией НОВОГО объекта с повторым использованием хранилища (storage)). В то же время указатели на функции-члены подразумевают использование с инициализированными объектами, что идет в разрез с требованиями, предъявляемыми к конструкторам.

15.1 Constructors
2 A constructor is used to initialize objects of its class type. Because constructors do not have names, they are never found during name lookup; however an explicit type conversion using the functional notation (8.2.3) will cause a constructor to be called to initialize an object. [ Note: For initialization of objects of class type see 15.6. —end note ]