2013-04-26 99 views
4

如果我有一个基于对C++ 11圈的范围,远程for循环const引用似乎不有所作为

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

为什么我能中呼吁票非const的方法循环,如ClearCalled(),当它没有标记为const?

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

ClearCalled确实修改了ticket的内部消息,所以它不应该被标记为const。我知道我应该使用

auto &ticket 

,但我只是想

auto const &ticket 

和编译器所接受它。

类型车票是

boost::shared_ptr<AbstractMainStageTicket> 

,并把一些新的代码:

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

使编译器标志了错误复位不是常量。

感谢您的帮助!

我使用Android版的GNU 4.6工具链。

+4

如果你与调用它' - >'暗示'票“是一个迭代器。所以你有一个常量迭代器,而不是一个迭代器来const。什么是门票()类型? – Pubby 2013-04-26 15:39:07

+1

对不起,它实际上是一个智能指针,并且可以回答我的问题,我可以修改智能指针指向的内容,但不能修改智能指针本身。 – 2013-04-26 15:41:58

回答

11

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

ticket->ClearCalled(); 

这意味着ticket类型是大概就像

const std::shared_ptr<Ticket>& ticket 

什么,你会需要的是

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

感谢你们,我对我处理智能指针的事实感到困惑。 – 2013-04-26 17:58:19