在 C++ 中为实际参数和形式参数提供相同的变量名称会产生任何问题吗?

Can giving same variable names to actual and formal parameters in C++ create any problems?

提问人:solopolo 提问时间:1/30/2021 更新时间:6/5/2023 访问量:2121

问:

在通过引用传递时,为被调用函数中的形式参数指定与调用函数中的实际参数相同的名称是否会产生任何问题?

另外,按值传递时会有什么不同吗?

C++ 函数 参数 按引用传递 值传递

评论

2赞 florestan 1/30/2021
你能举个例子吗?
0赞 Abel 1/30/2021
C++ 可以很好地控制范围。名称始终引用当前作用域中的 。引用通常是将函数调用转换为指针的实用性。编译后的程序并不关心你怎么称呼变量。你的编译器怎么说?它是否抱怨多个定义?
0赞 Iman Nia 1/30/2021
其他人回答了,但我认为在通过引用传递变量时使用相同的名称是一种很好的做法。

答:

0赞 Bennett.Yang 1/30/2021 #1

我不确定您是否在问是否可以对实际参数和形式参数使用相同的名称。据我所知,无论您选择按值传递还是按引用传递,它都不会造成任何问题。形式参数名称的作用域是它们的函数(假设它的名称是 ),实际参数名称的作用域是调用函数 f 的函数。所以他们不会互相干扰。f

1赞 Igor G 1/30/2021 #2

假设示例:

void foo(int& arg1, int arg2)
{
}

void bar()
{
    int   arg1 = 4;
    int   arg2 = 2;
    foo(arg1, arg2);
}

不,这样的代码不会造成任何问题。这些变量的范围是不相交的,它们都不能潜在地隐藏另一个变量(或者你的意思是其他一些潜在的问题?

2赞 user5550963 1/30/2021 #3

params

如果你在谈论图片中的东西,简单的答案是这根本不重要。在“按值传递”的情况下,调用函数的值被复制到被调用函数的参数地址。

说到参考文献,这里有一句话:

引用与原始变量共享相同的内存地址,但也占用堆栈上的一些空间,而指针在堆栈上有自己的内存地址和大小。

因此,为了简化答案,参数和局部变量名称并不重要,因为编译器将它们转换为地址。从上面可以看出,即使是引用也必须存储被引用变量的地址。

我的建议是阅读这篇文章。从地址的角度来考虑变量或参数,而不是从它们的名称的角度来考虑。

0赞 Ibtida Bin Ahmed 6/5/2023 #4

对你的第一个问题的直接回答是肯定的,你可以这样做 但它会降低代码的可读性,并在您的脑海中或练习本中编译代码时造成混乱,因为建议检查程序(如果可能)以在没有机器的情况下使用一些测试用例进行编译和执行,即编译器在您的脑海中或笔记本上。 (从ICPC全球决赛入围者的角度来看) 因此,请避免使用相同的名字。