在 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
的执行速度应该和您需要的一样快。
另一个问题是其他人已经注意到的,您需要合理的速度和最大的安全性。如果您计划过多的串联并且您的分析器显示出明显的速度问题,那么您可以实现自己的分配器。
以下宽字符串连接方法中的一种是否比另一种更快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
的执行速度应该和您需要的一样快。
另一个问题是其他人已经注意到的,您需要合理的速度和最大的安全性。如果您计划过多的串联并且您的分析器显示出明显的速度问题,那么您可以实现自己的分配器。