介紹
許多語言以某種形式支持通過引用調用,但相對較少的語言將其用作默認值。 FORTRAN II是參考調用語言的早期示例。一些語言,如C ++,PHP,Visual Basic .NET,C#和REALbasic,默認按值調用,但為調用引用參數提供特殊語法。 C ++還提供了對const的引用調用。 Rust還提供了引用調用,但默認為不可變(const)引用。可變引用具有與不可變引用類似的語法 。
通過引用調用可以使用按值調用的語言進行模擬,並且不完全支持通過引用調用,通過使用引用(引用其他對象的對象),例如指針(表示其他對象的記憶體地址的對象) 。 C和ML等語言使用這種技術。它不是一個單獨的評估策略-語言按值調用-但有時它被稱為按地址調用(也稱為按地址傳遞)。在ML中,參考文獻是類型和記憶體安全的。
通過共享調用(傳遞一個可以隨後變異的對象)來實現類似的效果,在Java,Python和Ruby等語言中使用。
在純函式式語言中,兩種策略之間通常沒有語義差異(因為它們的數據結構是不可變的,因此函式不可能修改其任何參數),因此它們通常被描述為按值調用,即使實現經常在內部使用引用來提高效率。
例子
以下示例演示了E中的引用調用:
以下是一個按地址調用的示例,它模擬C中的引用調用:
按引用傳遞的重要特點
傳遞的是值的引用,也就是說傳遞前和傳遞後都指向同一個引用(也就是同一個記憶體空間)。
示例如下:
運行結果如下: