首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ *const * const

C++ *const * const
EN

Stack Overflow用户
提问于 2014-02-13 07:01:09
回答 2查看 1.7K关注 0票数 5

我试图寻找答案,但我发现很难找到这类“确切”的例子。我对指针知之甚少,我觉得有更多的东西躺在它的皮肤下,而不仅仅是指向某些东西。

你们怎么翻译这个?

代码语言:javascript
复制
void free(shame_1 * const * const group_1);

如果我把它翻译成const group_1指针到const指针到shame_1,对吗?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-13 07:27:13

代码语言:javascript
复制
shame_1 * const * const group_1;

声明一个名为group_1的变量,其类型是一个const指针(不能更改它所指向的位置)到另一个const指针(相同),该对象的值实际上可以更改。

因此,例如,您不能编译:

代码语言:javascript
复制
group_1 = nullptr;
*group_1 = nullptr;

然而,你可以:

代码语言:javascript
复制
void f(shame_1& group) {
    //stuff that modifies group
    ...
}
f(**group1);

正如zakinster所评论的那样,查看一下螺旋规则可以帮助您理解这种表示法。

票数 5
EN

Stack Overflow用户

发布于 2014-02-13 07:49:54

通常,只需从右到左阅读:

代码语言:javascript
复制
void free(shame_1 * const * const group_1);

free接受一个名为group_1的参数,它是指向指向shame_1对象的const指针的const指针。

  • 这与此无关,但最麻烦的是,一些人使用T const *,而另一些人使用const T*,所以无论你看到T const还是const T,你都应该把它解读为const T。无论如何,在您的代码中,只有指针是const

例如:

代码语言:javascript
复制
shame_1 a_shame;
const shame_1* p_a_shame = &a_shame;
free(&p_a_shame);

这没有什么用处..。const-pointer-to-const-pointer可以接受指向shame_1const指针,而不需要额外的间接指向,并且仍然能够对shame_1执行所有相同的操作,所以只有当free()必须将shame_1传递给其他函数时才会很有用(最终没有什么好的理由造成整个混乱)。

您可以将内存使用/关系可视化为:

代码语言:javascript
复制
[a_shame]  <------ [p_a_shame]  <------  [group_1]*
  • 这很可能只存在于CPU寄存器中,尽管其他寄存器在优化后可能也是如此。

如果我把它翻译成const group_1指针到const指针到shame_1,对吗?

所以,对我来说"const group_1指针“有点可疑.我认为它读起来更好,因为"group_1是指向.“的指针。或“指向.的const指针(称为group_1)”。

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

https://stackoverflow.com/questions/21747331

复制
相关文章

相似问题

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