[英]How to shallow copy char* to std::string?
我想知道是否可以淺層復制char*
到std::string
。
如果你的目標是使用char*
構造一個std::string
對象而不復制數據:不,這是不可能的。 std::string
擁有自己的資源,它不能引用另一個char*
。 這也是為什么適當的構造函數采用const char*
而不是char*
:它不會修改數據,而是復制數據。
在C ++ 17中,你有std::string_view
,它正好用於引用它不擁有的字符串(文字)。 請注意,此視圖不用於修改數據,因此它再次使用const char*
構造,而不是char*
。
所有std
容器(和std::string
基本上都是char
的容器)確實擁有它們的數據並具有值語義。 因此,沒有你不能將char*
淺層復制到開箱即用的std::string
。 然而,有不同的對象可用於此目的,為了明顯區別它們被稱為... ..._view
,例如,因為C ++ 17有std::string_view
。
從技術上講,應該可以實現string
構造函數或成員函數,並使用所有權轉移(類似於unique_ptr
)獲取指向緩沖區(和大小/容量)的指針。 但是它不會非常有用,因為字符串緩沖區應該由相應的分配器創建,因此當手指傳遞的指針不是由正確的分配器創建時,您最終會手動調用字符串分配器和/或難以跟蹤錯誤。 這也會使小字符串優化成為問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.