首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么std::string没有直接接受std::string_view的构造函数?

为什么std::string没有直接接受std::string_view的构造函数?
EN

Stack Overflow用户
提问于 2021-11-25 15:00:32
回答 1查看 771关注 0票数 18

为了允许从std::string构造std::string_view,有一个模板构造函数

代码语言:javascript
复制
template<class T>
explicit basic_string(const T& t, const Allocator& alloc = Allocator());

只有当const T&可转换为std::basic_string_view<CharT, Traits> (链接)时才启用该功能。

同时,有一个特殊的演绎指南,从basic_string ( basic_string_view链接)中推导出链接。对指南的评论说:

需要指南(2-3),因为std::basic_string_views的std::basic_string_views构造函数是模板,以避免在现有代码中造成歧义,而这些模板不支持类模板参数推断。

所以我很好奇,什么是不明确的,需要有演绎指南和模板构造函数,而不是简单地使用std::basic_string_view的构造函数,例如

代码语言:javascript
复制
explicit basic_string(basic_string_view<CharT, Traits> sv, const Allocator& alloc = Allocator());

请注意,我不是在问构造函数为什么被标记为显式。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-25 15:26:59

含糊不清的是,std::stringstd::string_view都可以从const char *构建。这让事情像

代码语言:javascript
复制
std::string{}.assign("ABCDE", 0, 1)

如果第一个参数可以是字符串或string_view,则不明确。

有几个缺陷报告试图解决这个问题,从这里开始。

https://cplusplus.github.io/LWG/lwg-defects.html#2758

第一件事是让成员将string_view放入模板中,这降低了它们在过载解析中的优先级。显然,这有点太有效了,所以后来又增加了其他调整。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70113292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档