Size: a a a

2020 May 10

PK

Pavel Kazakov in pro.cxx
я даже ссылку сразу дам: http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html
источник

PK

Pavel Kazakov in pro.cxx
чувство меры должно присутствовать везде, это judgement call, если уж мы тут англицизмами бросаемся: как никто не будет делать std::string*, так никто и не будет в полиморфном коде внезапно случайно иметь указатель на базовый класс контейнера, от которого  в этом же полиморфном коде у тебя внезапно есть наследник
источник

I

Ivan in pro.cxx
Ilia Zviagin
Во во, вот Иван такой человек, что все хочет контролировать. Чтобы все было правильно.

Мой вот опыт говорит, что все контролировать невозможно, и не всегда нужно. И даже можно просто свихнуться , пытаясь это сделать.
Когда вы работаете с кодобазой, над которой работают ещё 700 человек, то приходится задумываться о многом, а не пускать на самотёк нарушение правил (мелких грешков самих плюсов), ибо это рано или поздно вылезет.
источник

I

Ivan in pro.cxx
Pavel Kazakov
сейчас бы пойти перебрать всё, что не запрещено в плюсах, и в один список занести
Минимизация рисков
источник

IZ

Ilia Zviagin in pro.cxx
Ivan
Когда вы работаете с кодобазой, над которой работают ещё 700 человек, то приходится задумываться о многом, а не пускать на самотёк нарушение правил (мелких грешков самих плюсов), ибо это рано или поздно вылезет.
Ага, и конечно же надо все запрещать, где есть хоть малейшая возможность сделать ошибку...
источник

PK

Pavel Kazakov in pro.cxx
Ivan
Когда вы работаете с кодобазой, над которой работают ещё 700 человек, то приходится задумываться о многом, а не пускать на самотёк нарушение правил (мелких грешков самих плюсов), ибо это рано или поздно вылезет.
я работал в ядре платформы в конторе, в которой 1200 программистов в отделе разработки, спасибо)
источник

PK

Pavel Kazakov in pro.cxx
наследоваться от стандартного контейнера (стринг не контейнер все-таки — это абстракция строки) — наркомания, но допустимо-безопасная
источник

I

Ivan in pro.cxx
Ilia Zviagin
Ага, и конечно же надо все запрещать, где есть хоть малейшая возможность сделать ошибку...
Да, CI, CppCheck и PVS помогают избежать глупостей/оверлуков ревьюеров.
источник

PK

Pavel Kazakov in pro.cxx
а плохие примеры с ней — метанаркомания, о которой даже думать не надо
источник

IZ

Ilia Zviagin in pro.cxx
Pavel Kazakov
наследоваться от стандартного контейнера (стринг не контейнер все-таки — это абстракция строки) — наркомания, но допустимо-безопасная
Чёйта наркомания, я вот наследовался... Все ок
источник

PK

Pavel Kazakov in pro.cxx
ну как будто я не наркоманил в коде? )) иногда бывает нужно, например, для системы рефлексии в игре грязь сделать — святое
источник

I

Ivan in pro.cxx
Pavel Kazakov
наследоваться от стандартного контейнера (стринг не контейнер все-таки — это абстракция строки) — наркомания, но допустимо-безопасная
Это прецедент уже из разряда психологии "а чё это ему можно, а мне нельзя?"
источник

PK

Pavel Kazakov in pro.cxx
так можно случайно misra сделать с такими потребностями в корректности, я всё равно против буду)
источник

PK

Pavel Kazakov in pro.cxx
Ivan
🤦‍♂️ Вы понимаете, что если это не запрещено, то это разрешено. И дизайн вашего типа не должен полагаться на то, что он не будет использован через указатель, а только через значение.
окей, для фана уже: какие типы задизайнены с вот этим требованием со старта? примеры можно назвать? разумные :)
источник

I

Ivan in pro.cxx
Pavel Kazakov
окей, для фана уже: какие типы задизайнены с вот этим требованием со старта? примеры можно назвать? разумные :)
Я и говорю, что вы не можете этого делать, это наркоманство дизайнить тип в зависимости от того как он будет использоваться — через указатель или просто по значению.
Ваш тип может быть использован как угодно и в любом контексте.
источник

PK

Pavel Kazakov in pro.cxx
я вот за уши приятнул: есть std::shared_ptr — тоже контейнер по тем же рассуждениям, по каким и стринг им стал; кто-то продумывал, что от него нельзя наследоваться, что будут указатели на него? но это дико же выглядит? :)
(а атомик на шаренный поинтер, вон, только в 20-м году завезли...)
источник

PK

Pavel Kazakov in pro.cxx
если, допустим, вектор или сет не final, значит кто-то это умышленно оставил, надеясь на благоразумие коммьюнити, а иначе сейчас бы Hell++ уже сделали
источник

I

Ivan in pro.cxx
Pavel Kazakov
если, допустим, вектор или сет не final, значит кто-то это умышленно оставил, надеясь на благоразумие коммьюнити, а иначе сейчас бы Hell++ уже сделали
Это эволюция языка. Не стоит полагаться на то, что признано порочным и пока ещё позволительно. Потому что однажды это обязательно отвалится.
источник

PK

Pavel Kazakov in pro.cxx
окей, в таком случае, как много вещей в плюсах с железобетонным качеством продуманы и реализованы? ну, кроме int, если на секундочку забыть, что он не safe numeric type))
источник

DC

Denis Chernikov in pro.cxx
Ivan
🤦‍♂️ Вы понимаете, что если это не запрещено, то это разрешено. И дизайн вашего типа не должен полагаться на то, что он не будет использован через указатель, а только через значение.
UB тоже не запрещено))
Мы же, вроде, говорим про язык, в котором надо много думать и быть внимательными, не правда ли?.. А если говорить про инструменты, которые помогают в поиске проблем, то они и про такое наследование нам скажут, если оно вдруг будет использоваться для полиморфизма. Но это не значит, что такая фича должна быть под строгим запретом. Переиспользование кода обычно хорошо, особенно если подходить с умом, не так ли?..
источник