将constness从结构传递给它的指针和引用成员

jca*_*er2 4 c++ const

我有一个带有指针的结构.我想这样做,如果一个struct实例是const,那么它的指针内容就无法修改.

struct Foo {};

struct Bar {
    Foo /*const goes here if `const Bar`*/ *foo;
};

void f(Bar& bar) {
    *bar.foo = Foo(); // OK
}

void g(const Bar& bar) {
    *bar.foo = Foo(); // OK - but should be error
}
Run Code Online (Sandbox Code Playgroud)

有没有办法将constness从struct传递给它的指针和引用成员?

Fra*_*ank 6

封装救援!

只需通过界面进行策略访问:

struct Bar {
  Foo * getFoo() { return foo; }
  Foo const * getFoo() const { return foo; }
private:
  Foo *foo;
};

void f(Bar& bar) {
    *bar.getfoo() = Foo(); // OK
}

void g(const Bar& bar) {
    *bar.getfoo() = Foo(); // Error!
}
Run Code Online (Sandbox Code Playgroud)

  • @jcarpenter为什么会打扰你?有一个与实现断开的接口(这是你要求的)是封装的关键点.公共成员变量应该是一个罕见的例外,而不是任何非平凡的默认值. (3认同)