Это определенная пользователем функция преобразования, которая неявно преобразует экземпляр Bar
в Foo
.
Bar bar;
Foo foo = bar; // bar implicitly converts into Foo.
Как будто вы написали это:
Foo foo = Foo(25);
Если у вас есть такая функция преобразования, то вы можете вызвать ее так:
void f(Foo foo); //a function which accepts Foo
f(bar); // bar implicitly converts into Foo.
Так что такое неявное преобразование может быть нежелательным, поскольку это может вызвать проблемы, приводя к непреднамереннымрезультат.Чтобы избежать этого, вы можете сделать функцию преобразования явной как (только в C ++ 11):
//valid in C++11 only
class Bar {
explicit operator Foo() { return Foo(25); }
};
Теперь оба из них выдают ошибку:
Foo foo = bar; //error
f(bar); //error
Однако допускается следующее:
Foo foo = static_cast<Foo>(bar); //Ok
f(static_cast<Foo>(bar)); //Ok