Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: C++ – 20 лет победного несовершенства  (Прочитано 24615 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Alf
Гость
« Ответ #30 : 16-12-2005 08:00 » 

Это бесспорно ugly hack. Не должен высокоуровневый язык позволять осуществлять такие приёмы.

Этот "блестящий" прием напомнил мне знаменитую статью Поста:

Цитата
- настоящие программисты используют самомодифицирующий код, особенно в тех случаях, когда это экономит 20 наносекунд в середине очень короткого цикла;

(С) Ed Post, "Настоящие программисты не используют Паскаль".
Записан
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #31 : 16-12-2005 08:16 » 

Цитата
Вполне законно. Имя переменной во вложенном блоке скрывает внешнюю. Здесь важно то, с какого момента происходит сокрытие имен:
Код:
int main()
{
 const int i = 10;
 {
 int i[i]; //эквивалентно int i[12]
 }
}
Внешнее имя становится недоступно в конце полного декларатора, который в данном случае заканчивается после ']'.
 

Верно ли я понял, что

int main()
{
  int i = 10;
  {
   printf("%d /n", i);
   double  i = 12.124;
   printf("%f /n", i);
  }
 printf("%d /n", i);
}

Выведет
10
12.124
10?

Цитата
Код:
int i[i]; //эквивалентно int i[12]
почему эквивалентно int i[12], а  не  int i[10] ?
или это прпосто очепятка?
« Последнее редактирование: 04-12-2007 20:21 от Алексей1153++ » Записан
REM
Гость
« Ответ #32 : 16-12-2005 12:15 » 

Цитата
Этот "блестящий" прием напомнил мне знаменитую статью Поста:

Прочитал статью -- супер. Может быть имеет смысл поместить её в раздел Статьи -> Переводы ?
Записан
REM
Гость
« Ответ #33 : 16-12-2005 12:17 » 

To  ALL

Раз уж пошла такая пьянка, предлагаю обсудить всё то, что мы не любим в любимом языке. Благо, это вроде вполне соответствует теме. Для затравки вот такой пример кода:

Код:
int f( int ( ) );

Кто первый правильно ответит что сей код означает?  Улыбаюсь  Компиллятором, чур, не пользоваться!!  :nottrue:
Записан
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #34 : 16-12-2005 12:21 » 

функция типа int и с аргументом - int (конструктор инта - по умолчанию) ?
Записан

Alf
Гость
« Ответ #35 : 16-12-2005 12:21 » 

Прочитал статью -- супер. Может быть имеет смысл поместить её в раздел Статьи -> Переводы ?

Статья действительно блестящая, причем давняя, когда-то ходила по рукам еще не бобинах магнитной ленты задолго до появления персоналок. Однако у нас на сайте принципиально публикуются только собственные статьи, никакого плагиата. Поэтому лучше было бы разместить ссылку на нее.
Записан
Alf
Гость
« Ответ #36 : 16-12-2005 12:24 » 

Раз уж пошла такая пьянка, предлагаю обсудить всё то, что мы не любим в любимом языке.

Я бы ответил одним словом - эклектичность. Отсюда вытекают все остальные грехи, которые можно перечислять очень долго.
Записан
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #37 : 16-12-2005 12:26 » 

а, нет
функция типа int и с аргументом - "указатель на функцию типа int без аргументов"
Записан

REM
Гость
« Ответ #38 : 16-12-2005 12:42 » 

Цитата
Функция типа int и с аргументом - "указатель на функцию типа int без аргументов"
В точку.

В C++ можно делать объявления переменных и типов не указывая имён параметров. Лично я  вижу в этом большой минус. ИМХО, программисты часто недооценивают значение чётких и ясных имён. А зря. Недаром один из рефакторигов Мартина Фаулера называется Rename Method.
Записан
Hooter
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #39 : 16-12-2005 12:45 » 

В C++ можно делать объявления переменных и типов не указывая имён параметров. Лично я  вижу в этом большой минус. ИМХО, программисты часто недооценивают значение чётких и ясных имён.
Разве это - минус языка? Улыбаюсь Имхо, это - минус программиста Улыбаюсь
Записан
REM
Гость
« Ответ #40 : 16-12-2005 12:47 » 

Я бы ответил одним словом - эклектичность. Отсюда вытекают все остальные грехи, которые можно перечислять очень долго.

Круто. Пришлось даже заглянуть в словарь Ага  Не могу не согласиться. И виноват здесь даже не сам C, а сама попытка построить ОО язык на костях структурного языка.
Записан
REM
Гость
« Ответ #41 : 16-12-2005 12:56 » 

Цитата
Разве это - минус языка?  Имхо, это - минус программиста

ИМХО, это как раз минус языка. Язык должен "заставлять" нас писать правильный код. Ведь и технику Duffs-device тоже можно не применять. Однако пока есть такая возможнось, будут находиться программисты, которые используют эти "дыры". Результатом, как правило, является непонятный код, не позволяющий производить модификацию.
Записан
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #42 : 16-12-2005 13:05 » 

Я бы ответил одним словом - эклектичность.
А это что за слово такое.
Записан
Hooter
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #43 : 16-12-2005 13:05 » 

ИМХО, это как раз минус языка. Язык должен "заставлять" нас писать правильный код.
...
Результатом, как правило, является непонятный код, не позволяющий производить модификацию.
Я все-таки склонен считать, что язык ничего не должен разработчику. При желании, в любом языке можно найти минусы. Даже в русском Улыбаюсь Например, от того, что в русском языке есть мат, это не значит, что его нужно использовать направо и налево.

Результатом непонятного кода является не язык, а его неправильное использование. Например, непонятно что делает функция
Код:
float fn(int ch)
, хотя ее объявление сделано по всем правилам. А если написать
Код:
float getCarrierFrequency(int channel)
, то многое становится понятным (в конкретной предметной области, разумеется).
Записан
Alf
Гость
« Ответ #44 : 16-12-2005 13:33 » 

А это что за слово такое.

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

Вроде как есть такие модные сувениры - перочинные ножики на 154 предмета. Тут тебе и ножницы, и открывалка для консервов, и отвертка, и даже штопор. Однако многие предпочитают использовать настоящие ножницы и настоящую отвертку, а ножик открывают, только когда под рукой ничего больше нет.
Записан
NetRaider
Гость
« Ответ #45 : 16-12-2005 22:07 » 

Верно ли я понял, что

int main()
{
  int i = 10;
  {
   printf("%d /n", i);
   double  i = 12.124;
   printf("%f /n", i);
  }
 printf("%d /n", i);
}

Выведет
10
12.124
10?
Верно.
Цитата
Цитата
int i; //эквивалентно int i[12]
почему эквивалентно int i[12], а  не  int i[10] ?
или это прпосто очепятка?
Да, опечатка.
Записан
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #46 : 31-12-2005 09:33 » 

Вот ещё одна статья про достоинства и недостатки.
http://sql.ru/forum/actualthread.aspx?bid=21&tid=44649&pg=-1
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #47 : 31-12-2005 09:44 » 

Если ты будеш только искать достоинства и недостатки инструментов. Ты никогда не воспользуешся ими. Пользуйся и все. Каждый инструмент служит для своих целей. Кувалдой ты не будеш чинить часы. А молоточком для часов вбивать сваи. Это единственный критерий должен быть. Язык С и С++ это универсальные языки, в той или иной степени подходяшие для решения любых задач.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #48 : 31-12-2005 10:49 » 

Ладно, больше не буду.
Записан
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines