c参考语义在调用者的代码中不明确

任何人都能解释一下吗?

旧行C程序员有时不喜欢引用,因为它们提供了调用者代码中不明确的引用语义。

当您使用C ++函数时:

void make42 (int &x) { x = 42; } 

并称它为:

 int y = 7; make42 (y); // y is now 42 

然后在make42 (y)调用中没有指示可以更改y 。 如果它不是 pass-by-reference参数,那么将进行完全相同的函数调用:

 void trymake42 (int x) { x = 42; } int y = 7; trymake42 (y); // y is still 7 

在C代码中,它将是这样的:

 void make42 (int *px) { *px = 42; } int y = 7; make42 (&y); 

明确表示在调用函数时对y的更改是真实可能的。

那么这些“旧线”C编码器会关注的是:

 someFunction (x); 

他们不知道x是否会改变。

我不得不说,作为这些旧线路编码器之一,它远不如引用似乎暗示的问题。 在没有看到原型的情况下,我甚至无法分辨参数类型应该是什么,或者有多少参数类型或者它们的顺序。

因此,必须参考所述原型来确定参数是按值传递还是按引用传递并不是一件大事。

C#对outref参数修饰符采用了不同的方法out但仍然使它在调用中显式是变量是值传递还是传递引用。