Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Давайте обсудим недостатки и недочёты С++, недостатки языка 
:(
    Опции темы
Vyacheslav
Дата 29.9.2003, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



[
Цитата

А вот мне бы хотелось вложенных функций - как в Паскале.

Если очень хочется. можно использовать локальные классы-функтуаторы.
Код

int f( int i )
{
 int j = i*2;

 class g_
 {
 public:
   g_( int& j ) : j_( j ) { }

   int operator()( int k )
   {
     return j_+k;  
   }

 private:
   int& j_;
 } g( j );

 j += 4;

 return g( 3 );
}


Цитата

Да, неплохо еще бы иметь возможность
делать макросы с одним именем и различным числом параметров,
как это можно для функций.

Макросы не являются принадлежностью ООП, являются наследием С и чрезмерное их использование - плохой стиль.
Цитата

Вот, например, хорошо бы ввести переменную времени компиляции
__FUNCTION_NAME__ , чтобы можно было выдавать диагностику типа

printf("Ошибка ... в функции %s",__FUNCTION_NAME__);

Как правило, это решается в конкретных компиляторах
Например, в С++Builder имеются подобные макросы:__FILE__, __FUNC__, __LINE__, __DATE__
Цитата

И чтоб как в Паскале можно было в switch'е указывать диапазон
switch (i)
{
case 1 .. 3:
...

case 4:
...
}

Зачем?
Код

switch (i)
{
case 1:
case 2:
case 3:  ...
break;
case 4:
...
}






--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Crait
Дата 29.9.2003, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: нет
Всего: 1



2 Fantasist
О да, от Паскаля оно не отличается - подобная функциональность
отсутствует и в нем и в CPP.
А значения с плавающей точкой
сравнивать все - таки можно - если осторожно wink.gif Скажем, такой код

void f1 (double Value)
{
if (Value == 1)
do_something(1);
else
if (Value == double(1.5))
do_something(2);
else
do_something(3);
}

.......
f1(1);
f1(1.5);
f1(2);

будет работать всегда.

Что касается сравнения строк (и других типов данных),
необязательно делать его "побайтно".
Бинарный поиск в отсортированной таблице - весьма эффективен.
Кстати, насчет таблиц. Реально, многие (извиняюсь, некоторые, два из двух)
компиляторы, проверенные мною на этот предмет, реализуют switch
с небольшим числом вариантов как последовательность проверок по типу if.
И ваще, язык высокого уровня - на то и служит,
чтобы не грузить программиста подобной рутиной. ;)

2 Vyacheslav
Спасибо насчет информации о __FUNC__ .
Что же касается кода

switch (i)
{
case 1:
case 2:
case 3:
...
break;

case 4:
...
}

- оно понятно; а если поддиапазон 1..100 ?

Насчет локальных классов - тоже понятно, но как-то оно через ж...
Да и были проблемы с этим - уже не упомню, какие.

А препроцессор и макросы - вещь хорошая (IMHO),
если пользоваться ею умеренно. И вместно.
Хоть даже и не согласуются они с парадигмой ООП.
Когда оптимизируешь по скорости критические участки кода -
бывает, уже и не до ООП.
Структурность же при (разумном) использовании макросов сохраняется.
Шаблоны (template) в подобных случаях не всегда применимы.

Кстати,
хотелось бы еще иметь возможность пошаговой отладки тела макросов
(как функций).
Впрочем, это пожелание - не в отношении стандарта языка,
а по поводу конкретных реализаций сред программирования.

Это сообщение отредактировал(а) Crait - 29.9.2003, 18:55
PM MAIL   Вверх
RAN
Дата 29.9.2003, 14:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Цитата
try
{
for (;;)
   switch
   {
     ...
     throw 1;
   }
}
catch(...)
{
}


Так и знал, что кто-нибудь предложит. Забыл в своём топике написать. Исключения - это и есть исключения. Смысл их в том, при нормальной работе ни одно исключение вызываться не должно. А вариант Vyacheslav'а - это скажем так, маленькая хитрость. Я против такого применения. Тем более, что некоторые среды будут останавливать выполнение программы с сообщением о произошедшей исключительной ситуации.

Но я тут о другом подумал. Тут говорили, что нельзя вводить возможность выхода из вложенных блоков. А try ввели в стандарт и ничего. Все понимают и легко читают. Я считаю, что goto плохо применять, потому как не известно куда он выбросит. А break выходит за пределы блока.
PM MAIL ICQ   Вверх
Vyacheslav
Дата 29.9.2003, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Crait
Цитата

А значения с плавающей точкой
сравнивать все - таки можно - если осторожно  Скажем, такой код


Настоятельно делать этого не рекомендую smile.gif. Особенно, если пишите программы для бухгалтерии. Можете получить кучу неприятностей, схватив где нибудь ситуацию вроде этой.

Код

#include <iostream>
#include <conio.h>
int main(int argc, char* argv[])
{
double value  = 1.005 - 1.0;
if (value == double(0.005))
 std::cout << value <<"== 0.005";
else
 std::cout << value <<"!= 0.005";
getch();

   return 0;
}







--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Crait
Дата 29.9.2003, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: нет
Всего: 1



Эт понятна. Я ж говорю - если осторожно ;)

Это сообщение отредактировал(а) Crait - 29.9.2003, 18:52
PM MAIL   Вверх
Fantasist
Дата 29.9.2003, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Цитата
f1(1);
f1(1.5);
f1(2);

будет работать всегда.


Ага, пока кто-нибудь не вызовет эту функцию со значением полученным кодом типа приведенного Vyacheslav'ом.

Цитата
Что касается сравнения строк (и других типов данных),
необязательно делать его "побайтно".


Обязательно. Бинарный поиск, хеш-таблицы - это методика храниния и поиска данных, и там действительно не всегда приходиться сравнивать строки, но сравниваются они только побайтно. Да и в любом случае процесс длительный.
Хотя, конечно, switch выглядит более удобочитаемо, чем куча if... else'ов. С этим согласен.



--------------------
Волны гасят ветер...
PM MAIL   Вверх
Peter
Дата 30.9.2003, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 28.7.2003
Где: Ставрополь

Репутация: -1
Всего: 1



Кому не нравится Си - пусть говорит об этом на сишных конференциях высшего уровня. Там многоопытные специалисты примут или не примут предложения.
Есть еще вариант: написать свой собственный компилятор и играть с ним, сколько душе угодно.


--------------------
всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23).
PM MAIL WWW   Вверх
Crait
Дата 30.9.2003, 13:47 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: нет
Всего: 1



Спасибо, Peter, за ценные советы.
PM MAIL   Вверх
RAN
Дата 30.9.2003, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.

Репутация: 5
Всего: 6



Модератор: Я понимаю, что тема располагает к флейму. Но последнии два топика - это уже слишком. Прошу не продолжать в этом направлении. Всё равно буду удалять.
PM MAIL ICQ   Вверх
Yujen
  Дата 1.10.2003, 15:52 (ссылка)    |    (голосов: 2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А ты не слышал такую поговорку: "Плохому танцору всегда ЯЙЦА МЕНШАЮТ" biggrin.gif
Я вот например DELPHI видел всего два раза в жизни, и не понял как там и что там, хотя в Turbo Pascal'е писал когдато (в древние времена, в эпожу MS-DOS), и что я по твоему должен на каждом углу орать, что DELPHI это [censored33! Пожалуйста, соблюдайте элементарные правила приличия при общении на форуме] отстой Borland MUST DIE MSVISUAL C++ FOR EVA.
Нет парень ты в себе разберись, а потом уже что-либо охаивай, напиши для начала какой-нибуть простенький интерпретатор, дай людям поюзать, вот тогда и только тогда ты поймешь, что это такое: писать...
А обделать можно все, что угодно. Обделать легко, отмыться трудно
  Вверх
setq
Дата 1.10.2003, 16:30 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











:-)
это в чей адрес, интересно?

по поводу...

Crait
<<setq, твоя третья проблема может быть разрешена так :
for (int i=6, j=0, k=666;;)>>

