为了账号安全,请及时绑定邮箱和手机立即绑定

点(“。”)运算符和箭头(“ - >”)运算符用于C与Objective-C

点(“。”)运算符和箭头(“ - >”)运算符用于C与Objective-C

C
Smart猫小萌 2019-09-19 15:36:35
我试图围绕C与Objective-C中的使用和语法的一些差异。特别是,我想知道C运算符和Objective-C中的点运算符和箭头运算符的使用方式有何不同(以及原因)。这是一个简单的例子。C代码:// declare a pointer to a Fractionstruct Fraction *frac;...// reference an 'instance' variableint n = (*frac).numerator;     // these two expressionsint n = frac->numerator;       // are equivalentObjective-C代码:// declare a pointer to a FractionFraction *frac = [[Fraction alloc] init];...// reference an instance variableint n = frac.numerator;        // why isn't this (*frac).numerator or frac->numerator??那么,看看frac两个程序中的相同情况(即它是指向Fraction对象或结构的指针),为什么它们在访问属性时使用不同的语法?特别是,在C中,numerator可以访问属性frac->numerator,但是使用Objective-C,可以使用点运算符访问它frac.numerator。既然frac是两个程序中的指针,为什么这些表达式不同?任何人都可以帮我澄清一下吗?
查看完整描述

3 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

在您的第一个示例中,Fraction是一个结构。在你的第二个例子中,Fraction是一个Objective-C类(在iOS中可能是它的子类NSObject)。


C ++ 不允许重载operator .。因此,如果没有其他信息,您可以推断出您所看到的点符号是集成到Objective-C中的附加语言构造,而不是C / C ++定义或重载的运算符。


实际上,点符号只是实现者选择作为属性访问速记的设计特征,完全等同于方括号getter:


myObjCVar.prop == [myObjCVar prop];


查看完整回答
反对 回复 2019-09-19
  • 3 回答
  • 0 关注
  • 691 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信