@ProCxx

Страница 2045 из 2477
Alexander
10.05.2018
11:06:58
так то да, оно работает

Ilia
10.05.2018
11:13:30
Что-то я не понял тебя, ты напишешь лямбду а потом сам будешь ещё её менять?

Google
Alexander
10.05.2018
11:14:33
Что-то я не понял тебя, ты напишешь лямбду а потом сам будешь ещё её менять?
я пишу лямбду с mutable. То есть я хочу часть переменных, которые я захватил копированием, менять. а вторую часть, которую я захватил копированием, я не хочу менять и защитить их как-то хочу

и способа нормального кроме как навесить на них const за пределами лямбды я не вижу

Spoonson
10.05.2018
11:15:47
можно сделать какой-нибудь враппер, который будет делать копию и работать как std::cref

Igor
10.05.2018
11:39:55
но тогда лишнее копирование (которое компилятор мб соптимизирует)
Заведи ссылку на const объект и захватывай ее, лишнего копирования не будет.

Nikita
10.05.2018
11:40:38
Насколько я понимаю ссылка не катит, потому что обьект может уже умереть когда лямбда вызовется

Igor
10.05.2018
11:46:44
Насколько я понимаю ссылка не катит, потому что обьект может уже умереть когда лямбда вызовется
И правда ошибся, меня смутило что почему-то у MSVC захватывается не ссылка а значение, https://godbolt.org/g/RhcxRZ.

Alexander
10.05.2018
11:47:00
я вообще хотел бы, чтобы это легко делалось с помощью обычных спецификаторов во время захвата

без всего этого говна. Пусть Полухин и не согласится из-за перегруженности лямбд

Friedrich
10.05.2018
11:48:15
без всего этого говна. Пусть Полухин и не согласится из-за перегруженности лямбд
С самого начала так можно было сделать, щас уже сложновато переделывать.

Ну ты и сам понимаешь.

Alexander
10.05.2018
11:48:36
С самого начала так можно было сделать, щас уже сложновато переделывать.
надо просто нужным людям закинуть идею, они её протолкнут

я знаю в комитете любителя лямбд

Google
Friedrich
10.05.2018
11:48:48
надо просто нужным людям закинуть идею, они её протолкнут
Вот так вот C++ и превращается в монстра!

Всяк пропихивает свои фичи, и получается чёрте что.

Alexander
10.05.2018
11:49:20
да норм получается пока что

Igor
10.05.2018
11:49:30
+, потому что ссылки не продлевают время жизни
А может MSVC прав? На http://en.cppreference.com/w/cpp/language/lambda написано что "The type of each data member is the type of the corresponding captured entity, except if the entity has reference type (in that case, references to functions are captured as lvalue references to the referenced functions, and references to objects are captured as copies of the referenced objects)."

Igor
10.05.2018
11:50:51
Эт получается, что ссылка копируется, вроде бы?
Насколько я понимаю по стандарту да, но видимо полагаться на это нельзя раз разные компиляторы делают по-разному.

Friedrich
10.05.2018
11:52:06
Ок, я неправ. Перечитал, и твоя трактовка мне ближе.

Но это же для кейса с захватом по значению?

Alexander
10.05.2018
11:53:12
да, это захват по значению ссылки

Friedrich
10.05.2018
11:53:29
Ну ок, по значению ссылки захватывается объект. Вроде бы нормально.

Igor
10.05.2018
12:00:47
Еще смешнее - если поставить ссылку в инициализатор, то все компиляторы выводят тип под ссылкой. Но только gcc оставляет const: https://godbolt.org/g/qgdgkB

Aidar
10.05.2018
12:22:46
Только всрешь копируемость

Ну кстати неочевидно почему сразу не приняли такой синтаксис [cv qualified type, reference]name[= ...]

Alexander
10.05.2018
12:32:26
как раскопаю - расскажу

Ilia
10.05.2018
12:44:18
Не, блин, тебе это не пойдёт. Это если для ссылок.

Alexander
10.05.2018
12:45:00
со ссылками всё окей сейчас ?

Ilia
10.05.2018
12:45:42
Чтото какой-то у тебя совсем мутный, непонятный случай...

Google
Alexander
10.05.2018
12:58:46
Чтото какой-то у тебя совсем мутный, непонятный случай...
да-да. это чисто описано как корнер кейс

Aidar
10.05.2018
13:08:15
вот для меня тоже загадка
или так: int main() { int a; int b; auto c = [a = a, b = const int{b}] {}; }

Alexander
10.05.2018
13:08:34
так, к сожалению, тоже не сделали

Aidar
10.05.2018
13:08:44
да я просто идейки кидаю

Alexander
10.05.2018
13:08:47
хотя казалось бы, алиасы просто чуточку расширить

Aidar
10.05.2018
13:10:26
кстати вот вопрос

почему я не могу создавать cv qualified временые переменные

ну типа: const int a{1}; можно const int{1} нельзя

