やってみたら、できてしまった。const_castやmutable使ってないのに、const性が取れてしまった。 const代入などができます。足りない行もいろいろあるという意味でもウンコですが、thisの偽物が本命のウンコ。
#include <iostream> class myint{ int val_; myint* const pseudothis = this; public: const int& val() const {return val_;} int& val() {return val_;} myint( int i = 0):val_(i){}; myint( const myint& mi ){ val_ = mi.val();} myint( myint&& mi ){ val_ = mi.val();} myint& operator=( int i ) { val_=i; return *this;} myint& operator=( int i ) const { pseudothis->val() = i; return *pseudothis;} myint& operator=( const myint& i ) { val_=i.val(); return *this;} myint& operator+=( int i ) { val_+= i; return *this;} myint& operator+=( int i ) const { pseudothis->val() += i; return *pseudothis;} }; std::ostream& operator<<(std::ostream& o, const myint& i ){ return o << i.val(); } int main(){ const myint mi; mi = 10; mi += 20; std::cout << mi << std::endl; return 0; }
使い方ヒント: 「これは臭う」という行を見付けたら、各行のをクリックしてマーキングしておきましょう(要Twitter OAuth認証)
まだコメントがありません。最初にコメントを残しませんか?
コメント投稿には、twitter認証が必要です。
Twitter認証