远程循环const引用似乎没有什么区别

时间:2013-04-26 15:35:48

标签: c++ c++11

如果我在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工具链。

1 个答案:

答案 0 :(得分:11)

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

ticket->ClearCalled();

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

const std::shared_ptr< Ticket >& ticket

您需要的是

const std::shared_ptr< const Ticket >& ticket;
//                     ^^^^^