だれが一番はやいでしょうか?

typedef std::complex<double> COMPLEX;

COMPLEX plus_1(COMPLEX a, COMPLEX b)
{
	return a + b;
}

COMPLEX plus_2(const COMPLEX& a, const COMPLEX& b)
{
	return a + b;
}

COMPLEX plus_2_1(COMPLEX& a, COMPLEX& b)
{
	return a + b;
}

COMPLEX plus_2_2(const COMPLEX& a, const COMPLEX& b, const COMPLEX& c, const COMPLEX& d)
{
	return a + b;
}

void plus_3(COMPLEX a, COMPLEX b, COMPLEX& c)
{
	c = a + b;
}

void plus_4(const COMPLEX& a, const COMPLEX& b, COMPLEX& c)
{
	c = a + b;
}


int main(int argc, char *argv[])
{
	const int count = 100000000;

	{
		timer	t;

		COMPLEX a(1,1);
		COMPLEX b(1,1);
		COMPLEX c(0,0);

		for( int i=0 ; i<count ; ++i )
		{
			c = plus_???(a, b);
			a = c;
		}

		printf("plus_??? c=(%f,%f) time=%d [ms]\n", c.real(), c.imag(), t.span());
	}
}
plus_1 c=(100000001.000000,100000001.000000) time=1830 [ms]
plus_2 c=(100000001.000000,100000001.000000) time=1515 [ms]
plus_2_1 c=(100000001.000000,100000001.000000) time=1411 [ms]
plus_2_2 c=(100000001.000000,100000001.000000) time=1460 [ms]
plus_3 c=(100000001.000000,100000001.000000) time=2174 [ms]
plus_4 c=(100000001.000000,100000001.000000) time=1847 [ms]


plus_2 が1番速そうな気がしたのに。。
plus_2_1が速いなんて!