CString赋值错误

时间:2017-02-27 14:12:09

标签: c++ visual-studio-2015 c-strings

有人可以解释为什么strY作业不会编译吗?我认为编译器可能已经用构造函数替换了赋值,但strZ编译,strX编译。

unsigned char szArr[]{ 0xD7, 0x53, 0xBF, 0xE7};

CString strX;
strX = szArr;
CString strY = szArr;
// no suitable constructor exists to convert unsigned char[4] to ...
CString strZ(szArr);

1 个答案:

答案 0 :(得分:1)

在进一步阅读/播放后,似乎strZ正在使用此构造函数:

CSTRING_EXPLICIT CStringT(_In_z_ const unsigned char* pszSrc) :
    CThisSimpleString( StringTraits::GetDefaultManager() ) 

这是有效的,因为它被明确地称为

strX使用默认构造函数,然后使用赋值运算符:

CStringT& operator=(_In_opt_z_ const unsigned char* pszSrc)

感谢ChristopherOicles评论:

当定义了_ATL_CSTRING_EXPLICIT_CONSTRUCTORS时,所有采用单个参数的CString构造函数都使用explicit关键字进行编译,这会阻止输入参数的隐式转换。

因此,如果没有定义_ATL_CSTRING_EXPLICIT_CONSTRUCTORS,strY将使用与strZ相同的构造函数。 Windows控制台应用程序的存根在stdafx.h中定义了