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

2023-12-22

从 C++17 开始,我们有std::string_view http://en.cppreference.com/w/cpp/string/basic_string_view,连续字符序列的轻量级视图,可避免不必要的数据复制。而不是有一个const std::string&参数,现在经常推荐使用std::string_view.

然而,人们很快就会发现,从const std::string& to std::string_view破坏使用字符串连接的代码,因为不支持连接std::string and std::string_view:

std::string{"abc"} + std::string_view{"def"}; // ill-formed (fails to compile)
std::string_view{"abc"} + std::string{"def"}; // ill-formed (fails to compile)

为什么不支持串联std::string and std::string_view在标准中?


其原因在n3512 string_ref:对字符串的非拥有引用,修订版 2 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3512.html作者:杰弗里·亚斯金:

我还省略了operator+(basic_string, basic_string_ref),因为LLVM从此重载中返回一个轻量级对象,并且仅延迟执行连接。如果我们定义这个重载,那么稍后我们将很难引入这种轻量级串联。

后来有人在网上提出了建议标准提案 https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/1RcShRhrmRc邮件列表将这些运算符重载添加到标准中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么不支持连接 std::string 和 std::string_view? 的相关文章

随机推荐

  • mysql按年分区和按月子分区

    我有一个数据库 其中的日期列的数据类型为日期 该表预计每天有 10k 行 我想在年份范围的表上创建分区 然后在该特定年份的月份上创建子分区 我试过的是 ALTER TABLE nav master PARTITION BY RANGE YE
  • 春萌要链接动画吗?

    我不完全理解Meng To s Spring的文档 https github com MengTo Spring https github com MengTo Spring 给出的可用函数是 animate animateNext ani
  • 匹配两个Python列表的长度

    我有两个不同长度的 Python 列表 人们可能会假设其中一个列表比另一个列表大几倍 两个列表包含相同的物理数据 但以不同的采样率捕获 我的目标是对较大信号进行下采样 使其具有与较小信号完全相同的数据点 我想出了下面的代码 它基本上完成了这
  • iNotify 能否告诉我受监控的文件移动到了哪里?

    我想在文件在系统中移动时对其进行监视 iNotify 可以在它移动时告诉我它的新位置吗 如果您同时查看文件移出的目录和文件移至的目录 那么您将收到IN MOVED FROM源目录上的事件和IN MOVED TO目标目录上的事件 两者具有相同
  • 在 AJAX 中重新初始化 TinyMCE 4

    我在启用 ajax 的情况下使用 TinyMCE基金会揭晓 http foundation zurb com docs components reveal html盒子 现在 TinyMCE 在第一次加载时就会启动 但如果我关闭盒子并再次打
  • Spring data : CrudRepository 的保存方法和更新

    我想知道是否 save 中的方法CrudRepository如果它已经在数据库中找到了条目 则进行更新 例如 Repository public interface ProjectDAO extends CrudRepository
  • 如何阻止 Chrome 自动完成文本区域?

    我正在处理联系表单部分的文本区域 Chrome 希望自动填充用户的地址 因此 许多联系请求是由用户在评论字段中提交其地址的 除了可能被利用的明显的潜在安全问题之外 我担心的是 从用户的角度来看 我们提供的联系表单没有用于键入消息的区域 从支
  • Ant Design table React js 在特定条件下点击表格展开一行

    我需要一点帮助 我需要编写代码 以便表行仅在切换打开时才展开 当切换关闭时 表行不应展开 我已使用该房产expandRowByClick单击时展开行 但这里的问题是 当切换关闭时 它不应该可单击 但现在空行将会展开 我怎样才能避免它 任何人
  • 如何从 if 语句内的布尔值中打破 if 语句 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有这样的东西 bool a true bool b true bool plot true if plot if a if b b fal
  • 如何获取默认短信应用程序的包名称?

    由于 4 4 中添加了默认短信应用程序 因此我无法像这样打开默认短信应用程序 Intent intent new Intent Intent ACTION MAIN intent addCategory Intent CATEGORY DE
  • 当Service被杀死后,进程还能存活吗?

    我的应用程序同时具有服务和活动 假设我的应用程序的进程正在运行 一段时间后 Android 操作系统由于内存不足而终止了我的应用程序中的服务 我的问题是 Android是否有可能只杀死服务并保持进程处于活动状态 或者当一个服务被杀死时 该进
  • 使用jq递归提取对象值和父键名称

    我需要解析的输出npm ls global json命令 这样我就可以获得所有已安装的列表npm包的格式如下 package version js resolved Where package是包含包名称的键 来自每个dependencie
  • 将 Devise 与同一模型的多个命名空间一起使用

    我想将 Devise 与两个命名空间一起使用 API 命名空间和默认命名空间 但当用户尝试登录时 两者似乎发生冲突 含义是 无论引用 Devise 的哪个命名空间首先结束 是最终的重定向地点 例如 如果我尝试创建一个新会话 在默认命名空间下
  • TButton 的下拉菜单

    我正在尝试模拟 TButton 的下拉菜单 如下所示 procedure DropMenuDown Control TControl PopupMenu TPopupMenu var APoint TPoint begin APoint C
  • 如何将 Vuex mapGetters 与 Vue 3 SFC 脚本设置语法结合使用?

    我正在将组件从常规 Vue 3 Composition API 重构为脚本设置语法 初始点 Current Vue v3 迁移文档 https v3 migration vuejs org breaking changes i
  • 如何在 Watir 中屏蔽图像?

    我在用Watir http watir github io 对于不需要加载任何图像的数据获取工作 有可能阻止他们吗 我认为可以是 profile Selenium WebDriver Chrome Profile new profile w
  • 泛型如何影响 C# 和 .NET 的设计?

    这可能是一个广泛的问题 但这是我不太清楚并且很好奇的问题 很多时候 对于某些问题 我听到的理由是 这是因为泛型在 NET 1 0 中不可用 这让我想到以下两件事 以前没有想到泛型 因此开发人员在 NET 1 0 之后提出了它 这可能会极大地
  • 使用 iPhone 时网站出现水平滚动

    我的网站的移动版本有问题http dsmedvednikov2 zzz com ua http dsmedvednikov2 zzz com ua 使用 iPhone 或 iPad 时 无论使用 Safari 还是 Google Chrom
  • 计算管道分隔文件中的列数

    我有一根管子 分隔文件 File 106232145 medicare medicare medicaid 789 我想计算每行中的字段数 我尝试了下面的代码 Code awk F print NF 1 这返回的结果为 5 而不是 4 这是
  • 为什么不支持连接 std::string 和 std::string_view?

    从 C 17 开始 我们有std string view http en cppreference com w cpp string basic string view 连续字符序列的轻量级视图 可避免不必要的数据复制 而不是有一个cons