|
Модераторы: Daevaorn Страницы: (14) Все « Первая ... 6 7 [8] 9 10 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
|
Lycifer |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 144 Регистрация: 4.11.2007 Репутация: нет Всего: нет |
kosmonaFFFt - вопрос такой:
Как это скампилируеются ? HANDLE Heap = GetProcessHeap(); переменная должнать быть статической . И вправду такой код пугает |
|||
|
||||
kosmonaFFFt |
|
|||
Опытный Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
как это компиллировалось не видел но в комплекте с исходником и просьбой "найти ошибку" был приложен экзешник, который умел только дико глючить. -------------------- |
|||
|
||||
Ulysses4j |
|
|||
Опытный Профиль Группа: Участник Сообщений: 304 Регистрация: 6.6.2007 Где: Ростов-на-Дону Репутация: 4 Всего: 10 |
Кстати, вполне нормаьлный мог бы быть код, если бы flag был итератором. -------------------- Communication is critical to the job of a programmer. C. Jazdzewski. Fatherly Advice To New Programmers |
|||
|
||||
Torsten |
|
||||||||||
Бывалый Профиль Группа: Участник Сообщений: 174 Регистрация: 10.6.2008 Где: Pskov Репутация: 3 Всего: 7 |
Аленка,
Тернарный оператор должен иметь только одно условие, иначе он плохо читается. В данном случае одна из лучших записей такого кода, будет выглдядеть вот так :
GrayCardinal,
Глобальный переменные использовать в С++ нельзя, это признак непрофиссиональность. Хранить настройки проги нужно в классе сингтоне. Классы везде пихать не нужно. Если функция не имеет отношения к классу ее нужно вынести отдельно с собственным пространством имен (namespace). FelikZ,
В дефайнах - неправильно. В typedef - правильно. Подробнее об этом в книгах написано.
Для этого и нужны IDE, там достаточно нажать один раз хоткей чтобы перенестись к месту обьявляния. Ну а самые продвинутые, так вообще специальных textEdit могут показывать это (в VS вверху он находится по умолчанию над редактором), нужно лишь курсор на тип поместить чтобы увидеть как он определен. --------------------
We have no begining, we have no end. We are infinite. |
||||||||||
|
|||||||||||
Kallikanzarid |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: нет Всего: 3 |
Лучше тогда уж error<id>::message, если конечно нет необходимости регистрировать ошибки в рантайме. |
|||
|
||||
Kallikanzarid |
|
||||
Бывалый Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: нет Всего: 3 |
Вот он удивится при портировании на x64 |
||||
|
|||||
bsa |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Ты выравнивание имел в виду? |
|||
|
||||
Kallikanzarid |
|
||||||
Бывалый Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: нет Всего: 3 |
Сейчас проверил - видимо, я плохо знаю стандарт.
Работает Это сообщение отредактировал(а) Kallikanzarid - 13.11.2008, 03:53 |
||||||
|
|||||||
nickless |
|
|||
Гентозавр Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
Оно конечно работает (во всяком случае под 32 бит и gcc), но это не стандарт
-------------------- Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
Kallikanzarid |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 240 Регистрация: 9.11.2008 Репутация: нет Всего: 3 |
Это не противоречит коду выше. Скорее всего, компилятор просто учел выравнивание и преобразовал (&x)[index] к ((char*)&x) + 8*index). Хотя, конечно, не факт, что будет компилироваться везде.
|
|||
|
||||
Fire-Plug |
|
||||||
Шустрый Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Полагаю, что вы не совсем поняли, что он предложил, а именно - вызвать конструктор класса через его полностью квалифицированное имя (fully qualified name), т.е.
хотя ПМСМ - это мазохизм в тяжелой форме. В тех упражнениях, что он предлагает, этот подход ещё можно как-то использовать и воспринимать как курьёз. В реальных ООП проектах - это просто бред голимый. Например, как он собиратеся вызывать деструктор по указателю на базовый полиморфный класс, т.е. виртуальную ф-цию? Каким макро он собиратеся это делать? ООП - это не только класс/структура с конструктором/деструктором и new/delete vs calloc/malloc/free. Это - как раз именно наследование и полиморфизм. Так что подход, предлагаемый UnrealMan, можно выразить слоганом: прощай ООП. Советую не принимать близко к сердцу, т.к. ник товарища говорит о многом - ну не любит он общепринятых решений для стандартных ситуаций. НО есть положительный момент - заставляет снова осмыслить рациональное зерно С++ и его принципиальные отличия от С - и не только в плане выделения памяти. В конце концов, имеется placement new оператор... |
||||||
|
|||||||
Fire-Plug |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Э-э-э-х, ваше счастье, уважаемый, - не видели вы гигантских С-шных проектов с файлами по 20+ тыс. строк кода и проектами к-либо из бизнес-компонент системы по 5,5 тыс. функций. Просто ф-ций; не методов; с тысячами callback-ф-ций - этим С-шным способом реализации полиморфного поведения... Лучше бы мои глаза их тоже не видели... Когда-то мне очень нравился этот язык, а теперь - ненавижу. Может даже не сам язык, а тех козлов - нынешних ветеранов-старперов и теперь уже почти сплошь директоров и менеджеров, кто за 15+ лет так не попытался мигрировать проект в ООП на С++, когда это еще было возможно. Теперь по неофициальной оценке code base превышает 6 млн. строк и нет ни возможности, ни ресурсов, ни самое главное - желания осуществить миграцию. Контора, плять, стабильная - неплохо платит и от дома 6,5 км... Пол-года маюсь и никак не решусь начать искать другую работу, чтобы о С не слышать больше вообще. Ладно, эмоции в сторону. Объявление С-ф-ции(и/или переменной) в c/cpp-файле как static ограничивает ее область видимости рамками данного файла. Т.е. ниоткуда больше, как из данного файла, ф-ция не видна и, следовательно, не может быть вызвана, а переменная - не имеет доступа извне. При этом декларация ф-ции также находится в том же файле, а не в к-либо файле заголовка. Идея - этакий вариант С-шной инкапсуляции. Наверное, в 1970 г. это была "плодотворная дебютная идея" (с). Как видите - нет ничего общего со статическим методом/переменной-членом класса, кроме как самого модификатора static |
|||
|
||||
zim22 |
|
||||
depict1 Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
В книге С++ Primer рекомендуют избегать глубокого вложения условных выражений.
И приводят 2 примера кода для нахождения максимума из 3 значений. 1) Этот код не рекомендуют:
2) Пишут, что это значительно проще и наглядней:
Вы тоже согласны с авторами? Лично мне кажется, что первый вариант наглядней... |
||||
|
|||||
mes |
|
|||
любитель Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
так как раз у второго кода вложение гораздо глубже ))) а третьего варианта там в пример не привели ?
Это сообщение отредактировал(а) mes - 25.1.2009, 18:20 |
|||
|
||||
zim22 |
|
||||||||
depict1 Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
о, отличный код! не привели, т.к. до stl не дошли ещё. до введения понятия итератор вектор проходили с помощью такого цикла:
после введения итератора примеры в книге поменялись:
Так что возможно когда до STL дойду, они исправятся и извинятся за некрасивый код |
||||||||
|
|||||||||
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |