#include <vector> using namespace std; class Hoge { public: Hoge(const size_t VectorSize , const int InitValue = 0) : vi(VectorSize , InitValue) {} const int& operator[/url](const size_t pos) const; int& operator[/url](const size_t pos); private: vector<int> vi; }; const int& Hoge::operator[/url](const size_t pos) const { return vi[pos]; } int& Hoge::operator[/url](const size_t pos) { return const_cast<int&>(static_cast<const Hoge&>(*this)[pos]); }疑問点はoperator[/url]のstatic_cast<const Hoge&>についてです。
const_cast<int&>は、operator[/url]constの戻り値からconstをはずしてint&になる(間違っていたら指摘お願いします)のは
分かるのですが、static_cast<const Hoge&>のHogeをなぜ参照にするのか分かりません。
static_castの&をはずしてビルドすると
warning C4717: 'Hoge::operator[/url]' : すべてのコントロールのパス、関数を回帰するとランタイム スタック オーバーフローが発生します。
という警告が出る(ビルドは成功しているみたいです)のですが、こちらもよく分かりません。
どなたか説明していただけると助かります><