我不明白资格赛在哪里/为什么会被淘汰。
#include <iostream>
#include <memory>
class A {
public:
void f() {};
};
template <typename Callable>
void invoker(Callable c) {
auto l = [=]() {
c(); // <------------------- Error
};
l();
}
int main() {
A a;
invoker(std::bind(&A::f, a));
return 0;
}
我在c()上得到一个编译器错误;生产线:
错误:传递“const std::\u Bind(A)
解决方法我不明白:
>
将A::f()定义为const:void f()const{};
bind()
对实例a
的引用:调用者(std::bind(
通过以下方式传递到lambda:自动l=[
g版本:
g++ --version
g++ (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
霍尔特的回答很好。
如果不能将a::f修改为常量方法,则可以使lambda可变:
#include <iostream>
#include <memory>
#include <functional>
class A {
public:
void f() {};
};
template <typename Callable>
void invoker(Callable c) {
auto l = [=]() mutable // <-- Fixed
{
c();
};
l();
}
int main() {
A a;
invoker(std::bind(&A::f, a));
return 0;
}
据此:
std::bind
的返回类型包含std::decay类型的成员对象
这意味着
c
持有a
的副本(我们称之为c.a
),但由于您是通过副本捕获c
,因此c
在lambda中是限定的,调用
通过生成成员函数,可以在对象上调用它
额外的细节(仍然来自这里):
如果存储的参数
arg
的类型是std::reference_wrapper
因此,使用std::ref(a)
调用相当于:
std::invoke(&A::f, std::forward<A&>(c_a.get()));
其中,c\U a是std::reference\U包装
否则,普通存储的参数arg作为左值参数传递给可调用对象:上面调用std::invoke中的参数vn是简单的arg,相应的类型vn是cv
因此,原始调用等效于(因为c是常量,所以cv是常量):
std::invoke(&A::f, std::forward<A const&>(c_a));
其中,c\U a是c中a的副本。
在gcc 5.4.0上,从const C std::map获取条目时无法编译。 这看起来类似于传递“const”。此参数丢弃限定符[-fppermissive],它是关于
我有一个类缓存,它的函数write指定为 我这样调用这个函数。 上面的一行给了我以下错误 将“const Cache”作为“bool Cache::write(const MemoryAccess)”的“this”参数传递 this参数是特定于编译器的,它有助于代码混乱和中断本地命名空间变量优先级。但这样的变量并没有在这里传递。
下面是一个基本的代码片段,我得到了一个错误: 错误:传递'constd::map 注意:我知道我可以在不使用的情况下删除点,但上面的代码片段只是一个更大问题的示例。 我检查了一些关于类似错误的问题: 错误:传递constd::映射 但在这两种情况下,都是因为被声明为。另一方面,我试图使用/访问的
标准库函数bind()和function()定义于头文件<functional>中(该头文件还包括许多其他函数对象),用于处理函数及函数参数。bind()接受一个函数(或者函数对象,或者任何你可以通过”(…)”符号调用的事物),生成一个其有某一个或多个函数参数被“绑定”或重新组织的函数对象。(译注:顾名思义,bind()函数的意义就像它的函数名一样,是用来绑定函数调用的某些参数的。)例如: int
以下代码在Green Hills C编译器中导致错误(错误:类型int*与参数类型const int*不兼容),而它只产生警告并使用gcc进行编译(警告:传递func的参数1会从指针目标类型中丢弃const限定符)。 哪些行为符合C标准?
我有一个定义如下的类。h: 输出流函数有问题。在cpp文件中,我将其定义为: 下面是std'const错误:, 错误:传递“const std::map,std::vector” 当我从ostream操作符重载的定义中删除const保护时,这个编译很好,但是,我相信我应该能够使用const保护来完成它,根据我的老师的说法,现在养成这个习惯是更好的做法。有谁能给我指点一下为什么这本书不能编译? 不过