字符串str1 = str有什么区别?和字符串str2((string&)str1);

时间:2019-07-16 11:18:12

标签: c++

我基本上想知道后者是否更有效/更优化,因为它没有创建字符串的副本?

我想使用构造函数创建一个字符串 像字符串str(str1,3,5);

1 个答案:

答案 0 :(得分:5)

  

我想使用类似字符串str(str1,3,5);的构造函数制作一个字符串

如果我们查看相应的std::string构造函数here,就会发现它具有签名

basic_string( const basic_string& other, 
          size_type pos, 
          size_type count,
          const Allocator& alloc = Allocator() );

请注意const basic_string& other部分:字符串通过const引用传递,不涉及任何临时副本。因此,std::string str(str1, 3, 5)会尽可能地高效,而执行std::string str((std::string &)str1, 3, 5)只会混淆代码:它包含一个(通常被认为是不好的)C样式强制转换,它假装引用是非常量的,并且为读者增加了认知工作,却一无所获。