当我尝试通过访问类型转换函数(包括括号)的结果来获取c_str时,字符串为空。
const wchar_t* test1 = (type_conversion.string_to_wstring(result1)).c_str();
// test1 contains empty string "";
当我使用中间变量'testWstring'时,结果是不同的-正如我期望的那样,我具有最初在'result1'中的内容。
wstring testWstring = type_conversion.string_to_wstring(result1);
const wchar_t* test1 = testWstring.c_str();
// test1 contains "hi";
typeConversion.string_to_wstring函数如下所示:
wstring type_conversion::string_to_wstring(const string& str)
{
int len;
int slength = (int) str.length() + 1;
len = MultiByteToWideChar(CP_ACP, 0, str.c_str(), slength, 0, 0);
wchar_t* buf = new wchar_t[len];
MultiByteToWideChar(CP_ACP, 0, str.c_str(), slength, buf, len);
std::wstring r(buf);
delete[] buf;
return r;
}
我显然在这里误解了一些东西。来自C#背景,我希望两组语句在'test1'中产生相同的值。
为什么不是这样?
最佳答案
调用string_to_wstring的结果未绑定到引用或未分配给对象。在完整表达式的结尾将销毁它。另请参见sequence-point。
在第二个示例中,将结果分配给保留在范围中的变量。