在C ++ 17中引用常量字符串的语义应该是什么?

德米特里·库兹米诺夫(Dmitry Kuzminov)

有几种方法可以将文本信息传递给C ++中的函数:可以是c-string / std :: string,按值/按引用,左值/右值,常量/可变。C ++ 17在标准库中添加了一个新类:std::string_viewstring_view的语义是提供没有所有权的只读文本信息。因此,如果您只需要读取字符串,则可以使用:

void read(const char*);        // if you need that in a c-style function or you don't care of the size
void read(const std::string&); // if you read the string without modification in C++98 - C++14
void read(std::string_view);   // if you read the string without modification in C++17

我的问题是,在任何情况下C ++ 17void read(const std::string&)都应优先考虑void read(std::string_view)假设不需要向后兼容。

巴里

需要零终止吗?如果是这样,则必须使用以下之一:

// by convention: null-terminated
void read(const char*);

// type invariant: null-terminated
void read(std::string const&);

因为std::string_view是的任何连续范围char const,所以不能保证它以null结尾,并且试图窥视最后一个字符是未定义的行为。

如果你没有需要空终止,但需要采取数据的所有权,这样做:

void read(std::string );

如果您既不需要空终止也不需要数据所有权或数据修改,那么最好的选择是:

void read(std::string_view );

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我不知道Slick 2.1 Query类中的C [_]类型应该是什么

来自分类Dev

字符串常量类应该是静态的吗?

来自分类Dev

字符串常量类应该是静态的吗?

来自分类Dev

使用SWIG的C函数的JNI包装器-类型映射应该是什么?

来自分类Dev

字符串的正则表达式应该是什么?

来自分类Dev

此JSON字符串的Java对象应该是什么?

来自分类Dev

在Scala中,以字符串到案例类的映射以及以这些案例类作为输入参数的从字符串到函数的映射的类型应该是什么?

来自分类Dev

Dictionary <string,string []>的C#对象初始化器应该是什么样的?

来自分类Dev

Phone应该是C#中的类还是结构?

来自分类Dev

Phone应该是C#中的类还是结构?

来自分类Dev

C中的字符串文字类型是什么?

来自分类Dev

C ++字符串中的cin >> str + 1是什么?

来自分类Dev

从 C 中较长的字符串中提取子字符串的最佳方法是什么

来自分类Dev

正则表达式的字符串类型应该是什么: '\S+?@\S+'

来自分类Dev

当在表mysql中插入php数组的元素时应该是什么样的数据?只有字符串?

来自分类Dev

为什么我的过滤图像(应该是二进制的)仍然包含彩色部分?(C ++中的OpenCV)

来自分类Dev

为什么在C语言中“字符串”被视为“常量”?

来自分类Dev

在C ++ 11中,首先应该发生什么:原始字符串扩展或宏?

来自分类Dev

为什么字符串长度应该加上它在 C 中的容量?

来自分类Dev

大量的字符串应该是不可能的

来自分类Dev

JavaScript typeof应该是数字,但返回字符串

来自分类Dev

大量的字符串应该是不可能的

来自分类Dev

使用c#在具有频率的字符串中查找子字符串的最佳方法是什么?

来自分类Dev

残留图seaborn中的参数应该是什么

来自分类Dev

-1%5在python中应该是什么结果

来自分类Dev

GenMapFactory中的(elems:(A,B)*)应该是什么类型

来自分类Dev

Apollo Link 状态中的 __typename 应该是什么?

来自分类Dev

使用C格式字符串构建C ++字符串的最佳方法是什么?

来自分类Dev

对C字符串常量感到困惑

Related 相关文章

  1. 1

    我不知道Slick 2.1 Query类中的C [_]类型应该是什么

  2. 2

    字符串常量类应该是静态的吗?

  3. 3

    字符串常量类应该是静态的吗?

  4. 4

    使用SWIG的C函数的JNI包装器-类型映射应该是什么?

  5. 5

    字符串的正则表达式应该是什么?

  6. 6

    此JSON字符串的Java对象应该是什么?

  7. 7

    在Scala中,以字符串到案例类的映射以及以这些案例类作为输入参数的从字符串到函数的映射的类型应该是什么?

  8. 8

    Dictionary <string,string []>的C#对象初始化器应该是什么样的?

  9. 9

    Phone应该是C#中的类还是结构?

  10. 10

    Phone应该是C#中的类还是结构?

  11. 11

    C中的字符串文字类型是什么?

  12. 12

    C ++字符串中的cin >> str + 1是什么?

  13. 13

    从 C 中较长的字符串中提取子字符串的最佳方法是什么

  14. 14

    正则表达式的字符串类型应该是什么: '\S+?@\S+'

  15. 15

    当在表mysql中插入php数组的元素时应该是什么样的数据?只有字符串?

  16. 16

    为什么我的过滤图像(应该是二进制的)仍然包含彩色部分?(C ++中的OpenCV)

  17. 17

    为什么在C语言中“字符串”被视为“常量”?

  18. 18

    在C ++ 11中,首先应该发生什么:原始字符串扩展或宏?

  19. 19

    为什么字符串长度应该加上它在 C 中的容量?

  20. 20

    大量的字符串应该是不可能的

  21. 21

    JavaScript typeof应该是数字,但返回字符串

  22. 22

    大量的字符串应该是不可能的

  23. 23

    使用c#在具有频率的字符串中查找子字符串的最佳方法是什么?

  24. 24

    残留图seaborn中的参数应该是什么

  25. 25

    -1%5在python中应该是什么结果

  26. 26

    GenMapFactory中的(elems:(A,B)*)应该是什么类型

  27. 27

    Apollo Link 状态中的 __typename 应该是什么?

  28. 28

    使用C格式字符串构建C ++字符串的最佳方法是什么?

  29. 29

    对C字符串常量感到困惑

热门标签

归档