簡體   English   中英

typedef const struct * CGPath和typedef struct * CGPath有什么區別?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM