回答
因为C是最先发明的。我不知道他们当时是否没有想过引用(主要是不必要的),或者是否有某些特殊原因不包含引用(可能是编译器的复杂性)。它们对于面向对象和泛型构造来说肯定比C的过程风格更有用。
它们不在C中,因为它们不是必需的。 C几乎没有“多余的”特征。你可以在不使用引用的情况下编写任何程序,所以它们不包含在内。 C++比C开发时间晚了很多,所以它的设计者抛出了C中原本不存在的各种东西。
我想C诞生了一个简约的帽子,引用只是指针的语法糖。
参考论证最初是由AFAIK发明的,其中一件事是:运算符重载语义。例如,operator []只需返回一个引用。
然后,当时的“隐藏指针”是否应该用于其他任何事情,这是一个很有争议的话题。
许多公司的许多开发约定文件都表示“从不使用引用,如果你需要一个指针,就这么说”。
但是,后来发现参考文献有一个主要优势(不,不是语法糖)。这是这样的:除非你真的很难打破它,否则参考文献是有效的。
就个人而言,我还是不明白,为什么我不能在C++中做到这一点:
int a1, a2;
int &b = a1;
&b = a2; // Error. address of referenced is not an lvalue. Why?!
该代码没有意义。第二行尝试从指针初始化一个整数;第三个尝试将一个整数分配给一个临时指针。这两种都会导致类型不匹配。该错误告诉你,你不能分配给临时;即使你可以,那么它也不会起作用,因为临时性会立即销毁。你想要做什么? – 2010-06-24 18:07:12
第三行尝试分配'b'的地址,它与(试图将变量'b'重定位到指定地址(某种意义上)相同。我想不出你想要这样做的情况。如果您需要与特定内存位置相关的变量,请使用“void *”指向内存地址。允许这样的事情也意味着'&b =&a2'将被允许,这将导致在同一地址处(唯一的)变量“b”和“a2”,这是没有意义的。任意“移动”这样一个变量会扰乱编译器生成的内存偏移。 – bta 2010-06-24 18:12:53
对不起我白痴。固定代码。请无视你以为我的意思。 – 2010-06-24 18:28:58
正如你可能知道,C早C++大约十年。参考文献是C++语言中引入的一个功能。 C标准的后续版本已经采用了C++语言的一些特性(如const和//注释)。引用的概念还没有到目前为止。
人们可以推测,他们在面向对象编程的用处不作为有效转化为C.
的过程式编程,我想我跟帕维尔的想法,他们发明了使运算符重载正常工作达成一致。很明显,C++的第一个版本(带类的C)没有引用,如果他们这样做,this
将是一个引用而不是指针。
- 1. 引号中的变量C++
- 2. 引用C#JavaScript中的变量
- 3. C++中的存储引用变量
- 4. ReadOnly C#类中的引用变量
- 5. C#变量引用混乱
- 6. C#引用成员变量
- 7. 在C代码中引用BASH变量
- 8. 引用JMeter中变量的变量
- 9. 引用变量中的变量 - 哈希?
- 10. 使用变量引用C#中的数组索引
- 11. 从'C'程序中提取变量定义和变量引用
- 12. C++“引用返回的本地变量”
- 13. Objective-c引用块之外的变量
- 14. 使用索引C的循环变量#
- 15. LDNS:未定义的变量引用(C++)
- 16. 引用Java中的变量?
- 17. java中的引用变量
- 18. java中的引用变量
- 19. 引用变量
- 20. 变量引用
- 21. 引用变量
- 22. 引用变量
- 23. 关于引用变量和C#中的变量传递的简单问题
- 24. C#:通过变量引用类
- 25. 重新分配C++引用变量
- 26. 改建引用变量在C++
- 27. 引用变量不返回值在c + +
- 28. C#通过变量引用方法?
- 29. 初始化引用和变量在C++
- 30. 未定义引用静态变量C++
这是一个非常简单的参考视图,虽然在技术上(在一个非常低的水平)真正的不是实际的准确描述是什么参考。 – 2010-06-24 20:08:25