2013-08-23 104 views
-3

当通过方法分配变量,返回变量或指向变量时,哪个更快?指针与返回

案例1

函数声明

void foo(int* number) 
{ 
    *number = 5; 
} 

用法

int main() 
{ 
    int number; 
    function(&number); 
    cout << "Number: " << number; 
} 

案例2

函数声明

int foo() 
{ 
    int number = 5; 
    return number; 
} 

用法

int main() 
{ 
    int number; 
    number = function(); 
    cout << "Number: " << number; 
} 

PS:在情况2中,我创建的变量,并立即返回它。我知道这是没有道理的,但这是我可以找到的最接近的例子,因为我正在初始化一个实际的对象,它需要先创建对象,编辑它,然后返回它

+5

“更好”是什么意思? –

+3

您错过了参考资料! 'void foo(int&i){i = 5; } int main(){int x; FOO(X); return x; }' – sehe

+7

返回值。除非你有很好的理由否则。 – juanchopanza

回答

2

这取决于复制变量的成本。对于基元类型,返回一个值。 对于更复杂的类型,请考虑传入引用,或者查看C++ 11移动语义。

+6

还有的(N)RVO也是如此,它适用很多。 – chris

1

使用输出参数(案例1)是它可以让你有一个函数“返回”多个值的能力的一个好处:

void foo (int* x, int* y) 
{ 
    *x = 5; 
    *y = 4; 
} 

但就像每个人都在评论说,这并不重要在C++中与C一样多。 通常返回的可读性更高,并且使得程序的逻辑定义更为清晰,并且易于遵循 。在C++中,坚持返回或引用。

+0

更preferrable到原始指针会引用... – codeling

+0

是啊,我说,到了最后,因为这是C++。I <3个引用。 –

0

通常情况下,您应该根据需要选择使用哪种,而不是性能。

你有多个输出吗? - >使用指针

是输入将是一个输出 - >还不如用指针

它更难以与这两个场景返回一个变量。 除此之外,从性能角度来看,只有在变量超级复杂时才使用变量才行,这样,只传入指针而不是超级复杂对象。但除此之外,任何性能增益都可以忽略不计。