当我尝试通过访问类型转换函数(包括括号)的结果来获取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

在第二个示例中,将结果分配给保留在范围中的变量。

09-04 07:19
查看更多