Вроде бы как в новых стандартах можно использовать ключевое слово explicit
не только к конструкторам, чтобы предотвратить неявное приведение, но и к операторам. Можете объяснить, для чего это нужно и привести пример? Возможно, есть и другие применения?
explicit
для операторов преобразования нужен по той же причине, что и для конструкторов. Требование от программиста явно указывать тип, чтобы избежать неожиданного поведения кода при неявном приведении типов.
Самый популярный пример это operator bool
. До c++11 отсутствие возможности задавать explicit
для оператора преобразования в тип требовало городить довольно неочевидные схемы для реализации идиомы Safe Bool. Т.е. использование объекта нашего типа в контексте, когда требуется приведение в булев тип, например внутри if
или while
. В частности можно обратить внимание на std::ios::operator bool
. По ссылке как раз хорошо видно различие между c++98 и c++11.
То, что раньше нельзя было задавать "явность" для оператора преобразования по сути - досадная недоработка, т.к. оператор преобразования и конструктор с одним параметром (для которого как раз актуален explicit
) по сути предназначены для одного и того же. Разница лишь в том с какой стороны смотреть. Если мы создаём класс N
, то конструктор вида N(O o)
будет осуществлять преобразование типа O
в тип N
. Для преобразование в обратную сторону нужен либо конструктор вида O(N n)
(но это порой невозможно, т.к. тип O
может быть закрыт или вовсе не быть классом), либо operator O(N n)
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Искал и ничего не нашёл, да и что именно искать не знаю
На данный момент не получается реализовать предпросмотр pdf документов в одном окне приложения (SPA проект), без открытия новой вкладкиIE открывает...