Тема: Тема для студентов-программистов и желающих им помочь

Ответить в теме
Страница 4 из 10 ПерваяПервая ... 2 3 4 5 6 ... ПоследняяПоследняя
Показано с 61 по 80 из 184
  1. Вверх #61
    Посетитель
    Пол
    Мужской
    Возраст
    47
    Сообщений
    237
    Репутация
    18
    double evaluation


  2. Вверх #62
    Не покидает форум Аватар для Ull9
    Пол
    Мужской
    Адрес
    Мюнхен
    Сообщений
    19,028
    Репутация
    1490
    Right

  3. Вверх #63
    Посетитель
    Пол
    Мужской
    Сообщений
    110
    Репутация
    16
    Цитата Сообщение от Ull9
    Ребята, вы оба неправильно ответили на этот вопрос, вы оба срезались.

    итак смотрим
    i=i+++i,
    вы правильно разболи это на
    (i++) + i,
    но дальше вы допускаете оба ошибку
    в соответствии с (великим, святым) стандартом языка с++.компилятор свободен в порядке вычесления левого аргумента и правого аргумента. Т.е он сначала может выполнить i++, затем i, затем сложить оба значения. А может поступить наоборот
    сначала i, затем i++, затем сложить. резуьтат будет разный.

    правильный ответ звучит так. эта операция даст неопределенный результат.
    может 2 может 3.

    все, срезались учите стандарт.
    интересно, я смотрел как работает gcc, не знал, что есть стандартом допускаеться неопределённость.. тогда такую конструкцию нельзя использовать в принципе, буду знать

    Не контракта ради, если есть ещё пару таких задачек, напиши

  4. Вверх #64
    Не покидает форум Аватар для Ull9
    Пол
    Мужской
    Адрес
    Мюнхен
    Сообщений
    19,028
    Репутация
    1490
    пожалуйста,

    чем operator new отличается от new operator и отличается ли вообще?

  5. Вверх #65
    Не покидает форум Аватар для Ull9
    Пол
    Мужской
    Адрес
    Мюнхен
    Сообщений
    19,028
    Репутация
    1490
    что быстрее
    ++i или i++?

  6. Вверх #66
    Не покидает форум Аватар для Ull9
    Пол
    Мужской
    Адрес
    Мюнхен
    Сообщений
    19,028
    Репутация
    1490
    есть класс
    class MyStrinh
    {
    privat:
    char* p;
    int len;
    public:
    MyString():len(0),p(NULL){}
    };

    деструктор и другие методы для простоты опускаются.
    Напиши copy construktor и assign operator

  7. Вверх #67
    Новичок
    Пол
    Мужской
    Возраст
    42
    Сообщений
    68
    Репутация
    12
    Ull9, Вы утверждаете, что компилятор волен в целях оптимизации выбирать порядок вычислений. Но неужели разработчики стандартов и компиляторов не подумали об этом? Если эти "особенности" стандарта и реализаций всплывают на таких элементарных конструкциях, то представляю, что может быть в более-менее навороченном коде. Теперь я понимаю, почему разработчики игрушек распространяют Debug версии своих творений - там компилятор хоть как-то управляем. А нам парят мозги, что для реализации эффектов нужны более мощьные процы, память. Relese версия просто не собирается или собирается, но не работает.

    это означает, что при одних обстоятельствах (контексте) при выражении
    int i = foo() + boo();
    сначала выполнится foo() потом boo();
    Настолько мне известно, компилятор может переставить эти функции, только если уверен, что это не на что не повлияет. Не знаю, написано ли это в стандарте, но мои чтения RSDN.RU и Криса Касперски (не путать с Евгением Касперским) показали, что компилятор не хочет нарываться на неприятности и поступает естественным образом, тоесть так как ожидается (но наши ожидания не всегда совпадают с разработчиковскими ).
    Вопрос в лоб

    Сами хоть раз встречались с таким поведением компилятора или нет - тоесть, что бы в одном файле он применил два разных способа. Ответы типа "одна бабка сказала" или "известный спец шепнул на ушко" не принимаются. Только исходный код для примера и скомпиленый результат. Не бойся, с дизассемблеров я умею управляться. Скомпиленый результат надо на той случай, если мой компилятор "не правильно скомпилит". pdb файл также не помешает. Пока не увижу - не поверю.
    А пока все Ваши рассуждения о правильности/неправильности похожи на исследования сферического коня в вакууме.

  8. Вверх #68
    Не покидает форум Аватар для Ull9
    Пол
    Мужской
    Адрес
    Мюнхен
    Сообщений
    19,028
    Репутация
    1490
    Вадим, можно на ты.
    <<Ull9, Вы утверждаете, что компилятор волен в целях оптимизации выбирать порядок вычислений. Но неужели разработчики стандартов и компиляторов не подумали об этом?>>
    именно потому что об этом подумали, принято решение не накладывать ограничения на компилятор.

    <<Теперь я понимаю, почему разработчики игрушек распространяют Debug версии своих творений - там компилятор хоть как-то управляем. А нам парят мозги, что для реализации эффектов нужны более мощьные процы, память. Relese версия просто не собирается или собирается, но не работает.>>
    с++, не простой язык, это для больших мальчиков, этим ножечком можно и порезатся, но никто не заставляет, ты можешь поигратся в песочнице пластмассовым совочком (ява).

    <<Настолько мне известно, компилятор может переставить эти функции, только если уверен, что это не на что не повлияет. Не знаю, написано ли это в стандарте,>>
    ну раз ты не знаешь о чем разговор? компилятор может выполнять любой порядок, не обращая внимание на сайд -эффекты.

    <<показали, что компилятор не хочет нарываться на неприятности и поступает естественным образом>> единственная неприятность для компилятора нарушить стандарт. остальное проблемы программиста.

    <<Сами хоть раз встречались с таким поведением компилятора или нет - тоесть, что бы в одном файле он применил два разных способа. Ответы типа "одна бабка сказала" или "известный спец шепнул на ушко" не принимаются. Только исходный код для примера и скомпиленый результат. Не бойся, с дизассемблеров я умею управляться. Скомпиленый результат надо на той случай, если мой компилятор "не правильно скомпилит". pdb файл также не помешает. Пока не увижу - не поверю.
    >>
    Сам не сталкивался, Тк у меня были хорошие учителя. И что значит верю не верю. мне не надо верить, читай стандарт. Например я знаю что австралия есть, но мне и в голову не придет, поехать проверить. есть книги, я им верю.

    Если ты будешь ишодить из принципа ПОKА НЕ УВИЖУ НЕ ПОВЕРЮ, то.... ты выбрал не ту профессию.

    <<А пока все Ваши рассуждения о правильности/неправильности похожи на исследования сферического коня в вакууме.>>

    не смеши. и больше нигде не говори, что веришь только уведенному а не написанному.
    Ты не со мной споришь а со стандартом

  9. Вверх #69
    Не покидает форум Аватар для Ull9
    Пол
    Мужской
    Адрес
    Мюнхен
    Сообщений
    19,028
    Репутация
    1490
    вот нашел ISO Standard C++

    Kнига 5, стих 4

    Except where noted, the order of evaluation of operands of
    individual operators and subexpressions of individual expressions, and
    the order in which side effects take place, is unspecified.

    И все. Точка. Kак выполнять решает компилятор.

    Пример в тему. Kонституция Украины, тоже не определяет с какой ноги тебе утром вставать Ну и что Kонституцию в топку?

  10. Вверх #70
    Посетитель
    Пол
    Мужской
    Сообщений
    110
    Репутация
    16
    Цитата Сообщение от Ull9
    что быстрее
    ++i или i++?
    Теоретически, ++i быстрее. так как i изменяеться по ссылке, хотя с оптимизацией компиляторов, если i типа int, разницы в производительности цикла i++ и ++i не заметил

  11. Вверх #71
    Посетитель
    Пол
    Мужской
    Возраст
    47
    Сообщений
    237
    Репутация
    18
    Цитата Сообщение от KoVadim
    Сами хоть раз встречались с таким поведением компилятора или нет
    тут ты сильно не прав. если твой компилятор успешно компилирует некорректные программы, это не значит что надо их писать. ты проверил все варианты параметров оптимизации ? проверил на других архитектурах ? проверил другие компиляторы ? а еще не вышедшие тоже проверил ?
    между прочим, правильные компиляторы на такое ругаются

  12. Вверх #72
    Не покидает форум Аватар для Ull9
    Пол
    Мужской
    Адрес
    Мюнхен
    Сообщений
    19,028
    Репутация
    1490
    Цитата Сообщение от Konstantin.od
    Теоретически, ++i быстрее. так как i изменяеться по ссылке, хотя с оптимизацией компиляторов, если i типа int, разницы в производительности цикла i++ и ++i не заметил
    правильно, но если i это POD, если это скажем итератор то разница есть, и оптимизатор ее не соптимизирует.
    поэтому лучше писать ++i

  13. Вверх #73
    Новичок
    Пол
    Мужской
    Возраст
    42
    Сообщений
    68
    Репутация
    12
    pal. Надо выбросить компилятор, который компилирует заведомо неверный код. Разработчиков выгнать. Ведь вы не будете доверять человеку, который один раз делает так, а на следующий - по другому.
    Основная идея программирования - что мы можем точно объяснить компьютеру, что же мы хочем на понятном ему языку. Зачем стандарт, который допускает такие глупости. Я не верю, что такое пропустили. Там же не глупцы сидят.
    проверил другие компиляторы ?
    Вот завтра на работе попробую скомпилить под Linux Mandriva 2007 и FreeBSD 6.1, компилятор скорее всего gcc. версию уточню уже по месту.
    По поводу других платформ - у меня нет такой возможности. Но есть идеи. Проверю - расскажу.
    а еще не вышедшие тоже проверил ?
    У меня нет машины времени
    между прочим, правильные компиляторы на такое ругаются
    Опять сферические кони в вакууме. Пример в студию плиз+ссылку, откуда выкачать и проверить. Только не предлагайте такое, что нереально в Одессе сделать - типа мейнфрейме таком-то компилиться.
    ты проверил все варианты параметров оптимизации ?
    Если Вы также уверены в том, что сказал Ull9, пожалуйста приготовьте пример, в котором код
    Код:
    int i=1;
    int j=2;
    int k=i+++j;
    Давал результат не 3, а 2. Для подтверждения принимаются исходники плюс скомпиленый вариант и сопутствующие файлы для отладки (ну что бы я мог убедиться что это всё не подстроено, а действительно правда). Это касается всех, кто убеждён в том, что стандарт так просто допускает двузначности.
    Ull9
    с++, не простой язык, это для больших мальчиков, этим ножечком можно и порезатся, но никто не заставляет, ты можешь поигратся в песочнице пластмассовым совочком (ява).
    Типичная ошибка больших мальчиков. На java не пишу. Маленьким мальчиком себя не считаю, хотя до "больших" наверное далеко. Поэтому считаю это личным оскорблением. Вы не удосужились даже спросить на каком языке я пишу. Плюс ко всему, я обращаюсь на Вы, а в ответ имею ты.
    Если ты будешь ишодить из принципа ПОKА НЕ УВИЖУ НЕ ПОВЕРЮ, то.... ты выбрал не ту профессию.
    Какую я же должен был выбрать? Меня воспитали человеком, который должен проверить. А насчет Австрилии. Можно на худой конец GoogleMap посмотреть. К тому же тут есть другие доказательства - фотографии к примеру, а Вы мне даже фотографий (тобыш скомпилированого кода) не предоставили.
    По поводу Конституции. Мне кажеться пример не слишком удачный - там сказано, что личные свободы не ограничиваются. Поэтому я волен с утра выбирать. И от того, с какой ноги я утром встану и результат моего рабочего дня слабо коррелированны. Но во времена Сталина могли и приписать такое. Он мог.

    Так мне кто то пример кода с сопутствующими файлами приведет?

  14. Вверх #74
    Посетитель
    Пол
    Мужской
    Сообщений
    110
    Репутация
    16
    Если Вы также уверены в том, что сказал Ull9, пожалуйста приготовьте пример, в котором код
    Код:
    int i=1;
    int j=2;
    int k=i+++j;
    Давал результат не 3, а 2. Для подтверждения принимаются исходники плюс скомпиленый вариант и сопутствующие файлы для отладки (ну что бы я мог убедиться что это всё не подстроено, а действительно правда).
    В этом коде нет никакой двузначности, просмотрите внимательно тот пример, для которого результат был неопределён.
    Это касается всех, кто убеждён в том, что стандарт так просто допускает двузначности
    не думаю, что в таком вопросе можно быть 'убеждённым', стандарт либо допускает что либо нет, все закономерности вычисления - дело частного случая, на который нельзя полагаться. Сам удивился этому пару страниц назад. Впрочем, не стыдно, только учусь.
    Я проверил, есть такое, ссылка на стандарт - http://anatolix.naumen.ru/files/book...andard2003.zip, страница 65 по бумажной нумерации. Думаю, этого достаточно, чтобы положить конец этому спору.

  15. Вверх #75
    Посетитель
    Пол
    Мужской
    Возраст
    47
    Сообщений
    237
    Репутация
    18
    ты так ничего и не понял
    компилятор пытается оптимизировать код, чтобы он работал быстрее
    если он не сможет переставлять местами участки, он не сможет оптимизировать. понятно, что если переставлять все, что вздумается, то оно и работать будет потом, как ему вздумается. поэтому стандарт определяет, в каких случаях компилятор свободен в выборе, а в каких нет. если бы ты внимательно изучил язык, ты бы знал, что есть sequence points, ограниченные, в частности && || , ?:
    а вот + ничего не ограничивает
    спор ведешь совершенно никчемный - я уже сказал, что даже если сейчас нет компилятора который скомпилирует какой-то конкретный пример с undefined behavior по другому, это не делает этот пример корректным, потому что завтра такой компилятор может появиться. и он будет соответствовать стандарту, а этот пример - нет. даже если ты будешь очень громко оспаривать существование оптимизирующих компиляторов или стандарта языка

    ну, а в качестве примера
    [pal@underdark tmp]$ cat a.cpp
    #include <iostream>

    int main ( ) {
    int a = 1;
    std :: cout << a + ++ a << std :: endl;
    }
    [pal@underdark tmp]$ g++ -o a -Wall -Werror a.cpp
    cc1plus: warnings being treated as errors
    a.cpp: In function ‘int main()’:
    a.cpp:5: warning: operation on ‘a’ may be undefined

  16. Вверх #76
    Новичок
    Пол
    Мужской
    Возраст
    42
    Сообщений
    68
    Репутация
    12
    pal
    Ваш пример неудачен. Так как играя пробелом, можно получить и не такое в этом примере.
    при таком варианте "a+ + +a" имеем результат 2
    при таком варианте "a++ +a" имеем результат 3
    при таком варианте "a+ ++a" имеем результат 4
    при таком варианте "a+ + +a" имеем результат 2
    при таком варианте "a+++a" имеем законную результат 3
    В данном случае пробел недопустим, так как Вас в школе должны были учить, что пробел допустим только между операторами, а вот сами операторы разрывать нельзя, что Вы и сделали.

  17. Вверх #77
    Не покидает форум Аватар для Ull9
    Пол
    Мужской
    Адрес
    Мюнхен
    Сообщений
    19,028
    Репутация
    1490
    ну и еще одна реплика с моей стороны.
    Цитата Сообщение от KoVadim
    ... Плюс ко всему, я обращаюсь на Вы, а в ответ имею ты.
    в этом топике, мой пост #68
    <<Вадим, можно на ты.>>
    я полагал, что предложив ты, я расчитывал на обоюдность.ну если тебе хочется Вы, то пожалуйста.

    И я полагаю, что Вы на с++ непишите. в противном случае, если вы всетаки на нем пишите, то тем хуже для вас, и еще хуже для тех на кого вы работаете.

    можете спорить дальше, но не со мной, а со Стандартом.

  18. Вверх #78
    Новичок
    Пол
    Мужской
    Возраст
    42
    Сообщений
    68
    Репутация
    12
    Ull9
    Вадим, можно на ты
    Не видел.
    На С++ не пишу, но нелюблю, когда люди доказывают свою правоту, ссылаясь только на стандарт. Человек должен мыслить, иначе он просто никто.

  19. Вверх #79
    Не покидает форум Аватар для Ull9
    Пол
    Мужской
    Адрес
    Мюнхен
    Сообщений
    19,028
    Репутация
    1490
    именно потому что я мыслю, получилось так.
    прочел стандарт, несогласился, подумал, изменил свое мнение и согласился.

    я действительно считаю, что стандарт очень продуман, и конкретно это сделано умно.
    а чтоб доказать свою правоту, надо именно, ссылатся на стандарт. мы спорим о СТАНДАРТИЗИРОВАННОМ продукте (с++), и спор может разрешить только ссылка на стандарт.

  20. Вверх #80
    Не покидает форум Аватар для Ull9
    Пол
    Мужской
    Адрес
    Мюнхен
    Сообщений
    19,028
    Репутация
    1490
    таких случаев, "нелогичности" у с++, десятки, их надо просто знать.
    именно поэтому с++, считается трудным. но взамен разработчик получает гораздо большую мошь
    чем скажем игры в песочнице (java, delphi etc.)


Ответить в теме
Страница 4 из 10 ПерваяПервая ... 2 3 4 5 6 ... ПоследняяПоследняя

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения