我在引用中生锈,但我知道它们只是变量的另一个名称。如果你有一个同名的参考文献呢?为什么它会工作/不工作?C++参考参数可以与参数具有相同的名称吗?
例如:
foo(int &a) {
printf(a);
}
main() {
int a;
foo(a);
}
感谢
我在引用中生锈,但我知道它们只是变量的另一个名称。如果你有一个同名的参考文献呢?为什么它会工作/不工作?C++参考参数可以与参数具有相同的名称吗?
例如:
foo(int &a) {
printf(a);
}
main() {
int a;
foo(a);
}
感谢
“它为什么会工作/不工作?”
根据您的论点名称:是的,它会工作。 main中的a
是一个局部变量,标识符为a
,它指的是这个变量只在相同的范围内有效。在foo
中,有一个参数a
,但这个a
是与第一个不同的标识符。
PS:我认为这一点:
printf(a);
的意思是:
printf("%d", a);
区分变量和对它的引用是有帮助的。变量是以特定方式(其类型)解释的一组内存位置。它可能以几种不同的方式被引用。例如'int a;'创建用于存储数字的字节并将其排列为'a'。类似地,'int b [10];'创建10个变量;第三个可能被命名为'b [2]'。一个引用变量'int&r = b [2];'创建一个变量,并安排它使用它来引用另一个变量。命名'r'会导致变量_it_ _points_ _to_被命名;这个例子中的第三个'b'变量。 –
是的,它会运行int &a
是函数的局部变量,这将刚刚收到参考传递给它,它的作用域仅限于此函数,而Main函数中的a
在主函数内具有作用域。
那么,在这种情况下,'printf(a)'其中'a'是一个'int'根本不应该工作,不管名字如何。 – jwodder
我想你还需要更好地理解范围规则。如果函数foo参数只是一个“int a”,而不是“int&a”,那么该函数也会与传入的参数同名。 – franji1