- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
#include <array>
#include <iostream>
using namespace std;
int main() {
::array arr {1, 2, 3};
int a, b, c;
::tie(a, b, c) = arr;
printf("%d %d %d",a,b,c);
return 0;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+1
#include <array>
#include <iostream>
using namespace std;
int main() {
::array arr {1, 2, 3};
int a, b, c;
::tie(a, b, c) = arr;
printf("%d %d %d",a,b,c);
return 0;
}
https://godbolt.org/z/RRmruC
3.14159265 25.02.2020 15:35 # +1
Именно поэтому за «С++».
bormand 25.02.2020 15:44 # +4
auto [a, b, c] = arr; проверь.
3.14159265 25.02.2020 16:15 # 0
3.14159265 25.02.2020 16:30 # +2
Уже имея годные библиотечные функции, придумывать ещё 1000 способов сделать то же самое.
А spread rest как в jse ещё не завезли?
phpBidlokoder2 25.02.2020 22:37 # 0
guest8 25.02.2020 22:38 # −999
phpBidlokoder2 26.02.2020 00:34 # +1
guest8 26.02.2020 00:36 # −999
Fike 26.02.2020 07:55 # 0
захрюкал
bormand 26.02.2020 16:58 # +1
Stallman 26.02.2020 17:02 # +1
guest8 26.02.2020 17:07 # −999
kak 26.02.2020 20:02 # 0
strip black hat slashes
HoBorogHuu_nemyx 26.02.2020 00:27 # +2
https://en.cppreference.com/w/cpp/language/structured_binding
Вроде в C++17 и в C++20 многоточия пока не завезли.
P.S. На всякий случай табличка, в каких компиляторах какую питушню реализовали:
https://en.cppreference.com/w/cpp/compiler_support
3.14159265 26.02.2020 02:57 # +3
Прям https://caniuse.com/
При том что много С++17 питушни до сих пор в либо trunkе, либо ещё нету.
Например такая простая херь как инициализация массива без size (Array size deduction in new-expressions), у меня в только шланге работает.
https://en.cppreference.com/w/cpp/container/array/deduction_guides
Я такую простую питушню дждесять лет ждал.
Меня вот что дико удивляет, что они кучи какой-то сложнейшей constexpr хуйни могут делать, а вывести размер std::array в compile-time не осилили.
HoBorogHuu_nemyx 26.02.2020 03:06 # 0
3.14159265 26.02.2020 03:19 # +2
Но меня всегда дико бесила в крестах эта, и подобные ей мелочи.
Вроде нормальный навороченный язык, но как специально тысячи зацепочек специально чтобы злить программиста.
3.14159265 26.02.2020 03:30 # +1
https://ideone.com/Y3dAZ5
3.14159265 26.02.2020 14:01 # 0
Вообще array — тип с фиксированным числом значений, известным на этапе компиляции.
Если он будет передавать аргументом и ложиться в какие-то структуры, там действительно без числа элементов трудно обойтись.
Или придётся как в сишке петушиться с массивами, size_t передавать. Ибо sizeof для аргументов не работает.
1024-- 26.02.2020 09:14 # 0
> Прям https://caniuse.com/
Интересно, где-то есть ИИ, который анализирует код на C++ и говорит, на каком языке он написан?
bormand 26.02.2020 16:22 # 0
HoBorogHuu_nemyx 26.02.2020 16:24 # 0
bormand 26.02.2020 16:57 # 0
HoBorogHuu_nemyx 26.02.2020 17:08 # 0
Это фича из «C++20». «gcc», начиная с 8-й версии заявляет частичную поддержку «C++20». У «gcc» есть параметр --std=c++20 либо c++2a либо gnu++20 либо gnu++2a. Однако, «gcc» не сообщает, что это фича из «C++20». И 9-я, и 10-я версия «gcc» говорят, что это синтаксическая ошибка. В это же время в «clang» эта фича работает.
bormand 25.02.2020 15:46 # −1
Ну зачем? std - не boost::some::crazy::shit::with::many::colons...
phpBidlokoder2 26.02.2020 00:35 # 0
govnokod3r 26.02.2020 03:09 # +3
Интересно, ГЦЦ не хочет жрать даже с -std=c++2a
error: no match for 'operator=' (operand types are 'std::tuple<int&, int&, int&>' and 'std::array<int, 3>')
j123123 26.02.2020 11:27 # +1
3.14159265 26.02.2020 14:18 # +3
Я не от хорошей жизни std::array пишу.
В Сишке массивы не передаются по значению, а только как указатели.
От этой сишкопитушни возникает множество багров.
HoBorogHuu_nemyx 26.02.2020 14:42 # +1
Почему в сишке массив передаётся как указатель, а тот же самый массив, завёрнутый в структуру, состояющую из единственного поля, — уже по значению? Чем структура лучше массива?
3.14159265 26.02.2020 16:02 # +2
То есть переменная визуально выглядит как массив, однако sizeof и всё остальное будет работать как на указателе.
Пару лет назад Линус эпично расставлял точки над этой хуйнёй.
guest8 26.02.2020 16:04 # −999
3.14159265 26.02.2020 16:06 # +4
https://lkml.org/lkml/2015/9/3/428
guest8 26.02.2020 16:10 # −999
3.14159265 26.02.2020 16:37 # +2
Ну может и такое быть: кто-то писал подуставший. Решил отрефакторить кусок рабочего кода в метод.
А там не sizeof был, а стояло макро ARRAY_SIZE.
Ну человек смотрит: тут int[], там array, вроде порядок.
Desktop 27.02.2020 00:24 # +1
Коммитил в ядро.
Из бездны восставший
улыбался Дидро
guest8 26.02.2020 16:11 # −999
HoBorogHuu_nemyx 26.02.2020 16:20 # 0
Обалденный совет.
j123123 27.02.2020 01:11 # 0
guest8 27.02.2020 03:08 # −999
Steve_Brown 27.02.2020 11:55 # 0
HoBorogHuu_nemyx 27.02.2020 13:15 # 0
http://govnokod.ru/24481
bormand 27.02.2020 14:06 # 0
kak 27.02.2020 14:08 # 0
3.14159265 26.02.2020 16:07 # +2
j123123 26.02.2020 23:01 # +1
В ассемблере нет никакой передачи массивов по значению, так что это все тупые анскильные абсракции, которые надо нахуй выкинуть.
guest8 26.02.2020 23:03 # −999
j123123 26.02.2020 23:31 # 0
phpBidlokoder2 26.02.2020 23:41 # 0
3.14159265 27.02.2020 17:55 # 0
Я хочу.
Это ведь не PHP. Передача аргумента превращается компилером в простой mov rax.
guest8 27.02.2020 18:04 # −999
gost 27.02.2020 18:11 # 0
guest8 27.02.2020 18:15 # −999
gost 27.02.2020 18:36 # +1
https://gcc.godbolt.org/z/VrXAb3
UPD. Даже вот так: https://gcc.godbolt.org/z/GpCwxf.
guest8 27.02.2020 18:48 # −999
gost 27.02.2020 18:57 # 0
guest8 27.02.2020 18:58 # −999
gost 27.02.2020 18:59 # +1
https://gcc.godbolt.org/z/fxtE6n
UPD. Даже вот так: https://gcc.godbolt.org/z/KDiGQA.
3.14159265 27.02.2020 21:11 # 0
Я как-то подобломался байтоёбить сдвиги и маски.
А с std::array выходит структурно, идиоматично и при этом код по-прежнему оптимальный.
1024-- 27.02.2020 18:55 # 0
guest8 27.02.2020 18:58 # −999
gost 27.02.2020 19:00 # 0
guest8 27.02.2020 19:00 # −999
1024-- 27.02.2020 19:00 # +3
guest8 27.02.2020 19:02 # −999
gost 27.02.2020 19:02 # +1
guest8 27.02.2020 19:03 # −999
gost 27.02.2020 19:07 # +1
guest8 27.02.2020 19:09 # −999
gost 27.02.2020 19:13 # 0
guest8 27.02.2020 19:15 # −999
gost 27.02.2020 19:17 # 0
guest8 27.02.2020 19:20 # −999
gost 27.02.2020 19:41 # 0
guest8 27.02.2020 19:43 # −999
gost 27.02.2020 19:44 # 0
1024-- 27.02.2020 19:34 # 0
Не, ну как без дерева-то? Без дерева наверно только ассемблерщики пишут. Обмажутся массивами и дрочат стек.
У меня и DOM в браузеропитухе, и структура файлов в файловой системе. Всё деревья*.
_______________
* а файлопитух с симлинками - и вовсе граф
gost 27.02.2020 19:43 # 0
1024-- 27.02.2020 20:10 # +1
gost 27.02.2020 20:15 # +1
3.14159265 27.02.2020 21:06 # +2
А это я для кого выкладывал?
https://govnokod.ru/26415
>Надо запилить генератор Сёмы.
Осталось дополнить актуальными фразочками типа «пердолишься», «прыщи на флешке», «Есть реальный пример».
Вот нейронная сеть бы здесь очень помогла правильно их нормально склонять и втыкать в нужные места.
1024-- 27.02.2020 21:41 # +2
На самом деле, такой скрипт был написан и работает с 2019 года, а сами ПИ с ГК ушёл.
3.14159265 27.02.2020 21:48 # 0
3.14159265 27.02.2020 21:59 # +1
а это я ко-ко-ко бездарный питух для кого выкладывал?
1024-- 27.02.2020 22:00 # 0
3.14159265 27.02.2020 22:01 # 0
бездарный питух за js и да, в Царь сишке как питушара анскильная раз можно массив передать по значению, так что анскильное говно тебе питушку это фича говно из c++17 реализовывать тебе питушку понять ход мыслей. заедушный , животное, смотри, выше пример».
вот нейронная сеть бы здесь очень помогла правильно но , днище галимое, как специально анскилед чтобы злить программисты, питушарский использующие алгоритм сложнее ,
макак пытается бороться с Сишка, питух, анскильный питух, sql инъекциями, заедушный говноязык xss, говно
3.14159265 27.02.2020 22:05 # 0
Животное, абсолютно на тебе питушку любой заедушный вопрос на ГК ну я это анскильный ещё давно говорил <ссылка тебе питушку на ГК>
А ты днище галимое, надо было слушать царя заедушный питушок <ссылка на ГК>.
3.14159265 27.02.2020 22:16 # 0
я не от хорошей на свалке жизни std::array
на свалке что за дурень руснявый cтекломойный захочет по значению, если стекломойный русачок его хуйнуть на свалке, так что на свалке это синтаксис русня в с++ просто на флешку добавляют std::tie.
именно поэтому за «с++». пидораха, пердолишься завозят новый синтаксис в меня всегда дико бесила в тупая русня крестах эта, и пердолинг прыщеблядей подобные ей мелочи.
3.14159265 27.02.2020 22:15 # 0
Понапридумывают кучу, абстракций, а потом на свалке страдают и кремлебот царь сишке на свалке петушиться с математики в рашке, винде гермашка на флешке.
Если он пердолишься будет передавать на свалке аргументом и ложиться на флешке в этот лимит. следовательно, стекломойный русачок написании этого стекломоя наебнул? для написания этого комментария? порватка для написания стекломоя наебнул и работает.
вот нейронная кремлебот сеть бы
HoBorogHuu_nemyx 27.02.2020 23:26 # +1
«Windows» открыты, флешка спит.
Будет гроза — молнии ждут сигнала контрабандиста.
На глубине прорвётся сквозь сеть твой SMB1,
И ты сыграешь реквием NAS'у
На взятой с помойки клавиатуре,
Так что по совету с «4PDA» окирпиченный рутер
Замрёт в этом жарком июле.
guest8 27.02.2020 23:29 # −999
HoBorogHuu_nemyx 27.02.2020 23:36 # 0
3.14159265 28.02.2020 00:53 # 0
Стекломоя ебнул и в ядро.
Из руснявой помойки восставший
Программисту не нужно обходить дерево.
guest8 28.02.2020 01:01 # −999
nblXOMAKAKA 29.02.2020 19:52 # 0
guest8 29.02.2020 19:54 # −999
nblXOMAKAKA 29.02.2020 19:59 # 0
3.14159265 28.02.2020 00:56 # 0
3.14159265 27.02.2020 22:08 # 0
Программистам в гермашка не нужно обходить дерево и знать, стекломойная русня пердолинг прыщеблядей что такое быть: кто-то мамку ебал подуставший, коммитил стекломоя наебнул в ядро.
Из стекломоя наебнул бездны восставший
улыбался дидро гермашка о, давай подумаем, как это обоссал пердолинг прыщеблядей починить в пидораха, языке "c 2.0"?
В ассемблере пидораха, всегда пердолишься
3.14159265 29.02.2020 18:53 # 0
Самое смешное, что крестухи настойчиво рекомендуют передавать всё по значению, для оптимального перфоманса.
https://web.archive.org/web/20140113221447/http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/
guest8 29.02.2020 18:57 # −999
3.14159265 29.02.2020 19:29 # 0
А даже если меняет.
x=mutate(x);
Или даже так
Он просто произведёт мутации массива inplace и вернёт его же обратно.
> можно передать указитель, потому что ее никто там не меняет?
Что-то вроде указателя.
Но в целом как по мне это поганое крестушение. Подгадывать что там компилер оптимизирует.
Сам он не допрёт. Ему нужно дать кучу хинтов: rvalue, lvalue, xvalue, plvalue.
Просто если так писать, то код становится проще. Копирование аргумента неявное, и компилеру проще его выкинуть.
gost 29.02.2020 19:30 # +2
В принципе, всё правильно поясняет (хотя там часть данных устарела — теперь, ЕМНИП, NRVO обязательно вообще для любых локалок). В частности, он пишет, что принимать параметр по константной ссылке, а потом копировать его — бессмысленно:
и
…делают одну и ту же работу, но второй вариант короче и (в связи с move-семантикой) в некоторых случаях эффективнее.
Ну и ещё обсирает выходные параметры в пользу (N)RVO, и правильно делает.
guest8 29.02.2020 19:34 # −999
gost 29.02.2020 19:38 # 0
Ну, раз целую статью накатали…
> Короче: хочешь копировать -- принимай копию явно
Да, именно так.
> когда ты ничего не копируешь и не меняешь
А тут всё по-старому, конечно: константные ссылки. Собственно, «const T &» нужно в первую очередь (но не только, разумеется) там, где тебе нужно взять объект и посмотреть на него. В этом случае по значению ничего передавать не нужно.
gost 29.02.2020 19:35 # 0
Может, в C++35 и допилят обязательное NRVO.
guest8 27.02.2020 18:15 # −999