gpt4 book ai didi

c++ - 为什么我可以从 const 方法调用更改成员的方法?

转载 作者:行者123 更新时间:2023-12-02 14:37:10 24 4
gpt4 key购买 nike

我不确定为什么我可以通过 const 方法修改对象,请看:

#include <iostream>

struct Foo {
int a = 0;
void change() {
a = 3;
}
};

struct Test {
Foo* f;

Test(): f{new Foo} {}

void test() const {
f->change();
}
};

int main()
{
Test t;
std::cout << "before: " << t.f->a << "\n";
t.test();
std::cout << "after: " << t.f->a << "\n";

}

它不仅可以编译,而且可以打印:

0
3

所以我能够通过 const 方法修改对象的逻辑状态。是因为我使用了指针吗?

最佳答案

const适用于指针本身,f ,而不是该指针所指向的内容。 f的类型在你的const里面-限定成员函数,Test::test() ,是Foo* const (即 const 指向 Foo ),而不是 const Foo* (即指向const Foo的指针)。这就是为什么您可以修改指针所指向的内容,尽管 const成员函数的资格。

<小时/>

请注意以下示例成员函数 Test::test2() ,确实无法编译,因为它是 const - 限定并尝试修改指针数据成员 f :

void Test::test2() const {
f = nullptr; // <-- error
}

关于c++ - 为什么我可以从 const 方法调用更改成员的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58894855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com