gpt4 book ai didi

c++ - Objective-C 与 C++ 有何不同?

转载 作者:IT老高 更新时间:2023-10-28 11:29:50 30 4
gpt4 key购买 nike

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。




8年前关闭。




Objective-C 和 C++ 在语法、特性、范式、框架和库方面的主要区别是什么?

*重要提示:我的目标不是在两种语言之间展开一场性能大战。我只想要真实的事实。事实上,我的问题与性能无关!请提供任何看似主观的信息的来源。

最佳答案

一些主要差异的简短列表:

  • C++ 允许多重继承,Objective-C 不允许。
  • 与 C++ 不同,Objective-C 允许命名方法参数,并且方法签名仅包括参数的名称和类型以及返回类型(请参阅下面的 bbum 和 Chuck 的评论)。相比之下,C++ 成员函数签名包含函数名称以及参数/返回的类型(没有它们的名称)。
  • C++ 使用 bool , truefalse ,Objective-C 使用 BOOL , YESNO .
  • C++ 使用 void*nullptr , Objective-C 更喜欢 idnil .
  • Objective-C 使用“选择器”(类型为 SEL)作为函数指针的近似等价物。
  • Objective-C 使用消息传递范式(a la Smalltalk),您可以在其中通过方法/选择器向对象发送“消息”。
  • Objective-C 很乐意让你发消息到nil , 不像 C++ 如果你尝试调用 nullptr 的成员函数会崩溃
  • Objective-C 允许动态调度,允许在运行时确定响应消息的类,这与 C++ 不同,在 C++ 中调用方法的对象必须在编译时知道(请参阅下面的 wilhelmtell 评论)。这与上一点有关。
  • Objective-C 允许使用“属性”自动生成成员变量的访问器。
  • Objective-C 允许赋值给 self , 并允许类初始化程序(类似于构造函数)在需要时返回一个完全不同的类。与 C++ 相比,如果您创建一个类的新实例(隐式在堆栈上,或通过 new 显式),它保证是您最初指定的类型。
  • 同样,在 Objective-C 中,其他类也可以在运行时动态更改目标类以拦截方法调用。
  • Objective-C 缺少 C++ 的命名空间特性。
  • Objective-C 缺少等效于 C++ 的引用。
  • Objective-C 缺乏模板,更喜欢(例如)在容器中允许弱类型。
  • Objective-C 不允许隐式方法重载,但 C++ 允许。也就是说,在 C++ 中 int foo (void)int foo (int)定义方法的隐式重载 foo ,但要在 Objective-C 中实现相同的目标需要显式重载 - (int) foo- (int) foo:(int) intParam .这是因为 Objective-C 的命名参数在功能上等同于 C++ 的名称修饰。
  • Objective-C 很乐意允许一个方法和一个变量共享相同的名称,这与 C++ 不同,后者通常具有适合性。我想这与使用选择器而不是函数指针的 Objective-C 有关,因此方法名称实际上没有“值”。
  • Objective-C 不允许在堆栈上创建对象——所有对象都必须从堆中分配(显式使用 alloc 消息,或隐式在适当的工厂方法中)。
  • 和 C++ 一样,Objective-C 也有结构体和类。但是,在 C++ 中,它们被视为几乎完全相同,而在 Objective-C 中,它们被完全不同地对待——例如,您可以在堆栈上创建结构。

  • 在我看来,最大的区别可能是语法。你可以用任何一种语言实现基本相同的东西,但在我看来,C++ 语法更简单,而由于动态调度,Objective-C 的一些特性使某些任务(例如 GUI 设计)更容易。

    可能还有很多我错过的东西,我会更新我想到的任何其他东西。除此之外,强烈推荐 LiraNuna 指给您的指南。顺便说一下,另一个感兴趣的站点可能是 this .

    我还应该指出,我自己才刚刚开始学习 Objective-C,因此上述很多内容可能并不完全正确或完整 - 如果是这种情况,我深表歉意,并欢迎提出改进建议。

    编辑:更新以解决以下评论中提出的要点,在列表中添加了更多项目。

    关于c++ - Objective-C 与 C++ 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2445050/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com