Re: Помогите Исправить Ошибки в Программе
Добавлено: 09 окт 2009, 14:40
Airhand, я так и не осилил понять, что ты от меня хочешь.
Я от тебя хочу очень простую вещь: приведи пример того, как по-твоему компилятор "неверно" понимает твой код.BBB писал(а):Airhand, я так и не осилил понять, что ты от меня хочешь.
Например, если бы в описанной мной ситуации. Объявлен статический экземпляр класса, но, когда программа запустится, окажется, что никакого экземпляра вообще нет, а нужный мне код, находящийся в конструкторе этого каласса, не выполняется.Airhand писал(а):Я от тебя хочу очень простую вещь: приведи пример того, как по-твоему компилятор "неверно" понимает твой код.
Я просил пример того, как действия с членами класса не позволяют что-то сделать и обращения во вне нет. Я писал:BBB писал(а):Например, если бы в описанной мной ситуации. Объявлен статический экземпляр класса, но, когда программа запустится, окажется, что никакого экземпляра вообще нет, а нужный мне код, находящийся в конструкторе этого каласса, не выполняется.
Объясни , где тут указания на функции не члены класса. Я, наверное, не чётко выразился: не должно быть любого обращение к наруже класса, т.е. функций-не членов класса и вызываемых внутри функций-членов "внешних" функций. Твой пример не подходит.Airhand писал(а):если никая функция не вызывается (нестатическая) и членам объекта ничего не присваивается, то компилятор просто не создаёт объект. Т.е. откладывает создание до того момента пока не будет к нему реального обращения.
Вообще-то, в самой последней "просьбе" содержалось вот это:Airhand писал(а):Я просил пример того, как действия с членами класса не позволяют что-то сделать и обращения во вне нет.
Не можешь привести пример. А как выпендривался. Съезжаешь на то, что это дескать - неинтересно. А когда начинал спор это было интересно ?BBB писал(а): А вообще говоря, утомил ты уже. Теоретизировать на тему "как бы мог выглядеть плохой компилятор" мне, признаться, совершенно неинтересно.
Не совсем правы оба. При объявлении статического экземпляра конструктор вызывается, но при динамическом выделении памяти под экземляр с посмощью malloc, calloc, или realloc не вызывается. Так как один говорит о выделении памяти, а другой об объявлении экземпляра, то если ваши высказывания раздлить по разным темам, то будете правы оба. Обоюдная ошибка в том, что пытаетесь спорить, не потрудившись понять друг друга.Airhand писал(а):BBB
Да, я ошибся на счёт того, что в классах инты зануляются, но ты тоже неправ, когда говоришь: Ты знаешь что такое "отложенная компиляция". Это когда не вставляется конструктор (например) до тех пор, пока не будет реального обращения к экземпляру класса. В данном случае это не катит. Всё закрыли вопрос.
В стандарте такого нет и врядли будет. Но отложенная компиляция все таки не вымысел. Некоторые компиляторы пытаются таким образом оптимизировать сам процесс компиляции, вставляя вызов конструктора непосредственно перед первым обращением к обекту, отличным от его декларации. Но и в этом случае для объявленного статического экземпляра гарантированно вызывается конструктор. Так что не имеет занчения, отложенная у тебя компиляция, или обычная, результат будет одни. Меняется лишь относительный порядок тех операций, порядок которых произволен по смыслу исходника. сравните:" писал(а):отложенная компиляция
Первый раз о таком слышу и ни разу не видел в стандарте.
Код: Выделить всё
int a;
int b;
int c;
a=2;
b=23;
c=a+b;
Код: Выделить всё
int a;
int b;
int c;
b=23;
a=2;
c=a+b;
Разве это бочка на старые компиляторы? Читать научись. BBB как раз пишет, что старый компилятор его вполне устраивает." писал(а):Твои слова:
Эээ... MS VC 6.0 компилил так, что меня вполне устраивало, и, более того, казалось логичным с точки зрения здравой логики. Т.е. он компилил вполне, "как я хочу"
Ты не понял о чём спор и уже подпрягаешся.atavin-ta писал(а):Не совсем правы оба. При объявлении статического экземпляра конструктор вызывается, но при динамическом выделении памяти под экземляр с посмощью malloc, calloc, или realloc не вызывается. Так как один говорит о выделении памяти, а другой об объявлении экземпляра, то если ваши высказывания раздлить по разным темам, то будете правы оба. Обоюдная ошибка в том, что пытаетесь спорить, не потрудившись понять друг друга.
Сам читать научись. Мы спорили о том, что ВВВ говорит будто не сушествует отложеной компиляции, а я говорю, что существует.Разве это бочка на старые компиляторы? Читать научись.
Гварды, это классы, которые делают в конструкторе некие действия, а в деструкторе делают действия обратные действиям конструктора. Образовывайся понемногу, книжки читай." писал(а):Изъясняйся яснее. Что ты имееш ввиду под гвардами ? Если стражи включения, то там работает препроцессор.
Код: Выделить всё
class CCOMInitializerGuard
{
public:
CCOMInitializerGuard()
{
::CoInitialize(NULL);
}
~CCOMInitializerGuard()
{
::CoUninitialize();
}
};
void main()
{
CCOMInitializerGuard comGuard;
// Any action that needs COM to be initialized
_bstr_t bstrString = OLESTR("OLE string");
std::cout << bstrString << std::endl;
}