我在CGPath.h头文件中找到了这个。我很好奇const这个东西是做什么的?
typedef struct CGPath *CGMutablePathRef;
typedef const struct CGPath *CGPathRef;我的猜测是:如果我将某个东西定义为const,那么它就是常量,所以它是不可变的,并且不能以任何方式进行更改。这有意义吗?
发布于 2010-06-02 02:20:32
是的,const意味着您不能在外部更改路径。
然而,对于基于CoreFoundation的库,const更像是一种技巧,它允许可变对象在不进行类型转换的情况下使用不可变方法,反之亦然。这意味着
CGMutablePathRef mpath;
...
CGPathContainsPoint(mpath, ...);因为Foo*可以隐式转换为const Foo*,所以编译得很好,但是
CGPathRef path;
...
CGPathAddRect(path, ...);将引发错误,因为无法安全地将const Foo*转换为Foo*。
发布于 2010-06-02 02:21:26
const T*意味着类型是一个指针,并且不能通过该指针更改被指针对象。(这并不一定意味着指针对象永远不能更改;例如,它可能会被对它的另一个非const引用修改。)
发布于 2010-06-02 05:38:28
const来自标准C,这意味着不能将取消引用的指针赋值给。所以我不能这样做:
GCPathRef p = &my_path;
*p = new_path; // generates compiler error但请注意,p本身是可以更改的:
p = &another_path; // this is OK.这根本不像另一位发帖者所说的那样是黑客行为。几代人以来,它一直是C语言的一部分。
https://stackoverflow.com/questions/2952157
复制相似问题