我发现了std :: wstring的一些非常奇怪的行为。
#include "stdafx.h"
#include <string>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
std::wstring someString = L"Some dummy string";
std::wstring base1 = L"Base1 ";
std::wstring base2 = L"Base2 ";
std::wstring second = L"Second";
base1 += second.at(0) + L" ";
base2 += second.at(0);
base2 += L" ";
return 0;
}
base1和base2输出应该相同,但没有。 Base1实际上不起作用。
有什么想法吗?
答案 0 :(得分:8)
second.at(0) + L" "
此表达式不符合您的预期。 at(0)
返回wchar_t
,这实际上是一个整数。 L" "
是一个宽字符串文字,隐式转换为wchar_t const*
。所以在上面的表达式中,你正在做指针运算,添加L'S'
的任何值(可能与S
的ASCII值相同,我相信这是83。)这会给你一个远远超出字符串文字范围的指针,它只有2个字符。最终结果是未定义的行为。
要获得您可能想要的效果,您可以将其中一个操作数设为wstring
。
base1 += second.at(0) + std::wstring(L" ");
在这种情况下可能更简单的就是使用2个语句。
base1 += second.at(0);
base1 += L' ';