Objective-C++与Objective-C完全不同吗?

Jak*_*les 13 c c++ objective-c objective-c++

正如标题所说......他们被认为是不同的语言吗?例如,如果您使用C++和Objective-C++的组合编写了一个应用程序,您会认为它是用C++和Objective-C,C++和Objective-C++编写的,还是全部三个?

显然C和C++是不同的语言,即使C++和C直接兼容,Objective-C++和Objective-C的情况如何?

War*_*rty 11

来自:https://en.wikipedia.org/wiki/Objective-C#Objective-C.2B.2B

Objective-C++是GNU Compiler Collection的前端,它可以编译使用C++和Objective-C语法相结合的源文件.Objective-C++为C++添加了Objective-C添加到C的扩展.由于没有做任何事情来统一各种语言特性背后的语义,因此适用某些限制:

  • C++类不能从Objective-C类派生,反之亦然.
  • 无法在Objective-C声明中声明C++命名空间.
  • Objective-C类不能有C++类的实例变量,它们没有默认构造函数或者有一个或多个虚方法,但是指向C++对象的指针可以作为实例变量而没有限制(在-init方法中用new分配它们) ).
  • C++"by value"语义不能应用于Objective-C对象,而Objective-C对象只能通过指针访问.
  • Objective-C声明不能在C++模板声明中,反之亦然.但是,Objective-C类型(例如,Classname*)可以用作C++模板参数.Objective-C和C++异常处理是截然不同的; 每个处理程序都无法处理其他类型的异常.
  • 必须小心,因为Objective-C和C++的异常运行时模型的析构函数调用约定不匹配(即,当Objective-C异常退出C++对象的作用域时,不会调用C++析构函数).新的64位运行时通过在这个意义上引入与C++异常的互操作性来解决这个问题


Mic*_*yan 5

Objective-C++简单地允许混合Objective-C和C++代码(带有警告).它本身并不是一种真正的语言,而是一种允许两种语言混合的机制.

  • 这个答案是不正确的.Objective-C++是一种与Objective-C完全相同的语言.Objective-C为C语言添加了像对话语法一样的小说话,同样,Objective-C++为C++添加了类似对象语法的小说话.就像这样:想象C是一辆汽车.你给汽车增加了一个扰流板.现在你有了客观的C. C++是一辆不同的汽车.你在C++中添加了与C相同的扰流板.你没有将第一辆车(带扰流板)和第二辆车(带扰流板)混合在一起.你只是在两辆车上添加相同的扰流板. (3认同)