我们可以取一个子字符串的 const ref 吗?

布布斯比

我有一个类,其中包含一个字符串作为私有成员。该类具有公共成员函数,它们都将 const ref 返回到 std::wstring。

返回的所有 const-ref 字符串都是私有成员的子字符串。

我可以将每个子字符串存储为成员,然后将 const refs 返回给这些成员,但这不是最佳选择,因为它会复制内存。

假设我确实存储了足够的内存来知道每个子字符串的开始和结束索引。

如何在不复制任何成员字符串的情况下实现上述类?

内森奥利弗

这是不合法的,它不会为您节省任何东西。std::string::substr按值返回。这意味着无论您如何返回它,它都会从类成员中复制数据。当您返回对它的引用时,您正在返回对临时本地对象的引用。const 引用生命周期扩展规则在这里不起作用,你在调用站点留下的是一个悬空引用。

您可以做的只是按值返回。默认情况下,这将导致移动,并且编译器可以通过将临时构造直接省略到调用站点中的对象中来很容易地优化它。

另一种选择是拥有一个std::string_view成员,并从中返回子字符串。这样做只会花费你复制一个指针和一个整数,所以它会非常快。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ref const X与D中的const ref X相同吗?

来自分类Dev

我们可以将const char *分配给cpp中的字符串吗?

来自分类Dev

我们可以从const对象中引用一个setter成员函数作为const吗?

来自分类Dev

JSON SCHEMA:我们可以对类型做一个或/(字符串/整数)吗?

来自分类Dev

我们可以在 PHP 函数中返回一个字符串吗?

来自分类Dev

导出模块时。我们应该将值赋给const变量吗?这是一个好习惯吗?

来自分类Dev

我们可以在React中的const内部样式吗

来自分类Dev

我们可以在各处使用const而不是let吗?

来自分类Dev

为什么我的const ref无效?

来自分类Dev

我们可以检查字符串是否包含在另一个不区分大小写的字符串中吗?

来自分类Dev

如果字符串是const,我可以const_cast c_str()吗?

来自分类Dev

我们可以同时从C ++字符串中删除两个子字符串吗?

来自分类Dev

Java 8:我们可以使用 map 在流中创建实例方法 ref 吗?

来自分类Dev

我们可以使用一个逻辑表达式一次比较多个字符串吗?

来自分类Dev

可以在堆栈上分配const静态字符串吗?

来自分类Dev

为什么引用不能捕获临时而const ref和rval ref可以捕获

来自分类Dev

我们可以使用const_cast将const vector <string>转换为vector <string>吗?

来自分类Dev

我们可以在constexpr函数的局部变量上省略const吗?

来自分类Dev

我们可以为char *分配内存,但是将其作为const char *返回吗?

来自分类Dev

我可以修改const成员变量吗?

来自分类Dev

从现在开始,我可以制作一个变量_const吗?

来自分类Dev

如果我的函数是const,那么参数也必须是const吗?

来自分类Dev

我可以在JSON模式中使用$ ref引用另一个对象中的对象吗?

来自分类Dev

我们可以将函子作为参数传递给另一个函子吗?

来自分类Dev

const int [2]可以复制吗?

来自分类Dev

可以合并吗?在Ruby中更改CONST?

来自分类Dev

可以更改const char *变量吗?

来自分类Dev

我应该使用const_cast吗?

来自分类Dev

可以将字符串文字传递给采用 const char* 的函数吗?

Related 相关文章

  1. 1

    ref const X与D中的const ref X相同吗?

  2. 2

    我们可以将const char *分配给cpp中的字符串吗?

  3. 3

    我们可以从const对象中引用一个setter成员函数作为const吗?

  4. 4

    JSON SCHEMA:我们可以对类型做一个或/(字符串/整数)吗?

  5. 5

    我们可以在 PHP 函数中返回一个字符串吗?

  6. 6

    导出模块时。我们应该将值赋给const变量吗?这是一个好习惯吗?

  7. 7

    我们可以在React中的const内部样式吗

  8. 8

    我们可以在各处使用const而不是let吗?

  9. 9

    为什么我的const ref无效?

  10. 10

    我们可以检查字符串是否包含在另一个不区分大小写的字符串中吗?

  11. 11

    如果字符串是const,我可以const_cast c_str()吗?

  12. 12

    我们可以同时从C ++字符串中删除两个子字符串吗?

  13. 13

    Java 8:我们可以使用 map 在流中创建实例方法 ref 吗?

  14. 14

    我们可以使用一个逻辑表达式一次比较多个字符串吗?

  15. 15

    可以在堆栈上分配const静态字符串吗?

  16. 16

    为什么引用不能捕获临时而const ref和rval ref可以捕获

  17. 17

    我们可以使用const_cast将const vector <string>转换为vector <string>吗?

  18. 18

    我们可以在constexpr函数的局部变量上省略const吗?

  19. 19

    我们可以为char *分配内存,但是将其作为const char *返回吗?

  20. 20

    我可以修改const成员变量吗?

  21. 21

    从现在开始,我可以制作一个变量_const吗?

  22. 22

    如果我的函数是const,那么参数也必须是const吗?

  23. 23

    我可以在JSON模式中使用$ ref引用另一个对象中的对象吗?

  24. 24

    我们可以将函子作为参数传递给另一个函子吗?

  25. 25

    const int [2]可以复制吗?

  26. 26

    可以合并吗?在Ruby中更改CONST?

  27. 27

    可以更改const char *变量吗?

  28. 28

    我应该使用const_cast吗?

  29. 29

    可以将字符串文字传递给采用 const char* 的函数吗?

热门标签

归档