2012-04-05 59 views
0

今天有人问我这个问题。 什么是C++中引用的需要,为什么Bjarne Stroustrup想过reference在C++中。C++中需要引用什么

+4

怎样的“语法糖”的答案是有用的规模汇率?该功能的另一个名称可能是“指针分离器”。 – dasblinkenlight 2012-04-05 19:00:57

+1

有一个统一的语法来访问一个值和一个指针。引用填充的最重要的功能是能够重载涉及它们的操作符。 – enobayram 2012-04-05 19:01:30

+0

您的语法已关闭。很难确切地说出你的意思。你是指通过引用传递参数,而不是通过值或指针传递? – DevNull 2012-04-05 19:12:32

回答

5

这里是Stroustrup的解释:http://www2.research.att.com/~bs/bs_faq2.html#pointers-and-references

C++继承指针从C,所以没有造成严重的兼容性问题,我无法将其删除。引用对于几件事情是有用的,但我在C++中引入它们的直接原因是为了支持运算符重载。

下面是一个例子:

void f1(const complex* x, const complex* y) // without references 
{ 
    complex z = *x+*y; // ugly 
    // ... 
} 

void f2(const complex& x, const complex& y) // with references 
{ 
    complex z = x+y; // better 
    // ... 
} 
+0

别忘了'复杂的a,b; f1(&a,&b); f2(a,b);'调用函数也不那么费劲。 – chris 2012-04-05 20:38:53

1

如果你想知道答案,这样的问题,读一本书,叫“的设计和C++的演变”,由他本人:

http://www2.research.att.com/~bs/dne.html

另外,在这里看到的,他在那里详细解释了答案:

http://www2.research.att.com/~bs/bs_faq2.html#pointers-and-references

引述:

C++从C继承了指针,所以如果没有 会导致严重的兼容性问题,我无法删除它们。引用对于 很有用,但我在C++中引入它们的直接原因是 支持运算符重载。例如:

void f1(const complex* x, const complex* y) // without references 
{ 
    complex z = *x+*y; // ugly 
    // ... 
} 

void f2(const complex& x, const complex& y) // with references 
{ 
    complex z = x+y; // better 
    // ... 
}