C ++中的引用与变量

时间:2011-06-10 21:31:09

标签: c++ variables reference

在此article中,它表示引用允许您减少幕后复制的数量。与变量相比,引用是否会减少任何其他操作?

6 个答案:

答案 0 :(得分:1)

参考一种变量。你问的是通过引用传递而不是传递值。

按值传递会创建传递的值的副本,而通过引用传递意味着接收方将能够更改您传递其值的相同变量。

两者都有其自身的优点和缺点,应该在适当的时候使用(例如,通过引用有时会用于保存复制操作或获取返回值,而by value将用于传递不应该的数据在本地更改,但将在被调用函数内更改。)

答案 1 :(得分:1)

在大多数编译器中,引用是使用指针实现的,因此,如果使用指针而不是引用,则具有与隐含的相同的确切成本。

请注意,该标准不强制实现依赖指针的引用。特别是

It is unspecified whether or not a reference requires storage (3.7).

引用允许您通过“引用”传递参数,而不是“通过复制传递”。

void f(int & r) { r = 1; }
void g(int const * p) { *p = 2; }
void h(int j) { j = 3; }
int main()
{
  int i = 0;
  f(i);  // i now equals 1
  g(&i); // i now equals 2 (the address of i was given to g)
  h(i); // i is copied and thus not modified (ie i == 2 after this line)
}

另见C++ faqlite: references

答案 2 :(得分:0)

将引用作为变量的想法如下:

 const int & r = 42;

基本上是错的。好吧,你可以创建这样的东西,但是最初设计的引用是为了便于将对象传递给函数,并且(在较小程度上)从函数返回它们。如果你在除了这两种情况之外的任何情况下使用它们,除非你比我,或者大多数其他程序员更聪明,你做错了。

答案 3 :(得分:0)

如果您担心内存使用情况,只需考虑通过引用传递为使用指针传递值,并在后台完成脏工作。指针使用的内存量取决于平台/操作系统。

答案 4 :(得分:0)

要回答您的确切问题,通过引用传递只会做一件事:它允许您将变量传递给函数而不是该变量的副本。

取决于何时使用,其影响巨大。但这是我能想到让你开始的最基本的答案。

编辑:我看到你关心的是速度。强烈建议每当它是一个选项时通过引用传递,因为速度节省可能是巨大的,特别是当一些巨大的类/结构被传递给函数时。

答案 5 :(得分:0)

没有。 节省仅适用于复制esp.when作为参数传递给函数并从函数返回值。