2017-06-19 42 views
14

由於C++ 1z,我們有std::string_view,這是一個連續字符序列的輕量視圖,避免了不必要的數據複製。現在通常不推薦使用const std::string&參數,而是使用std::string_view爲什麼不支持連接std :: string和std :: string_view?

然而,人們很快發現,從使用字符串連接const std::string&std::string_view符碼開關,因爲是串聯std::stringstd::string_view不支持:

std::string{"abc"} + std::string_view{"def"}; // ill-formed (fails to compile) 
std::string_view{"abc"} + std::string{"def"}; // ill-formed (fails to compile) 

爲什麼要爲串聯std::stringstd::string_view不支持在標準?

+10

最有可能的疏忽。也就是說,添加一個'operator +'來使代碼工作並不需要太多。 – NathanOliver

+5

剛剛發現這個:https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/1RcShRhrmRc – NathanOliver

+0

我還想念的是std :: basic_string的成員函數,它返回std ::子字符串的basic_string_view(類似於「substr」成員函數),可能名爲「substr_view」。 – CAF

回答

2

這樣做的原因是在n3512 string_ref: a non-owning reference to a string, revision 2由Jeffrey Yasskin給出:

我也省略操作者+(basic_string的,basic_string_ref),因爲LLVM返回來自此過載的輕量對象的僅僅進行級聯懶惰地。如果我們定義這個重載,稍後我們將很難介紹這種輕量級聯。

稍後在std-proposals郵件列表上建議將這些運算符重載添加到標準。

+1

哇。哇!這似乎是最糟糕的可能的原因。該標準應該是爲了*語言的好處,*不適用於任何特定的實現。我也對「懶惰地執行連接」感到警惕 - 這是否意味着,如果我們有內存不足,添加到原始字符串的例外將會被延遲?我當然希望不會,我想知道在我*做這種手術時手術是否失敗,而不是十分鐘後,當我查看結果時。 – paxdiablo

+0

希望有人提交一份包含這些運營商的提案。 – vitaut

相關問題