class A {
public:
explicit A(int i): m_i(i) {};
explicit A(const A& other): m_i(other.m_i) {};
int i() const {return m_i;};
private:
int m_i;
};
bool is_less(const A& a, const A& b) {
return a.i() < b.i();
}
int main(int, char*[]) {
std::vector<A> objects;
objects.push_back(A(3));
objects.push_back(A(5));
objects.push_back(A(-1));
std::cout << is_less(objects[1], objects[2]);
std::sort(objects.begin(), objects.end(), is_less);
for (auto& a: objects) {
std::cout << a.i() << " ";
}
std::cout << std::endl;
}
error:
no matching constructor for initialization of '_ValueType' (aka 'A')
error: no matching function for call to ‘A::A(std::remove_reference<A&>::type)
在G++中。如果复制构造函数不是显式的,代码可以编译并正常工作(但我希望强制执行只有对对象的引用才能用作参数和返回值)。代码还在删除对std::sort
的调用后进行编译(因此is_less(objects[1],objects[2])
不成问题)。因此,我的问题是,std::sort在调用使编译此代码失败的比较函数时会做什么,以及如何修复它。
经过大量的研究,唯一接近我的问题是复制初始化,对复制构造函数的调用是显式的还是隐式的?它链接到GCC中的一个bug。然而,clang显示了相同的行为,所以我很想了解这是怎么回事。
std::sort
要求元素类型为moveconstrucky
。
MoveConstrucky
的要求声明表达式tu=rv;
必须有效。但是,此表达式执行复制初始化,并要求存在非显式复制或移动构造函数。
在本例中,copy构造函数是显式的,声明它意味着没有隐式声明的move构造函数。因此,表达式无效,类A
不是MoveConstrucky
。
显式复制构造函数不允许类似于的东西,并将复制使用强制为。此外,显式复制构造函数也不允许从函数中按值返回对象。然而,我尝试用大括号替换复制初始化,就像这样 我得到的错误(g 5.2) 错误:没有匹配的函数用于调用'Foo::Foo(Foo 或(叮当声) 错误:结构初始值设定项中的元素过多 删除使代码在g下可编译,但clang仍然会失败,并出现相同的错误(感谢@stophen)。这是怎么回事?统一初始
主要内容:默认拷贝构造函数拷贝和复制是一个意思,对应的英文单词都是 。 对于计算机来说,拷贝是指用一份原有的、已经存在的数据创建出一份新的数据,最终的结果是多了一份相同的数据。例如,将 Word 文档拷贝到U盘去复印店打印,将 D 盘的图片拷贝到桌面以方便浏览,将重要的文件上传到百度网盘以防止丢失等,都是「创建一份新数据」的意思。 在 C++ 中,拷贝并没有脱离它本来的含义,只是将这个含义进行了“特化”,是指用已经存在的对
我用模板复制构造函数写了一段代码,以便更好地理解这个概念,因为我是新手,但是下面的代码无法编译 在Visual Studio中编译上述代码时出现以下错误:- 错误:- 严重性代码描述项目文件行抑制状态错误C2558类“网格”:没有可用的复制构造函数或复制构造函数被声明为“显式” 我试图用E替换参数的模板,但它显示了更多的错误(奇怪的错误) 错误: 严重性代码描述项目文件行抑制状态错误LNK2019
copy constructor是一个构造函数,它通过使用先前创建的同一类的对象初始化它来创建对象。 复制构造函数用于 - 从另一个相同类型的对象初始化。 复制对象以将其作为参数传递给函数。 复制对象以从函数返回它。 如果没有在类中定义复制构造函数,则编译器本身定义一个。如果该类具有指针变量并具有一些动态内存分配,则必须具有复制构造函数。 这里显示了最常见的复制构造函数形式 - classname
我想这样使用std::ostream: 有一个错误,说ostream构造函数受到保护: 错误:'std::basic_ostream 但我记得
问题内容: python中是否有复制构造函数?如果没有,我将怎么做才能达到类似的目的? 情况是,我正在使用一个库,并且在其中扩展了其中一个类,并提供了额外的功能,我希望能够将从库中获得的对象转换为自己的类的实例。 问题答案: 我想你想要复制模块 您可以像控制泡菜一样控制复印。