我想知道C ++字符串是否被认为足够小,以便在通过值而不是通过引用传递时更有效。
答案 0 :(得分:32)
没有。通过引用传递:
void foo(const std::string& pString);
一般情况下,如果它们具有非平凡的复制构造函数,则通过引用传递,否则按值传递。
字符串通常由指向数据的指针和长度计数器组成。它可能包含更多或更少,因为它的实现是定义的,但是你的实现很可能只使用一个指针。
在模板代码中,您也可以使用const T&
,因为编译器可以使用该函数的定义。这意味着它可以决定它是否应该作为参考。 (我认为)
答案 1 :(得分:2)
绝对不是。除非你的特定实现具有写时复制语义(这些天由于线程问题而很少见),所以当通过值传递时,必须复制整个字符串(即使实际的字符串数据存储在堆上)。即使字符串对象本身只是内部的几个指针,要复制的数据量在字符串的长度上也是线性的。