[英]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>
的描述更改,該std::string_view
會停止工作)?
這樣的例子不存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.