问题标签 [string-view]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
161 浏览

c++ - 使用无效指针未定义行为构造 string_view 吗?

C++ Extensions for Library Fundamentals, Version 2中,声明对于string_view构造函数:

但没有定义什么是“有效范围”。如果 astring_view是用指向非拥有内存的指针构造的,它是未定义的行为吗?

此外,是否要求 a在其整个生命周期内string_view 始终指向拥有的内存,还是仅适用于构造函数?

如果是这样,这个决定的理由是什么?

0 投票
1 回答
14425 浏览

c++ - 为什么不支持连接 std::string 和 std::string_view?

从 C++17 开始,我们有了std::string_view一个轻量级的视图,可以看到连续的字符序列,避免不必要的数据复制。现在const std::string&通常建议使用std::string_view.

但是,很快就会发现从切换const std::string&std::string_view中断使用字符串连接的代码,因为不支持连接std::stringstd::string_view

为什么标准中不支持连接std::stringstd::string_view

0 投票
1 回答
1123 浏览

c++ - 如何在 constexpr string_view 上使用 std::string_view::remove_prefix()

std::string_view::remove_prefix()并且std::string_view::remove_suffix()都是constexprc++17 中的成员函数;但是,它们会修改调用它们的变量。如果值是constexpr,它也将是const并且不能被修改,那么这些函数如何用于一个constexpr值呢?

换一种方式:

您如何在 a 上使用这些功能constexpr std::string_view?如果它们不能在 a 上使用constexpr std::string_view,为什么函数本身会被标记constexpr

0 投票
0 回答
289 浏览

c++ - 为什么作为模板类型传递给 constexpr 函数的 string_view 会编译?

此代码无法编译。我认为这是因为 string_view 不是 LiteralType,它违反了 constexpr 函数条件(http://en.cppreference.com/w/cpp/language/constexpr):

但是...如果我用模板值替换它编译得很好。为什么编译器允许这样做?

就好像编译器忽略了 constexpr,或者 STRING_VIEWs 特征以某种方式合法地允许它通过。

将 GCC 7.1 与 -O3 -std=c++1z 一起使用。https://godbolt.org/g/z89Myb上的沙盒代码

非常感谢,亚历克斯

0 投票
2 回答
8106 浏览

c++ - 如何将 std::string_view 转换为双精度?

我正在为应用程序的自定义选项文件编写 C++ 解析器。option=value我有一个循环,它以文本文件的形式读取行,value必须将其转换为double. 在伪代码中,它执行以下操作:

为了处理字符串拆分和传递给函数,我使用std::string_view它是因为它避免了过度复制并清楚地说明了查看预先存在的std::string. 我已经做了所有事情,指向包含我要提取的值std::string_view value_str的确切部分useful_statement,但我无法弄清楚doublestd::string_view.

我知道std::stod哪个不适用于std::string_view. 它允许我写

但是,这很难看,因为它会转换为实际上不需要的字符串,即使在我的情况下它可能不会产生明显的差异,但如果必须从文本中读取大量数字,它可能会太慢文件。

另一方面,atof因为我不能保证一个空终止符,所以它不起作用。我可以在构造它时添加\0to来破解它useful_statement,但这会使代码对读者感到困惑,并且如果代码被更改/重构,它也很容易被破坏。

那么,什么是干净、直观和合理有效的方法呢?

0 投票
1 回答
816 浏览

c++ - 如何制作 constexpr 交换功能?

我正在制作自己的 String View 类以用于学习目的,并且正在尝试使其成为 100% constexpr。

为了测试它,我有一个返回哈希值的成员函数。然后,我在 switch 语句中构造我的字符串视图并调用相同的成员函数,如果它通过,则该成员函数已完成其目的。

为了学习,我正在使用/阅读/比较我的实现与 Visual Studio 2017 最新更新std::string_view,但是,我注意到,尽管swap被标记为constexpr,但它不起作用,在 Visual Studio 中也不在 g++ 中。

这是一段不起作用的代码:

这是 if 的 Visual Studio 实现:

这个来自我的班级,它与 Visual Studio 中的类似。

所有构造函数和赋值都标记为 constexpr。

Visual Studio 和 g++ 都给我类似的错误。

如果交换不适用于 constexpr,为什么还要使用 constexpr?

0 投票
1 回答
238 浏览

c++ - 带有释放器的 string_view

我正在尝试std::string_view尽可能多地使用 C 字符串,但是,每当我要包装的 C 字符串被动态分配时,我都依赖这种模式:

这是浪费时间,因为它涉及 1 次分配、1 次复制和 1 次释放。

有没有办法更好地做到这一点?还是我需要编写自己的string_view包装器?

0 投票
2 回答
922 浏览

c++ - 将参数包解包到字符串视图中

可以将 char 类型的值模板参数包解压缩为(编译时)字符串。一个人如何获得string_view该字符串?

我想做的事:

尝试:

错误:

有没有办法获得main函数中的行为?

0 投票
2 回答
50063 浏览

c++17 - 为什么没有从 std::string_view 到 std::string 的隐式转换?

有一个从std::stringto的隐式转换std::string_view,它不被认为是不安全的,即使如果程序员不小心,这肯定会导致很多悬空引用。

另一方面,没有从使用相同参数的隐式转换,std::string_view而是std::string以完全相反的方式:因为程序员可能不小心

很高兴 C++ 可以替代原始const char*指针,同时让它变得超级混乱并被剥离到骨头上:

  • 隐式const char*-> std::string好的
  • 隐式std::string_view-> std::string
  • 分配std::string= const char*好的
  • 分配std::string= std::string_view好的
  • 附加std::string+= const char*好的
  • 附加std::string+= std::string_view好的
  • 串联const char*+ std::string好的
  • 串联std::string_view+ std::stringNOPE
  • 串联std::string+ const char*好的
  • 串联std::string+ std::string_viewNOPE

我错过了什么或者这完全是胡说八道吗?

最后,如果没有所有使其类似于的关键部分,这个字符串视图有多大用处const char*?将它集成到stdlib的生态系统中而不是完成最后一步有什么意义?毕竟,如果我们需要一个代表一段字符串的对象,我们可以自己编写。实际上,很多图书馆早在几年前就已经这样做了。制定标准的全部意义在于使其适用于最广泛的用例,不是吗?

他们会在C++23中解决这个问题吗?

0 投票
2 回答
8137 浏览

c++ - 在 constexpr 中连接 string_views

我正在尝试连接string_views一个constexpr. 以下是我的代码的简化版本:

但是,此代码不会产生我预期的结果。而不是打印test1;test2;test1test1;test2;而是打印出与随机字符混合的正确字符,就好像我正在访问未初始化的内存一样。

但是,如果我删除说明constexpr符并用上面的代码替换,string_views则会strings打印出预期的输出。

要么我在我的代码中遗漏了一些明显的错误,要么有一些constexpr我不理解的东西(还)。这是我为新创建缓冲区的方式string_view吗?我还能做什么?或者我想做的事情是不可能的?也许有人可以为我阐明这一点。