gpt4 book ai didi

c++ - 带有仿函数修改对象的 const 函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:09:56 26 4
gpt4 key购买 nike

如果我们考虑以下方法,我的印象是 bar 不能修改 this(即 Foo 的实例)。

struct Foo {
int i;
// var shall not modify the respective instance of Foo, thus "const"
void bar(std::function<void(int)> func) const {
func(3);
}
};

但是,以下是可能的:

void anothermethod() {
Foo f;
f.bar([&](int x){f.i = 3;}); // modify Foo.i "within" Foo::bar const. Dangerous?
}

我看到方法 bar 不是“直接”修改其实例的值 i ,而是通过给定参数 “间接”修改函数

所以我的问题是:做这样的事情(即将修改对象的函数传递给相应对象的 const 方法)是否危险?

最佳答案

bar 没有修改 i,你的 lambda 修改了。

本质上,您从类外部获取了对 i 的引用,并将其填充到 lambda 中。然后你调用了barbar 没有提及它自己的成员,它只是调用了它所提供的一些任意(非成员,所以 bar 的常量性是无关紧要的)函数。

这里的缺陷是可以从结构外部获取对 i 成员的引用。这意味着任何其他人都可以摆弄 i。将 i 设置为私有(private),看看上面的方法对你的效果如何。

关于c++ - 带有仿函数修改对象的 const 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25443218/

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