Moo*_*oys 0 c++ string unicode
我正在尝试生成一个字符串并将其分配给一个字符串,wchar_t*但是当我去分配字符串时似乎正在填充字符串.这是一个简化的复制品:
wostringstream woss;
woss << L"Test String";
// A: this doesn't work:
const wchar_t* foo = woss.str().c_str();
wcout << foo << endl; // "????????????????????????"
// B: this works:
wstring bar = woss.str();
const wchar_t* foo = foo.c_str();
wcout << foo << endl; // "Test String"
// C: this also works!?:
const wchar_t* foo = woss.str().c_str();
wstring bar = woss.str();
wcout << foo << endl; // "Test String"
Run Code Online (Sandbox Code Playgroud)
当我一次完成转换时(如在A中),指向的结果值foo是一堆0xFEEE字符.如果我一步一步地做(如在B中),字符串最终会很好.最奇怪的是,如果在分配之后,我评估woss.str(),foo突然变为有效的数据(如在C中).
这让我觉得链式赋值会以某种方式返回指向字符最终去的位置的指针,但它以某种方式跳过实际的评估,str()因此实际上并没有填充值.只有在我调用str()(在指针分配之前或之后)数据才会在正确的位置结束.问题是,我不知道会导致这种行为的原因是什么......
如果它是相关的,这都是在辅助线程上运行,但我不希望这是重要的,因为我只处理局部变量.思考?