現象を説明する理論をまとめましたが、もっと詳しい人に支えてもらいたいです。
クライアントコードには、次のものがあります。
vector<bool> candidates;
fillCandidates(candidates);
呼び出し先には、次のものがあります。
void fillCandidates(vector<bool>& candidates)
{
// reserve space for two elements
candidates.reserve(2);
candidates[0] = true;
candidates[1] = false;
// here, candidates.size() == 0
}
関数のリターン後に候補のサイズを確認すると、0 です。何が起こっていますか?Ubuntu 12.04 64ビットのCMakeスクリプトで呼び出されたgcc 4.6.3を使用しています(ただし、これはすべて実際には無関係だと思います)。
注:私は答えとして私の解釈を提供しています。
編集:受け入れられた回答とコメントはタイミングで私を打ち負かしたので、私の解釈は何も追加しません。