小编Nic*_*igh的帖子

CString运算符"+ ="和"+"之间的不同行为

在将应用程序从VisualStudio 2005迁移到VisualStudio 2015时,我们在某些代码中发现了一种不同的行为,当使用VS2015构建该代码时,它会连接CString实例.
所以,我已经创建了一个简单的Win32控制台应用程序来演示这个问题.

控制台应用程序(使用MFC作为共享dll和Unicode charachter集)执行这个简单的功能:

void f()
{
   CString x( '\0' );

   CString r( 'a' );
   r += x;
   CString rr( 'a' );
   rr = rr + x;

   int rSize = r.GetLength();
   int rrSize = rr.GetLength();

   assert( rSize == rrSize ); // This assert fires when compiled and run 
                              // under Visual Studio 2015!
}
Run Code Online (Sandbox Code Playgroud)

它表明,当包含'\ 0'字符的CString连接到另一个CString实例时,使用'+ ='或使用'+'会导致不同的结果!

当使用'+ ='时,计算结果的大小,计算所有字符,直到第一个'\ 0'...因此最终大小为1!
相反,当使用运算符'+'时,结果CString大小为2,即连接实例大小的总和!

在VisualStudio 2005中,结果大小始终是连接实例大小的总和!

几个星期前我微软提交了一个错误,但到目前为止我还没有得到这些人的回答.

我的问题:
1.有人偶然发现了MCF库中的这个错误吗?
你是如何解决这个错误的?我们正在考虑禁止使用+ =运算符或者用自定义类替换CString类,但所有这些对我来说都是"有点"侵入性的.

c++ mfc visual-studio visual-c++ visual-studio-2015

6
推荐指数
1
解决办法
228
查看次数

标签 统计

c++ ×1

mfc ×1

visual-c++ ×1

visual-studio ×1

visual-studio-2015 ×1