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

Posted

技术标签:

【中文标题】在 C++ 中为实际参数和形式参数赋予相同的变量名会产生任何问题吗?【英文标题】:Can giving same variable names to actual and formal parameters in C++ create any problems? 【发布时间】:2021-05-04 05:13:01 【问题描述】:

被调用函数中的形参与调用函数中的实参同名是否会在通过引用传递时产生任何问题?

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

【问题讨论】:

你能举个例子吗? C++ 控制范围非常好。名称总是指当前范围内的。引用通常在实用性中将函数调用转换为指针。已编译的程序并不关心您所说的变量。你的编译器是怎么说的?它是否抱怨多个定义? 其他人回答了,但我认为在通过引用传递变量时使用相同的名称是一个好习惯。 【参考方案1】:

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

说到参考,这里有一句名言:

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

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

我的建议是read this。并根据地址而不是名称来考虑变量或参数。

【讨论】:

【参考方案2】:

假设示例:

void foo(int& arg1, int arg2)



void bar()

    int   arg1 = 4;
    int   arg2 = 2;
    foo(arg1, arg2);

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于在 C++ 中为实际参数和形式参数赋予相同的变量名会产生任何问题吗?的主要内容,如果未能解决你的问题,请参考以下文章

c++中两个函数函数名相同,参数类型和参数个数也相同,但是函数类型不同,那它们是重载函数吗?

C++学习-函数的使用1-函数的定义

C++笔记--函数

C++之重载覆盖和隐藏

函数的参数

类和对象进阶