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