当您使用C++函数时:
void make42 (int &x) { x = 42; }
Run Code Online (Sandbox Code Playgroud)
并称之为:
int y = 7;
make42 (y); // y is now 42
Run Code Online (Sandbox Code Playgroud)
那么有没有在指示make42 (y)该呼叫y是可以改变的.如果它不是 pass-by-reference参数,则会进行完全相同的函数调用:
void trymake42 (int x) { x = 42; }
int y = 7;
trymake42 (y); // y is still 7
Run Code Online (Sandbox Code Playgroud)
在C代码中,它将是这样的:
void make42 (int *px) {
*px = 42;
}
int y = 7;
make42 (&y);
Run Code Online (Sandbox Code Playgroud)
明确表示y在调用函数时,更改是一种真正的可能性.
那么这些"旧线"C编码器会关注的是:
someFunction (x);
Run Code Online (Sandbox Code Playgroud)
在那里他们将不知道从刚才这是否x会改变与否.
我不得不说,作为这些旧线路编码器之一,它远不如引用似乎暗示的问题.在没有看到原型的情况下,我甚至无法分辨参数类型应该是什么,或者有多少参数类型,或者它们的顺序.
因此,必须参考所述原型来确定参数是按值传递还是按引用传递并不是一件大事.
C#使用out和ref参数修饰符采用不同的方法,但仍然使它在调用中显式是变量是值传递还是传递引用.
| 归档时间: |
|
| 查看次数: |
440 次 |
| 最近记录: |