三种类型之间的隐式转换交互
Interactions with implicit conversion between three types?
假设我们在 C++20 标准库的 <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>
和<string>
的更改,它将停止工作? 还是不存在这样的例子?
我担心现在在std::string和std::string_view之间有两条路径。这是直接路径,以及通过 std::cstring 的两步转换。
这些路径中只有一条是有效的,因为具有多个用户定义转换的隐式转换序列不是有效的候选项。
澄清一下,隐式转换上下文中的"用户定义"并不是指与标准文档的区别,而是指类的所有转换运算符和转换构造函数(即用户定义的数据类型)。
还是不存在[当前使用
std::string
和/或std::string_view
的程序的示例,鉴于对<string_view>
和<string>
的描述更改,它将停止工作]?
这样的例子并不存在。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- Qt VTK交互风格的信号到小部件
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 如何在python中的PyArrow和C++中的Arrow之间进行交互时将PyArrow表转换为Arrow表
- 三种类型之间的隐式转换交互