在 C++ 中为实参和形参赋予相同的变量名会产生任何问题吗?
Can giving same variable names to actual and formal parameters in C++ create any problems?
在通过 reference 传递时,被调用函数中的形式参数与调用函数中的实际参数同名会产生任何问题吗?
另外,按值传递会有什么不同吗?
我不确定你是不是在问是否可以对实参和形参使用相同的名称。据我所知,无论您选择按值传递还是按引用传递,都不会造成任何问题。形参名的作用域是函数(假设它的名字是f
),实参名的作用域是调用函数f的函数。这样他们就不会互相干扰了。
假设例子:
void foo(int& arg1, int arg2)
{
}
void bar()
{
int arg1 = 4;
int arg2 = 2;
foo(arg1, arg2);
}
不会,这样的代码不会造成任何问题。这些变量的范围是不相交的,其中 none 个可能隐藏另一个(或者您是说其他潜在问题?)。
如果你是在谈论图片中的东西,简单的回答是根本不重要。在“按值传递”的情况下,调用函数的值被复制到被调用函数的参数地址。
关于参考文献,这里有一句话:
A reference shares the same memory address with the original variable but also takes up some space on the stack whereas a pointer has its own memory address and size on the stack.
所以为了简化答案,参数和局部变量名称并不重要,因为编译器会将它们转换为地址。从上面可以看出,即使引用也必须存储引用变量的地址。
我的建议是read this。并根据地址而不是名称来考虑变量或参数。
在通过 reference 传递时,被调用函数中的形式参数与调用函数中的实际参数同名会产生任何问题吗?
另外,按值传递会有什么不同吗?
我不确定你是不是在问是否可以对实参和形参使用相同的名称。据我所知,无论您选择按值传递还是按引用传递,都不会造成任何问题。形参名的作用域是函数(假设它的名字是f
),实参名的作用域是调用函数f的函数。这样他们就不会互相干扰了。
假设例子:
void foo(int& arg1, int arg2)
{
}
void bar()
{
int arg1 = 4;
int arg2 = 2;
foo(arg1, arg2);
}
不会,这样的代码不会造成任何问题。这些变量的范围是不相交的,其中 none 个可能隐藏另一个(或者您是说其他潜在问题?)。
如果你是在谈论图片中的东西,简单的回答是根本不重要。在“按值传递”的情况下,调用函数的值被复制到被调用函数的参数地址。
关于参考文献,这里有一句话:
A reference shares the same memory address with the original variable but also takes up some space on the stack whereas a pointer has its own memory address and size on the stack.
所以为了简化答案,参数和局部变量名称并不重要,因为编译器会将它们转换为地址。从上面可以看出,即使引用也必须存储引用变量的地址。
我的建议是read this。并根据地址而不是名称来考虑变量或参数。