c – 无法使用比较器初始化std :: function
发布时间:2020-12-16 03:39:43 所属栏目:百科 来源:网络整理
导读:在我的C类中,我们学习使用函数对象等,但现在我们得到了一个代码片段,可以在教师的编译器上工作,但不在我们的编译器上(我们使用不同的操作系统). 我们使用几个编译器(MSVC,clang)测试了下面的代码片段,他们都拒绝了它,有点最小化: #include functionalstruct
在我的C类中,我们学习使用函数对象等,但现在我们得到了一个代码片段,可以在教师的编译器上工作,但不在我们的编译器上(我们使用不同的操作系统).
我们使用几个编译器(MSVC,clang)测试了下面的代码片段,他们都拒绝了它,有点最小化: #include <functional> struct Fraction { Fraction(); Fraction(int z,int n); Fraction(Fraction&); // various data members }; struct FractionComparator { int operator()(Fraction a,Fraction b) { return 1; } }; int main() { std::function<int(Fraction,Fraction)> comparator = FractionComparator(); } 我们对macOS表示赞同:
我们已经发现添加移动构造函数可以解决问题,但是我们不知道为什么存在这种差异以及为什么这些代码不能在我们的编译器上编译. 有任何想法吗? 解决方法
为什么添加移动构造函数可以解决问题?
尝试从rvalue复制构造分数. 但是constuctor Fraction(Fraction&);采用非常量引用.不允许非const引用绑定到临时对象. Fraction(const Fraction&); 当您声明移动构造函数时,编译器将从rvalue移动构造Fraction. 为什么这段代码不能在我们的编译器上编译,而是编译给老师? 此代码compiles with VC++. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |