繁体   English   中英

typedef const struct * CGPath和typedef struct * CGPath有什么区别?

[英]What's the difference between typedef const struct *CGPath and typedef struct *CGPath?

我已经在CGPath.h头文件中找到了它。 我很好奇这常量的作用是什么?

typedef struct CGPath *CGMutablePathRef;
typedef const struct CGPath *CGPathRef;

我的猜测:如果我将def定义为const,它是常量,因此是不变的,不能以任何方式更改。 那有意义吗?

是的const表示您不能从外部更改路径。


对于基于的CoreFoundation库虽然, const更是一个黑客,使可变对象使用一成不变的方法,而铸造的,而不是相反。 那意味着

CGMutablePathRef mpath;
...
CGPathContainsPoint(mpath, ...);

可以正常编译,因为Foo*可以隐式转换为const Foo* ,但是

CGPathRef path;
...
CGPathAddRect(path, ...);

因为无法将const Foo*安全地转换为Foo*将引发错误。

const T*表示类型是指针,并且不能通过该指针更改指针。 (这并不一定意味着该指针对象永远不会改变,它可能由一个不同的,非被修改const参照它,例如)。

“以任何方式”可能都是夸大其词,但您是对的。 您会注意到一个称为CGPathRef,另一个称为CG Mutable PathRef。

const来自标准C。这意味着不能将取消引用的指针分配给它。 所以我不能做:

GCPathRef p = &my_path;
*p = new_path;  // generates compiler error

但是请注意,p本身可以更改:

p = &another_path; // this is OK.

正如另一位海报所暗示的,这根本不是黑客。 它已经成为C语言的一部分了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM