C++ 函数常量

标签 c++ class constants

我有一个类,我正在使用它来尝试帮助理解 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/

相关文章:

c++ - vs 2010 : sqlstatementhandle and connection error 中的 mysql 和 c++

c++ - 为什么前导零会改变值

java - 方法中的 SharedPreferences

c++ - 为什么 const x 在 multi include 时没问题

java - Java 编译器是否包含字符串常量折叠?

c# - Enum.GetName() As Constant 属性

c++ - 使用 Absdiff 的 OpenCV 背景减法

c++ - 如何重载继承类中的方法,以便基类看到继承的版本?

arrays - 使用数组定义类中方法的名称

c++ - qt - qt 控制台应用程序中对 `vtable for myObj' 的 undefined reference - 信号和插槽