C++ 在visualc+中,是否可以安全地将CString视为简单类型而不是类+;6.0多功能控制器?

C++ 在visualc+中,是否可以安全地将CString视为简单类型而不是类+;6.0多功能控制器?,c++,visual-c++,mfc,visual-c++-6,C++,Visual C++,Mfc,Visual C++ 6,不幸的是,我拥有的文档要么是(a)没有任何errrata(MS VC++6.0帮助文件)的原始产品文档,要么是(b)适用于更高版本MFC的更高版本MSDN帮助 特别是: [Q1]在VC++6 MFCCString中,操作符+=是否已知有缺陷?在现代MFC应用程序中编译之前,必须先修复VC++6中的代码: CString szTemp; unsigned char m_chReceive[MY_BUF_SIZE]; // compiles and seems to run

不幸的是,我拥有的文档要么是(a)没有任何errrata(MS VC++6.0帮助文件)的原始产品文档,要么是(b)适用于更高版本MFC的更高版本MSDN帮助

特别是:

[Q1]在VC++6 MFC
CString
中,操作符
+=
是否已知有缺陷?在现代MFC应用程序中编译之前,必须先修复VC++6中的代码:

    CString szTemp;
    unsigned char m_chReceive[MY_BUF_SIZE];

    // compiles and seems to run but may be buggy in VC++6, won't compile in modern MFC
szTemp += m_chReceive; 
    // the above won't compile in modern MFC versions, but this "&+cast" does:
szTemp.Append( (const char *)&m_chReceive[0]); 
[Q2]以这种方式作为函数的结果返回CString是否安全可靠,还是会导致内存损坏

 CString MyClass:MyMethod(void)
 {   CString Stuff;
     // set a value to Stuff here.
     return Stuff; // return a stack-allocated-CString 
 }
我的代码到处都在使用上述两种东西,而且似乎还表现出随机运行时内存损坏。这两件事对我来说是一个红旗,我怀疑CString是由Visual C++ 6中的MFC作者打算成为一个很好的简单的东西,你可以使用它,就像是一个<代码> int >代码>还是一个<代码> char < /C> >类型,并从函数返回,不知何故拷贝构造函数和内存管理都是刚刚工作的?

显而易见的东西:是的,当然我会尽可能地从VC++6.0中获取所有代码,但我首先需要修补一个正在崩溃的生产系统,然后我可以开始向前移动这个遗留代码库的巨大任务。

似乎表明
CString
的目的类似于
std::string
,因为它在需要时自动增长,并且可以安全地作为参数或函数返回值传递。

似乎表明
CString
在用途上类似于
std::string
,因为它在需要时自动增长,并且可以安全地作为参数或函数返回值传递。

根据

CString对象可能会因串联操作而增长。 CString对象遵循“值语义”

CString对象可能会因串联操作而增长。 CString对象遵循“值语义”


相关但过于模糊的问题,这里的答案必然模糊:m_chReceive总是以空结尾吗?它总是以空结尾。相关但过于模糊的问题,这里的答案必然模糊:m_chReceive总是以空结尾吗?它总是以空结尾。遗憾的是,文档没有说明“嘿,如果你使用Visual C++ 6从1998,这是对MFC和Visual C++的版本,它是用现代的东西来的”,所以我担心我会问一个大约1998的时间机器问题。我觉得很多人都认为CSTRANK就像使用这个方法一样安全,在现代C++ +MFC中它看起来是安全的,但是我怀疑。(但我不确定)CString在VC++6/MFC遗留应用程序中用作返回值时会出现一些问题。嗯,该页面允许您返回到文档的旧版本,至少在2003年之前,它似乎在说同样的事情。遗憾的是,文档没有说“嘿,如果你使用Visual C++ 6从1998,这是对MFC和Visual C++的版本,它与现代的东西“。所以我恐怕我问一个时间机器问题从大约1998。我觉得很多人都认为cSnk就像使用那样安全,在现代C++ +MFC中看起来是安全的,但是我怀疑。(但我不确定)在VC++6/MFC遗留应用程序中使用CString作为返回值时会出现一些问题。嗯,该页面允许您返回到文档的旧版本,至少在2003年之前,它似乎在说同样的事情。谢谢。所以它应该可以工作。但是,有许多已知的勘误表(据说是这样的),我还没有找到所有的勘误表。谢谢。所以它应该是有效的。但是,有很多已知的勘误表(据说是这样),我还没有找到所有的勘误表。