首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >目标C和目标C++

目标C和目标C++
EN

Stack Overflow用户
提问于 2011-05-07 11:55:55
回答 2查看 553关注 0票数 1

C文件可以从.c修改为.m文件,也可以从其他目标C文件(.m文件)调用。

C++文件可以从.cpp修改为.mm文件,也可以从其他目标C++文件(.mm文件)调用。

.m文件可以从.mm文件中调用。但是不能从.mm文件调用.m文件。

目标C++编码在iPhone开发中是必要的,就像目标C中的UI一样,而实现的任何其他协议都不能是目标C++,因为这个(编写的协议)将从目标C的UI中调用。

在什么情况下使用了这种客观的C++编码?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-09 13:59:31

.m文件可以从.mm文件中调用。但是不能从.mm文件调用.m文件。

我不知道你这么说是什么意思,但我觉得这是错的。

目标C(++)的“客观”部分在两种语言中是相同的。不管实现是目标C还是目标C++,对象都是完全可互操作的。

重要的是在其中声明接口的头文件。例如:

代码语言:javascript
复制
@interface Foo
{
   CPPFoo myFoo; // A C++ object
}

@end

不能包含在正常的目标- C .m文件中,因为C++类在C中是非法的。

代码语言:javascript
复制
#if defined __cplusplus
class CPPFoo;
#else
typedef struct CPPFoo CPPFoo;
#endif

@interface Foo
{
   CPPFoo *myFoo; // NOTE: a pointer to a C++ object
}

@end

您需要在-init中新建指针并在-dealloc/-finalize中删除它。

是iPhone开发中必需的客观C++编码。

不是的。我曾经认为(来自C++背景)最好在UI中随时随地使用C++和Objective。然而,我没过多久就意识到,object的对象模型比C++更好。因此,现在我只考虑两种情况下的C++:

如果性能很重要,并且需要内置对象模型(即不想使用纯C),则

  • 与用C++
  • 编写的库接口时,需要使用
票数 2
EN

Stack Overflow用户

发布于 2011-05-07 14:00:44

目标- C++用于任何时候你想要混合目标-C代码和C++代码.

您关于“不能从.mm文件中调用.m文件”的说法是不正确的。如果将C++放入标头中,则不能从纯Objective文件调用它,但对于具有使用C++的实现的类,可以有一个纯Objective接口。一个常见的例子是将现有的C++类(可能是一些现有的库)包装为Objective类。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5920855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档