我在此程序中遇到问题:
#include <iostream>
#include <string>
#include <queue>
#include <functional>
int main()
{
class Buffer{
public:
void consumed(size_t s) {
//alter something inside Buffer
}
};
std::queue<Buffer> bufferFifo;
typedef std::function<void()> Task;
std::queue<Task> tasks;
auto b = bufferFifo.front();
tasks.emplace([b]() {
b.consumed(0);
});
}
我在程序中遇到的错误是这样的:错误:成员函数'consumed'的'this'参数类型为'const libopenvpn::Buffer
b.consumed(r-> size());
但是在在线编译器上创建此最小可行示例时遇到的错误是:http://cpp.sh/9zksg是:
In lambda function:
20:25: error: passing 'const main()::Buffer' as 'this' argument of 'void main()::Buffer::consumed(size_t)' discards qualifiers [-fpermissive]
我相信是同样的错误。看起来有点像,即使我没有在任何地方使它成为const,b
也被标记为const
。为什么是const?
最佳答案
默认情况下,通过lambda中的值捕获的任何变量都是const
。
如果将lambda标记为mutable
,则捕获的b
不再是const:
tasks.emplace( [b] () mutable {
b.consumed(0);
});
这是demo。另外,通过引用捕获的变量是非常量的,因此您可以通过引用捕获
b
:tasks.emplace( [&b] () {
b.consumed(0);
});
这是一个demo
关于c++ - muQueue.front()给出const实例,即使我没有将其标记为const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62805479/