【发布时间】:2014-04-17 11:05:38
【问题描述】:
我在下面有以下代码(类似 C 的语言)。我知道如何跟踪是否使用了按值传递或按引用传递,但也有按名称调用机制。谁能指导我如何追踪姓名呼叫?
int x=12,y=10;
void tswap(int pa, int pb) {
int tmp;
tmp=pa;
pa=pb;
pb=tmp;
x=x+pa;
x=x-pb;
y++;
printf("%d %d %d %d\n",pa,pb,x,y);
}
int main() {
int a=4;
tswap(x,a);
printf("%d %d %d\n",x,y,a);
tswap(++x,++y);
printf("%d %d %d\n",x,y,a);
return 0;
}
如果使用按值传递,则输出将如下所示:
4 12 4 11
4 11 4
12 5 12 13
12 13 4
【问题讨论】:
-
C++ 没有按名称调用机制。 (您可以通过让函数采用函数对象来模拟它。)
-
当我运行这个程序时,我准确地得到了你发布的输出。但是函数调用并没有什么特别之处:所有参数都是按值传递的。老实说,我从来没有听说过 C++ 中的 pass-by-name...
-
传名真的不存在!它只是理论上的概念:)
标签: c++ parameter-passing pass-by-name