+2
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
constexpr void foo(int &a, const int b)
{
a = b * 2;
}
constexpr void foo2(int *a, const int b)
{
*a = b * 2;
}
constexpr int shit = []() constexpr {int a = 0; foo(a, 666); return a;}();
constexpr int shit2 = []() constexpr {int a = 0; foo2(&a, 666); return a;}();
Итак, время обсирать крестоговно. Вот есть там такая фича - можно по ссылке и указателю хуйню через constexpr присваивать. Только вот эта тупая херня под названием лямбда, она обязательно требует инициализации некоторого говна, передаваемого куда-то там, если она объявлена как constexpr. На кой хрен мне что-то инициализировать, если это говно я в constexpr не читаю, а только присваиваю? И сделайте там какие-нибудь write-only переменные, которые через ссылку или указатель пробрасывать можно, ну чисто чтоб поржать
Запостил: j123123,
23 Февраля 2019
j123123 23.02.2019 23:46 # +1
компилятор GCC вам на это нагенерирует херни:
https://godbolt.org/z/hMh3qz - проверь
gost 25.02.2019 13:57 # 0
iShit.
j123123 24.02.2019 00:00 # +1
нихуя не работает.
error: array must be initialized with a brace-enclosed initializer
Этим тупым говном можно проинициализировать массив вообще? Или тут только поеботу на Сишном Препроцессоре™ писать, генерируя хуйню вида {fib(0), fib(1), fib(2), fib(3), fib(4), fib(5) ... } ?
guestinxo 24.02.2019 01:10 # 0
А он позволяет генерить хуйню длиины N?
Вот шаблоны позволяют
j123123 24.02.2019 01:36 # 0
Можно нагенерить хуйни, которая будет работать для хуйни вплоть до N, вот через это говно: http://govnokod.ru/14511
Еще есть такая вот поебень из буста: https://www.boost.org/doc/libs/1_69_0/libs/preprocessor/doc/ref/repeat.html
j123123 24.02.2019 01:44 # 0
j123123 24.02.2019 01:46 # 0
А через шаблон можно проинициализировать массив каким-то таким образом:
?
bormand 24.02.2019 05:18 # 0
j123123 24.02.2019 05:40 # 0
bormand 24.02.2019 05:46 # 0
j123123 24.02.2019 12:39 # 0
И из-за ущербности крестовых говношаблонов. Почему через херню на препроцессоре я могу нагенерить инициализацию внутри {} скобок вида хуйня(0), хуйня(1), хуйня(2), https://wandbox.org/permlink/Y1gETtfZyP3AvbBk а говношаблонами это не делается никак? Может быть шаблоны - говно?
bormand 24.02.2019 12:59 # 0
А кто-то с этим спорит?
З.Ы. std::array можно инициализировать в конпайлтайме, так что похуй на массивы, в общем-то.
j123123 24.02.2019 13:37 # 0
https://godbolt.org/z/RjzJw8
Zero-cost abstraction, говорили они. В сишном варианте на одну lea инструкцию меньше (и вместо нее add). Говно какое-то.
j123123 24.02.2019 13:54 # 0
Всё-равно нихрена не оптимизирует. Хуита
Elvenfighter 25.02.2019 12:21 # +1
Правда немного в другом виде. Ща попробую накидать.
Elvenfighter 25.02.2019 13:32 # +1
Сам код оформлю в отдельное псто.
guestinxo 24.02.2019 00:54 # 0
OCETuHCKuu_nemyx 24.02.2019 01:18 # 0
Скажите ещё, что в "PHP" есть constexpr.
j123123 24.02.2019 02:30 # 0
OCETuHCKuu_nemyx 24.02.2019 13:11 # 0
Elvenfighter 24.02.2019 02:27 # 0
Поебота, которую ты пытаешься сделать есть формальным UB и ненужно. А гениальный план лишь присваивать по ссылке никак не описан в сигнатуре функции (и, надеюсь, никогда не будет).
Хотя, с другой стороны, такой подход коммитета по ограничению UB в compile-time немного попахивает java...
j123123 24.02.2019 02:41 # 0
Тогда и constexpr лямбда с ретуртом нафиг не нужен, можно сразу дергать вот ту constexpr функцию, которая сама и так ретурнит. Передавать write-only говно по ссылкам в constexpr-хрень может быть полезно, если надо возвращать из такой функции не одно, а сразу несколько значений. Хотя можно с этим std::tuple подолбиться и ретурнить его, но мне это говно не нравится. Лучше б сделали более однообразно
Elvenfighter 24.02.2019 02:56 # 0
Если лень писать структурку, которая (своим именем) обьясняет почему эти два значения должны быть вместе.
Ну и есть еще structured binding, который делает возвращаемые структурки мягкими и шелковистыми:
Elvenfighter 24.02.2019 03:02 # +1
https://wandbox.org/permlink/YYMta8qN1n3AzmW5
GCC конечно хавает, но делает это нелегально.
bormand 24.02.2019 05:55 # 0
j123123 24.02.2019 22:35 # 0
qpjll-oc 24.02.2019 22:38 # −102
guest8 25.02.2019 12:26 # −999
3oJIoTou_xyu 25.02.2019 12:31 # 0
bormand 25.02.2019 13:19 # +2
К слову, в верилоге это примерно так и работает.
bormand 25.02.2019 13:25 # +2
guest8 25.02.2019 16:47 # −999
bormand 25.02.2019 17:05 # +2
guest8 25.02.2019 19:24 # −999
6E3yMHblu_nemyx 26.02.2019 17:31 # 0
ASD_77 27.02.2019 01:37 # 0
ikekyourmom 25.08.2021 19:27 # 0