Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对C++中的实际和形式参数给出相同的变量名会产生什么问题吗?_C++_Function_Parameters_Pass By Reference_Pass By Value - Fatal编程技术网

对C++中的实际和形式参数给出相同的变量名会产生什么问题吗?

对C++中的实际和形式参数给出相同的变量名会产生什么问题吗?,c++,function,parameters,pass-by-reference,pass-by-value,C++,Function,Parameters,Pass By Reference,Pass By Value,将被调用函数中的形式参数命名为调用函数中的实际参数是否会在通过引用传递时产生任何问题 另外,通过值传递时会有什么不同吗?我不确定您是否询问是否可以使用相同的名称作为实际参数和形式参数。据我所知,无论您选择按值传递还是按引用传递,它都不会导致任何问题。形式参数名称的范围是它们的函数,比如说它的名称是f,而实际参数名称的范围是调用函数f的函数。因此它们不会相互干扰。假设以下示例: void foo(int& arg1, int arg2) { } void bar() { int

将被调用函数中的形式参数命名为调用函数中的实际参数是否会在通过引用传递时产生任何问题


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

我不确定您是否询问是否可以使用相同的名称作为实际参数和形式参数。据我所知,无论您选择按值传递还是按引用传递,它都不会导致任何问题。形式参数名称的范围是它们的函数,比如说它的名称是f,而实际参数名称的范围是调用函数f的函数。因此它们不会相互干扰。

假设以下示例:

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

void bar()
{
    int   arg1 = 4;
    int   arg2 = 2;
    foo(arg1, arg2);
}
不,这样的代码不会导致任何问题。这些变量的作用域是不相交的,它们中没有一个可能隐藏另一个变量,或者您是指其他潜在问题吗

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

关于参考文献,这里有一句话:

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

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


我的建议是。从地址的角度考虑变量或参数,而不考虑它们的名称。< /P>你能举一个例子吗?C++控制范围很好。名称始终引用当前范围中的。引用通常是将函数调用转化为指针的过程。编译后的程序不关心您称之为变量的内容。你的编译器怎么说?其他人回答了这个问题,但我认为在通过引用传递变量时使用相同的名称是一种很好的做法。