[英]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.