首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >typedef struct *CGPath和typedef struct *CGPath有什么不同?

typedef struct *CGPath和typedef struct *CGPath有什么不同?
EN

Stack Overflow用户
提问于 2010-06-02 02:13:40
回答 3查看 794关注 0票数 0

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

代码语言:javascript
复制
typedef struct CGPath *CGMutablePathRef;
typedef const struct CGPath *CGPathRef;

我的猜测是:如果我将某个东西定义为const,那么它就是常量,所以它是不可变的,并且不能以任何方式进行更改。这有意义吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-02 02:20:32

是的,const意味着您不能在外部更改路径。

然而,对于基于CoreFoundation的库,const更像是一种技巧,它允许可变对象在不进行类型转换的情况下使用不可变方法,反之亦然。这意味着

代码语言:javascript
复制
CGMutablePathRef mpath;
...
CGPathContainsPoint(mpath, ...);

因为Foo*可以隐式转换为const Foo*,所以编译得很好,但是

代码语言:javascript
复制
CGPathRef path;
...
CGPathAddRect(path, ...);

将引发错误,因为无法安全地将const Foo*转换为Foo*

票数 3
EN

Stack Overflow用户

发布于 2010-06-02 02:21:26

const T*意味着类型是一个指针,并且不能通过该指针更改被指针对象。(这并不一定意味着指针对象永远不能更改;例如,它可能会被对它的另一个非const引用修改。)

票数 2
EN

Stack Overflow用户

发布于 2010-06-02 05:38:28

const来自标准C,这意味着不能将取消引用的指针赋值给。所以我不能这样做:

代码语言:javascript
复制
GCPathRef p = &my_path;
*p = new_path;  // generates compiler error

但请注意,p本身是可以更改的:

代码语言:javascript
复制
p = &another_path; // this is OK.

这根本不像另一位发帖者所说的那样是黑客行为。几代人以来,它一直是C语言的一部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2952157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档