我在引用中生鏽,但我知道它們只是變量的另一個名稱。如果你有一個同名的參考文獻呢?爲什麼它會工作/不工作?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