我发现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实际上不起作用。
有什么想法吗?
发布于 2015-10-19 08:29:40
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' ';https://stackoverflow.com/questions/33209765
复制相似问题