решил начать изучать с++,под рукой как-раз оказалась студия..
начал искать учебники к нему и между тем сложилось странное впечатление,что ето каг-бы другой язык,нежели c++
Вразумите товарисчи!!
решил начать изучать с++,под рукой как-раз оказалась студия..
начал искать учебники к нему и между тем сложилось странное впечатление,что ето каг-бы другой язык,нежели c++
Вразумите товарисчи!!
Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.
4 ноября 2008 в 8:05
#11
"If the for-init-statement is a declaration, the scope of the name(s) declared extends to the end of the for-statement." — черновик стандарта C++0X
#12
> Лучше, в смысле безопаснее
не исключено
> Использовать манипуляторы.
спасибо ^_^
> Стоит добавить "имхо"
Да, конечно.
3 ноября 2008 в 23:03
> Что значит "лучше юзать"? Да, iostream в microsoft случайно реализовали так, как надо.
Лучше, в смысле безопаснее. Программа не упадет, если ошибиться в строке форматирования с количеством аргументов.
> Кстати, как там установить точность вывода вещественного типа,
количество ведущих нулей и основание системы счисления?
Использовать манипуляторы.
//msdn.microsoft.com/en-us/library/daeb650d.aspx
> А если есть необходимость писать на чистом C?
На C вариантов нет, но это и другой язык
> Я уж не говорю, что printf удобнее в использовании.
Стоит добавить "имхо" С потоками Ваш пример выглядит так:
cout << "i^2 = " << i++ * i++ << endl;
Имхо, это понятнее. Если вдруг понадобится убрать или добавить форматируемый аргумент, то делать это надо будет только в одном месте, а не в двух, как в printf (строка форматирования и параметр функции). Плюс, если потребуется перенаправить вывод из консоли, например, в файл, то можно сделать это через методы cout, не модифицируя код. (Недавно натыкался на статью на РСДН, где все выводилось в Output окно в студии.)
> Если что, __in64 в стандарте нет и никогда не было.
long long в gcc (в плюсах) появился раньше, чем в стандарте… И если не ошибаюсь, то стандарт не запрещает вводить свои типы данных производителям компиляторов.
3 ноября 2008 в 23:01
C99 – стандарт C, а не C++. На счет того, начиная с какой версии MS поддержала long long в C утверждать не берусь.
> Но чтение в стиле C, насколько мне известно, до сих пор не соответствует. Стандарт я посмотрел – %lld для long long и %Lf для long double
MSDN говорит о том, что MS стандарт поддерживает:
//msdn.microsoft.com/en-us/library/tcxf1dw6.aspx
Правда, опять же, я не знаю, когда они начали это поддерживать.
> Например, у gnu gcc я не встречал расхождений со стандартом, которые мне бы досаждали. Да и расширения все укладывались во внешние библиотеки.
По моим ощущениям самые большие различия в компиляторах относятся к реализации шаблонов. Я встречал некоторые шаблоны, верные с точки зрения стандарта, которые отлично компилились студией, но gcc их не ел. Так что проблемы есть не только с MS
> Есть два вида инкримента(и декремента соответственно) :
i++ и ++i Они отличаются порядком действий. Откопаю пример хороший, напишу.
Не стоит. Разговор не об этом, а о значениях выражений вида:
int i = 1;
i += i++ + ++i;
Значение этого выражения неопределено и зависит от реализации компилятора. Сделано это в угоду возможности оптимизации вычислений.
> Код, приведенный выше работать будет в MVS C++ 6.0
В 2008 студии – не будет
Стандартом не оговорена возможность использования такой конструкции:
for( int i = 0; i < n; i++ );
Про стандарт врать не буду, не помню, но в наиболее популярных компиляторах переменная объявленная внутри скобок цикла видна только в области видимости тела цикла. MS поддержала это начиная с 2005 студии, чему я был весьма рад. До этого переменная была видна и вне тела цикла. Так что как раз в 2008 студии приведенный выше код работать будет, а вот в 6-ке – нет.
3 ноября 2008 в 23:01
вдогонку… MSDN пишет такое:
"for Loops and the C++ Standard
The C++ standard says that a variable declared in a for loop shall go out of scope after the for loop ends."
3 ноября 2008 в 22:05
Код, приведенный выше работать будет в MVS C++ 6.0
В 2008 студии – не будет
поэтому лучший вариант:
int i;
for( i = 0; i < n; i++ );
3 ноября 2008 в 22:05
#7
Что значит "лучше юзать"? Да, iostream в microsoft случайно реализовали так, как надо. Кстати, как там установить точность вывода вещественного типа, количество ведущих нулей и основание системы счисления? А если есть необходимость писать на чистом C? Я уж не говорю, что printf удобнее в использовании.
"И вообще, всё что есть в MS VS стандартно" — что Вы имеете в виду?Если что, __in64 в стандарте нет и никогда не было.
Видимо, что-то вроде
int i = 7;
printf("i^2 = %d\n", i++ * i++);
Ответ — 49 или 56
#8
Ой ли не оговорена?
"Имя, введённое инициализатором цикла for, выходит из области действия в конце этого предложения" ("Дизайн и эволюция C++", Бьёрн Страуструп, перевод ДМК Пресс)
3 ноября 2008 в 22:00
Код приведённый выше будет нормально работать. long long MS VS ест. И 2005-тая тоже, проверено. Для чтения / вывода на экран лучше юзать iostream-овские cin cout.
И вообще, всё что есть в MS VS стандартно, и работает нормально. *(исключая косяки самой программы)
ЗЫ
Есть два вида инкримента(и декремента соответственно) :
i++ и ++i Они отличаются порядком действий. Откопаю пример хороший, напишу.
3 ноября 2008 в 21:05
long long появился в стандарте C99, вышедшем в 2000 году. То, что visual стал, наконец, его реализовывать, это, безусловно, плюс. Но чтение в стиле C, насколько мне известно, до сих пор не соответствует. Стандарт я посмотрел – %lld для long long и %Lf для long double
Про ++ согласен. Мне казалось, что стандарт что-то на эту тему говорит, но google меня переспорил. Кажется, какие-то важные моменты ещё есть. А, вот. Стандарт не запрещает использовать несколько раз одну и ту же переменную для циклов, а как с этим у visual?
for (int i = 0; i < n; i++)
…;
for (int i = 0; i < m; i++)
…;
Например, у gnu gcc я не встречал расхождений со стандартом, которые мне бы досаждали. Да и расширения все укладывались во внешние библиотеки.
3 ноября 2008 в 19:04
#4
Проверил, VS 2008 успешно хавает long long. В VS 2005 может его и не быть в силу того, что в момент выхода этой версии студии long long еще не входил в стандарт плюсов.
Поведение — и ++ в больших выражениях неопределено и зависит от компилятора. Это прямо так и написано в стандарте.
Что касается отличий от стандарта, то те или иные отличия есть в любом компиляторе, так же как и свои собственные расширения.
3 ноября 2008 в 16:04
visual c/c++ сильно отличается от c/c++, принятого по стандарту. Хотя бы чтение данных не то — в стандарте есть тип long long, функции printf и scanf читают/пишут его через %Ld, а в visual какие-то %I64d откуда-то взялись. С операторами ++ и — тоже лажа какая-то — в порядке вычислений.
3 ноября 2008 в 15:01
не-не. никаких русских версий. потом при переходена английскую будут возникать неудобства
3 ноября 2008 в 12:01
ты чё нет!
это просто среда программирования а язык всё тот же C++ он един.
Кстати ты новичёк то советую скачать русскую Visual Studio там понятнее будет