有人能解释一下为什么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);发布于 2017-02-28 04:15:24
在进一步阅读/播放之后,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中进行了定义
https://stackoverflow.com/questions/42487864
复制相似问题