- 1
- 2
- 3
int i = 42;
foo(i); //не компилируется
foo(static_cast<int>(i)); //компилируется
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+2
int i = 42;
foo(i); //не компилируется
foo(static_cast<int>(i)); //компилируется
У int переопределён каст в инт?
А тьфу, ты же в инт и кастишь.
можно привести и обратный пример убрав одну &.
И наконец анекдот
понятно да, что выведет?)
карповский
У меня другая цель.
Управлять компьютерами
я думал, ты меня поймеш
https://www.viva64.com/en/pvs-studio/
И не будет неявного преобразования.
Ок, и правда работает.
скомпилируй
а потом раскоментируй строчку
По вумному конечно надо было назвать не delete, а deny, но это же С++
всё таки я за С++
и за Perl
и немного за Ruby
программирование должно быть нескучным
Кресты уже почти как тайпскрипт!
всегда так делаю
Ну и для float потом точно так же.
Большинство функций, которые принимают &&, это какие-нибудь мув-конструкторы, которые портят аргумент. Поэтому неявного каста из lvalue (переменной) в && нет.
foo(int(i)) например. Или какую-нибудь временную локалку мувни.
Шарик в том числе и тем прекрасен, что можно не двигать сам объект. Объект лежит себе в куче, и в ус не дует.
я тут ващето
foo(i); //не компилируется птому что i (lvalue) не кастится имплистно в rvalue reference
//без мува
foo(static_cast<int>(i)); //компилируется бо временная хуйня кастица, она и так rvalue
вон брмнд подсказывает
:~$ c++ -Wall 1.cpp
1.cpp: In function ‘int foo(int)’:
1.cpp:5:1: warning: no return statement in function returning non-void [-Wreturn-type]
}
Именно поэтому свежий код полагается писать с максимальным уровнем предупреждений.
Это как писать на perl без use strict, а потом ругаться, что он любой мусор исполняет.
use warnings FATAL => 'all';
в JS тоже нужно "use strict";
а в TS --strict
много где нужно
В этом случае очевидно, что управление туда не попадёт и третий return не нужен. Но в более сложном случае с циклами и т.п. конпелятор часто тупит и просит написать.
Хотя и с одним случается... Тарас, помнится, тут что-то такое про паскаль постил.
Пишешь return -- "код недостижим". Убираешь return -- "не хватает ретурна". И ебись как хочешь.
throw new AssertionError("Can't be")
или
error() в случ коко
Или в этих языках "код недостижим" в прицнипе нету?
- любой запрет, невозможный с технической точки зрения, есть трата времени
В Gallina логического программирования в традиционном смысле нет (т.е. как в прологе), но с другой стороны, этот язык построен на конструктивистской логике по заветам тов. Martin-Löf.
В Ltac есть некое подобие логического программирования в традиционном смысле, там есть pattern-matching c бэктрекингом. (Ltac — это уровень метушни для Gallina.)
А вдруг он наинлайнил и узнал?
Чтобы не прикручивать костыли в духе linq и не писать перебор вручную.
разница примерно как между тем чтобы в css написать селектор и тем чтобы жсом ходить по нодам и добавлять и убирать стили
- Филимонов?
https://youtu.be/m3HnPEGLiDU?t=491
https://www.youtube.com/watch?v=nSj44Azbd3o
алсо, одного меня бесит, что на ютубе форвард/ревайнд на ёбаные десять секунд?
А эти вроде химкинские или долгопские
Вот его статья про backtracking на продолжениях: http://okmij.org/ftp/Computation/monads.html#LogicT
p.s. ах да, это же Лем напейсал.
Именно поэтому я за
funcName := result
нет?
Да. Но выглядит как ёбаный костыль, как-будто процедуре прикрутили невидимый аргумент по ссылке. А всё ради одновозвратности.
Завершается функция либо дойдя до конца, либо по exit.
есть, но в очень простых случаях
if (true) {
return;
}
int a = 1; //скорее всего может не скомпилирвоаться