Objective-C ++是C ++和Objective-C的超集吗?

时间:2011-01-12 18:44:23

标签: objective-c objective-c++

或者更实际的说法:如果我在Objective-C ++下编译一个只包含Obj-C代码或只包含C ++代码的文件,我能确定它们的行为与以前完全一样吗?它们会以何种方式不同?

3 个答案:

答案 0 :(得分:3)

或多或少,这是真的;任何在C ++或Objective-C下编译的东西都将使用Objective-C ++编译器进行编译。

然而,有一些边缘不适用于这种情况和一些行为差异。

但是,我不知道任何特定的运行时行为差异。这些差异通常应该在编译过程中出现,主要是由于C ++的“增强”类型概念引起的问题。

但是,运算符重载可能会非常严重。如果代码体大量使用运算符重载,那么在第一次混合使用Objective-C时可能会出现问题。但是,再次,通常作为编译器警告,很少作为运行时错误。

答案 1 :(得分:2)

Objective-C只是C的超集。您可以将C ++与Objective-C混合使用 - 即Objective-C ++ - 但是您必须遵循某些规则。
在这里,您可以看到所有必须遵循的规则:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCPlusPlus.html

编辑:这是开发者网站的一句话:“Apple的Objective-C编译器允许您在同一源文件中自由混合C ++和Objective-C代码。这种Objective-C / C ++语言混合称为Objective-C ++有了它,您可以使用Objective-C应用程序中的现有C ++库。“。

所以它清楚地说,C ++和Objective-C的混合被称为Objective-C ++,但这不是C ++的超集,但它是两种语言,可以一起使用一些规则。 (例如,你不能在继承期间混合使用objective-c和c ++类,但也有其他类。)

答案 2 :(得分:0)

我想至少有一个有效的Objective-C代码的例子是无效的Objective-C ++:

void SayHello()
{
    char* this = "hello!";
    printf("%s", this);
}

(有人会在命名一个变量'this',我不知道)