按值或按引用传递C ++字符串

时间:2009-12-11 04:29:30

标签: c++ string

我想知道C ++字符串是否被认为足够小,以便在通过值而不是通过引用传递时更有效。

2 个答案:

答案 0 :(得分:32)

没有。通过引用传递:

void foo(const std::string& pString);

一般情况下,如果它们具有非平凡的复制构造函数,则通过引用传递,否则按值传递。

字符串通常由指向数据的指针和长度计数器组成。它可能包含更多或更少,因为它的实现是定义的,但是你的实现很可能只使用一个指针。

在模板代码中,您也可以使用const T&,因为编译器可以使用该函数的定义。这意味着它可以决定它是否应该作为参考。 (我认为)

答案 1 :(得分:2)

绝对不是。除非你的特定实现具有写时复制语义(这些天由于线程问题而很少见),所以当通过值传递时,必须复制整个字符串(即使实际的字符串数据存储在堆上)。即使字符串对象本身只是内部的几个指针,要复制的数据量在字符串的长度上也是线性的。