我在CGPath.h头文件中找到了这个。我很好奇这个const的东西是做什么的?
typedef struct CGPath *CGMutablePathRef;
typedef const struct CGPath *CGPathRef;
我的猜测:如果我将某些东西定义为const,那么它是常量,因此是不可变的,不能以任何方式改变。这有意义吗?
答案 0 :(得分:3)
是const
表示您无法在外部更改路径。
对于基于CoreFoundation的库,const
更像是允许可变对象使用不可变方法而不进行强制转换,而不反之亦然。这意味着
CGMutablePathRef mpath;
...
CGPathContainsPoint(mpath, ...);
编译正常,因为Foo*
可以隐式转换为const Foo*
,但
CGPathRef path;
...
CGPathAddRect(path, ...);
会抛出错误,因为const Foo*
无法安全地转换为Foo*
。
答案 1 :(得分:2)
const T*
表示该类型是一个指针,并且无法通过该指针更改指针。 (这并不一定意味着指针对象永远不会改变;例如,它可能会被一个不同的非const
引用修改。)
答案 2 :(得分:1)
“以任何方式”可能是夸大其词,但你是对的。您会注意到一个叫做CGPathRef,另一个叫CG Mutable PathRef。
答案 3 :(得分:1)
const来自标准C.这意味着无法分配解除引用的指针。所以我不能这样做:
GCPathRef p = &my_path;
*p = new_path; // generates compiler error
但请注意,p本身可以更改:
p = &another_path; // this is OK.
正如另一张海报所暗示的那样,这根本不是黑客攻击。它已成为C代的一部分。