2013-10-17 108 views
0

我在引用中生鏽,但我知道它們只是變量的另一個名稱。如果你有一個同名的參考文獻呢?爲什麼它會工作/不工作?C++參考參數可以與參數具有相同的名稱嗎?

例如:

foo(int &a) { 
    printf(a); 
} 
main() { 
    int a; 
    foo(a); 
} 

感謝

+4

那麼,在這種情況下,'printf(a)'其中'a'是一個'int'根本不應該工作,不管名字如何。 – jwodder

+1

我想你還需要更好地理解範圍規則。如果函數foo參數只是一個「int a」,而不是「int&a」,那麼該函數也會與傳入的參數同名。 – franji1

回答

3

「它爲什麼會工作/不工作?」

根據您的論點名稱:是的,它會工作。 main中的a是一個局部變量,標識符爲a,它指的是這個變量只在相同的範圍內有效。在foo中,有一個參數a,但這個a是與第一個不同的標識符。


PS:我認爲這一點:

printf(a); 

的意思是:

printf("%d", a); 
+0

區分變量和對它的引用是有幫助的。變量是以特定方式(其類型)解釋的一組內存位置。它可能以幾種不同的方式被引用。例如'int a;'創建用於存儲數字的字節並將其排列爲'a'。類似地,'int b [10];'創建10個變量;第三個可能被命名爲'b [2]'。一個引用變量'int&r = b [2];'創建一個變量,並安排它使用它來引用另一個變量。命名'r'會導致變量_it_ _points_ _to_被命名;這個例子中的第三個'b'變量。 –

0

是的,它會運行int &a是函數的局部變量,這將剛剛收到參考傳遞給它,它的作用域僅限於此函數,而Main函數中的a在主函數內具有作用域。