从const char*+ length构造const std :: string是否便宜?

ein*_*ica 1 c++ string performance c++-standard-library construct

它的执行成本有多高

const std::string s(my_const_char_ptr, my_length);
Run Code Online (Sandbox Code Playgroud)

?是否涉及复制?如果没有,我可以从典型的标准库实现中获得多少指令?在性能关键代码中几乎没有这个?

...或者我必须获得GSL实施和使用string_view吗?

eml*_*lai 5

如果您想知道确切的答案,则需要在目标系统和编译设置上进行测量.但是对于幕后发生的事情:

  • 如果my_length足够大(或标准库的std::string实现不使用小字符串优化 - 这是罕见的),那么将有动态内存分配.

  • 在任何情况下,都会有一个O(n)逐个字符的副本*my_const_char_ptrstd::string缓冲区.