2013-04-26 58 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