为什么我不能从 char* 构造一个 wstring

Why I can't construct a wstring from char*

根据我构建的填充 char* 代码:

char* pathAppData = nullptr;
size_t sz = 0;
_dupenv_s(&pathAppData, &sz, "APPDATA");

我可以很容易地用这段代码构造一个string,以后append这个string:

std::string sPathAppData(pathAppData);
sPathAppData.append("\MyApplication");

但我无法从该代码创建 wstring。为什么使用 wstring 如此复杂?我对所有这些类型都感到疯狂。

std::wstring wPathAppData(pathAppData); // Impossible

您必须使用迭代器进行复制。这就是您可以做到的。

char* pathAppData = nullptr;
size_t sz = 0;
_dupenv_s(&pathAppData, &sz, "APPDATA");
std::string sPathAppData(pathAppData);
sPathAppData.append("\MyApplication");

std::wstring wPathAppData(begin(sPathAppData), end(sPathAppData));
wcout << wPathAppData << endl;

您可以直接使用wchar_t并使用相应的wchar_t支持API直接检索数据到wchar_t,然后构造wstring_dupenv_s 函数有一个广泛的对应 - _wdupenv_s.

您的代码将如下所示:

wchar_t* pathAppData = nullptr;
size_t sz = 0;
_wdupenv_s(&pathAppData, &sz, L"APPDATA");
std::wstring wPathAppData(pathAppData);
wPathAppData.append(L"\MyApplication")

这也可能是一个有趣的读物:std::wstring VS std::string