2017-03-26 75 views
0

C++ 17的字符串視圖爲開發人員提供了一種將廉價的非擁有引用傳遞給實際上可以爲faster than const std::string&的字符串的方法。我可能很幼稚,但這聽起來很像Java的內置機制,可以複製引用的一個對象。像Integer和String這樣的內置包裝器是不可變的。 Java的「引用」機制爲您提供了保證,這些對象在程序的整個生命週期中都會保持相同的值。所不同的是在C++中,string_view是在程序中明確的,像這樣:爲什麼只有字符串視圖?

void retrieve_an_object (string_view sv) { 
} 

這是更自我記錄比Java的令人驚訝的(以C++開發人員)技工。但是,對於標準和圖書館編寫者來說,爲C++中的每個可以想到的類編寫一個視圖類肯定是一個巨大的負擔。 C++可能有一種更專注的方式將對象標記爲「僅查看」而無需編寫整個類,如果可以的話,爲什麼從考慮中刪除了這些?

+1

它不是'std :: string'的視圖,而是連續字符序列的視圖。它有大部分'std :: string'接口,因爲它是一致的。 – chris

+2

'const type&'是爲類提供僅查看接口的最快方法。 'string_view'是特殊的,因爲當你*沒有'std :: string'時使用它。 – aschepler

回答

3

視圖類(string_viewarray_view)是爲了給(只讀)訪問零件它們被呈現所述對象的
這就像一個const &與關於不同的開始和結束的附加信息。

C++有一個專用的查看對象的方式:const &。 (以及std::reference_wrapper<const T>

如果你只想訪問某些數據結構的特定部分,你需要一個專用的視圖類,它知道應該提供哪些部分,這本身並不真正可以普遍化。

相關問題