C++*常量*常量

C++ * const *const

本文关键字:常量 C++      更新时间:2023-10-16

我试图搜索答案,但我发现很难找到这种"确切"的例子。我对指针对指针的理解很少,我觉得这里面有比指针对什么更重要的东西。

你们会怎么翻译?

void free(shame_1 * const * const group_1);

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

谢谢。

shame_1 * const * const group_1;

声明了一个名为group_1的变量,该变量的类型是指向shame_1-type对象的另一个const指针(相同)的const指针,该对象的值实际上可以更改。

因此,例如,您无法编译:

group_1 = nullptr;
*group_1 = nullptr;

然而,你可以这样做:

void f(shame_1& group) {
//stuff that modifies group
...
}
f(**group1);

正如zakinster所评论的,了解螺旋规则应该有助于你理解这种符号。

通常,只需从右向左读取:

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

例如:

shame_1 a_shame;
const shame_1* p_a_shame = &a_shame;
free(&p_a_shame);

这里面没有什么用处。。。free()本可以在没有额外间接级别的情况下接受指向shame_1const指针,并且仍然能够对shame_1做所有相同的事情,因此只有当free()必须将const指针传递给const指针传递给其他函数时,这才有用(最终没有充分的理由造成整个混乱)。

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

[a_shame]  <------ [p_a_shame]  <------  [group_1]*
  • 这可能只在CPU寄存器中,尽管其他寄存器可能也在优化后

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

所以,对我来说,"const group_1指针"位有点可疑。。。我认为读起来更好的是"group_1是指向…的常量指针"或"指向…的const指针(称为group_1)">