C2664:显式强制转换运算符未按预期进行强制转换

时间:2019-01-24 08:32:18

标签: c++ explicit

我的测试类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
}

1 个答案:

答案 0 :(得分:3)

由于operator const wchar_t*explicit,因此转换不会隐式完成。这就是explicit的意义。

您可以使用static_cast强制进行转换:

fooA(static_cast<const wchar_t*>(x));