C++ 循环常数参考值的范围不为';似乎没什么不同
如果我在C++11中有一个基于范围的for循环C++ 循环常数参考值的范围不为';似乎没什么不同,c++,c++11,C++,C++11,如果我在C++11中有一个基于范围的for循环 for(auto const &ticket : ticketStrip->tickets()) { ticket->ClearCalled(); } 为什么我能够在循环中调用票据上的非常量方法,比如ClearCalled(),而它没有标记为常量 void Ticket::ClearCalled() { ... } ClearCalled确实修改了票据的内部结构,因此不应该将其标记为const。我知道我应该使用 auto
for(auto const &ticket : ticketStrip->tickets()) {
ticket->ClearCalled();
}
为什么我能够在循环中调用票据上的非常量方法,比如ClearCalled(),而它没有标记为常量
void Ticket::ClearCalled() { ... }
ClearCalled确实修改了票据的内部结构,因此不应该将其标记为const。我知道我应该使用
auto &ticket
但我只是试了一下
auto const &ticket
编译器接受了它
票的类型是
boost::shared_ptr<AbstractMainStageTicket>
使编译器标记重置为非常量的错误
谢谢你的帮助
我正在使用适用于Android的GNU 4.6工具链。从您的语法来看,
ticket
似乎是一个(智能的)指针
这意味着票证的类型可能类似于
const std::shared_ptr< Ticket >& ticket
const std::shared\u ptr&Ticket
你需要的是
const std::shared_ptr< const Ticket >& ticket;
// ^^^^^
const std::shared\u ptr&Ticket;
// ^^^^^
如果您使用->
调用它,这意味着ticket
是一个迭代器。所以你有一个常量迭代器,而不是常量迭代器。什么是tickets()类型?抱歉,它实际上是一个智能指针,这回答了我的问题,我可以修改智能指针指向的对象,但不能修改智能指针本身。为此,我对我处理智能指针的事实感到困惑。
const std::shared_ptr< Ticket >& ticket
const std::shared_ptr< const Ticket >& ticket;
// ^^^^^