首页 > 解决方案 > C2664:显式转换运算符未按预期转换

问题描述

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

标签: c++explicit

解决方案


由于operator const wchar_t*is explicit,转换不会隐式进行。这就是要点explicit

您可以使用以下命令强制转换static_cast

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

推荐阅读