2010-06-24 72 views

回答

6

因为C是最先发明的。我不知道他们当时是否没有想过引用(主要是不必要的),或者是否有某些特殊原因不包含引用(可能是编译器的复杂性)。它们对于面向对象和泛型构造来说肯定比C的过程风格更有用。

1

它们不在C中,因为它们不是必需的。 C几乎没有“多余的”特征。你可以在不使用引用的情况下编写任何程序,所以它们不包含在内。 C++比C开发时间晚了很多,所以它的设计者抛出了C中原本不存在的各种东西。

0

我想C诞生了一个简约的帽子,引用只是指针的语法糖。

+1

这是一个非常简单的参考视图,虽然在技术上(在一个非常低的水平)真正的不是实际的准确描述是什么参考。 – 2010-06-24 20:08:25

5

参考论证最初是由AFAIK发明的,其中一件事是:运算符重载语义。例如,operator []只需返回一个引用。

然后,当时的“隐藏指针”是否应该用于其他任何事情,这是一个很有争议的话题。

许多公司的许多开发约定文件都表示“从不使用引用,如果你需要一个指针,就这么说”。

但是,后来发现参考文献有一个主要优势(不,不是语法糖)。这是这样的:除非你真的很难打破它,否则参考文献是有效的。

就个人而言,我还是不明白,为什么我不能在C++中做到这一点:

int a1, a2; 
int &b = a1; 
&b = a2; // Error. address of referenced is not an lvalue. Why?! 
+0

该代码没有意义。第二行尝试从指针初始化一个整数;第三个尝试将一个整数分配给一个临时指针。这两种都会导致类型不匹配。该错误告诉你,你不能分配给临时;即使你可以,那么它也不会起作用,因为临时性会立即销毁。你想要做什么? – 2010-06-24 18:07:12

+0

第三行尝试分配'b'的地址,它与(试图将变量'b'重定位到指定地址(某种意义上)相同。我想不出你想要这样做的情况。如果您需要与特定内存位置相关的变量,请使用“void *”指向内存地址。允许这样的事情也意味着'&b =&a2'将被允许,这将导致在同一地址处(唯一的)变量“b”和“a2”,这是没有意义的。任意“移动”这样一个变量会扰乱编译器生成的内存偏移。 – bta 2010-06-24 18:12:53

+0

对不起我白痴。固定代码。请无视你以为我的意思。 – 2010-06-24 18:28:58

1

正如你可能知道,C早C++大约十年。参考文献是C++语言中引入的一个功能。 C标准的后续版本已经采用了C++语言的一些特性(如const和//注释)。引用的概念还没有到目前为止。

人们可以推测,他们在面向对象编程的用处不作为有效转化为C.

1

的过程式编程,我想我跟帕维尔的想法,他们发明了使运算符重载正常工作达成一致。很明显,C++的第一个版本(带类的C)没有引用,如果他们这样做,this将是一个引用而不是指针。