4

C++11 で範囲ベースの for ループがある場合、

for(auto const &ticket : ticketStrip->tickets()) {
  ticket->ClearCalled();
}

チケットが const としてマークされていないのに、ClearCalled() など、ループ内のチケットで非 const メソッドを呼び出せるのはなぜですか?

void Ticket::ClearCalled() { ... }

ClearCalled は実際にチケットの内部を変更するため、const としてマークするべきではありません。私は使用する必要があることを知っています

auto &ticket

しかし、私はちょうど試しました

auto const &ticket

そしてコンパイラはそれを受け入れました。

チケットの種類は

boost::shared_ptr<AbstractMainStageTicket>

そしていくつかの新しいコードを入れます:

ticket->ClearCalled();
ticket.reset();

リセットが const ではないというエラーにコンパイラがフラグを立てるようにします。

ご協力いただきありがとうございます!

Android 用の GNU 4.6 ツールチェーンを使用しています。

4

1 に答える 1