gpt4 book ai didi

c++ - 如何防止通过引用返回的私有(private)结构发生突变

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

我有以下代码:

struct MyStruct {
int a;
int b;
};

class Foo {
public:
MyStruct const &getValue() {
return value;
}

private:
MyStruct value{10, 20};
};

int main() {
Foo foo{};
auto v = foo.getValue();
v.a = 42; // compiles! it shouldn't!
}

我想返回对私有(private)成员的引用,但不允许调用者改变此引用的内容。仅仅将返回类型声明为 MyStruct const & 是不够的,因为它可能将引用本身定义为 const,而不是对象引用指向。但是,将返回类型声明为 MyStruct& const 失败,并显示“'const' 限定符可能不适用于引用”。我相信我可能在这里遗漏了一些东西。

我本可以通过声明带有所有常量字段的 MyStruct 来解决这个问题,但我想自己在我的类中对其进行变异——只允许调用者这样做。

这怎么可能?

最佳答案

Just declaring return type to be MyStruct const & is not enough, as it probably defines the reference itself to be const, not the object reference points to.

这是错误的。无论如何都不能重新分配引用。这是返回对不可变对象(immutable对象)的引用的正确方法。然而,您实际上复制返回的对象:

auto v = foo.getValue();

然后修改拷贝,这是一个有效的操作。您可以将 v 声明为引用

auto &v = foo.getValue();

得到预期的编译器错误。 Demo

关于c++ - 如何防止通过引用返回的私有(private)结构发生突变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62154053/

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