...не получится для
for (int i=6, double j=7.7, char *s=0;;)
такие дела :-(
  Вверх
mr.DUDA
Дата 1.10.2003, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Цитата
...не получится для
for (int i=6, double j=7.7, char *s=0;;)
такие дела :-(

ГА !!!

получится, если делать вот так:
Код
void InitCycle(int &i, double &j, char *&s, int valI, double valJ, char *valS)
{
    i = valI;
    j = valJ;
    s = valS;
}

..........

int i; double j; char *s;
for(InitCycle(i, j, s, 6, 7.7, 0);;)


такие дела
biggrin.gif biggrin.gif biggrin.gif


--------------------
user posted image
PM MAIL WWW   Вверх
Peter
Дата 7.10.2003, 16:33 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 28.7.2003
Где: Ставрополь

Репутация: -1
Всего: 1



2RAN: по-моему, мое сообщение не было оффтопик. Правда, я вместо того, чтобы поругать язык, высказал свое мнение об участниках форума. Насмотрелся уже на докторов наук, которые ни в зуб ногой даже в "своей" теме.
Учиться надо!!!
А на конференциях высокого уровня, я полагаю, не чайники сидят, а многоопытные соображающие мужики.


--------------------
всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23).
PM MAIL WWW   Вверх
Vit
Дата 7.10.2003, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: нет
Всего: 207



Цитата(Peter @ 7.10.2003, 07:33)
Кому не нравится Си - пусть говорит об этом на сишных конференциях высшего уровня.


Модератор: Кому, что и где говорить указывать не надо. Не маленькие - сами разберёмся! Вас не устраивает наш уровень - пожалуйста, мы никого не держим! Идите на "сишные конференции высшего уровня". Зачем Вы тогда здесь отвечаете? Если Вам не нравится то что здесь говорится - вам надо обратится к модератору, и он уберёт замечания не соответствующие правилам форума, а Вам никто права распоряжаться на форуме хозяйской рукой, указывая кому и что говорить, не давал. Не надо подменять администрацию. Кроме того среди тех кто высказывался никто не сказал, что ему не нравится C.

Цитата(Peter @ 7.10.2003, 07:33)
Там многоопытные специалисты примут или не примут предложения.


Модератор: Знаете, у нас свои специалисты есть. Реклама других форумов категорически запрещена. Читайте правила. Нам не требуется чтобы кто-то принимал или не принимал наши возражения. Здесь люди обмениваются своим мнением, и для этого не требуется принятие кем либо каких-то предложений. Вы нас наверное с какой-то другой организацией спутали!


Цитата(Peter @ 7.10.2003, 07:33)
Правда, я вместо того, чтобы поругать язык, высказал свое мнение об участниках форума.



Модератор: Вы сделали 3 ошибки!
1) Язык C/C++ никто не ругал. Были высказаны мнения по поводу того, что в этом языке кому-то не удобно, или что бы он хотел иметь. Замете, ни один из участников дисскуссии не ругал язык. Указывали на недостатки - да, сравнивали с другими языками - да, ругать - нет! Впрочем тема, бала несколько одиозно озаглавлена - это исправлено, но к чести участников форума - никто до ругани в адрес C не опустился.

2) Высказывать личное мнение об участниках форума категорически запрещено! См. правила форума.

3) Переход с обсуждения темы на обсуждение обсуждающих - есть офтопик. См. правила форума.



Цитата(Peter @ 7.10.2003, 07:33)
Насмотрелся уже на докторов наук, которые ни в зуб ногой даже в "своей" теме.


Модератор: Это вы о тех аксакалах которые сидят на "на сишных конференциях высшего уровня"? Так мы туда и не ходим! Зачем они нам!


Цитата(Peter @ 7.10.2003, 07:33)
Учиться надо!!!


Модератор: Да, причём многим надо учиться языку С++, а участнику под ником "Peter" надо прежде всего учится уважению собеседников, уважению чужого мнения, умению внимательно читать и понимать смысл прочитанного и элементарной вежливости и культуре общения, по-видимому Peter пропустил детский сад и первые 3 класса школы, где учили таким простым вещам...


Цитата(Peter @ 7.10.2003, 07:33)
А на конференциях высокого уровня, я полагаю, не чайники сидят, а многоопытные соображающие мужики.



Модератор: Да пусть сидят где угодно!



Модератор: Я снизил репутацию участника Peter, объяснения вы можете найти в таблице рейтингов, а аргументы описаны здесь. Обращаясь к Peter, хочу сказать, что вы умудрились в 2х коротких сообщениях многократно нарушить правила форума, оскорбить участников форума и администрацию форума. Повторные действия в этом направлении могут привести к анулированию Вашей учётной записи и блокирование IP адресов Вашего провайдера для доступа к форуму. Обжаловать мои действия, как и действия модераторов можно в специальном разделе "Обсуждение форума" http://forum.vingrad.ru/index.php?act=SF&f=27.

Продолжение этой дисскуссии здесь будет рассматриваться как повторное злостное нарушение правил форума. Причём не важно, кто будет продолжать обсуждение. Здесь обсуждаем - недостатки, недочёты языка C/C++ и то что Вам лично в этом языке не хватает для полного счастья. Меня, модераторов и Peter'а продолжать обсуждать здесь КАТЕГОРИЧЕСКИ ЗАПРЕЩАЕТСЯ!



--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Vit
Дата 7.10.2003, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: нет
Всего: 207



Модератор:
2 setq - осторожнее в названии темы. Вы всё правильно написали по поводу возможности недостатков языка C, и обсуждение может быть интересным, но заголовок темы таким быть не должен!


Заголовок я исправил, не обессудте, надеюсь теперь вопросы по поводу корректности ни у кого не возникнут.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1069 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.