|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
17.12.2011, 15:52 | #81 |
Форумчанин
Регистрация: 29.03.2011
Сообщений: 141
|
тоесть C++11 официально новый язык ?
я просто думаю на кой мне типерь просто C++ ? это для минимальный элемент в трехмерном массиве ? |
17.12.2011, 16:03 | #82 | ||
Форумчанин
Регистрация: 29.09.2010
Сообщений: 636
|
Цитата:
Цитата:
ток с основами осталось разобраться |
||
17.12.2011, 16:06 | #83 | |||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Цитата:
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|||
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
|
не нужно копировать текст из ссылки.
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |