在c++中,将别名设置为const

In C++, make an alias const

本文关键字:设置 const 别名 c++      更新时间:2023-10-16

我是c++的初学者,我有一个问题,我想确定…我在网上搜索了很多。

假设我有一个类调用a,它有一个名为function的函数。函数如下所示:

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

我的理解是我们有一个"类似指针"的东西叫做"a",它是我们传入的任何东西的别名。这里我们只确保别名本身是const,但不保证它所指向的值不会被改变。事实上,我正在更改它,而且我没有得到任何错误。

所以我的问题是,我怎么能确保的值,别名是指向不能改变?如果它是指针而不是别名,那就容易多了。

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

不能修改a

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

同样,A const*是指向const对象的指针,而A * const是指向对象 const指针,A const * const是指向const对象的* const指针。 关键是要从右向左读(和写)类型声明。

这完全取决于something是什么。

如果你发布了A类的代码,就更容易解释为什么你可以改变something

一般来说,你不能修改const A&的内容。但是…

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