Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2011, 15:52   #81
МоЗгАвеД
Форумчанин
 
Аватар для МоЗгАвеД
 
Регистрация: 29.03.2011
Сообщений: 141
По умолчанию

тоесть C++11 официально новый язык ?

я просто думаю на кой мне типерь просто C++ ?

это для минимальный элемент в трехмерном массиве ?
МоЗгАвеД вне форума Ответить с цитированием
Старый 17.12.2011, 16:03   #82
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

Цитата:
тоесть C++11 официально новый язык ?
бугага, ну да, новый язык
Цитата:
я просто думаю на кой мне типерь просто C++ ?
практически верно мыслишь!

ток с основами осталось разобраться
onewho вне форума Ответить с цитированием
Старый 17.12.2011, 16:06   #83
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
тоесть C++11 официально новый язык ?
нет это новый стандарт языка.
Цитата:
я просто думаю на кой мне типерь просто C++ ?
наверно на тот же на который до этого?
Цитата:
это для минимальный элемент в трехмерном массиве ?
что?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.12.2011, 16:17   #84
МоЗгАвеД
Форумчанин
 
Аватар для МоЗгАвеД
 
Регистрация: 29.03.2011
Сообщений: 141
По умолчанию

а для чего стондарты сделали ?

что не хвотало чтото ?
МоЗгАвеД вне форума Ответить с цитированием
Старый 17.12.2011, 16:23   #85
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
а для чего стондарты сделали ?
чтоб все творили не что хотят, а С++ именно и оставался С++.
к примеру стандарт человека голова+две ноги+туловище+две руки.
Цитата:
что не хвотало чтото ?
расширение функциональности языка, чтоб он был еще мощнее и удобнее.(например лямбды)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.12.2011, 17:20   #86
МоЗгАвеД
Форумчанин
 
Аватар для МоЗгАвеД
 
Регистрация: 29.03.2011
Сообщений: 141
По умолчанию

А что с лямдами ?
МоЗгАвеД вне форума Ответить с цитированием
Старый 17.12.2011, 21:05   #87
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

добавили возможность лямбда-функций.
http://ru.wikipedia.org/wiki/C%2B%2B...BD.D0.B8.D1.8F
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.12.2011, 22:27   #88
МоЗгАвеД
Форумчанин
 
Аватар для МоЗгАвеД
 
Регистрация: 29.03.2011
Сообщений: 141
По умолчанию

Лямбда-функции и выражения

В стандартном C++, например, при использовании алгоритмов стандартной библиотеки C++ sort и find, часто возникает потребность в определении функций-предикатов рядом с местом, где осуществляется вызов этого алгоритма. В языке существует только один механизм для этого: возможность определить класс внутри функции. Зачастую данный способ является слишком избыточным и многословным и лишь затрудняет чтение кода. Кроме того, стандартные правила C++ для классов, определённых в функциях, не позволяют использовать их в шаблонах и таким образом делают их применение невозможным.

Очевидным решением проблемы явилось разрешение определения лямбда-выражений и лямбда-функций в C++11. Лямбда-функция определяется следующим образом:
[](int x, int y) { return x + y; }

Тип возвращаемого значения этой безымянной функции вычисляется как decltype(x+y). Тип возвращаемого значения может быть опущен только в том случае, если лямбда-функция представлена в форме return expression. Это ограничивает размер лямбда-функции до одного выражения.

Тип возвращаемого значения может быть указан явно, например:
[](int x, int y) -> int { int z = x + y; return z; }

В этом примере создаётся временная переменная z для хранения промежуточного значения. Как и в нормальных функциях, это промежуточное значение не сохраняется между вызовами.

Тип возвращаемого значения может быть полностью опущен, если функция не возвращает значения (то есть тип возвращаемого значения — void)

Также возможно использование ссылок на переменные, определённые в той же области видимости, что и лямбда-функция. Набор таких переменных обычно называют замыканием. Замыкания определяются и используются следующим образом:
std::vector<int> someList;
int total = 0;
std::for_each(someList.begin(), someList.end(), [&total](int x) {
total += x;
});
std::cout << total;

Это отобразит сумму всех элементов в списке. Переменная total хранится как часть замыкания лямбда-функции. Так как она ссылается на стековую переменную total, она может менять её значение.

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

Для лямбда-функций, гарантированно исполняемых в области их видимости, возможно использование всех стековых переменных без необходимости явных ссылок на них:
std::vector<int> someList;
int total = 0;
std::for_each(someList.begin(), someList.end(), [&](int x) {
total += x;
});

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

Если вместо [&] используется [=], все используемые переменные будут скопированы, что позволяет использовать лямбда-функцию вне области действия исходных переменных.

Способ передачи по умолчанию можно также дополнить списком отдельных переменных. Например, если необходимо передать большинство переменных по ссылке, а одну по значению, можно использовать следующую конструкцию:
int total = 0;
int value = 5;
[&total, value](int x) { total += (x * value); };

Это вызовет передачу total по ссылке, а value — по значению.

Если лямбда-функция определена в методе класса, она считается дружественной этому классу. Такие лямбда-функции могут использовать ссылку на объект типа класса и обращаться к его внутренним полям:
[](SomeType *typePtr) { typePtr->SomePrivateMemberFunction(); }

Это будет работать только если областью создания лямбда-функции является метод класса SomeType.

Особым образом реализована работа с указателем this на объект, с которым взаимодействует текущий метод. Он должен быть явно обозначен в лямбда-функции:
[this]() { this->SomePrivateMemberFunction(); }
МоЗгАвеД вне форума Ответить с цитированием
Старый 17.12.2011, 22:28   #89
МоЗгАвеД
Форумчанин
 
Аватар для МоЗгАвеД
 
Регистрация: 29.03.2011
Сообщений: 141
По умолчанию

Скажим Новый синтаксис суть его не понятна ?
МоЗгАвеД вне форума Ответить с цитированием
Старый 17.12.2011, 22:38   #90
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

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

Цитата:
Скажим Новый синтаксис суть его не понятна ?
мне вполне понятна.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CPP Указатель на статический двумерный массив Furchtlos Общие вопросы C/C++ 4 09.12.2011 20:29
статический массив стеков 19denis90 C++ Builder 1 04.07.2011 13:00
статический двумерный массив Koksa Помощь студентам 1 10.02.2011 07:58
статический массив IrinaSS Общие вопросы C/C++ 2 08.12.2010 19:31
Одномерный статический массив С++ Natali21 Помощь студентам 1 17.11.2010 16:57