首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CString分配错误

CString分配错误
EN

Stack Overflow用户
提问于 2017-02-27 22:12:09
回答 1查看 674关注 0票数 2

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

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-28 04:15:24

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

代码语言:javascript
复制
CSTRING_EXPLICIT CStringT(_In_z_ const unsigned char* pszSrc) :
    CThisSimpleString( StringTraits::GetDefaultManager() ) 

这之所以有效,是因为它显式地调用

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

代码语言:javascript
复制
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中进行了定义

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42487864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档