Stanislav
я пару раз даже юзал их в С++
Andrey
Stanislav
со structured bindings ваще огонь будет
babysitter
std::tie такой офигенный
Stanislav
Max
А, ну эт да ))))
babysitter
вот знаете в питоне можно a, b = b,a
обмен переменных местами. так это же мы тоже теперь можем.
первое о чем я подумал, когда мне рассказали про std::tie
babysitter
tie(a, b) = make_pair(b, a);
Stanislav
Stanislav
С++17
Stanislav
struct { int a, b; }
MyStruct foo() {
return MyStruct();
}
auto [a,b] = foo();
Stanislav
Stanislav
Крылатый
Не, оно просто создаёт новые переменные жеж.
Stanislav
зато можно будет делать for( auto [key,value]: myUberMap) {}
babysitter
вроде прямо в tie можно будет объявить переменную
Крылатый
Ох лол http://melpon.org/wandbox/permlink/SuwynAi7QoDzIZIV
Cinder
> Можно отделять нули произвольным количеством подчёркиваний.
Cinder
https://habrastorage.org/files/a77/e84/e79/a77e84e79abb41519d562463aede361b.png
Крылатый
Короче, не работает оно)
Cinder
> Локальные функции
> Более или менее нормальные кортежи
Ну реально F# завозят.
Cinder
> Можно давать названия каждой переменной
У них же есть анонимные типы уже, зачем городить новую близкую сущность? Похоже через них и реализовано, просто с другим синтаксисом
Cinder
https://habrastorage.org/files/a81/00f/f3e/a8100ff3e66345ea8949f5ef1535523b.png
Cinder
Эх, да тут другой свитчп по объектам, более контуженный, даже не знаю нужно ли:
Cinder
https://habrastorage.org/files/e45/dbb/7ed/e45dbb7ed055493da21f50f8f67a6cc8.png
Cinder
> Автоматическое создание простых классов с необходимыми полями.
Cinder
https://habrastorage.org/files/769/dc1/057/769dc1057d634d40b5a251494ef687b7.png
Cinder
> Создание неизменяемых объектов
Cinder
https://habrastorage.org/files/7c6/3a2/0e8/7c63a20e81ca42478293df15638506e5.png
Cinder
Ну точно F# завозят, но что-то как-то чужеродно и сыро смотрится
Daniil
> зашел в чат по крестам
> F# C#
Vladislav
babysitter
имеется в виду std::tie(a, b) = std::tie(b, a); ?
Vladislav
UB же
а вот так - работает: std::tie(a, b) = std::make_pair(b, a);
babysitter
это да
babysitter
вот знаете в питоне можно a, b = b,a
обмен переменных местами. так это же мы тоже теперь можем.
первое о чем я подумал, когда мне рассказали про std::tie
babysitter
tie(a, b) = make_pair(b, a);
Vladislav
правда я теперь не понимаю, должен ли быть UB в исходном варианте
Aidar
Ну и мы типа скопировали лишний раз
Aidar
Тогда еще и move надо
Aidar
И строка оказывается перегруженной
Vladislav
нда
Stanislav
быстрый опрос)
Stanislav
-2 битовом представлении
babysitter
все единицы последняя ноль
babysitter
но навскидку не уверен
babysitter
не, вот и сел в лужу :)
Vladislav
кстати, малоизвестная фишка с std::tie:
std::tie(std::ignore, a) = make_pair(1, 2);
Vladislav
Stanislav
babysitter
а, сел в лужу поспешив сказать, что сел в лужу
Stanislav
правильный ответ "идите в хуй, в вопросе про процессор ничего не сказано"
Stanislav
а для х86 правильный ответ
Vladislav
Stanislav
Stanislav
но если придерживаться стандартов то какое то такое
Vladislav
просто в ней арифметические операции для signed типов идентичны операциям для unsigned (кроме деления)
Vladislav
поэтому логично ее использовать)
Stanislav
Vladislav
это я про теорию)
Stanislav
😞 про теорию это не ко мне
Vladislav
что в signed, что в unsigned, {+, -, *} работаю как бы по модулю 2^bits, просто unsigned интерпретируют числа >=2^(bits-1) как соответствующие отрицательные
Stanislav
Stanislav
ахах, чето вспомнил одну фигню завязанную на signed int
Vladislav
они скорее всего разные флаги переполнения выставляют просто)
Stanislav
аллоды 2, у них в дата файлах был флоат модифайер для цен, и базовая цена
Stanislav
стоило флоатик сделать в -
Stanislav
и продавец мало того что тебе шмотку самую дорогую отдовал, а еще и денег отсыпал за это
Stanislav
Vadim
напомните что означают двоеточия перед google ?
const ::google::protobuf
Крылатый
неймспейс же
babysitter
все пишут
Vladislav
абсолютный, а не относительный, путь
babysitter
глобал неймспейс