Igor
10.05.2018
13:13:59
кстати вот вопрос
Почему нельзя? typedef const int ci; ci{1};

Aidar
10.05.2018
13:14:52
Почему нельзя? typedef const int ci; ci{1};
еще больший фейл тогда

Александр
10.05.2018
13:15:09
Почему нельзя? typedef const int ci; ci{1};
Ну ё мое, когда же задепрекейтят typedef

Igor
10.05.2018
13:15:34
Spoonson
10.05.2018
13:15:54
потому что есть using

Александр
10.05.2018
13:15:57
Никогда? Зачем?
Чтобы люди начали использовать нормальный современный using

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

Aidar
10.05.2018
13:16:36
Почему нельзя? typedef const int ci; ci{1};
using cint = const int; int b = 0; auto f = [b = cint{b}]() mutable { b = 8; }; лол оно ваще не работает

это int а не const int

Igor
10.05.2018
13:16:44
Чтобы люди начали использовать нормальный современный using
Если без шаблонов то разницы нету и typedef ничем не хуже. Ломать совместимость из-за этого никто не будет. Не хотите использовать typedef в команде - настройте линтер.

Ilia
10.05.2018
13:16:53
ну типа: const int a{1}; можно const int{1} нельзя
Потому что второе и так и сяк const? (ну или почти const)

Google
Alexander
10.05.2018
13:17:23
using cint = const int; int b = 0; auto f = [b = cint{b}]() mutable { b = 8; }; лол оно ваще не работает
не работает, потому что mutable сводит на нет все твои старания ?

Александр
10.05.2018
13:17:28
Ясен пень, никто не уберет

Aidar
10.05.2018
13:18:27
вопрос а у mutable лямбды оператор() всеравно const?

только содержимое mutable?

Admin
ERROR: S client not available

Aidar
10.05.2018
13:19:44
а нет

тогда мне не понятно почему mutable ломает мои старания

я знаю почему

потомучто cint{1} это int

а не const int

пускай даже using cint=const int;

Igor
10.05.2018
13:33:46
вопрос а у mutable лямбды оператор() всеравно const?
не работает потому что тип capture с инициализтором выводится по правилам auto, т.е. cv-квалификаторы сбрасываются

Walter
10.05.2018
14:57:29
Сравните 2 фрагмента кода: 1: int v1=1; long v2=2; v1=v1+v2;   2: int v1=1; long v2=2; v1+=v2; Будет ли разница при исполнении этих строк кода? При сокращённых операциях в java производится приведение типов. То есть v1+=v2 аналогична v1=(int)(v1+v2) Соответственно в первой строке будет ошибка компиляции так как long шире чем int, а вторая строка успешно выполнится.

Дед Пегас
10.05.2018
14:58:14
Так. Какого Страуструпа ты тут спамишь Явой?

SkromRatClub
10.05.2018
15:48:52
WinHttp
Спасибо, буду ппобовать

Google
olologin
10.05.2018
16:51:39
Господа, допустим я разрабатываю dll-ку, и хочу в случае крешей релиз билда моей длл-ки у заказчика получить как можно больше инфы. Разумеется у меня будет дебаг инфа к релизу, и как минимум я хочу получить стектрейс. Вопрос: имеет ли смысл применять минидампы? Будут ли они работать в случае когда у меня как у разработчика нет всех длл/exe загруженных в процесс которые были загружены в момент создания дампа. Есть исходники, бинарники и дебаг инфа только моей длл-ки.

или проще забить и использовать только стектрейс?

Максим
10.05.2018
17:05:49
Кто разбирается в побитывых операциях?

olologin
10.05.2018
17:06:37
Максим
10.05.2018
17:07:05
Почему допустим у меня число char x = 228; x=x<<4>>4 получается не 4, а теже 228

получется если только делать по 1 разу

естественно там unsigned char

Antony
10.05.2018
17:08:39
Хочу поделиться маленькой радостью: исправили (пока только в GCC) баг, при котором считалось что при вызове конструктора this может быть равен адресу аргумента на вход. Другими словами this в конструкторах больше не алиасится с параметрами на вход, и все сложные copy/move конструкторы стали работать немного быстрее https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82899#c10

... и бинарники станут немного компактнее

Andrey
10.05.2018
17:22:32
Почему допустим у меня число char x = 228; x=x<<4>>4 получается не 4, а теже 228
Так компилятор вообще выбросил это вычисление.

Максим
10.05.2018
17:23:12
Так компилятор вообще выбросил это вычисление.
и как быть поочереди делать? А если это у меня позиция в массиве. Легче не как?

Andrey
10.05.2018
17:24:00
и как быть поочереди делать? А если это у меня позиция в массиве. Легче не как?
А какой смысл в такой операции? Почистить старшие биты?

Максим
10.05.2018
17:24:22
Poligraph
10.05.2018
17:24:55
@winged_pegasus

Страница 2045 из 2477