C2664:显式转换运算符未按预期进行转换
C2664: Explicit cast operator do not cast as expected
我的测试 class XString
有两个转换运算符。但是编译器不会对 fooA
使用显式转换 operator const wchar_t*()
。为什么?
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
的意义所在。
您可以使用 static_cast
:
强制转换
fooA(static_cast<const wchar_t*>(x));
我的测试 class XString
有两个转换运算符。但是编译器不会对 fooA
使用显式转换 operator const wchar_t*()
。为什么?
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
的意义所在。
您可以使用 static_cast
:
fooA(static_cast<const wchar_t*>(x));