我有一个类,我正在使用它来尝试帮助理解 const 的概念。例如。
Class class1:
{
protected:
double * info;
public:
void set(const int i, const int j, const double val) const
{
info[i + j] = val;
}
}
我读过多篇文章说,如果该函数不会更改任何成员变量,则在类函数之后编写 const。然而,对于这个类,它是正确的还是不正确的?
此外,我对 const 变量的理解是,如果它们永远不会改变,您就将它们设为 const,但这有什么好处吗?
谢谢,如果这个问题在其他地方得到了回答,我深表歉意,我似乎无法理解它。
最佳答案
只是为已经提供的答案添加一些颜色。使用 const
限定函数,所有成员都有效地成为 const。例如,您的信息正在变为 const 并且表现得好像它是这样定义的:
double* const info;
请注意,这不同于
const double* info;
首先使信息本身不可修改(你不能说info = &d
,但你可以说*info = 42
。在另一方面,后者意味着信息是可修改的,但不是它指向的地方。你可以写info = &d
,但不是*info = 42
.
显然,有一种方法可以同时具备这两种特性,即 const double* const info
- 这将防止指针和值的修改。然而,这不是 const
-qualification 对函数所做的。直观吗?我敢说,不是。然而,事实就是如此,所以我们必须忍受这一点。
显然,有人可能会争辩说 const 限定函数可以使所有成员指针都成为双常量,但是类似指针的对象(例如,unique_ptr
)呢?编译器无法生成这些双常量,因此最好保持一致。
关于C++ 函数常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34053877/