假设我们在C ++ 20标准库的while user_answer != real_answer:
t2 = datetime.now()
delta = t2 - t1
if(delta.total_seconds()>=30):
print "You ran out of time."
break
标头中添加了一个新的类模板:
<string_view>
我们要做到这一点:
template<class charT, class traits = char_traits<charT>>
class basic_string_view; // existing
template<class charT, class traits = char_traits<charT>>
class basic_cstring_view; // new
可隐式转换为std::cstring_view
std::string_view
可隐式转换为std::string
std::cstring_view
(保留)可隐式转换为std::string
如果我们添加std::string_view
的定义:
std::basic_cstring_view
,我们添加了operator basic_string_view<charT, traits>() const noexcept; // new
的定义:
std::basic_string
这会造成问题和歧义吗?会破坏使用operator basic_string_view<charT, traits>() const noexcept; // existing
operator basic_cstring_view<charT, traits>() const noexcept; // new
或std::string_view
的任何现有代码吗?
我担心std::string
和std::string
之间现在有两条路径。这就是直接路径,并且通过std::string_view
进行了两步转换。
要澄清“关闭者”的具体问题:
使用std::cstring
和/或std::string
的当前正在运行的程序的示例是什么,如果对std::string_view
和<string_view>
进行了描述的更改,它将停止运行?还是不存在这样的例子?
答案 0 :(得分:1)
我担心std :: string和std :: string_view之间现在有两条路径。这就是直接路径,并通过std :: cstring进行了两步转换。
这些路径中只有一个是有效的,因为具有多个用户定义转换的隐式转换序列不是有效候选。
为澄清起见,隐式转换上下文中的“用户定义”不是指与标准文档的区别,而是指所有转换运算符和类的转换构造函数(即用户定义的数据类型)。
还是[使用
std::string
和/或std::string_view
的当前正在运行的程序的示例,鉴于对<string_view>
和<string>
的描述更改,该示例将停止工作]不存在?
这样的例子不存在。