Мой тестовый класс XString имеет два оператора приведения.Но компилятор не использует явное приведение operator const wchar_t*() для fooA.Почему?
XString
operator const wchar_t*()
fooA
class XString { public: operator const CString&(); explicit operator const wchar_t*(); }; void fooA(const wchar_t* s); void fooB(const CString& s); void test() { XString x; CString c = x; //OK fooA(x); //Error C2664: 'void fooA(const wchar_t *)': cannot convert argument 1 from 'XString' to 'const wchar_t *' fooB(x); //OK }
Поскольку operator const wchar_t* равно explicit, преобразование не будет выполнено неявно.В этом смысл explicit.
operator const wchar_t*
explicit
Вы можете принудительно преобразовать, используя static_cast:
static_cast
fooA(static_cast<const wchar_t*>(x));