我有一个类,其中包含一个字符串作为私有成员。该类具有公共成员函数,它们都将 const ref 返回到 std::wstring。
返回的所有 const-ref 字符串都是私有成员的子字符串。
我可以将每个子字符串存储为成员,然后将 const refs 返回给这些成员,但这不是最佳选择,因为它会复制内存。
假设我确实存储了足够的内存来知道每个子字符串的开始和结束索引。
如何在不复制任何成员字符串的情况下实现上述类?
这是不合法的,它不会为您节省任何东西。std::string::substr
按值返回。这意味着无论您如何返回它,它都会从类成员中复制数据。当您返回对它的引用时,您正在返回对临时本地对象的引用。const 引用生命周期扩展规则在这里不起作用,你在调用站点留下的是一个悬空引用。
您可以做的只是按值返回。默认情况下,这将导致移动,并且编译器可以通过将临时构造直接省略到调用站点中的对象中来很容易地优化它。
另一种选择是拥有一个std::string_view
成员,并从中返回子字符串。这样做只会花费你复制一个指针和一个整数,所以它会非常快。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句