首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >c++中的常量对象

c++中的常量对象
EN

Stack Overflow用户
提问于 2010-04-04 04:36:01
回答 4查看 15.4K关注 0票数 4

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

代码语言:javascript
运行
复制
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的尝试都会导致错误,但是程序对我来说运行得很好。我想我在这里有些困惑,谁能告诉我为什么编译器没有把它标记为错误?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-04 04:39:22

通过写作

代码语言:javascript
运行
复制
int a = 19;

print()中,您声明了一个新的局部变量a。这与您在类const_check中声明的int a无关。成员变量被称为局部变量的影子。而且,在const函数中声明局部变量并修改它们是完全没有问题的;const规则只适用于对象的字段。

试着写

代码语言:javascript
运行
复制
a = 19;

相反,您会看到出现一个错误。

票数 21
EN

Stack Overflow用户

发布于 2010-04-04 04:40:30

您将在每个方法中创建一个局部变量a,而不是更改实例变量a

票数 4
EN

Stack Overflow用户

发布于 2010-04-04 04:40:28

您不能在print()或print2()中更改成员变量a。您声明了一个新的局部变量a,它隐藏了成员变量a。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2572586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档