Недавно я узнал о спецификаторе explicit
.
Предположим, у нас есть:
f( W, W, W );
Теперь, если мы сделаем
f( 42, 3.14, "seven" );
Компилятор попытается выполнить следующие неявные преобразования:
f( W(42), W(3.14), W("seven") );
Если мы определили соответствующие конструкторы для W, а именно:
W(int);
W(double);
W(std::string);
... это удастся.
Однако, если мы сделаем первый явным:
explicit W(int);
... это отключает неявное преобразование.
Теперь вам нужно было бы написать:
f( W(42), 3.14, "seven" );
т. е. вынуждает вас явно указать преобразование
Теперь вопрос:
Можно написать:
explicit W(int,int); // 2 arguments!
Это компилируется!
Но я не вижу никакого соответствующего сценария, для которого может потребоваться этот синтаксис.
Может ли кто-нибудь привести минимальный пример?
explicit W(int,int=0);
. - person Rufflewind   schedule 25.12.2014