簡體   English   中英

三種類型之間具有隱式轉換的交互?

[英]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_viewstd::string現有代碼?

我擔心std::stringstd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM