在我的程序中创建了许多 std::wstring 对象,
std::wstring mystr(L"test string");
由于输入的 wchar 字符串是字符串常量,因此如果将 mystr 构造为 mystr.c_str() 等于 L“测试字符串”的地址,则会节省一些堆使用量。是否可以构造这样的 wstring?
在我的程序中创建了许多 std::wstring 对象,
std::wstring mystr(L"test string");
由于输入的 wchar 字符串是字符串常量,因此如果将 mystr 构造为 mystr.c_str() 等于 L“测试字符串”的地址,则会节省一些堆使用量。是否可以构造这样的 wstring?
不。为了做到这一点, 的实现std::basic_string
需要额外的信息来说明 是否wchar_t const*
来自字符串文字,而这些信息根本不可用。即使是这样,它也会增加使用类的成本,即使参数不是wchar_t const*
.
如果这些字符串在全局范围内,则构建它们的成本只是在启动时。而如果它们是局部变量,你总是可以声明它们static
,这样构造它们的成本只会支付一次,而不是每次进入块时。
确实有有效的用例,但 C++ 字符串类完全不支持它。如果你真的需要它,你需要编写自己的支持实习的字符串类。
请注意,其他几种语言本机支持此功能;不幸的是,C++ 字符串类涵盖了一个相当具体的用例(大量修改)而不是一般用例(本质上不可变字符串的大量副本)。
为了简化任务,请考虑在一对(const)迭代器周围使用一个瘦包装类是否足够,这些迭代器可能只指向wchar_t
静态内存中缓冲区的开始和结束。