或者更实际的说法:如果我在Objective-C ++下编译一个只包含Obj-C代码或只包含C ++代码的文件,我能确定它们的行为与以前完全一样吗?它们会以何种方式不同?
答案 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
所以它清楚地说,C ++和Objective-C的混合被称为Objective-C ++,但这不是C ++的超集,但它是两种语言,可以一起使用一些规则。 (例如,你不能在继承期间混合使用objective-c和c ++类,但也有其他类。)
答案 2 :(得分:0)
我想至少有一个有效的Objective-C代码的例子是无效的Objective-C ++:
void SayHello()
{
char* this = "hello!";
printf("%s", this);
}
(有人会在命名一个变量'this',我不知道)