- 1
- 2
#include <type_traits>
int main() { return std::is_assignable_v<int, int>; }
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+1
#include <type_traits>
int main() { return std::is_assignable_v<int, int>; }
--> 0
WTF?
PACTPOBblu_nemyx 17.04.2019 20:03 # 0
Всё сложно. Именно поэтому я за «PHP».
guest8 17.04.2019 20:09 # −999
bormand 17.04.2019 20:10 # +2
PACTPOBblu_nemyx 17.04.2019 20:12 # 0
PACTPOBblu_nemyx 17.04.2019 20:09 # +3
std::is_assignable<int&, int>::value возвращает true, потому что объект, переданный по ссылке, мы можем редактировать (даже если сама ссылка является константой).
Нам нужно угадать, что курили те, кто руководствовался такой логикой при разработке стандартной библиотеки.
guest8 17.04.2019 20:13 # −999
PACTPOBblu_nemyx 17.04.2019 20:16 # +1
Возможно, это предназначено для макросни и для всякого говна типа вычисления факториала в компайл-тайме на шаблонах.
PACTPOBblu_nemyx 17.04.2019 20:21 # +1
Elvenfighter 17.04.2019 22:25 # +1
Elvenfighter 17.04.2019 21:24 # +2
А как тебе такое, Илон Маск?
PACTPOBblu_nemyx 17.04.2019 21:36 # 0
Какой багор )))
Я не крестовик. Объясните мне, анскильному, что тут вообще происходит.
Допустим, чистых массивов в сишке и в крестах нет, они передаются по ссылке. Но ведь структуры передаются по значению, значит, по идее должно быть, как с интами.
Elvenfighter 17.04.2019 21:47 # +2
guest8 20.04.2019 14:46 # −999
BoeHHblu_nemyx 17.04.2019 21:40 # 0
guest8 20.04.2019 14:48 # −999
j123123 18.04.2019 10:45 # +3
j123123 18.04.2019 10:48 # +2
bormand 18.04.2019 10:56 # +3
j123123 18.04.2019 11:01 # +1
j123123 18.04.2019 11:04 # +1
https://en.wikipedia.org/wiki/P-adic_number#Analytic_approach
Чтоб посложнее. Чтоб побольше всякой хуйни. Крестовики ведь любят всякое бесполезное дерьмо задрачивать
j123123 18.04.2019 11:06 # +2
> Они так хорошо изучили C++ только потому, что он сложный. И если ты хочешь выучить что-то действительно новое, твой путь лежит явно не в какую-нибудь Java, которая специально создана быть простой. Тебе нужно искать в области необычных и странных языков, самых странных, и Haskell автоматически окажется среди самых популярных ответов. Человек видит его, понимает: о, это что-то более сложное, чем C++, нужно выучить. Когда я изучал Haskell, со мной было то же самое, и у меня есть знакомые, которые прошли точно по такой же цепочке рассуждений.
Да, надо побольше сложностей на ровном месте.
cmepmop 18.04.2019 11:14 # −2
BoeHHblu_nemyx 18.04.2019 20:54 # +3
True, если сложность меньше N/M
Elvenfighter 19.04.2019 11:27 # +1
Можно std::ratio заюзать.
j123123 19.04.2019 17:03 # +1
https://en.cppreference.com/w/cpp/numeric/ratio/ratio
> Each instantiation of this template exactly represents any finite rational number as long as its numerator Num and denominator Denom are representable as compile-time constants of type std::intmax_t.
Херня какая-то. Так же не всякое рациональное число можно представить. Почему не сделали чтоб числитель и знаменатель были в бигинтах? И вообще, что насчет компилтайм-бигинтов в крестах?
gost 19.04.2019 19:15 # 0
На первый взгляд будут серьёзные проблемы из-за крайне извращённого представления динамических массивов в компайл-тайме. Если придумать более-менее адекватный способ хранения разрядов с возможностью манипуляции ими в компайл-тайме, то, думаю, остальное будет не так сложно реализовать.
Elvenfighter 19.04.2019 20:03 # 0
А ограничения в границях intmax_t вполне себе "good enough". Для всяких bigint нужно динамическое выделение пам'яти. Такого в компайлтайме пока не можно (но над єтим уже работают).
gost 19.04.2019 20:25 # 0
Variadic templates хватит всем.
j123123 19.04.2019 23:59 # 0
Для символьных вычислений в компилтайме это не "good enough". Да и к тому же на разных платформах/компиляторах intmax_t может быть разным, что делает эти ваши крестокомпилтаймовые рациональные числа зависимыми от архитектуры/компилятора, что вообще-то попахивает маразмом.
cmepmop 20.04.2019 00:19 # −1
Elvenfighter 20.04.2019 00:21 # −1
Как например?
> Да и к тому же на разных платформах/компиляторах intmax_t
Когда ты пишешь/портируешь под платформу, то знаешь какой там intmax_t. Больше intmax_t хардварина просто физически не потянет, зачем напрягать булки?
j123123 20.04.2019 01:22 # 0
Очевидно чтоб представлять очень маленькие или очень большие рациональные числа. Т.е. 1/1000000000000000000000000000000000000000 в те ограничения не засунешь
> Когда ты пишешь/портируешь под платформу, то знаешь какой там intmax_t. Больше intmax_t хардварина просто физически не потянет, зачем напрягать булки?
Зачем мне ебать себе мозги какими-то аппаратными ограничениями, если это компилтайм-херня, которой на это по-хорошему вообще должно быть похеру?
Elvenfighter 20.04.2019 09:46 # +1
Я скорее спрашивал о реальных применениях (мы же о нетривиальности присваивания говорим?)
У тому же, если очень надо, то float/double/long double вполне себе считаются в constexpr. Но аргументами шаблона быть не могут.
Меня еще посетила мысль, что битоебским путем можно сделать IEEE 754 на std::uint32_t и std::uint64_t. Ну или даже проще: хранить мантиссу и порядок параметрами как в std::ratio (интересно, может такое уже есть?)
gost 20.04.2019 10:48 # +1
Не проще ли будет прозрачный fixed-point заебенить?
bormand 20.04.2019 11:35 # +1
Проще. И fixed'ы всяко предсказуемее чем кастрированный ratio.
guest8 20.04.2019 12:42 # −999
j123123 20.04.2019 15:41 # +2
Ну да, 640 килобайт хватит всем. Почему ты думаешь, что любые реальные применения укладываются в лимит intmax_t для числителя и знаменателя? Да и вообще на кой хер нужен этот лимит, если это КОМПИЛТАЙМ, ему вообще должно быть насрать на свойство платформы, какое ему должно быть дело до того, какой там intmax_t?
> У тому же, если очень надо, то float/double/long double вполне себе считаются в constexpr. Но аргументами шаблона быть не могут.
Ну это вообще типичная для крестомирка ситуация, куда не посмотри - всюду какие-то тупые ограничения и костыли из костылей из костылей чтоб подпирать костыли из костылей из костылей.
float/double/long double считается в компилтайме через constexpr, но аргументами шаблона быть не могут.
constexpr-ами можно нагенерировать в компилтайме инициализацию какого-нибудь std::array https://govnokod.ru/25407 , но для обычного сишного массива[] это не сработает, только накостыливанием через BOOST_PP_REPEAT https://wandbox.org/permlink/Y1gETtfZyP3AvbBk
Через constexpr-ы нельзя как через шаблоны нагенерировать кучу функций с разными сигнатурами, в constexpr не работают всякие malloc, memset-ы и еще куча всякой херни, которую мне лень перечислять.
Куда ни плюнь - везде все через жопу сделано с кучей тупых ограничений.
CHayT 20.04.2019 17:16 # +2
gost 20.04.2019 17:52 # 0
j123123 20.04.2019 01:31 # −1
Да и собственно с какого хера "точность" представления рациональных чисел в компилтайме должна быть зависимой от intmax_t на какой-то там платформе?
cmepmop 20.04.2019 02:06 # −1
guest8 20.04.2019 04:27 # −999
cmepmop 20.04.2019 13:40 # 0
BOKCEJIbHblu_nemyx 20.04.2019 14:38 # 0
j123123 18.04.2019 10:56 # +1
gost 18.04.2019 12:06 # +1
BOKCEJIbHblu_nemyx 18.04.2019 12:38 # 0