按值传递
默认情况下,按值传递的参数在c++。当按值传递的参数,一个参数被传递到函数的副本。
考虑下面的代码片段:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
void
foo( int
y) { using
namespace
std; cout
<< "y
= "
<< y << endl; } int
main() { foo(5);
//
first call int
x = 6; foo(x);
//
second call foo(x+1);
//
third call return
0; } |
在第一次调用foo()的参数是文字5。调用foo()时,创建变量y,5是复制到y。变量的值y然后foo()结束时销毁。
在第二个调用foo()的参数是变量x x 6评估产生价值。第二次调用foo()时,再次创建变量y,6是复制到y。变量的值y然后foo()结束时销毁。
第三调用foo()的参数是表达式x + 1。x 7 + 1评估产生价值,传入变量y。变量y再次foo()结束时销毁。
因此,该程序输出:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
void
foo( int
y) { using
namespace
std; cout
<< "y
= "
<< y << endl; y
= 6; cout
<< "y
= "
<< y << endl; }
//
y is destroyed here int
main() { using
namespace
std; int
x = 5; cout
<< "x
= "
<< x << endl; foo(x); cout
<< "x
= "
<< x << endl; return
0; } |
起初,x是5。调用foo()时,x的值(5)传递给变量y在foo()。y的价值分配6,然后销毁。x的值不变,即使y是改变。
路过的优点值:
按值传递的参数(如可变量。文字(如x)。6),或表达式(如。x + 1)。
参数是从未改变的函数被调用时,从而防止副作用。
经过价值的缺点:
复制大型结构或类可以花大量的时间复制,这可能会导致性能损失,特别是在函数被调用很多次。
在大多数情况下,通过值传递参数的最佳方式功能——它是灵活的和安全的。