在 C++ 中连接两个宽字符串的最快 and/or 最安全的方法?

Fastest and/or safest way to concatenate two wide strings in c++?

以下宽字符串连接方法中的一种是否比另一种更快and/or更安全?

1) std::wstring

LPCWSTR str1 = L"string 1,";
LPCWSTR str2 = L"string 2";

std::wstring stdResult = std::wstring(str1) + str2;
LPCWSTR result = stdResult.c_str();

2) wcscpy_s, wcscat_s

WCHAR buf[128];

LPCWSTR str1 = L"string 1,";
LPCWSTR str2 = L"string 2";

wcscpy_s(buf, str1);
wcscat_s(buf, str2);
LPCWSTR result = buf;

3) _snwprintf_s

WCHAR buf[128];

LPCWSTR str1 = L"string 1,";
LPCWSTR str2 = L"string 2";

_snwprintf_s(buf, _TRUNCATE, L"%s%s", str1, str2);
LPCWSTR result = buf;

或者有faster/safer方法吗?

其中,最佳选项是:

示例不恰当。 例如,在您的 wcscat 变体中,没有额外的内存分配,因此它会尽可能快。

std::wstring 上执行 += 时,速度主要取决于 std::wstring 是否必须重新分配。

因此,您的问题归结为内存分配问题。如果已经分配了内存,那么 wstring 的执行速度应该和您需要的一样快。

另一个问题是其他人已经注意到的,您需要合理的速度和最大的安全性。如果您计划过多的串联并且您的分析器显示出明显的速度问题,那么您可以实现自己的分配器。