如何将char *浅拷贝到std :: string?

时间:2018-08-15 09:26:08

标签: c++ string

我想知道是否有可能将char*复制到std::string

3 个答案:

答案 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由正确的分配器创建。同样,这也会使小字符串优化成为问题。