【发布时间】:2022-01-03 20:36:37
【问题描述】:
为了允许从std::string_view构造std::string,有一个模板构造函数
template<class T>
explicit basic_string(const T& t, const Allocator& alloc = Allocator());
仅当 const T& 可转换为 std::basic_string_view<CharT, Traits> (link) 时才启用。
同时有专门的推演指南,可以从basic_string_view(link)推导出basic_string。对指南的评论说:
需要指南 (2-3),因为 std::basic_string_views 的 std::basic_string 构造函数是模板以避免在现有代码中造成歧义,并且这些模板不支持类模板参数推导。
所以我很好奇,需要有那个推导指南和模板构造函数而不是简单地采用 std::basic_string_view 的构造函数的歧义是什么,例如像
explicit basic_string(basic_string_view<CharT, Traits> sv, const Allocator& alloc = Allocator());
请注意,我不是在问为什么构造函数被标记为显式。
【问题讨论】:
-
@ph 这是另一个问题,而这个问题是“为什么没有来自 std::string_view 的显式非模板化 std::string 构造函数?”
-
@phuclv S.M.是正确的,我不是在质疑构造函数的明确性
标签: c++ string c++17 constructor-overloading string-view