如果我在C ++ 11中有基于循环的范围,
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工具链。
答案 0 :(得分:11)
从你的语法来看,似乎ticket
是一个(智能?)指针。
ticket->ClearCalled();
这意味着ticket
的类型可能类似于
const std::shared_ptr< Ticket >& ticket
您需要的是
const std::shared_ptr< const Ticket >& ticket;
// ^^^^^