考虑在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