![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#81 |
Форумчанин
Регистрация: 29.03.2011
Сообщений: 141
|
![]()
тоесть C++11 официально новый язык ?
я просто думаю на кой мне типерь просто C++ ? это для минимальный элемент в трехмерном массиве ? |
![]() |
![]() |
![]() |
#82 | ||
Форумчанин
Регистрация: 29.09.2010
Сообщений: 636
|
![]() Цитата:
![]() Цитата:
ток с основами осталось разобраться ![]() |
||
![]() |
![]() |
![]() |
#83 | |||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
Цитата:
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|||
![]() |
![]() |
![]() |
#84 |
Форумчанин
Регистрация: 29.03.2011
Сообщений: 141
|
![]()
а для чего стондарты сделали ?
что не хвотало чтото ? |
![]() |
![]() |
![]() |
#85 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
к примеру стандарт человека голова+две ноги+туловище+две руки. Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||
![]() |
![]() |
![]() |
#86 |
Форумчанин
Регистрация: 29.03.2011
Сообщений: 141
|
![]()
А что с лямдами ?
|
![]() |
![]() |
![]() |
#87 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
добавили возможность лямбда-функций.
http://ru.wikipedia.org/wiki/C%2B%2B...BD.D0.B8.D1.8F Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#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(); } |
![]() |
![]() |
![]() |
#89 |
Форумчанин
Регистрация: 29.03.2011
Сообщений: 141
|
![]()
Скажим Новый синтаксис суть его не понятна ?
|
![]() |
![]() |
![]() |
#90 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
не нужно копировать текст из ссылки.
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |