gpt4 book ai didi

c++ - Ranged for loop const 引用似乎没有什么区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:43 26 4
gpt4 key购买 nike

如果我在 C++11 中有一个基于范围的 for 循环,

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

为什么我可以在循环内调用票证上的非 const 方法,例如未标记为 const 的 ClearCalled()?

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

ClearCalled 确实修改了票证内部结构,因此不应将其标记为常量。我知道我应该使用

auto &ticket

不过我试过了

auto const &ticket

并且编译器接受了它。

票的类型是

boost::shared_ptr<AbstractMainStageTicket>

并放入一些新代码:

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

使编译器标记 reset 不是 const 的错误。

感谢您的帮助!

我正在使用适用于 Android 的 GNU 4.6 工具链。

最佳答案

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

ticket->ClearCalled();

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

const std::shared_ptr< Ticket >& ticket

你需要的是

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

关于c++ - Ranged for loop const 引用似乎没有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16240209/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com