Имя:    Пароль:      Помнить меня       
Unsorted   ~  Software  ~  Development and Design  ~  Помощь по С/С++ Все вопросы по С/С++ сюда
На страницу 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11  »
Doctor_Mozg
Сообщение  21 Ноя 2006, 15:18  Ссылка : Ответить с цитатой
Возраст: 33 Пол: Мужской  Доверенный пользователь
C нами с 25.01.2005
Репутация: 133

Неоспоримым достоинством языка С++ является то, что он является языком одновременно и высокого и низкого уровней, что делает его незаменимым при разработке игр и других сложных и требовательных к производительности приложений.

P.S. Перед задаванием вопросов вроде "Что делает эта функция" настоятельно рекомендуется поизучать MSDN.
P.P.S. В ближайшее время выложу много литературы по этому вопросу.
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : ICQ
AAsad
Сообщение  17 Дек 2006, 22:18  Ссылка : Ответить с цитатой
Возраст: 32 Пол: Мужской  Доверенный пользователь
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
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : E-mail : JabberID : ICQ
Алебрихес
Сообщение  17 Дек 2006, 22:56  Ссылка : Ответить с цитатой
Возраст: 33 Пол: Мужской  Доверенный пользователь
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.
В начало
Профиль : Фотоальбом : Личное Сообщение
MajorQ
Сообщение  17 Дек 2006, 23:04  Ссылка : Ответить с цитатой
Пол: Мужской  Доверенный пользователь
C нами с 09.06.2005
Репутация: 544

AAsad, про стандарт не буду говорить, т.к. просто уже забыл. Но какая разница, что там написано: ты работаешь с конкретным компилятором, если он трактует область видимости не по стандарту, то делай так, как ему надо. Не будешь же ты писать претензии разработчикам! Все можно обойти: вынеси объявление счетчика за цикл (до for-а), тогда это будет переносимо. И вся недолга!
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : Сайт
inkognit
Сообщение  18 Дек 2006, 0:33  Ссылка : Ответить с цитатой
Возраст: 28 Пол: Мужской 
C нами с 30.04.2006
Репутация: 77.5

AAsad писал(а):
а в Visual Studio 2005 наооборот...

Ты лучше полный текст проги дай - я думаю, что ты просто определил имя "i" заранее в Visual Studio 2005. Просто не верится, что это Visual Studio 2005 так шатает самые основы Срр.

_____________________________
Дайте в руки мне баян, я порву его совсем.
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : E-mail
MinDeR
Сообщение  18 Дек 2006, 0:58  Ссылка : Ответить с цитатой
Возраст: 31 Пол: Мужской 
C нами с 08.01.2006
Репутация: 128.1

MajorQ писал(а):
Но какая разница, что там написано: ты работаешь с конкретным компилятором, если он трактует область видимости не по стандарту, то делай так, как ему надо.


А не проще ли будет воспользоваться другим компилятором? Это много времени не займёт.
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : Сайт : ICQ
AAsad
Сообщение  18 Дек 2006, 0:59  Ссылка : Ответить с цитатой
Возраст: 32 Пол: Мужской  Доверенный пользователь
C нами с 03.04.2006
Репутация: 73.7

Прошу прошения в VS 2005 все правильно, просто там до этого, определил i, и по этому ошидка выдавалась... видимо я просто перепутал одну вещ, когда я читал книгу Страуструпа Дизайн и эволюция Си++ мне казалось что обявление в for'е должно действовать и за границами for'а.

_____________________________
"Если да, конечно нет" Futurama
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : E-mail : JabberID : ICQ
Doctor_Mozg
Сообщение  18 Дек 2006, 22:34  Ссылка : Ответить с цитатой
Возраст: 33 Пол: Мужской  Доверенный пользователь
C нами с 25.01.2005
Репутация: 133

AAsad, для начала, думаю, лучше ознакомиться с "Язык программирования С++" того же любимого Старуструпа Улыбочка

