为什么函数在C中不能有引用参数?

use*_*719 6 c c++ reference function

例如:void foo( int& i );不允许.这有什么原因,还是不是规范的一部分?据我所知,引用通常是作为指针实现的.在C++中,是否有任何功能上的差异之间(未句法/语义)void foo( int* i )void foo( int& i )

dan*_*n04 31

因为引用是C++功能.

  • @R ..好的C++代码应该没有指针,也没有强制转换. (8认同)
  • 就是那样子 (5认同)
  • @ dan04:理想情况下,C++程序员只会将引用用于这两个目的,但实际上我看到他们推荐引用(即使对于明确标记为C的问题),指针一直是两种语言的正确方法...... (4认同)
  • C程序员往往很高兴没有在C中引用. (3认同)
  • @Paul:嗯,那个,以及C++的事实是在C之后发明的. (2认同)
  • @Philipp那只是......*所以*傻.我的思绪令人难以置信. (2认同)
  • @R ..:"像自动转换为/从任何指针类型转换的void指针之类的东西,C++毁了它." 作为C++开发人员,我非常高兴编译器拒绝从"void*"到任何指针的转换编译.在C++中,对这些转换的需求很少,无论如何都很少发生错误,当它发生时,我希望用`static_cast`来纠正它们.这些演员阵容并非毫无用处,因为它们标志着你的节目中的弱点.这完全是关于强大的类型安全性. (2认同)
  • @meagar:我写了很多C++代码,指针隐藏得很深.任何主要逻辑都可能没有指针.原因是在C++中我们发明了这个名为"Ownership Symantics"的概念.这是动态分配的对象具有显式所有者的位置.然后所有者清理所有内存,并删除所有那些令人讨厌的内存泄漏,这是C代码的标志(初学者C代码).指针不适用于"Ownership Symantics",因为没有迹象表明谁拥有指针只是一个指针. (2认同)
  • @R ..:如果您的代码中有很多强制转换,那么我建议您不要编写C++(在现代语言中).你正在用一种被称为"C with classes"的语言写作.它是了解C的程序员的标志,但还没有完全理解如何使用更具表现力的C++语法/风格.在采访中很容易发现.很容易从C - > C移动类.转向使用C++是完全不同的事情. (2认同)

R..*_*R.. 8

参考文献仅仅是用于指针的语法醋.它们的实现是相同的,但它们隐藏了被调用函数可能修改变量的事实.他们实际上扮演一个重要角色的唯一一次是让其他C++功能成为可能 - 想到操作符重载 - 根据你的观点,这些也可能是语法醋.

  • @R:调用未定义的行为以使得点错过了这一点. (7认同)
  • @R:UB的位置在您取消引用null的位置.通过引用而不是指针,我保证我的函数只对有效对象进行操作.如果调用者取消引用null,那么无论其他什么,UB都不是*我的函数的错误.相反,当您接受指针而不是引用时,您有责任正确检查指针是否为空并报告错误.有了引用,管理指针(正确)的责任在于使用指针的代码,而不是函数. (2认同)