Вот решил создать тему для студентов:good: пишите
Вид для печати
Вот решил создать тему для студентов:good: пишите
Пока сам себе не поможешь никто тебе не поможет :)
[QUOTE=pavlentus]Пока сам себе не поможешь никто тебе не поможет :)[/QUOTE]
Да я не к тому чтобы мне ктото помагал:stop: (Сам не дурак) просто думал если студенты смотрят этот раздел обсудить с ними вопросы связанные с программированием, трудоустройством, учебой итп Например выбор языка для изучения
Ну ява щас ликует по городу, так же популярной становиться технология Ajax. Тебе выбирать.
[QUOTE=pavlentus]Ну ява щас ликует по городу, так же популярной становиться технология Ajax. Тебе выбирать.[/QUOTE]
А в луксофте, текинсайте, комодо логике вроде сишники нужны (производительность у С побольше будет :)) а что такое Аякс?
[QUOTE=THRESHE]А в луксофте, текинсайте, комодо логике вроде сишники нужны (производительность у С побольше будет :)) а что такое Аякс?[/QUOTE]
По поводу аякса почитай на ajaxian.com
Мне Си не по вкусу, правда С# нравиться, т.к. на яву похож, в общем в основном нужны такие вещи для работы:
1) Знание языка (С#, Java, C++, VB.net иногда хотят)
2) Знание какой-нибудь субд, лучше (Лучше Oracle, MSSQL Server или самой высокооплачиваемой SAP)
3) Знание линухи, чем больше команд тем лучше
4) Умение разрабатывать веб-приложения (Ajax)
Java - лидер по популярности в городе,
Oracle среди высокооплачиваемых СУБД выбирать тебе.
Спасибо за совет:good: . Вопрос а сколько уйдет на изучение всего этого времени ? И как лучше обучатся дома или на курсах так как в институте нифига путного не дают ?:search:
[QUOTE=THRESHE]Спасибо за совет:good: . Вопрос а сколько уйдет на изучение всего этого времени ? И как лучше обучатся дома или на курсах так как в институте нифига путного не дают ?:search:[/QUOTE]
Начни с книг, а там сам по опыту увидишь, когда прийдешь в универ увидишь те же книги в виде предметов.
[QUOTE=pavlentus]Начни с книг, а там сам по опыту увидишь, когда прийдешь в универ увидишь те же книги в виде предметов.[/QUOTE]
Всмысле прийду ? я уже 3 курс:rtfm: :rolleyes:
[QUOTE=THRESHE]Всмысле прийду ? я уже 3 курс:rtfm: :rolleyes:[/QUOTE]
Я тебя поздравляю :sarcastic_hand:
[QUOTE]так как в институте нифига путного не дают ?[/QUOTE]
Как раз там даёт базу. Надо только брать. А многие отказываются. Да кстати, блоксхемы, которые никто не любит советую всё же чертить. Они не зависят от языка и формируют алгоритмическое мышление. В дальнейшем они будут в башке чертиться.
Вопрос по MFC. Почему не пашет ? Если ставлю просто заглушку для ON_WM_SYSCOMMAND тогда нормально. А если пытаюся поменять функции свернуть на расширить нет.
void CMainFrame::OnSysCommand (UINT nFlags, CPoint point)
{
switch ( nFlags )
{
case SC_CLOSE :
{
CWnd::OnSysCommand ( SC_MAXIMIZE, point.x ) ;
//AfxMessageBox ("SC_CLOSE") ;
break ;
}
case SC_MAXIMIZE :
{
CWnd::OnSysCommand ( SC_MAXIMIZE, point.x ) ;
//AfxMessageBox ("SC_MAXIMIZE") ;
break ;
}
case SC_MINIMIZE :
{
CWnd::OnSysCommand ( SC_MAXIMIZE, point.x ) ;
//AfxMessageBox ("SC_MINIMIZE") ;
break ;
}
}
}:search:
THRESHE
Если это было бы Делфи, то я сказал бы, что необходимо else часть у CASE (для С++ это default для switch) где вызывать методы предка. Вы ведь точно не все варианты обрабатываете
[CODE]case SC_CLOSE :
{
CWnd::OnSysCommand ( SC_MAXIMIZE, point.x ) ;
//AfxMessageBox ("SC_CLOSE") ;
break ;
}[/CODE]
Тут точно всё нормально?
[QUOTE=KoVadim]
[CODE]case SC_CLOSE :
{
CWnd::OnSysCommand ( SC_MAXIMIZE, point.x ) ;
//AfxMessageBox ("SC_CLOSE") ;
break ;
}[/CODE]
Тут точно всё нормально?[/QUOTE]
Тут нормально так как при нажатии крестика на панели окна посылается сообщение WM_SYSCOMMAND где nFlags = SC_CLOSE.:dry:
тьфу, я не заметил что там коментарий.
Но нужно все варианты событий обработать либо вызвать обработчик по умолчанию для необработаных
[QUOTE=KoVadim]тьфу, я не заметил что там коментарий.
Но нужно все варианты событий обработать либо вызвать обработчик по умолчанию для необработаных[/QUOTE]
Попробовал поставить default всё равно не пашет:( :(
Для студентов, желающих себе помочь:
[URL="http://www.goldenstages.ru/downloads/job_for_tech.pdf"]http://www.goldenstages.ru/downloads/job_for_tech.pdf[/URL]
[QUOTE=pavlentus]Для студентов, желающих себе помочь:
[URL="http://www.goldenstages.ru/downloads/job_for_tech.pdf"]http://www.goldenstages.ru/downloads/job_for_tech.pdf[/URL][/QUOTE]
Спасибо за совет:D Почитаю. Кстати с твоей подачи решил выучить Oracle и Ajax :)
[QUOTE=THRESHE]Спасибо за совет:D Почитаю. Кстати с твоей подачи решил выучить Oracle и Ajax :)[/QUOTE]
Надеюсь тебе поможет, но не забывай, что при преме на работу требуют изначально базовые знания.
насколько реально выучить дома java ajax ?
и как доказать работодателю что ты это знаешь без диплома
[QUOTE=Suicide]наскольо реально выучить дома java ajax ?
и как доказать работодателю что ты это знаешь без диплома[/QUOTE]
Ставя задачи, близкие к реальным, например спроектировав какую - нить прогу типа калькулятора, а дальше - сложнее.
[QUOTE=Suicide]насколько реально выучить дома java ajax ?
и как доказать работодателю что ты это знаешь без диплома[/QUOTE]
1. Все реально. Результат зависит от желания и приложеных усилий.
2. Свои и коллективные проекты, собеседования, результаты тестов ([URL="http://www.brainbench.com/"]www.brainbench.com[/URL] например).
[QUOTE='x[82]']1. Все реально. Результат зависит от желания и приложеных усилий.
2. Свои и коллективные проекты, собеседования, результаты тестов ([URL="http://www.brainbench.com/"]www.brainbench.com[/URL] например).[/QUOTE]
Интересно а можно гдето скачать тест по Brainbench ?
[QUOTE=THRESHE]Интересно а можно гдето скачать тест по Brainbench ?[/QUOTE]
На сайте есть бесплатный тест по Java 5, если пороешся, может еще чего-нибудь найдешь.
[QUOTE=pavlentus]На сайте есть бесплатный тест по Java 5, если пороешся, может еще чего-нибудь найдешь.[/QUOTE]
По Java давно есть бесплатный, а вот если хочеш по С++ плати 50$:(
[QUOTE=THRESHE]По Java давно есть бесплатный, а вот если хочеш по С++ плати 50$:([/QUOTE]
по ройся в осле, там сертификационного материала валом
here is a simplest test of c++ :-)
what value of i will be, after the following code?
int i=1;
i=i+++i;
[QUOTE=Ull9]here is a simplest test of c++ :-)
what value of i will be, after the following code?
int i=1;
i=i+++i;[/QUOTE]
я считаю что это сертификация вообще нафиг не нужна, только понты для начальства.
не прав, еслиб начальство спрашивало такие вопросы много проблем бы потом отпало бы.
Что важнее опыт работы или тесты?
одно без другого не бывает. не надо или. должно быть и
если ц++ не ответит тебе правильно на этот вопрос, значит он незнает ц++, а об опыте он чешет.
вообще конечно надо таких вопросов с десяток спросить и все будет ясно.
Что все?
АБСОЛЮТНО все
[QUOTE=pavlentus]по ройся в осле, там сертификационного материала валом[/QUOTE]
Где где ?:search:
[QUOTE=pavlentus]Что важнее опыт работы или тесты?[/QUOTE]
Опыт работы! 100% Без него никуда :) А успешные результаты тестов будут плюсом. Brainbench просто известен по всему миру, поэтому его и назвал. Лучше конечно спецтестики от производителя. По Java, нипример, сертификация Sun.
Кстати на Brainbench раз в год проводятся "игры". В это время там все тесты бесплатные. Постоянно всякие акции проходят, скидки дают на тесты, на сертификаты и т.п. Приглашения приходят от работодателей. Вобщем лишним не будет. Да и самому свои знания проверить тоже дело не лишнее.
Заходите, регистрируетесь. Вам дают свой транскрипт id. Его потом шлете работодателю и он может глянуть чего вы там натестили. Вобщем успехов ;)
[QUOTE='x[82]']Опыт работы! 100% Без него никуда :) А успешные результаты тестов будут плюсом. ;)[/QUOTE]
несогласен. что такое опыт работы? количество лет проведенных там то и там то? участие в таких то проектах, работа в таких то компаниях.
ничего он не значит. видал я "специалистов" с таким послужным списком, конфетка. Ну и что?
начинаю с ним работать. вижу чушь пишет. говорю ерунду пишешь. непонимает, упирается.
доходим до элементарных вещей НЕ ЗНАЕТ! опыт этот, как диплом советский. ну отсидел (может быть) пять лет студентом
гарантий знаний никаких.
если мало времени, только тест поможет. а потом список где и сколько работал.
еще пример
чем плох макрос?
#define MAX(a,b) ((a)<(b))? (b) : (a)
[QUOTE='x[82]'] Лучше конечно спецтестики от производителя. По Java, нипример, сертификация Sun.[/QUOTE]
не везде производитель есть. у с++ нет.
[QUOTE=Ull9]несогласен. что такое опыт работы? количество лет проведенных там то и там то? участие в таких то проектах, работа в таких то компаниях.
ничего он не значит. видал я "специалистов" с таким послужным списком, конфетка. Ну и что?
начинаю с ним работать. вижу чушь пишет. говорю ерунду пишешь. непонимает, упирается.
доходим до элементарных вещей НЕ ЗНАЕТ! опыт этот, как диплом советский. ну отсидел (может быть) пять лет студентом
гарантий знаний никаких.
если мало времени, только тест поможет. а потом список где и сколько работал.
еще пример
чем плох макрос?
#define MAX(a,b) ((a)<(b))? (b) : (a)
не везде производитель есть. у с++ нет.[/QUOTE]
Сразу видно, что у тебя математический склад ума.
THRESHE, скачивай все из программы EmulePlus. Там литературы валом.
[QUOTE=Ull9]несогласен. что такое опыт работы? количество лет проведенных там то и там то? участие в таких то проектах, работа в таких то компаниях.
ничего он не значит. видал я "специалистов" с таким послужным списком, конфетка. Ну и что?
начинаю с ним работать. вижу чушь пишет. говорю ерунду пишешь. непонимает, упирается.
доходим до элементарных вещей НЕ ЗНАЕТ! опыт этот, как диплом советский. ну отсидел (может быть) пять лет студентом
гарантий знаний никаких.
если мало времени, только тест поможет. а потом список где и сколько работал.
еще пример
чем плох макрос?
#define MAX(a,b) ((a)<(b))? (b) : (a)
не везде производитель есть. у с++ нет.[/QUOTE]
Возможно, макрос плох тем, что он не работает ? :) и тем, что это макрос :)
#define max(a, b) ((a) < (b) ? (b) : (a))
[QUOTE=Konstantin.od]Возможно, макрос плох тем, что он не работает ? :) и тем, что это макрос :)
#define max(a, b) ((a) < (b) ? (b) : (a))[/QUOTE]
поясни.
[QUOTE=Ull9]поясни.[/QUOTE]
Я имею в виду то, что он работает не во всех случаях. Например,
#include <iostream>
#define MAX(a,b) ((a)<(b))?(b):(a)
using namespace std;
int main(){
int a = MAX(5,100)*39;
cout <<a<<endl;
}
$ ./macros
100
вместо ожидаемого 3900 :)
если использовать запостенный мной макрос :
#define max(a, b) ((a) < (b) ? (b) : (a))
$ ./macros
3900
Хотя это до сих пор макрос и здесь тоже можно создать ситуацию, когда он будет работать не так, как ожидаеться
Продолжаем тему для студентов......
[I]
[B]Программист-стажер[/B]
Для работы в проектах по разработке и внедрению ERP систем мы ищем желающих учиться и быть лучшими!
Требования:
- базовые знания теории БД;
- базовые знания SQL;
- опыт разработки программного обеспечения.
Резюме слать в [email][email protected][/email] Олегу Эдуардовичу
[/I]
Константин, правильно.
вот еще ситуация когда он не будет работать
int j,i=1;
j=MAX(i,++i);
а на первый мой вопрос можешь ответить?
у меня еще таких штук восемь.
если да, то контракт у тебя в кармане. :-)
[quote=Ull9]
а на первый мой вопрос можешь ответить?
[/quote] Этот ??[quote]
here is a simplest test of c++ :)
what value of i will be, after the following code?
int i=1;
i=i+++i;[/quote]
i+++i эквивалентно (i++)+i
ответ писать ?? :)
[quote]
у меня еще таких штук восемь.
если да, то контракт у тебя в кармане. :-)[/quote] хм .. я всегда считал, что на собеседовании вопросы задают посущественнее..
или тут вся соль в слове "контракт" :)
[QUOTE=Пилигрим]Этот ??
i+++i эквивалентно (i++)+i
ответ писать ?? :)
[/QUOTE]
напиши ответ, напиши.
а я посмотрю, посчитаю сам и проверю.
[QUOTE=Пилигрим]
хм .. я всегда считал, что на собеседовании вопросы задают посущественнее..
[/QUOTE]
а ты ответь сначала, а потом будешь судить о существенности вопроса.
[QUOTE=Ull9]напиши ответ, напиши.
а я посмотрю, посчитаю сам и проверю.[/QUOTE]
тогда выполняю роль дебаггера :
int i=1;
i=i+++i разбивается на следущие этапы:
i++ - результат =1, i после этой операции =2
далее
1+2
и того
"value of i will be" 3.
З.Ы. на такие вещи, как ни странно, у нас в универе еще на 1-ом курсе на лекция обращали внимание...
З.Ы.Ы. блин какой же хреновый резалт выходит, когда надо что-то СРОЧНО написать на ++, а последнюю прогу на ++ писал почти пол года назад...
[QUOTE] а ты ответь сначала, а потом будешь судить о существенности вопроса.[/QUOTE]
Существенность этого вопроса - знание приоритетов операций в ++(уровней которых, если мне не изменят моск, 11 кажись в ++)
Подскажите пожалуйста где можно достать исходник IDEA на VSC++? Если у кого-нибудь есть сбросьте плиз на ящик.
[QUOTE=Ull9]Константин, правильно.
вот еще ситуация когда он не будет работать
int j,i=1;
j=MAX(i,++i);
а на первый мой вопрос можешь ответить?
у меня еще таких штук восемь.
если да, то контракт у тебя в кармане. :-)[/QUOTE]
Попробую))
here is a simplest test of c++
what value of i will be, after the following code?
int i=1;
i=i+++i;
Интересная ситуация, и дело здесь не только в приоритете, но и в разбивке при лексическом анализе. Честно говоря, я только смутно что-то помнил об этом, и засомневался в решении Piligrim. Этот пример заставил меня скачать стандарт iso c++
[url]http://anatolix.naumen.ru/files/books/CPPStandard2003.zip[/url]
страница 11(по оглавлению стандарта)
В общем, если у нас непрерывная строка - i+++i, то после "i" следующий обрабатываемый токен - максимальный, который можно сформировать;
то есть i+++i = i++ + i;
чтобы наглядно убедиться в этом,
int i = 2
int a = 12
i = a+++i;
cout <<"a = " <<a<<"i = "<<i<<endl;
a = 13 i = 14
решение Piligrim даёт правильный ответ, но по поводу приоритетов :
[quote]
тогда выполняю роль дебаггера :
int i=1;
i=i+++i разбивается на следущие этапы:
i++ - результат =1, i после этой операции =2
далее
1+2
и того
"value of i will be" 3.
[/quote]
насколько я понимаю, вначале вычисляеться
1+1, затем после выражения инкремент i: 2+1;
здесь это не имеет значения, но в приведённом мной примере a+++i твой порядок вычислений приведёт к неверному результату :
a++ - результат = 12, после этой операции 13
далее
13 + 2
и того
"value of i will be" 15, откомпилированная программа выдаст другой результат
[quote=Hunter_83]Подскажите пожалуйста где можно достать исходник IDEA на VSC++? Если у кого-нибудь есть сбросьте плиз на ящик.[/quote]
мне тоже интересно, где сожно скачать исходники IDEA, которая продаеть по 400$ :)(если имелось ввиду IntelliJ IDEA)
[QUOTE]
Интересная ситуация, и дело здесь не только в приоритете, но и в разбивке при лексическом анализе. Честно говоря, я только смутно что-то помнил об этом, и засомневался в решении Piligrim. Этот пример заставил меня скачать стандарт iso c++
[/QUOTE]
ну так я стандарт iso c++ не курил, а всего лишь Страуструпа.. :(
Теперь буду знать [I]правильный[/I] ответ на такой вопрос.
Ull9 жги дальше
Ребята, вы оба неправильно ответили на этот вопрос, вы оба срезались.
итак смотрим
i=i+++i,
вы правильно разболи это на
(i++) + i,
но дальше вы допускаете оба ошибку
в соответствии с (великим, святым) стандартом языка с++.компилятор свободен в порядке вычесления левого аргумента и правого аргумента. Т.е он сначала может выполнить i++, затем i, затем сложить оба значения. А может поступить наоборот
сначала i, затем i++, затем сложить. резуьтат будет разный.
правильный ответ звучит так. эта операция даст неопределенный результат.
может 2 может 3.
все, срезались :-) учите стандарт.
Ull9, Если бы я был у тебя на собеседовании, то тебе пришлось ответить на один маленький вопрос. Раз ты говоришь, что стандарт позволяет двоякое толкования выражения, то в топку стандарт. (извините за такое слово). Хотя я не знаю ни одного компилятора, который бы выполнял стандарт.
Поэтому, нужно говорить так: так как стандарт допускает разное толкование, но компиляторы (точнее их создатели) вольны выбирать одно с решений. (Компилятор, который дает при каждой компиляции разный результат нам не нужен.) Поэтому говорим так. Компилятор от MS (VS2005) даст результат 3. Тоже запоет нам и Борландовский (BDS2006).
Это навело меня на одну мысль. Я вспомнил книгу Страуструпа, где было сказано, что если есть неоднозначность трактовки, то применяется правило "слева направо". Тогда все стает на свои места. Жаль я сейчас не могу проверить другие компиляторы, но при первой возможности сделаю. Хочеться попробывать скомпилить под FreeBSD (gcc).
раз так хорошо знаеш стандарты и поведение компиляторов, расскажи о результате следующего выражения
int i=1;
int j=10;
int q=i+++++j;
[QUOTE=Ull9]вот еще ситуация когда он не будет работать
int j,i=1;
j=MAX(i,++i);
а на первый мой вопрос можешь ответить?
[/QUOTE]
странно, что ты можешь ответить на первый вопрос, но приводишь тут пример, который не будет работать по той же самой причине, даже если MAX будет функцией
[QUOTE=KoVadim]расскажи о результате следующего выражения
int i=1;
int j=10;
int q=i+++++j;[/QUOTE]
если тебя интересует разбивка на лексемы, то таким же, как и i ++ ++ + j
а если интересно, почему это не соберется, то потому, что постфиксный инкремент получает lvalue, а возвращает rvalue
момент, пока я ездил в универмаг вы тут наворочали, давайте попорядку.
[QUOTE=KoVadim]Ull9, Если бы я был у тебя на собеседовании, то тебе пришлось ответить на один маленький вопрос. Раз ты говоришь, что стандарт позволяет двоякое толкования выражения, то в топку стандарт. (извините за такое слово).;[/QUOTE]
я не говорил что стандарт позволяет двоякое толкование, я говорил что стандарт оставляет на усмотрение компилятора, что выполнить первым.
как компилятор захочет, исходя из своих соображений, так он и поступит.программист, должен это знать и писать код так, чтоб у компилятора небыло возможности создать неправильный результат.
например
int i = 1;
int j = i++;
i=i+j;
при таком коде компилятор даст всегда однозначный результат.
[QUOTE=KoVadim] Хотя я не знаю ни одного компилятора, который бы выполнял стандарт.[/QUOTE]
Полностью стандарт выполняет кажется цомпилятор фирмы комо. Что касается нашего случая, то многие компиляторы это делают. например
VS7, gcc. HP aCC.
[QUOTE=KoVadim]
Поэтому, нужно говорить так: так как стандарт допускает разное толкование, но компиляторы (точнее их создатели) вольны выбирать одно с решений. (Компилятор, который дает при каждой компиляции разный результат нам не нужен.);[/QUOTE]
не так! есть одна тонкость. Стандарт оставляет свободу компилятору в принятии решения. Авторы компилятора такую свободу дают ему.
это означает, что при одних обстоятельствах (контексте) при выражении
int i = foo() + boo();
сначала выполнится foo() потом boo();
при другом контексте эта же самая строка, развернется компилятором подругому. компилятор ради оптимизации свободен как ему это делать.
[QUOTE=KoVadim]У Поэтому говорим так. Компилятор от MS (VS2005) даст результат 3. Тоже запоет нам и Борландовский (BDS2006).
[/QUOTE]
Ты не можешь этого знать, в твоем коде ты создал такой контекст, что компилятор сгенерил код так, нельзя исключать что в другом контексте тот же самый компилятор, возможно несколько строк ниже не сгенерит обратное. еще раз, нужно писать так чтоб компилятор всегда давал один и тот же результат. и ТОЧKА. хватит об этом
[QUOTE=pal]странно, что ты можешь ответить на первый вопрос, но приводишь тут пример, который не будет работать по той же самой причине, даже если MAX будет функцией[/QUOTE]
не понял твоей реплики
это ты пробелы передвинул
[QUOTE=Ull9]не понял твоей реплики[/QUOTE]
моя реплика стостояла в том, что если MAX является функцией и не страдает от double evaluation, результат MAX(i,++i) все равно неопределен, потому что аргументы можно вычислить в любом порядке
да верно
ну можно сказать так
int i=1,j=2;
MAX (i++,j);
здесь уже ошибка. и ошибка именно связаная с природой макроса.
и кстати МАХ не функция, если уж на то пошло.
вот я и удивлялся, зачем в качестве примера недостатков макросов по сравнению с функциями приводить пример, неработающий и с функциями тоже
[QUOTE=pal]вот я и удивлялся, зачем в качестве примера недостатков макросов по сравнению с функциями приводить пример, неработающий и с функциями тоже[/QUOTE]
ну а скажи если изменить пример как я до этого показал,
теперь вопрос.
какие ты видишь проблемы с макросом?
double evaluation
Right
[QUOTE=Ull9]Ребята, вы оба неправильно ответили на этот вопрос, вы оба срезались.
итак смотрим
i=i+++i,
вы правильно разболи это на
(i++) + i,
но дальше вы допускаете оба ошибку
в соответствии с (великим, святым) стандартом языка с++.компилятор свободен в порядке вычесления левого аргумента и правого аргумента. Т.е он сначала может выполнить i++, затем i, затем сложить оба значения. А может поступить наоборот
сначала i, затем i++, затем сложить. резуьтат будет разный.
правильный ответ звучит так. эта операция даст неопределенный результат.
может 2 может 3.
все, срезались :-) учите стандарт.[/QUOTE]
интересно, я смотрел как работает gcc, не знал, что есть стандартом допускаеться неопределённость.. тогда такую конструкцию нельзя использовать в принципе, буду знать
Не контракта ради, если есть ещё пару таких задачек, напиши :)
пожалуйста,
чем [b]operator new[/b] отличается от [b]new operator[/b] и отличается ли вообще?
что быстрее
++i или i++?
есть класс
class MyStrinh
{
privat:
char* p;
int len;
public:
MyString():len(0),p(NULL){}
};
деструктор и другие методы для простоты опускаются.
Напиши copy construktor и assign operator
Ull9, Вы утверждаете, что компилятор волен в целях оптимизации выбирать порядок вычислений. Но неужели разработчики стандартов и компиляторов не подумали об этом? Если эти "особенности" стандарта и реализаций всплывают на таких элементарных конструкциях, то представляю, что может быть в более-менее навороченном коде. Теперь я понимаю, почему разработчики игрушек распространяют Debug версии своих творений - там компилятор хоть как-то управляем. А нам парят мозги, что для реализации эффектов нужны более мощьные процы, память. Relese версия просто не собирается или собирается, но не работает.
[QUOTE]это означает, что при одних обстоятельствах (контексте) при выражении
int i = foo() + boo();
сначала выполнится foo() потом boo();[/QUOTE]
Настолько мне известно, компилятор может переставить эти функции, только если уверен, что это не на что не повлияет. Не знаю, написано ли это в стандарте, но мои чтения RSDN.RU и Криса Касперски (не путать с Евгением Касперским) показали, что компилятор не хочет нарываться на неприятности и поступает естественным образом, тоесть так как ожидается (но наши ожидания не всегда совпадают с разработчиковскими :) ).[B]
Вопрос в лоб[/B]
Сами хоть раз встречались с таким поведением компилятора или нет - тоесть, что бы в одном файле он применил два разных способа. Ответы типа "одна бабка сказала" или "известный спец шепнул на ушко" не принимаются. Только исходный код для примера и скомпиленый результат. Не бойся, с дизассемблеров я умею управляться. Скомпиленый результат надо на той случай, если мой компилятор "не правильно скомпилит". pdb файл также не помешает. Пока не увижу - не поверю.
А пока все Ваши рассуждения о правильности/неправильности похожи на исследования сферического коня в вакууме.
Вадим, можно на ты.
<<Ull9, Вы утверждаете, что компилятор волен в целях оптимизации выбирать порядок вычислений. Но неужели разработчики стандартов и компиляторов не подумали об этом?>>
именно потому что об этом подумали, принято решение не накладывать ограничения на компилятор.
<<Теперь я понимаю, почему разработчики игрушек распространяют Debug версии своих творений - там компилятор хоть как-то управляем. А нам парят мозги, что для реализации эффектов нужны более мощьные процы, память. Relese версия просто не собирается или собирается, но не работает.>>
с++, не простой язык, это для больших мальчиков, этим ножечком можно и порезатся, но никто не заставляет, ты можешь поигратся в песочнице пластмассовым совочком (ява).
<<Настолько мне известно, компилятор может переставить эти функции, только если уверен, что это не на что не повлияет. Не знаю, написано ли это в стандарте,>>
ну раз ты не знаешь о чем разговор? компилятор может выполнять любой порядок, не обращая внимание на сайд -эффекты.
<<показали, что компилятор не хочет нарываться на неприятности и поступает естественным образом>> единственная неприятность для компилятора нарушить стандарт. остальное проблемы программиста.
<<Сами хоть раз встречались с таким поведением компилятора или нет - тоесть, что бы в одном файле он применил два разных способа. Ответы типа "одна бабка сказала" или "известный спец шепнул на ушко" не принимаются. Только исходный код для примера и скомпиленый результат. Не бойся, с дизассемблеров я умею управляться. Скомпиленый результат надо на той случай, если мой компилятор "не правильно скомпилит". pdb файл также не помешает. Пока не увижу - не поверю.
>>
Сам не сталкивался, Тк у меня были хорошие учителя. И что значит верю не верю. мне не надо верить, читай стандарт. Например я знаю что австралия есть, но мне и в голову не придет, поехать проверить. есть книги, я им верю.
Если ты будешь ишодить из принципа ПОKА НЕ УВИЖУ НЕ ПОВЕРЮ, то.... ты выбрал не ту профессию.
<<А пока все Ваши рассуждения о правильности/неправильности похожи на исследования сферического коня в вакууме.>>
не смеши. и больше нигде не говори, что веришь только уведенному а не написанному.
Ты не со мной споришь а со стандартом
вот нашел 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онституцию в топку?
[QUOTE=Ull9]что быстрее
++i или i++?[/QUOTE]
Теоретически, ++i быстрее. так как i изменяеться по ссылке, хотя с оптимизацией компиляторов, если i типа int, разницы в производительности цикла i++ и ++i не заметил
[QUOTE=KoVadim]Сами хоть раз встречались с таким поведением компилятора или нет[/QUOTE]
тут ты сильно не прав. если твой компилятор успешно компилирует некорректные программы, это не значит что надо их писать. ты проверил все варианты параметров оптимизации ? проверил на других архитектурах ? проверил другие компиляторы ? а еще не вышедшие тоже проверил ?
между прочим, правильные компиляторы на такое ругаются
[QUOTE=Konstantin.od]Теоретически, ++i быстрее. так как i изменяеться по ссылке, хотя с оптимизацией компиляторов, если i типа int, разницы в производительности цикла i++ и ++i не заметил[/QUOTE]
правильно, но если i это POD, если это скажем итератор то разница есть, и оптимизатор ее не соптимизирует.
поэтому лучше писать ++i
[B]pal[/B]. Надо выбросить компилятор, который компилирует заведомо неверный код. Разработчиков выгнать. Ведь вы не будете доверять человеку, который один раз делает так, а на следующий - по другому.
Основная идея программирования - что мы можем точно объяснить компьютеру, что же мы хочем на понятном ему языку. Зачем стандарт, который допускает такие глупости. Я не верю, что такое пропустили. Там же не глупцы сидят.[QUOTE]проверил другие компиляторы ?[/QUOTE]
Вот завтра на работе попробую скомпилить под Linux Mandriva 2007 и FreeBSD 6.1, компилятор скорее всего gcc. версию уточню уже по месту.
По поводу других платформ - у меня нет такой возможности. Но есть идеи. Проверю - расскажу.[QUOTE]а еще не вышедшие тоже проверил ?[/QUOTE]
У меня нет машины времени :(
[QUOTE]между прочим, правильные компиляторы на такое ругаются[/QUOTE]
Опять сферические кони в вакууме. Пример в студию плиз+ссылку, откуда выкачать и проверить. Только не предлагайте такое, что нереально в Одессе сделать - типа мейнфрейме таком-то компилиться.
[QUOTE]ты проверил все варианты параметров оптимизации ? [/QUOTE]
Если Вы также уверены в том, что сказал [B]Ull9[/B], пожалуйста приготовьте пример, в котором код
[code]
int i=1;
int j=2;
int k=i+++j;
[/code]
Давал результат не 3, а 2. Для подтверждения принимаются исходники плюс скомпиленый вариант и сопутствующие файлы для отладки (ну что бы я мог убедиться что это всё не подстроено, а действительно правда). Это касается всех, кто убеждён в том, что стандарт так просто допускает двузначности.
[B]Ull9[/B]
[QUOTE]с++, не простой язык, это для больших мальчиков, этим ножечком можно и порезатся, но никто не заставляет, ты можешь поигратся в песочнице пластмассовым совочком (ява).[/QUOTE]
Типичная ошибка больших мальчиков. На java не пишу. Маленьким мальчиком себя не считаю, хотя до "больших" наверное далеко. Поэтому считаю это личным оскорблением. Вы не удосужились даже спросить на каком языке я пишу. Плюс ко всему, я обращаюсь на [B]Вы[/B], а в ответ имею [b]ты[/b].
[QUOTE]Если ты будешь ишодить из принципа ПОKА НЕ УВИЖУ НЕ ПОВЕРЮ, то.... ты выбрал не ту профессию.
[/QUOTE]
Какую я же должен был выбрать? Меня воспитали человеком, который должен проверить. А насчет Австрилии. Можно на худой конец GoogleMap посмотреть. К тому же тут есть другие доказательства - фотографии к примеру, а Вы мне даже фотографий (тобыш скомпилированого кода) не предоставили.
По поводу Конституции. Мне кажеться пример не слишком удачный - там сказано, что личные свободы не ограничиваются. Поэтому я волен с утра выбирать. И от того, с какой ноги я утром встану и результат моего рабочего дня слабо коррелированны. Но во времена Сталина могли и приписать такое. Он мог.
Так мне кто то пример кода с сопутствующими файлами приведет?
[quote]Если Вы также уверены в том, что сказал Ull9, пожалуйста приготовьте пример, в котором код
Код:
int i=1;
int j=2;
int k=i+++j;
Давал результат не 3, а 2. Для подтверждения принимаются исходники плюс скомпиленый вариант и сопутствующие файлы для отладки (ну что бы я мог убедиться что это всё не подстроено, а действительно правда). [/quote]
В этом коде нет никакой двузначности, просмотрите внимательно тот пример, для которого результат был неопределён.
[quote]
Это касается всех, кто убеждён в том, что стандарт так просто допускает двузначности
[/quote]
не думаю, что в таком вопросе можно быть 'убеждённым', стандарт либо допускает что либо нет, все закономерности вычисления - дело частного случая, на который нельзя полагаться. Сам удивился этому пару страниц назад. Впрочем, не стыдно, только учусь.
Я проверил, есть такое, ссылка на стандарт - [url]http://anatolix.naumen.ru/files/book...andard2003.zip[/url], страница 65 по бумажной нумерации. Думаю, этого достаточно, чтобы положить конец этому спору.
[QUOTE=KoVadim][/QUOTE]
ты так ничего и не понял
компилятор пытается оптимизировать код, чтобы он работал быстрее
если он не сможет переставлять местами участки, он не сможет оптимизировать. понятно, что если переставлять все, что вздумается, то оно и работать будет потом, как ему вздумается. поэтому стандарт определяет, в каких случаях компилятор свободен в выборе, а в каких нет. если бы ты внимательно изучил язык, ты бы знал, что есть 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
[B]pal[/B]
Ваш пример неудачен. Так как играя пробелом, можно получить и не такое в этом примере.
при таком варианте "a+ + +a" имеем результат 2
при таком варианте "a++ +a" имеем результат 3
при таком варианте "a+ ++a" имеем результат 4
при таком варианте "a+ + +a" имеем результат 2
при таком варианте "a+++a" имеем законную результат 3
В данном случае пробел недопустим, так как Вас в школе должны были учить, что пробел допустим только между операторами, а вот сами операторы разрывать нельзя, что Вы и сделали.
ну и еще одна реплика с моей стороны.
[QUOTE=KoVadim]... Плюс ко всему, я обращаюсь на [B]Вы[/B], а в ответ имею [b]ты[/b].
[/QUOTE]
в этом топике, мой пост #68
<<Вадим, можно на ты.>>
я полагал, что предложив ты, я расчитывал на обоюдность.ну если тебе хочется Вы, то пожалуйста.
И я полагаю, что Вы на с++ непишите. в противном случае, если вы всетаки на нем пишите, то тем хуже для вас, и еще хуже для тех на кого вы работаете.
можете спорить дальше, но не со мной, а со Стандартом.
[B]Ull9[/B]
[QUOTE]Вадим, можно на ты[/QUOTE]
Не видел.
На С++ не пишу, но нелюблю, когда люди доказывают свою правоту, ссылаясь только на стандарт. Человек должен мыслить, иначе он просто никто.
именно потому что я мыслю, получилось так.
прочел стандарт, несогласился, подумал, изменил свое мнение и согласился.
я действительно считаю, что стандарт очень продуман, и конкретно это сделано умно.
а чтоб доказать свою правоту, надо именно, ссылатся на стандарт. мы спорим о СТАНДАРТИЗИРОВАННОМ продукте (с++), и спор может разрешить только ссылка на стандарт.
таких случаев, "нелогичности" у с++, десятки, их надо просто знать.
именно поэтому с++, считается трудным. но взамен разработчик получает гораздо большую мошь
чем скажем игры в песочнице (java, delphi etc.)
[B]Ull9[/B]
Почему вы считаете java, delphi etc. игрой в песочнице? Можно узнать Ваш уровень в этих языках?
начинал в германии как ява программер. потом перешел/вернулся на с++.
почему в песочнице? потому что виртуальная машина, делает гарбаже коллекшн, порядок вычисления предопределен, невозможно выйти за границы массива, ну и тд. тп. она тебя все время подстраховывает.
темплейты не полностью реализованы.
тебе недоверяют и надевают на тебя памперсы.
за это ты платишь, скоростью, и перерасходом памяти. вот она и есть песочница.
По поводу java согласен (хоть гдето мы сходимся:) ), но по поводу Delphi смею возразить.
[QUOTE]порядок вычисления предопределен[/QUOTE]
А мне кажеться так должно быть. Хотя, наверное я не мазахист.:)
[QUOTE=Ull9]начинал в германии как ява программер. потом перешел/вернулся на с++.
[/QUOTE]
И много в германии вакансий для сишников:search: ?
много.
заходи допустим сюда [url]www.jobpilot.de[/url]
ищи по ключeвым словам с++, ....сам увидишь сколько.
[QUOTE=Ull9]много.
заходи допустим сюда [url]www.jobpilot.de[/url]
ищи по ключeвым словам с++, ....сам увидишь сколько.[/QUOTE]
Мда надо повторить немецкий. Блин обший смысл понятен, а вот терминология:( .
Может ктото знает курсы по немецкому для программеров ?
не боись.
здесь наблюдается дефицит программеров
если ты
а) знаешь ХОРОШО английский
б) знаешь ХОРОШО с++ или ява.
можешь здесь найти контракт.
[QUOTE=KoVadim][B]pal[/B]
Ваш пример неудачен. Так как играя пробелом, можно получить и не такое в этом примере.
при таком варианте "a+ + +a" имеем результат 2
при таком варианте "a++ +a" имеем результат 3
при таком варианте "a+ ++a" имеем результат 4
при таком варианте "a+ + +a" имеем результат 2
при таком варианте "a+++a" имеем законную результат 3
[/QUOTE]
такое впечатление, что я со стенкой разговариваю
_все_ примеры с побочным эффектом ( в данном случае - варианты 2, 3 и 5 ) не корректны и результата у них соответственно никакого нет.
[QUOTE=KoVadim]
В данном случае пробел недопустим, так как Вас в школе должны были учить, что пробел допустим только между операторами, а вот сами операторы разрывать нельзя, что Вы и сделали.[/QUOTE]
если ненадолго отвлечься от битвы с ветряными мельницами и присмотреться повнимательней, то можно заметить, что никаких операторов я не разрывал
Если кому-то интересно пограммить на Quick Basic - заходите сюда
[url]сайта больше не существует[/url]
Комментарии типа "да кому это нужно" и "это щас не актуально" - просьба не писать) Каждый занимается тем, что ему дорого. А если это ещё и приносит пользу другим - то вообще супер!!!
[QUOTE=Ull9]
знаешь ХОРОШО с++ или ява.
[/QUOTE]
Расскажи поподробней пож:)
[B]pal[/B]
Как не разрывал? Смотрим внимательно на своё сообщение и думаем. Может копипаст плохо работает? Но пробел точно между плюсиками есть. Это провоцирует компилятор (парсер) в нужную сторону
Я решил, что так как тут спор (дискусия:?) зашел мягко говоря в тупик, то нужно спросить в другом месте. Что и было сделано. Результат получился интересным. Мне предоставили код вместе с солюшеном, где всё компилируется и выдает 2. Сейчас ищу параметры компилятора (для VS2005), которые приводят к этому переходу. Пока не нашёл "стабильного перехода". Но он обязан быть, так как компилятор не может выбирать политику оптимизации основываясь на текущей фазе луны. Только не надо кричать - мы же говорили, что возможно. Никто из вас не удосужился привести код+солюшен.
А теперь самое интересное, некоторые завопили, как там может быть 3, если там 2 всегда. И вот, если учитывать стандарт, то за такой код "надо отрывать руки". Так как этот код стандарт не рекомендует использовать. Вот теперь задачка решена. (ну я ещё параметрами поиграюсь)
[QUOTE=KoVadim][B]pal[/B]
Как не разрывал? Смотрим внимательно на своё сообщение и думаем. Может копипаст плохо работает? Но пробел точно между плюсиками есть. Это провоцирует компилятор (парсер) в нужную сторону
Я решил, что так как тут спор (дискусия:?) зашел мягко говоря в тупик, то нужно спросить в другом месте. [/QUOTE]
единственное место где ты должен спрашивать это стандарт.
спор не зашел в тупик.
еше раз тебе говорю,
с++ стандартизированный продукт, все что мне, тебе непонятно легко решается путем заглядывания стандарт. итак смотрим, стандарт однозначно говорит, что порядок, на усмотрение компилятора. точка.
[QUOTE=KoVadim]Но он обязан быть, так как компилятор не может выбирать политику оптимизации основываясь на текущей фазе луны. Только не надо кричать - мы же говорили, что возможно. Никто из вас не удосужился привести код+солюшен.[/QUOTE]
да хоть и на фазе луны. тебе и мне это не должно быть интересно. программист решает свои задачи. и ЕДИНСТВЕННОЕ правило игры между ним и компилятором это стандарт. ну не буду я в его логику лезть. он написан умными людьми, отлажен. соответствует стандарту. ТОЧКА.
[QUOTE=KoVadim] Только не надо кричать - мы же говорили, что возможно. Никто из вас не удосужился привести код+солюшен.
[/QUOTE]
не буду я подыскивать код солюшн, иши сам. мне проверять снадарт нужды нет. Могу сказать направление. ищи мульти процессорные машины, RISC архитектуру, компилируй с максимальной степенью оптимизации.
[QUOTE=KoVadim]
А теперь самое интересное, некоторые завопили, как там может быть 3, если там 2 всегда. И вот, если учитывать стандарт, то за такой код "надо отрывать руки". Так как этот код стандарт не рекомендует использовать. Вот теперь задачка решена. (ну я ещё параметрами поиграюсь)[/QUOTE]
ПРАВИЛьНО, такой код в принципе использовать нельзя. и надо отрывать за него яйца.
в одном я не уверен, что ТЫ понял решение.
[QUOTE=THRESHE]Расскажи поподробней пож:)[/QUOTE]
а что подробнее? язык программирования надо знать. тут никак не обьедешь.
[QUOTE=Ull9]есть класс
class MyString
{
privat:
char* p;
int len;
public:
MyString():len(0),p(NULL){}
};
деструктор и другие методы для простоты опускаются.
Напиши copy construktor и assign operator[/QUOTE]
Если предположить, что len -- длина строки, то я бы написал такие copy constructor и assign operator
class MyString
{
privat:
char* p;
int len;
public:
MyString():len(0),p(NULL){};
MyString(const MyString & other);
MyString & operator = (const MyString & other);
};
MyString::MyString(const MyString & other):
len(other.len),p(new char[other.len])
{
memcpy(p, other.p, len);
}
MyString & MyString::operator=( const MyString & other )
{
if ( this == &other ) return *this ;
len = other.len ;
delete [] p ;
p = new char[ other.len ] ;
memcpy( p , other.p, len) ;
return *this ;
}
Если что не так -- поправьте...
Добридень шановне панство.
прочитав эту ветку до конца я всётаки решил отписаться. все мы знаем из курса математики начальной школы что:
[B]от перемены мест слагаемых сумма не изменяется[/B] :rtfm:
посему "i+ ++i" должно быть равно "++i +i" :shine:
на практике имеем неравенство что и приводит к неоднозначному варианту. И вообще скобки никто не отменял.
а поповоду ява/ц++... Ну кто-то решил стать врачём, а кто-то юристом... у кого лучше профессия? Кто-то любит светлое пиво, кто-то тёмное. Каждому своё.
правильно.
только нужно не длинну строки увеличить на 1.
фишка в том что в assign operator оч.часто забывают на равенство this проверять.
ну а теперь в чем отличие
operator new
new operator?
[QUOTE=shipr]Добридень шановне панство.
прочитав эту ветку до конца я всётаки решил отписаться. все мы знаем из курса математики начальной школы что:
[B]от перемены мест слагаемых сумма не изменяется[/B] :rtfm:
посему "i+ ++i" должно быть равно "++i +i" :shine:
на практике имеем неравенство что и приводит к неоднозначному варианту. И вообще скобки никто не отменял.
а поповоду ява/ц++... Ну кто-то решил стать врачём, а кто-то юристом... у кого лучше профессия? Кто-то любит светлое пиво, кто-то тёмное. Каждому своё.[/QUOTE]
от перемены мест слагаемых, суммa не меняется и в с++ тоже.
она меняется от порядка вычислений.
еще один недогоняющий? :-)
[B]Ull9[/B]
[QUOTE]ПРАВИЛьНО, такой код в принципе использовать нельзя. и [B]надо отрывать за него яйца. [/B]
в одном я не уверен, что ТЫ понял решение.[/QUOTE]
Это Вы должны были и написать в самом начале. Но этого не было.
Я понял, что можно к вам на работу не пойду. Только не говорите, что Вам такие не нужны. Просто Вам не нужны такие как я, которые будут молиться на стандарт.
[B]shipr[/B]
неправильно пытаешся определить порядок действий.
[QUOTE=KoVadim]Только не говорите, что Вам такие не нужны. Просто Вам не нужны такие как я, которые будут молиться на стандарт.
[/QUOTE]
прости но скажу.
такие как ты на работу ко мне в тим не нужны.
и именно так, нужны те кто молятся на стандарт.
именно так. потом за тебя, фому-неверующего, я по ночaм переделывать нехочу.
по поводу моления.
на столике возле кровати у меня две книги. библия и стандарт. больше мне для сна ничего не нужно
ну может разве "Элементы" эвклида.
вот так.
[B]Ull9[/B]
после меня переделывать не надо будет, так как я пишу неизвращаясь, за что многие не любят мой сишный код (хотя я и не пишу на нем каждый день) - слишком он прост для них. но я точно зная, что компилятор правильно поймёт меня. поймёт так как я хочу. Переделывать не надо. Говорят, что си разрабатывался так, что бы компилировать любой бред. Но вот что будет делать этот бред - загадка.
[QUOTE]на столике возле кровати у меня две книги. библия и стандарт.[/QUOTE]
Хочу увидеть