2

我是 C++ 的初学者,我有一个问题要确定……我已经完成了在线搜索。

假设我有一个名为 A 的类,它有一个名为 Afunction 的函数。该函数如下所示:

// this is pseudocode
void Afunction (const A& a)
{
 a.something = a.something +1;
}

我的理解是我们有一个名为“a”的“类似指针”的东西,它是我们传入的任何内容的别名。这里我们只确保别名本身是 const,但不能保证它指向的值不会不能改变。事实上,我正在改变它..我没有得到任何错误。

所以我的问题是,如何确保别名指向的值不能更改?如果它是别名以外的指针,则更容易完成......

提前致谢。

4

3 回答 3

2

A const&(不幸地等同于const A&)是对对象的引用const

类似地,A const*是指向对象的指针const,而是指向对象的指针,并且A * constconst指向对象A const * const的 *const指针const

关键是从右到左读取(和写入)您的类型声明。

于 2013-04-01T21:44:14.020 回答
2

如果编译器接受该代码,您应该立即放弃它。

你不能修改a.

于 2013-04-01T21:25:23.967 回答
1

这完全取决于是什么something

如果您发布了 A 类的代码,则更容易解释为什么可以更改something.

一般情况下,您不能修改const A&. 但...

  • something可以是静态的,那么 const 无关紧要,因为在something技术上不属于.aAfunction
  • something可以声明mutable。有时拥有一个即使对象是 const 也可以更改的成员变量是有益的。例如,引用计数。
  • something可能是完全不同的东西,具有奇怪的语义。(正如 Zyx 2000 指出的那样)。
于 2013-04-01T21:56:21.223 回答