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

时间:2010-06-01 18:13:40

标签: iphone c

我在CGPath.h头文件中找到了这个。我很好奇这个const的东西是做什么的?

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

我的猜测:如果我将某些东西定义为const,那么它是常量,因此是不可变的,不能以任何方式改变。这有意义吗?

4 个答案:

答案 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代的一部分。