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

11

从您的语法来看,这似乎ticket是一个(智能?)指针。

ticket->ClearCalled();

这意味着类型ticket可能类似于

const std::shared_ptr< Ticket >& ticket

你需要的是

const std::shared_ptr< const Ticket >& ticket;
//                     ^^^^^
于 2013-04-26T15:39:56.620 回答