【发布时间】:2014-05-21 08:43:44
【问题描述】:
假设我有一个Storage 类:
class Storage
{
public:
const string& get() const { return m_data; }
const char& get(int ind) const { return m_data[ind]; }
const string& get(int s_ind, int e_ind) const { /* TBD */ }
private:
string m_data; ///< Data is so big that part of it is stored on disk
}
假设我有一个 Writer 类,它获取 const Storage& 并需要访问其数据。
我的问题,有没有办法实现:
const string& get(int s_ind, int e_ind) const;
即,仅对 string 的一部分进行 const 访问。
注意事项:
get() 被无数次调用,它是我的应用程序的瓶颈。我想避免在访问数据时分配新对象。
【问题讨论】:
-
返回对内部类成员的引用通常是一种不好的方法
-
拿到后在外面怎么用?你不能在不创建字符串的情况下返回一个字符串,但你可以返回例如一对迭代器
-
在我的脑海中,唯一的方法可能是拥有另一个
std::string成员变量,您将在其中存储 sub-string 然后返回它。编译器通常会优化分配以最小化临时对象的创建。 -
提出了一个string views 提案,它可能或多或少地满足了您的需求。不要认为它达到了标准(还没有?)。不过,Boost 可能也有类似的东西。
标签: c++ string substring constants