桜、抹茶、白、日記

名古屋市在住のC++使いのcoderの日記だったもの。

const_iteratorの勘違い

ポインタ型を要素に持つコンテナの挙動を勘違いしていた。

std::list< int* > lsValue;
std::list< int* >::const_iterator itr = lsValue.begin();
for ( ; itr != lsValue.end(); ++itr )
{
    *(*itr) = 1;  // std::list< const int* > ではないので代入可能
}

実体の場合

std::list< int > lsValue;
std::list< int >::const_iterator itr = lsValue.begin();
for ( ; itr != lsValue.end(); ++itr )
{
    (*itr) = 1;  // 代入不可というか左辺値はconstだがねとビルドエラーになる
}

constメンバ関数ではないI/Fが呼び出せてしまったので、何故?とちょっと悩んでしまった。