string a = "Hello World";
for (int i=0; i<1000000; ++i)
const string b = a;
代码B:
string a = "Hello World";
for (int i=0; i<1000000; ++i)
const string &b = a;
如果我单独运行2点代码和测量CPU时间,所述代码B比代码A.快约2.5倍
不包括原始类型,如char
,int
,float
......我知道获得对原件的引用而不是复制它是更快的。
虽然差异在大多数情况下几乎可以忽略,但是可以考虑总是让const string
类型(以及其他非原始类型)被引用吗?
通常的指导原则如下。如果一个类型的sizeof大于sizeof(void *)',那么总是通过const引用传递,否则通过复制传递。如果您想更改对象,则传递非常量引用而不管大小。 – DeiDei
也有例外 - 例如,如果您想在函数中创建参数的副本,然后按值传递 - 它会隐式地创建所需的副本,并且可以利用移动操作等功能来有效地执行此操作。 – jaggedSpire
类可能会定义自定义复制或赋值操作符(如字符串),所以'sizeof'并不总是一个很好的复制时间指示器。 –