在最近的讨论(见评论这个答案),R ..建议不要为了指针-TO-别名const类型,你将不能够很容易地解除分配在标准的C程序中引用的对象(记住:free()需要一个非- const指针参数和C99 6.3.2.3仅允许从不合格到合格的转换)。
C语言显然假定存在任何已分配对象的所有者,即某人必须存储const指向该对象的非指针,而该人负责释放。
现在,考虑一个用于分配和初始化对象的库,这些对象不能通过用户空间代码进行修改,因此函数调用始终返回const合格的指针。
显然,库是对象的所有者,应该保留一个非const指针,这有点愚蠢,因为用户已经提供了一个完全有效的,但是const在每次库调用时都复制了指针的副本。
为了取消分配这样的对象,库必须丢弃const限定符;否则,必须取消限定符。据我所知,以下
void dealloc_foo(const struct foo *foo)
{
free((void *)foo);
}
Run Code Online (Sandbox Code Playgroud)
有效的C; 仅当foo参数另外被restrict限定时才无效。
但是,抛弃const似乎有点乱。
除了从const库函数的所有返回值中删除之外,还有其他方法会丢失有关对象可变性的任何信息吗?
| 归档时间: |
|
| 查看次数: |
469 次 |
| 最近记录: |