Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
 Аватар для MastAKK
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592

Насколько корректно будет работать замыкание?

19.11.2013, 18:20. Показов 833. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мой друг-JS'ер бросил мне очередной челлендж. В этот раз он мне предложил сделать замыкание для a*x+y
На JS
JavaScript
1
2
3
4
5
6
7
8
9
function line(k,b){
  return function(x) {
    return k*x+b;
  }
}
 
var a = line(2,7),    // function(x) { return 2*x + 7; }
    b = line(3,2),    // function(x) { return 3*x + 2; }
    c = line(7,-2);   // function(x) { return 7*x - 2; }

Вроде как-бы я сделал, но не уверен, всегда ли будет корректно работать следующий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
auto func(int a, int b){
    return [a, b](int x)->int{
        return a*x+b;
    };
}
 
 
 
int main()
{
    auto t = func(0, 2);
    cout << t(3) << endl;
    return 0;
}
Тобишь всегда-ли будет доступ к переменным a и b у функции t()? Может ли случиться такое, что переменные "потеряются" в памяти?

Добавлено через 1 минуту
Тобишь в данном случае он будет работать правильно. Но всегда ли так будет?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.11.2013, 18:20
Ответы с готовыми решениями:

Корректно ли будет работать функция realloc в пользовательском классе массива
Доброго времени суток. Корректно ли будет работать функция realloc в пользовательском классе массива, если в этом массиве предполагается...

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

Будет ли все это корректно работать
Бюджет 1000$ Материнская плата ASUS P8B75-V LGA1155 (iB75) ATX 2PCIe3.0x16, 3xPCIex1, 3PCI, 4DDR3 DC, 5SATA I/II RAID(0,1,5,10),...

9
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
19.11.2013, 18:22
Не потеряются. Там идет захват по значению. Значит они будут просто скопированы
1
 Аватар для MastAKK
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
19.11.2013, 18:22  [ТС]
I.M., благодарю, именно это я и хотел услышать
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
19.11.2013, 18:25
Цитата Сообщение от MastAKK Посмотреть сообщение
auto func(int a, int b){
А смысл выводить тип фиксированного выражения от фиксированных типов? Уж проще написать
C++
1
int func(int a, int b)
.
0
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
19.11.2013, 18:26
taras atavin, а там не int возвращается, а std::function<int(int)>
Ну не обязательно именно этот тип, но приводимый к нему
0
 Аватар для MastAKK
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
19.11.2013, 18:27  [ТС]
taras atavin, auto тут потому, что мне было лень писать (см. выше что). А так компилятор все прекрасно понял. Тип возвращаемого значения тут НЕ int
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
19.11.2013, 18:40
Цитата Сообщение от I.M. Посмотреть сообщение
taras atavin, а там не int возвращается, а std::function<int(int)>
Ну не обязательно именно этот тип, но приводимый к нему
Входные данные имеют фиксированный тип, операции с ними и порядок этих операций совпадает, значит и тип значения фиксирован. Ни int? Эйси.
C++
1
2
3
4
func (int x, int y)
{
 return (float)x/(float)y;
}
должна быть
C++
1
float func (int x, int y)
. Но это фиксированный тип, хоть и не int. Выводить имеет смысл, когда типы исходных данных имеют множество сочетаний, а каждое вручную анализировать не охота. А здесь выбор типа занимает меньше времени, чем набор auto.

Добавлено через 1 минуту
Цитата Сообщение от MastAKK Посмотреть сообщение
Тип возвращаемого значения тут НЕ int
Где у меня утверждение, что это int? Это тип однозначно связанный с int и алгоритмом, в котором этот int участвует.
0
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
19.11.2013, 18:40
Еще раз. Там возвращается лямбда
C++
1
[a, b](int x)->int{return a*x+b;};
Видимо, так было написать короче
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
19.11.2013, 18:42
Цитата Сообщение от I.M. Посмотреть сообщение
Еще раз. Там возвращается лямбда
Код C++
1
[a, b](int x)->int{return a*x+b;};
это не int
Ещё раз. Где я утверждаю, что там int?
0
 Аватар для MastAKK
148 / 139 / 18
Регистрация: 13.10.2012
Сообщений: 592
19.11.2013, 21:39  [ТС]
taras atavin, я вообще не понимаю, о чем вы. Там тип возвращаемого значения (без auto):
C++
1
std::function<int(int)> func(int x, int y)
если не ошибаюсь

Добавлено через 24 секунды

Не по теме:

Если вопрос в том, зачем - то ответ просто: наспор, чтобы доказать мощь C++11

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.11.2013, 21:39
Помогаю со студенческими работами здесь

Будет ли корректно работать данная сборка?
Будет ли корректно работать данная сборка? И нужно ли что-то менять? http://hardprice.ru/rig/2m9m1o

Корректно ли будет работать такая связка.
Ответте пожалуйста, кто знает. Корректно ли будет работать такая связка. Мать:Maximus Exnreme, проц: Intel Core Quad Q9550 2,83 Ггц, графа:...

Будет ли корректно работать сеть по такой схеме?(схема )
Есть 6 зданий в №1 входит опто-волокно, нужно дать интернет на все здания, скорость на всех машынах должна быть 1-2Мбит/с. Будет ли...

Будет ли корректно работать: AMD Athlon II x2 250, ATI Radeon HD 5770, ASUS K8N.
Решил немного улучшить комп) С деньгами проблема и полностью новый комп брать не вариант. Так я вот что хотел спросить. Будет ли корректно...

Будет ли работать корректно DDR3 1600мгц 8gb на ноутбуке , где стояла ОП DDR3L 4gb 1600мгц ?
Дело в том, что я хотел апгрейднуть ноут 8гб оперативки. Перед покупкой, на линуксе и на сайтах , где я нашел модель своего ноута , я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru