gpt4 book ai didi

c++ - 为什么我可以改变 const 对象中的成员变量,这是返回 const 对象函数的结果?

转载 作者:行者123 更新时间:2023-12-01 14:35:55 25 4
gpt4 key购买 nike

struct Dummy {
int a = 2;
int b = 6;

const Dummy share() {
return Dummy{};
}
};

在上面的Dummy结构中有一个名为share()的成员函数返回一个const Dummy对象。我除了无法改变从 share() 函数返回的对象。但是,结果显示该对象是可变的。我在下面粘贴实验代码以获取更多详细信息。

int main() {
Dummy d1;
auto d2 = d1.share();
d2.a = 10;
// the output is 10.
std::cout << "d2.a is " << d2.a << std::endl;
}

那么为什么我可以改变这个 const 对象中的成员变量呢?

最佳答案

使用“auto”解析为“Dummy”,而不是“const Dummy”。因此,d2 是(正式)从 share 的结果复制构造的,并且可以修改。您可以通过说“const auto”来强制 d2 不可变(独立于共享的返回类型)。

特别是,“auto”执行的推理会删除 const/volatile 限定符的最外层,如另一个问题中所述:CV - qualifiers of an auto variable

关于c++ - 为什么我可以改变 const 对象中的成员变量,这是返回 const 对象函数的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59468090/

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