有人可以解释为什么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);
答案 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中定义了