![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Была такая машина - 'Эльбрус 2', и был у нее язык програмирования 'Эль 76', весь насквозь динамический, при описании переменной указывался только ее размер, содержимое же переменной (целое, плавающее или указатель) определялось динамически на этапе выполнения (прямо boost::any). Казалось бы очень удобно, очень гибко и динамично, гип-гип ура! Увы, эта гибкость обернулось ОГРОМНЫМ недостатком - если компилятор C/C++ способен найти несоотвествие типов уже на этапе компиляции (причем все), то на Эльбрусе эти несоотвествия вываливались run-time (причем по мере хождения по этим граблям). И не было никакой гарантии, что не осталось каких нибудь несоотвествий типов (просто потому, что по этому месту не прошли). Явная динамика типов была нужна КРАЙНЕ редко. В следующей версии Эль 76 были добавлены статические описания типов. |
|||
|
||||
| mes |
|
||||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну если нужны глобальные переменные , в cpp ничего не мешает их использовать.. также как и процедурный стиль
В примере обшая переменная для двух функций храняшихся в разных файлах . Единственное отличие oт примера на php - декларация вне фунциии; Вот и вопрос чем не устраивает такой подход и почему надо обязательно иметь возможность декларировать глобальные переменные в фунции ?? Тогда тебе придется рисовать круги от руки как карандашом, несмотря на то что ты держишь циркуль ))
тут дело не в свободе, а в способе мышления.. Тот кто не пользовался с трудом осознает всю силу строгой типизации )) Добавлено через 6 минут и 55 секунд
вот за это я не люблю отсутствие строгой типизации.. почему я должен следить за этим , когда эти соответствия может проверить какой нибудь простой автомат... Это сообщение отредактировал(а) mes - 6.5.2008, 16:27 |
||||||||
|
|||||||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
у меня когда-то были подобные потребности возможно потому, что глобальная переменная должна быть видна только в 2х функциях и ни в каких других |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
хм... так а что мешает вызвать ту же переменную в третьей функции ведь область видимости нигде не прописана... Добавлено через 2 минуты и 14 секунд хотя как раз эту задачу (ограничение области видимости до двух функций) можно решить с помощью friend: создаём глобальный экземпляр класса, в котором в закрытой секции прописана эта переменная и делаем две выбранных функции его друзьями таким образом без изменения этого класса не получится доступиться к этой переменной откуда-то кроме этих двух функций Добавлено через 3 минуты и 26 секунд хотя это, конечно, для того случая, если есть причины не создавать класс, в котором будут эти функции (т.к. налицо нечто общее между ними) -------------------- qqq |
|||
|
||||
| opjox |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 17.1.2008 Репутация: 1 Всего: 14 |
На C/C++ это лучше сделать и вовсе без глобальных переменных:
Приведи конкретный пример.
namespace? |
||||||
|
|||||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Что-т в последнее время много тем, по сути сводящиеся к вопросу: "почему С++ не позволяет делать то, что делается в скриптовых языках...".
|
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
||||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
неймспейс хорошо, а класс - лучше, ибо переменную можно приватной сделать и все - никакой using namespace ничего плохого не сделает |
|||
|
||||
| Igor_K |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 4.2.2008 Где: Kyiv Репутация: нет Всего: нет |
Ага. тупая моя башка
Про ООП в С++ я ваще ничего не шарю, еще не дорос. Так что ничего написать не могу. Добавлено через 4 минуты и 18 секунд И еще мне не понравилось в С++ что функция не может массив возвращать :( Это сообщение отредактировал(а) Igor_K - 7.5.2008, 22:49 |
|||
|
||||
| bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Ты не понял. На самом деле все зависит от способа передачи параметров. Можно передать так, что в вызывающей ничего не изменится (по значению), а можно и так, что изменится (по ссылке или по указателю):
|
||||
|
|||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 11 Всего: 36 |
И еще мне не понравилось в С++ что функция не может массив возвращать :(
в C++ это и не нужно. |
|||
|
||||
| opjox |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 17.1.2008 Репутация: 1 Всего: 14 |
Так я про способ скрытия глобальных переменных, не переводя их в другую категорию. А так, согласен, класс лучше, но все же не всегда – создавать экземпляр класса для вызова всего одной функции, для которой нужно укрыть переменные, на мой взгляд, не слишком хорошо. Вдобавок, практически всегда можно свести глобальные переменные к локальным, передаваемым через параметр функции. Неименованному пространству имен никакой using не сделаешь
Это смотря как передашь.
Это сообщение отредактировал(а) opjox - 9.5.2008, 00:34 |
||||||
|
|||||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Для QList (и прочие кутешные классы) вполне нормально возвращать коллекцию. Копируется только внутренний указатель (при изменении, если несколько физических объектов владеют этим указателем - делается копия коллекции). |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Примечание: это относится только к объектам реализованным в стиле COW (copy_on_write) Это сообщение отредактировал(а) mes - 8.5.2008, 20:57 |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
static а вообще надо смотреть по ситуации ага оно включено во всей cpp-шке и так - то есть ВСЕ функции могут попортить переменную |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |