簡體   English   中英

如何將char *淺拷貝到std :: string?

[英]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.

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