やってみたら、できてしまった。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認証