const/invariant member function
なにげに const メンバ関数が追加されてる?
それと invariant メンバ関数なるものも.
class A { private: int value; int mutableMember() { value = 1; return value; } const int constMember() { /+value = 1;+/ return value; } invariant int invariantMember() { /+value = 1;+/ return value; } public: void foo() // mutable member { auto x = mutableMember(); auto y = constMember(); //auto z = invariantMember(); // error, mutable member can not call invariant member } const void bar() // const member { //auto x = mutableMember(); // error, const member can not call mutable member auto y = constMember(); //auto z = invariantMember(); // error, const member con not call invariant member } invariant void boo() // invariant member { //auto x = mutableMember(); // error, invariant member can not call mutable member auto y = constMember(); auto z = invariantMember(); } } void main() { A a = new A; a.foo(); a.bar(); //a.boo(); // error, mutable object 'a' can not call invariant member 'boo' const(A) ca = cast(const)a; //ca.foo(); // error, const object 'ca' can not call mutable member 'foo' ca.bar(); //ca.boo(); // error, const object 'ca' can not call invariant member 'foo' invariant(A) ia = cast(invariant)a; //ia.foo(); // error, invariant object 'ia' can not call mutable member 'foo' ia.bar(); ia.boo(); }
こ・・・これは・・・!?
すげー複雑!
あってるのかな?w
とにかく const メンバ関数は C++ と同じような挙動をするみたい.
ただ,invariant メンバ関数が絡むとよくわからなないなあ.
なんで;
となるんだろう?