Как я знаю, области видимости остались неизменными ещё со времён С Улыбочка Так что его тоже неплохо бы освежить, если такое лепится Улыбочка

_____________________________
Это ты, Джон Уэйн?
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : ICQ
MajorQ
Сообщение  18 Дек 2006, 23:31  Ссылка : Ответить с цитатой
Пол: Мужской  Доверенный пользователь
C нами с 09.06.2005
Репутация: 544

MinDeR, далеко не всегда проще. Есть, например, внутр. правила компании (далеко не все фирмы-работодатели свободно меняют компиляторы, с которыми работают), могут быть определенные взаимосвязи с прочими продуктами компании и т.д. (построение продукта на COM или DCOM, например, привязывает к VS)...
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : Сайт
seb
Сообщение  19 Дек 2006, 1:04  Ссылка : Ответить с цитатой
Возраст: 39 Пол: Мужской  Доверенный пользователь
C нами с 05.04.2005
Репутация: 121.1

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
В начало
Профиль : Фотоальбом : Личное Сообщение : JabberID
Elemental
Сообщение  19 Дек 2006, 9:51  Ссылка : Ответить с цитатой
Возраст: 33 Пол: Мужской 
C нами с 21.05.2005
Репутация: 127.4

Хех. Да, по стандарту вне цикла эту переменную не должно быть видно. НО! майкрософт заявила: "Мы самые умные, как хотим - так и сделаем" и во всех ее ВижлСтудиях при обявлении переменной (даже в цикле) она видна и дальше, после цикла. Такчто ругайте майкрософт за подобное самовольство. Щя кстати об этом каждый более менее учебник по програмированию на С\С++ говорит, который затрагивает еще и наиболее известные компиляторы. Не уверен, что знать язык без знания (хотяб поверхностного) особенностей компилятора - полезно. Такчто страуса может читать и полезно, но уж точно после него тогда надио читать инфу по компиляторам.
В начало
Профиль : Фотоальбом : Личное Сообщение
AAsad
Сообщение  20 Дек 2006, 1:32  Ссылка : Ответить с цитатой
Возраст: 32 Пол: Мужской  Доверенный пользователь
C нами с 03.04.2006
Репутация: 73.7

Elemental, в 2005 Вижуал Студии насчет этого всё сделано по стандарту, но в более старых данное несоответствие возожно есть, но я не помню.

_____________________________
"Если да, конечно нет" Futurama
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : E-mail : JabberID : ICQ
Aristos
Сообщение  20 Дек 2006, 2:13  Ссылка : Ответить с цитатой
Возраст: 36 Пол: Мужской 
C нами с 14.10.2004
Репутация: 51.8

vs6 - i видна за циклом for
vs2003 - поведение можно выставить в настройках
vs2005 - область видимости ограничена циклом

_____________________________
cogito ergo sum
В начало
Профиль : Фотоальбом : Личное Сообщение : ICQ
chaser
Сообщение  05 Июл 2007, 19:02  Ссылка : Ответить с цитатой
Возраст: 30 Пол: Мужской 
C нами с 04.02.2005
Репутация: 121.3

Задача: получить итератор (прямой), указывающий на последний элемент std::list, за постоянное время.

Я придумал только такой способ:
std::list<T> list;
...
std::list<T>::iterator i = (++list.rbegin()).base();


Можно ли это сделать как-нибудь более аккуратно?
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : JabberID
seb
Сообщение  06 Июл 2007, 15:31  Ссылка : Ответить с цитатой
Возраст: 39 Пол: Мужской  Доверенный пользователь
C нами с 05.04.2005
Репутация: 121.1

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
В начало
Профиль : Фотоальбом : Личное Сообщение : JabberID
Показать сообщения:   
На страницу 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11  »

Unsorted   ~  Software  ~  Development and Design  ~  Помощь по С/С++

Ответить на тему

Перейти: