class foo {
public:
explicit foo(int) { std::cout<<"int constructor"; }
};
int main() {
foo f(0.1);
return 0;
}
Я думал, что явное ключевое слово используется для предотвращения нежелательных преобразований типов, но приведенный выше код все еще работает и выводит «конструктор int». Почему? И как этого не допустить в этом случае?
main()
(без возвращаемого типа) — синтаксическая ошибка в C++. - person melpomene   schedule 25.08.2017explicit
предотвращает неявное создание объектаfoo
из объектаint
, напримерf = 1;
. Это будет компилироваться без ключевого словаexplicit
в конструктореfoo(int)
. - person Michael Burr   schedule 25.08.2017