|
|
Возраст: 38 C нами с 25.01.2005 Репутация: 133
|
|
Неоспоримым достоинством языка С++ является то, что он является языком одновременно и высокого и низкого уровней, что делает его незаменимым при разработке игр и других сложных и требовательных к производительности приложений.
P.S. Перед задаванием вопросов вроде "Что делает эта функция" настоятельно рекомендуется поизучать MSDN.
P.P.S. В ближайшее время выложу много литературы по этому вопросу.
|
|
|
|
|
|
|
|
Возраст: 37 C нами с 03.04.2006 Репутация: 73.7
|
|
Заметил одну штуку при компиляции(MinGW) кода типа:
....
for(int i=0;i<6;i++)
{
//тут что-то делаеться
}
i=1;
....
выдаёт ошибку, но если i=1; заменить на int i=1; то всё нормально.
а в Visual Studio 2005 наооборот...
А вопрос вот в чем, как определено время жизни обекта в стандарте? Мне просто интересно.
|
_____________________________ "Если да, конечно нет" Futurama
|
|
|
|
|
|
|
Возраст: 38 C нами с 21.08.2006 Репутация: 91.3
|
|
AAsad писал(а): |
for(int i=0;i<6;i++)
{
//тут что-то делаеться
}
i=1;
....
выдаёт ошибку, но если i=1; заменить на int i=1; то всё нормально.
а в Visual Studio 2005 наооборот...
|
Ну прально, i ведь не существует за циклом (локальная переменная). А вот если заново создать (int i=1), то все впорядке, пользуйся на здоровье.
Время жизни = пока не убить переменную (экземпляр)
|
_____________________________ The Bird of Hermes is my name, eating my wings to make me tame.
|
|
|
|
|
|
|
C нами с 09.06.2005 Репутация: 548.8
|
|
AAsad, про стандарт не буду говорить, т.к. просто уже забыл. Но какая разница, что там написано: ты работаешь с конкретным компилятором, если он трактует область видимости не по стандарту, то делай так, как ему надо. Не будешь же ты писать претензии разработчикам! Все можно обойти: вынеси объявление счетчика за цикл (до for-а), тогда это будет переносимо. И вся недолга!
|
|
|
|
|
|
|
|
Возраст: 34 C нами с 30.04.2006 Репутация: 77.5
|
|
AAsad писал(а): |
а в Visual Studio 2005 наооборот...
|
Ты лучше полный текст проги дай - я думаю, что ты просто определил имя "i" заранее в Visual Studio 2005. Просто не верится, что это Visual Studio 2005 так шатает самые основы Срр.
|
_____________________________ Дайте в руки мне баян, я порву его совсем.
|
|
|
|
|
|
|
Возраст: 36 C нами с 08.01.2006 Репутация: 128.1
|
|
MajorQ писал(а): |
Но какая разница, что там написано: ты работаешь с конкретным компилятором, если он трактует область видимости не по стандарту, то делай так, как ему надо.
|
А не проще ли будет воспользоваться другим компилятором? Это много времени не займёт.
|
|
|
|
|
|
|
|
Возраст: 37 C нами с 03.04.2006 Репутация: 73.7
|
|
Прошу прошения в VS 2005 все правильно, просто там до этого, определил i, и по этому ошидка выдавалась... видимо я просто перепутал одну вещ, когда я читал книгу Страуструпа Дизайн и эволюция Си++ мне казалось что обявление в for'е должно действовать и за границами for'а.
|
_____________________________ "Если да, конечно нет" Futurama
|
|
|
|
|
|
|
Возраст: 38 C нами с 25.01.2005 Репутация: 133
|
|
AAsad, для начала, думаю, лучше ознакомиться с "Язык программирования С++" того же любимого Старуструпа
Как я знаю, области видимости остались неизменными ещё со времён С Так что его тоже неплохо бы освежить, если такое лепится
|
_____________________________ Это ты, Джон Уэйн?
|
|
|
|
|
|
|
C нами с 09.06.2005 Репутация: 548.8
|
|
MinDeR, далеко не всегда проще. Есть, например, внутр. правила компании (далеко не все фирмы-работодатели свободно меняют компиляторы, с которыми работают), могут быть определенные взаимосвязи с прочими продуктами компании и т.д. (построение продукта на COM или DCOM, например, привязывает к VS)...
|
|
|
|
|
|
|
|
Возраст: 44 C нами с 05.04.2005 Репутация: 121.2
|
|
Doctor_Mozg писал(а): |
Как я знаю, области видимости остались неизменными ещё со времён С
|
"Ну Вы блин даёте..." (c)
Со времён C какого стандарта (года выпуска) ? (выжимки из http://ru.wikipedia.org) Есть «Язык программирования Си» ANSI X3.159-1989 он же ANSI C, есть C ISO/IEC 9899:1990 и наконец есть ISO 9899:1999 так же называемый «С99» (в C99 присутствуют некоторые фишки другова языка - С++)
Насчёт вопроса про область видимости - в 98 году был принят ISO стандарт на С++ (ISO/IEC 14882:1998) и там в частности как раз область видимости переменной, объявленой в объявлении цикла была закрепелена за содержимым цикла (тоесть с наружи цикла эта переменная не доступна)
|
_____________________________ IRC WeNet #programming
jid: seb2000@jabber.ru
|
|
|
|
|
|
|
Возраст: 39 C нами с 21.05.2005 Репутация: 127.5
|
|
Хех. Да, по стандарту вне цикла эту переменную не должно быть видно. НО! майкрософт заявила: "Мы самые умные, как хотим - так и сделаем" и во всех ее ВижлСтудиях при обявлении переменной (даже в цикле) она видна и дальше, после цикла. Такчто ругайте майкрософт за подобное самовольство. Щя кстати об этом каждый более менее учебник по програмированию на С\С++ говорит, который затрагивает еще и наиболее известные компиляторы. Не уверен, что знать язык без знания (хотяб поверхностного) особенностей компилятора - полезно. Такчто страуса может читать и полезно, но уж точно после него тогда надио читать инфу по компиляторам.
|
|
|
|
|
|
|
|
Возраст: 37 C нами с 03.04.2006 Репутация: 73.7
|
|
Elemental, в 2005 Вижуал Студии насчет этого всё сделано по стандарту, но в более старых данное несоответствие возожно есть, но я не помню.
|
_____________________________ "Если да, конечно нет" Futurama
|
|
|
|
|
|
|
Возраст: 41 C нами с 14.10.2004 Репутация: 51.8
|
|
vs6 - i видна за циклом for
vs2003 - поведение можно выставить в настройках
vs2005 - область видимости ограничена циклом
|
_____________________________ cogito ergo sum
|
|
|
|
|
|
|
Возраст: 35 C нами с 04.02.2005 Репутация: 121.3
|
|
Задача: получить итератор (прямой), указывающий на последний элемент std::list, за постоянное время.
Я придумал только такой способ:
std::list<T> list;
...
std::list<T>::iterator i = (++list.rbegin()).base(); |
Можно ли это сделать как-нибудь более аккуратно?
|
|
|
|
|
|
|
|
Возраст: 44 C нами с 05.04.2005 Репутация: 121.2
|
|
chaser писал(а): |
Задача: получить итератор (прямой), указывающий на последний элемент std::list, за постоянное время.
Я придумал только такой способ:
std::list<T> list;
...
std::list<T>::iterator i = (++list.rbegin()).base(); |
Можно ли это сделать как-нибудь более аккуратно?
|
а чем тебе не понравилось декрементить end() ?std::list<T>::iterator i = --a.end(); | можно ещё так:std::list<T>::iterator i;
advance(i = a.end(), -1); |
|
_____________________________ IRC WeNet #programming
jid: seb2000@jabber.ru
|
|
|
|
|
|
|