Anonymous
Egor
Да и проще
ой ли, я прифигел от отрицатьльных индексов списков...вот кто такое выдумал, и нафига?
Artem
Очень удобно
Egor
Artem
Обычно это либо -1, либо слайс, описывающий суффикс
Artem
Типа, x[-3:]
Алдар
питон же простой
Artem
Вот да
Алдар
мне как то надо было писать на нем, прочитал туториал и вперед) правда были скрипты простенькие
Egor
Типа, x[-3:]
вопрос не в этом, а в том, зачем так? почему не обычной практикой от нуля в плюс.
Egor
почему вообще понадобились отрицательные индексы
Artem
Не очень простое только всякое метапрограммирование и асинхронность на корутинах, тут надо понять вначале
Artem
Artem
Меньше кода - лучше читаемость
Egor
больше бекграунда для трансляции - ниже скорость, не?
Artem
Пфф
Artem
Скорость чего?
Egor
выполнения кода.
в плюсах, в определённых ситуациях даже for( int i... может быть медленее чем for( size_t i... при прочих равных.
Egor
для инта потребуется вставка кода проверки диапазона отрицательных значений, сайз_ти - не требует.
так себе пример, но всё же
Artem
Отрицательные индексы превращаются в положительные одним преобразованием на уровне аст, это вообще ни на что не влияет
Artem
Но
Artem
В питоне не занимаются такой оптимизацией, о которой ты говоришь
Artem
Почти всегда тормоза вызываются I/O, базой, сетью
Artem
А супер оптимизированные горячие куски кода либо пишутся расширениями на си(++)
Artem
Либо если уж хочешь питон, то выполняются в PyPy
Artem
А там JIT сам тебе все оптимизирует лучше, чем ты руками
Artem
Если твой код не кривой на уровне алгоритма
Egor
у меня видимо сильная проф.деформация на фоне плюсов )))
ладно, расслаблюсь и буду читать дальше 🍺
Artem
Да, все именно так)
Алдар
хехе, питон это не про скорость выполнения
Anonymous
Скорее про скорость написания )
Светомеч
Алдар
а другой скриптовый язык знаешь?
Andrey
нафлудили-то )
$continue$
Что делает enable_if?
В документации нихуя не понятно :(
ttldtor
имхо, это в супапро.схх
Andrey
Volodymyr
🦥Alex Fails
Volodymyr
Можно использовать как аргумент по-умолчанию в шаблоне, если нужно ограничить диапазон типов, с которыми оный шаблон можно использовать. Примерно так
template <typename T, typename = typename std::enable_if(std::is_assignable<T, std::string>>
🦥Alex Fails
😄
Ned
эй, кореша, скажите, как правильно эксепшны оформлять?
Ned
на каждый эксепшн свой класс, или можно их как-то подсобрать в кучку?
Ned
T3ch
да, там переопределяешь метод аля what() только более удобный
Ned
Ned
оО...
T3ch
есть смысл в своем базовом классе поменять на что-то с std::string const&, так удобнее
$continue$
enable_if <>
$continue$
template
Cinder
Энейбл иф обычно для дизамбигити в выборе сигнатур или типов в шаблонах юзают. Больше он ни на что не годен.
Cinder
Если не юзаешь идеи буста, то для исключений всегда std::runtime_error в качестве базового класса юзай. Метод what перекрывать тогда не надо, тк в конструктора можно набить строку описания. Ну а делать свой what со шлехами в стд::стрингах - плохая идея. Между модулями станет неудобно исключения пересылать, тк каждый со временем зааедет свой метод
Cinder
*заведет
Светомеч
Светомеч
Переопределять what() и правда не очень, попробую теперь так делать
Ned
ребяят, а есть идея, как перегрузить оператор [][]?
Ned
имеется класс
template <class T> class Matrix{
private:
int cols, rows;
T* data;
}
Ned
есть ли способ перегрузить оператор [][]?
Richard
Через подобъект
Richard
Строку например возвращать
Ned
ну, я возвращаю T*
Richard
Или столбец (смотря что удобнее)
Ned
это строка, да
Ned
но как теперь для строки реализовать оператор []?
Anonymous
А зачем его перегружать?)
Ned
T operator[](T* row); ???
Ned
Ned
Ned
все дела
Anonymous
хочу спросить, двумерный массив распологается в памяти линейно, в одной плоскости, разумеется( очевидно) что и массивы любого измерения будут распологаться линейно
Anonymous
тогда и адреса(номера) новых измерений(строк) будут у них распологаться линейно ( друг за другом, последовательно в памяти)
Ned
это я понимаю, блин
Ned
как оператор-то объявить
Ned
я сейчас задаю вопрос по синтаксису именно
Anonymous