考慮在C++中使用按指針傳遞的交換函數的簡單測試。爲什麼C沒有指針傳遞地址/引用?
#include <iostream>
using std::cout;
using std::endl;
void swap_ints(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
return;
}
int main(void)
{
int a = 1;
int b = 0;
cout << "a = " << a << "\t" << "b = " << b << "\n\n";
swap_ints(&a, &b);
cout << "a = " << a << "\t" << "b = " << b << endl;
return 0;
}
這個程序使用更多的內存比如果我通過地址通過?如在此函數decleration:
void swap_ints(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
return;
}
是否C++函數的這個傳遞通過引用版本使用較少的內存,通過不需要創建指針變量?
而且不ç沒有這個「通行證按引用」的能力是C++不一樣嗎?如果是這樣,那麼爲什麼不呢,因爲這意味着更多的高效內存代碼正確?如果沒有,C背後的缺陷是什麼,不採用這種能力。我想我不認爲是C++可能會創建指針來實現幕後功能。這是編譯器實際做的 - 因此除了整潔的代碼之外,C++確實沒有任何真正的優勢?
參考**是**指針,他們只是*看*不同。儘管如此,它們在底下沒什麼不同。 (除了它們不能爲空) – Mehrdad 2013-02-26 05:42:32
@Mehrdad那麼我的假設是正確的,除了使代碼更整潔外,沒有其他功能。 – Leonardo 2013-02-26 05:43:28
不僅整潔,而且更安全,因爲引用不能像指針那樣是NULL。但是,在編譯時引用和指針通常會生成相同的機器代碼。 – 2013-02-26 05:44:51