c++ - C++ 中的 const 对象

标签 c++ constants

我有一个关于常量对象的问题。在以下程序中:

class const_check{
    int a;
    public:
    const_check(int i);
    void print() const;
    void print2();
};

const_check::const_check(int i):a(i) {}

void const_check::print() const {
int a=19;
    cout<<"The value in a is:"<<a;
}

void const_check::print2() {
    int a=10;
    cout<<"The value in a is:"<<a;
}

int main(){
    const_check b(5);
    const const_check c(6);
    b.print2();
    c.print();
}

void print() 是类const_check 的常量成员函数,所以根据常量的定义任何试图改变int a 应该会导致错误,但该程序对我来说工作正常。我想我在这里有些困惑,有人能告诉我为什么编译器没有将其标记为错误吗?

最佳答案

通过写作

int a = 19;

print() 中,您声明了一个新的局部变量 a。这与您在 const_check 类中声明的 int a 无关。据说成员变量被局部变量隐藏。在 const 函数中声明局部变量并修改它们是完全没问题的; const仅适用于对象的字段。

尝试写作

a = 19;

相反,会看到错误出现。

关于c++ - C++ 中的 const 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2572586/

相关文章:

c++ - 分离与合并由静态语言的数据库表制成的对象

c++ - 如何获取列表中的倒数第二个元素?

C++如何将非常数列表传递给需要常量列表的函数

c++ - 为什么编译器会提示对 constexpr 函数的 undefined reference ,即使它是在另一个源文件中定义的?

c++ - const char * 作为 C++ 中的函数参数

c++ - eglSwapBuffers 永远不会返回

c++ - boost 累加器 error_of<mean> 的目的是什么?

c++ - 组合函数、绑定(bind)、C++ 和托管代码

c - 非常大的 C 结构的分段初始化

php - 为什么 PHP 不允许私有(private) const?