#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]' : すべてのコントロールのパス、関数を回帰するとランタイム スタック オーバーフローが発生します。
という警告が出る(ビルドは成功しているみたいです)のですが、こちらもよく分かりません。
どなたか説明していただけると助かります><