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

我试图围绕C与Objective-C中的使用和语法的一些差异。特别是,我想知道C运算符和Objective-C中的点运算符和箭头运算符的使用方式有何不同(以及原因)。这是一个简单的例子。


C代码:


// declare a pointer to a Fraction

struct Fraction *frac;


...


// reference an 'instance' variable

int n = (*frac).numerator;     // these two expressions

int n = frac->numerator;       // are equivalent

Objective-C代码:


// declare a pointer to a Fraction

Fraction *frac = [[Fraction alloc] init];


...


// reference an instance variable

int n = frac.numerator;        // why isn't this (*frac).numerator or frac->numerator??

那么,看看frac两个程序中的相同情况(即它是指向Fraction对象或结构的指针),为什么它们在访问属性时使用不同的语法?特别是,在C中,numerator可以访问属性frac->numerator,但是使用Objective-C,可以使用点运算符访问它frac.numerator。既然frac是两个程序中的指针,为什么这些表达式不同?任何人都可以帮我澄清一下吗?


Smart猫小萌
浏览 652回答 3
3回答

海绵宝宝撒

在您的第一个示例中,Fraction是一个结构。在你的第二个例子中,Fraction是一个Objective-C类(在iOS中可能是它的子类NSObject)。C ++ 不允许重载operator .。因此,如果没有其他信息,您可以推断出您所看到的点符号是集成到Objective-C中的附加语言构造,而不是C / C ++定义或重载的运算符。实际上,点符号只是实现者选择作为属性访问速记的设计特征,完全等同于方括号getter:myObjCVar.prop == [myObjCVar prop];
打开App,查看更多内容
随时随地看视频慕课网APP