Airhand писал(а):Класса конечно, ведь в нём происходит инициализация членов.
Компилятор C++, который при инициализации экземпляра класса не вызывает конструктор??? You can not be serious! (c)
Это же основополагающий момент реализации объектной модели в C++!
BBB писал(а):Компилятор C++, который при инициализации экземпляра класса не вызывает конструктор??? You can not be serious! (c)
Это же основополагающий момент реализации объектной модели в C++!
Это не инициализация экземпляра класса, а пока только выделение памяти под него. Напиши так: tWithInt oWithInt = oWithInt(); чтобы небыло кривотолков и мы закрыли этот вопрос.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Airhand писал(а):Это не инициализация экземпляра класса, а пока только выделение памяти под него. Напиши так: tWithInt oWithInt = oWithInt(); чтобы небыло кривотолков и мы закрыли этот вопрос.
Пипец! Я в шоке от твоих знаний C++! Причем, не каких-то тонких моментов, а самых базовых вещей.
При объявлении в программе экземпляра класса ВСЕГДА вызывается конструктор. (Очень похоже, что у тебя в голове перемешались C++ и Pascal/Delphi).
О твоем "раз.предложении" я вообще молчу. Оно и на взгляд казалось бредовым (с точки зрения синтаксиса), и компилятор это предположение подтвердил, дав ошибку: no match for call to `(tWithInt) ()'
BBB
Да, я ошибся на счёт того, что в классах инты зануляются, но ты тоже неправ, когда говоришь:
При объявлении в программе экземпляра класса ВСЕГДА вызывается конструктор.
Ты знаешь что такое "отложенная компиляция". Это когда не вставляется конструктор (например) до тех пор, пока не будет реального обращения к экземпляру класса. В данном случае это не катит. Всё закрыли вопрос.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Первый раз о таком слышу и ни разу не видел в стандарте. Дай ссылочку почитать. Наверное, у тебя должна быть самописная дока по этой теме, так как Google не справился с поиском определения данного словосочетания. Часто, читая твои посты мне кажется, что ты дома в жуткой секретности, скрывшись подальше от посторонних взглядов, упорно пишешь свой собственный компилятор С++, который поддерживает интуитивные конструкции и работает так, как скажет его господин, а не в соответствии с какими-то глупыми стандартами
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Romeo писал(а):
Первый раз о таком слышу и ни разу не видел в стандарте. Дай ссылочку почитать.
Это не ты писал ?
Romeo писал(а):
Всё дело в оптимизации, которую проводит компилятор. Если мы не создадим ни одного объекта некого класса, то дефолтный конструктор для такого класса не будет сгенерирован, как следствие, в случае, когда мы не определили конструктор в классе Sub, синтаксическая ошибка о том, что Denier: enier не доступен, будет отложена до появления первого объекта типа Sub.
Эко у тебя память отшибло...
Наверное, у тебя должна быть самописная дока по этой теме, так как Google не справился с поиском определения данного словосочетания. Часто, читая твои посты мне кажется, что ты дома в жуткой секретности, скрывшись подальше от посторонних взглядов, упорно пишешь свой собственный компилятор С++, который поддерживает интуитивные конструкции и работает так, как скажет его господин, а не в соответствии с какими-то глупыми стандартами
Не пишу я никакой компилятор, а ты прежде чем других хаять на себя посмотри и вспомни, что ты говорил. Не переходи на личности, а то скатываешся к демагогии.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Airhand,
вообще-то, ты и Romeo пишите о разных вещах:
Airhand писал(а):Ты знаешь что такое "отложенная компиляция". Это когда не вставляется конструктор (например) до тех пор, пока не будет реального обращения к экземпляру класса. В данном случае это не катит. Всё закрыли вопрос.
Romeo писал(а): Если мы не создадим ни одного объекта некого класса
Или поясни, что ты имеешь в виду под "реальныи обращением к экземпляру класса"?
Если, например, я опишу а программе экземпляр некоторого класса, но к этому экземпляру в исх.тексте больше не будет никаких обращений, то что, по твоему, будет происходить?
BBB писал(а):
Или поясни, что ты имеешь в виду под "реальныи обращением к экземпляру класса"?
Если, например, я опишу а программе экземпляр некоторого класса, но к этому экземпляру в исх.тексте больше не будет никаких обращений, то что, по твоему, будет происходить?
Поясняю: если никая функция не вызывается (нестатическая) и членам объекта ничего не присваивается, то компилятор просто не создаёт объект. Т.е. откладывает создание до того момента пока не будет к нему реального обращения.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Airhand писал(а):Поясняю: если никая функция не вызывается (нестатическая) и членам объекта ничего не присваивается, то компилятор просто не создаёт объект. Т.е. откладывает создание до того момента пока не будет к нему реального
обращения.
class tMyClass {
public:
tMyClass ();
private :
int m_i;
};
tMyClass::tMyClass () : m_i (14)
{
// do something here
};
tMyClass oMyClassVar;
// и больше никаких обращений к oMyClass нет.
Правильно ли я понимаю, что ты утверждаешь, что экземпляр oMyClassVar создан не будет и, как следствие, конструктор tMyClass::tMyClass ни разу не вызовется?