LINUX.ORG.RU

Зачем тянуть всякое постороннее в c++?

 ,


0

5

И делать из него большее, чем C с классами, что всегда и являлось его главным предназначением?

Он и так перегружен, а теперь из него делают какого-то мутанта, добавляя всякие лямбда.

В обычном C++, если ты передаешь глобальную переменную, или указатель, или ссылку в функцю, и используешь ее там локально, ты не получишь ошибок вида «X is not captured».

Перемещено mono из talks

★★★★★

Последнее исправление: cvs-255 (всего исправлений: 1)

Просто С++ для тех, кто понимает как пользоваться инструментами. Если не понимаешь - пиши на Бейсике.

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от fmdw

Всё правильно, теперь анонимус может высказать своё верное мнение.

fluorite ★★★★★
()
Ответ на: комментарий от Solace

offtopic: как такие аватары делать? Есть какой-то специальный сервис?

Deleted
()
Ответ на: комментарий от hlebushek

Подтверждается тезис о том, что если Це - говно, то Це++ - ещё более вонюч.

Hertz ★★★★★
()
Ответ на: комментарий от cvs-255

А где тут локальное использование? Я почему-то вижу что ты дважды (!) Вызываешь конструктор копирования.

RiseOfDeath ★★★★
()

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

ckotinko ☆☆☆
()

коде-литерал/функция-литерал/лямбда - настолько удобна что была(в несколько иной реализации) уже в Algol-60 (передача по имени - где можно было передавать выражение которое вычислялось каждый раз при обращении к этому(значению) имени в процедуре-функции - но гемморой с реализациями угомеостазил выкинуть этот механизм в наследниках таких как Паскаль/С

к ознакомлению:

https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_name


http://stackoverflow.com/questions/838079/what-is-pass-by-name-and-how-does-i...

qulinxao ★★☆
()

эм... так никто ж не заставляет. не хочешь - не ешь, тащемта.

Iron_Bug ★★★★★
()
Ответ на: комментарий от FIL

«в том» - речь о годе(годах) до включения шаблонов т.е явно речь о начале 80ых.

когда даже название языка ещё не устоялось и одновременно ходило названия как C++ так и СwithClasses с постепенным выдавливанием (позднего первого) именем более старого второго.

qulinxao ★★☆
()

в очередной раз показал всем что ты даун.

anonymous
()
Ответ на: комментарий от next_time

в том году не было, как минимум, шаблонов и ещё много чего. в то время его ещё можно было назвать С с классами, сейчас — уже нет.

Вам кто-то запрещает использовать с++ как «си с классами»?

andreyu ★★★★★
()
Ответ на: комментарий от FIL

лол, не смешите, у меня книжка по С++ 2008 года и там целая глава посвященная шаблонам.

Но с++ вышел несколько раньше 2008 года. Приблизительно в 1983 году.

andreyu ★★★★★
()
Ответ на: комментарий от FIL

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

Iron_Bug ★★★★★
()
Ответ на: комментарий от andreyu

Вам кто-то запрещает использовать с++ как «си с классами»?

Неудобно. Стандартная и многие другие библиотеки во многом построены на шаблонах, без исключений приходится городить двухфазную инициализацию, которая выглядит как говно и не очень хорошо уживается с RAII, и т.д. и т.п. Поезд ушёл, «це с классами» никому не нужен

Gvidon ★★★★
()

Лямбды в С++ - это просто сахар над функторами, которые есть классы. Так что не переживай, ты все так же пользуешься «С с классами».

anonymous
()
Ответ на: комментарий от andreyu

Приблизительно в 1983 году.

В 1983-м году как раз было придумано название C++, до этого времени был C++ with classes.

Первая редакция книги C++ Programming Language вышла в 1985-м году, а в конце 1985-го был представлен первый коммерческий компилятор C++.

Впрочем, тот C++, к которому мы привыкли, т.е. с множественным наследованием, исключениями и шаблонами появился в 1990-1991 годах.

eao197 ★★★★★
()
Ответ на: комментарий от Iron_Bug

в 1995 году, шаблоны уже точно были.

Шаблоны были в языке где-то с 1991.

причём они не только-только появились, а уже был STL и все дела.

Степанов показал свой STL в 1993-м. В 1994-м STL был опубликован в свободном доступе. В 1995-м STL был доступен как отдельная библиотека, которая не была частью поставки компиляторов (по крайней мере не всех). С ней нужно было разбираться отдельно.

Кроме того, с 1994-го велась серьезная работа по подготовке включения STL в стандарт C++, так что сам STL до 1997-1998 еще изменялся.

eao197 ★★★★★
()
Ответ на: комментарий от Gvidon

Поезд ушёл, «це с классами» никому не нужен

Это вы так за весь мир сейчас решили?

andreyu ★★★★★
()
Ответ на: комментарий от eao197

Впрочем, тот C++, к которому мы привыкли, т.е. с множественным наследованием, исключениями и шаблонами появился в 1990-1991 годах.

Что несколько старше 2008 года, не так ли?

andreyu ★★★★★
()
Ответ на: комментарий от Solace

С с классами - это предшественник C++, а не сам C++.

anonymous
()
Ответ на: комментарий от andreyu

Врёшь. C++ он как раз называет самостоятельным языком. А C with classes - предшественник крестов.

anonymous
()

Так известно же, что Страуструп - идиот. Над ним все ржали, когда он C++ сделал. Но потом, когда пришло Delphi, C++ оказался на фоне этого ужаса не таким уж и говном. А потом пошло-поехало.

Quasar ★★★★★
()
Ответ на: комментарий от hlebushek

Ну ежели использовать не там, где это имеет смысл, то конечно говно.

Quasar ★★★★★
()
Ответ на: комментарий от andreyu

Дык и к бабке не ходи :)

Про 2008 год было феерично, но, полагаю, человек просто не понял о чем речь.

eao197 ★★★★★
()
Ответ на: комментарий от andreyu

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

next_time ★★★★★
()
Ответ на: комментарий от Quasar

Так известно же, что Quasar - идиот. Над ним все ржали, когда он на linux.org.ru писал. Но потом, когда пришло cvs-255, Quasar оказался на фоне этого ужаса не таким уж и говном. А потом пошло-поехало.

anonymous
()
struct S0
{
  const char *key;
  std::function <std::string (iContext *)> fn;
};

static struct S0 S1[] = {
  {"something", [] (iContext *c) -> std::string {
    return c->get_string("something2", "Default");}}, // or some other convertion code here
  ....
  {NULL, {}}
};

int convert(...)
{
 ...
  int i=0;
  while (S1[i].key) {
    auto value = S1[i].fn(this);
    values1.insert(pair <string, string> (S1[i].key, value));
    ++i;
  }
}

на лицо нормальное императивное задания правил конвертации одного в другое. легко менять, легко расширить. а ты неосилятор.

anonymous
()
Ответ на: комментарий от anonymous

Врёшь. C++ он как раз называет самостоятельным языком. А C with classes - предшественник крестов.

Хорошо, что Бьерн вам это лично сказал.

andreyu ★★★★★
()
Ответ на: комментарий от next_time

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

И как это относится к «си с классами»?

andreyu ★★★★★
()
Ответ на: комментарий от next_time

«си с классами» - это C++ с приминением минимума наследования, без шаблонов, RTTI и исключений.

anonymous
()
Ответ на: комментарий от next_time

корпоративные стандарты

не повезло им, у них есть ты.

anonymous
()
Ответ на: комментарий от andreyu

Это написано в D&E, например. Частично, это есть в предисловии к «C++ programming language».

anonymous
()

добавляя всякие лямбда

Потому что со списками и проч. подобными структурами данных удобно работать с помощью map/filter/fold и лямбд.

Freyr69 ★★★
()
Ответ на: комментарий от Quasar

Напомни, когда это приходило время delphi? Он всегда был нишевой игрушкой.

anonymous
()

По моему опыту использования C++11, лямбда - одно из самых полезных нововведений.

Если тебе нравится Си с классами, то просто не используй больше никакие возможности C++. Никто тебя не заставляет.

rupert ★★★★★
()

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

anonymous
()
Ответ на: комментарий от next_time

«си с классами» — это С++ без шаблонов, грубо говоря)

Можно и так сказать. Язык не обязывает использовать шаблоны.

andreyu ★★★★★
()
Ответ на: комментарий от anonymous

RTTI и исключений.

Что одно, что другое имеет сомнительную важность. А вот узким местом запросто может оказаться.

andreyu ★★★★★
()
Ответ на: комментарий от rupert

По моему опыту использования C++11, лямбда - одно из самых полезных нововведений.

А как же final, override, nullptr? Это если не касаться новых плюшек stl и move-семантики.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Язык не обязывает использовать шаблоны.

После появления в C++98 auto_ptr, и замены его на unique_ptr в C++11 (а так же добавления shared_ptr/weak_ptr), можно сказать, что обязывает.

Да и с лямбдами в C++11 зачастую лучше работать через шаблоны. Т.к. приведение лямбды к объекту std::function — это лишняя аллокация, а то и не одна.

eao197 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.