utubyou009 2017-07-25 13:33:03

[C++] thisポインタの偽物 このエントリーをはてなブックマークに追加

投稿者からのアピールポイント

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

使い方ヒント: 「これは臭う」という行を見付けたら、各行のsmellをクリックしてマーキングしておきましょう(要Twitter OAuth認証)

コメント

まだコメントがありません。最初にコメントを残しませんか?

コメント投稿には、twitter認証が必要です。

Twitter認証

このウンコードに臭った人は、こちらのウンコードにも臭ってます

[C] 既存のコードを極力残したかったらしい。

このエントリーをはてなブックマークに追加

特別仕様版で関数の機能変えたかったみたい...

/*プロトタイプ宣言省略*/

/*関数hogehoge*/
#ifnde...

鑑賞する »

[C++] constとは一体…

このエントリーをはてなブックマークに追加

constの意味あるの…?

class Hoge
{
private:
  // メンバ変数は数百ある...

鑑賞する »

[C++] ダイナミック型変換

このエントリーをはてなブックマークに追加

その dynamic はそういう意味じゃ...

// デフォルトの dynamic_cast ではダイナミックにキャストできない...

鑑賞する »