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