是否可以在不复制输入缓冲区的情况下构造字符串?

时间:2012-04-12 15:25:47

标签: c++

在我的程序中创建了许多std :: wstring对象,

std::wstring mystr(L"test string");

由于输入wchar字符串是字符串常量,如果mystr构造为mystr.c_str()等于L“test string”的地址,它将节省一些堆使用。是否可以构造这样的wstring?

2 个答案:

答案 0 :(得分:1)

没有。为了做到这一点,std::basic_string的实现需要关于wchar_t const*是否来自字符串文字的额外信息,而且这些信息根本不可用。即使它是,它也会增加使用该类的成本,即使参数不是wchar_t const*

如果这些字符串处于全局范围,则构建它们的成本仅在启动时。如果它们是局部变量,您可以随时声明它们static,因此构建它们的成本只会支付一次,而不是每次进入块时。

答案 1 :(得分:1)

确实存在有效的用例,但C ++字符串类flat out不支持它。如果你真的需要它,你需要编写自己的字符串类来支持实习。

请注意,其他几种语言本身支持此功能;不幸的是,C ++字符串类覆盖了一个相当具体的用例(许多修改),而不是一般的(很多基本上不可变的字符串的副本)。

为了简化任务,请考虑是否足以让您在一对(const)迭代器周围使用一个瘦包装类,它只能指向静态内存中wchar_t缓冲区的开头和结尾。 / p>