C / C ++签名中两个const的含义

时间:2013-09-24 04:24:59

标签: c++ const signature

我一直在为scheme包装gl文件,但它在gl.h标题中失败了两次。我在OSx上,所以它可能与平台有关,但我在生活中的其他地方从未见过这种语法。

typedef void (* glMultiDrawElementsProcPtr) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount);

注意const GLvoid* const *indices。方案C解释器有一个小C子集,不理解标题的这一部分。

这是什么意思,我怎样才能安全地用其他东西替换它......我把它改成了

const GLvoid** indices

2 个答案:

答案 0 :(得分:1)

C和C ++中的类型是从右到左阅读的,除了大多数人坚持将const置于错误的一边。从

修复const展示位置后
const GLvoid* const*

GLvoid const* const*

读取类型变得微不足道:它是一个指向const指向类型为const的{​​{1}}对象的指针(你可能真的不能拥有GLvoid类型的对象{1}}但它是任何对象的占位符)。您还可以使用内部指针可修改的组合和/或对象可修改,具体取决于您遗漏的GLvoid

答案 1 :(得分:0)

这意味着indices是指向const GLvoid * const的指针。

上面的数据类型也可以写为GLvoid const * const。这告诉我们,GLvoid*指针指向的数据和指针本身都不会被修改。

indices本身没有这样的限制。您可以修改指向GLvoid*的指针。