我想知道是否有可能将char*
复制到std::string
。
答案 0 :(得分:13)
如果您打算用std::string
构造一个char*
对象而不复制数据:不,这是不可能的。 std::string
拥有其资源,因此无法引用其他char*
。这也是为什么适当的构造函数采用const char*
而不是char*
的原因:它不修改数据,而是复制数据。
在C ++ 17中,您有std::string_view
的确切含义是引用它不拥有的字符串(文字)。请注意,此视图无意于修改数据,因此它是再次由const char*
而非char*
构造的。
答案 1 :(得分:3)
所有std
容器(并且std::string
基本上是char
的容器)确实拥有其数据并具有值语义。因此,没有,您不能立即将char*
复制到std::string
。
但是,有不同的对象可用于此目的,以使其与众不同,它们被称为..._view
,例如,由于C ++ 17中存在std::string_view
。
答案 2 :(得分:2)
从技术上讲,应该可以实现string
构造函数或成员函数,并通过所有权转移(类似于unique_ptr
)来获取指向缓冲区(和大小/容量)的指针。但是,由于字符串缓冲区应该由相应的 allocator 创建,因此并不是很有用,因此您最终将不得不手动调用字符串分配器和/或在没有传递指针时难以跟踪错误。 t由正确的分配器创建。同样,这也会使小字符串优化成为问题。