草庐IT

copy-constructor

全部标签

c++ - 是否可以定义一个 std::thread 并稍后对其进行初始化?

我的目标是保留一个std::thread对象作为数据成员,并在需要时对其进行初始化。我不能这样做(如下面的代码),因为std::thread类的复制构造函数已被删除。还有其他方法吗?classMyClass{public:MyClass():DiskJobThread(){};~MyClass();voidDoDiskJobThread();private:intCopyThread(conststd::wstring&Source,conststd::wstring&Target);intMoveThread(conststd::wstring&Source,conststd::ws

c++ - 我们可以从函数中按值返回具有已删除/私有(private)复制/移动构造函数的对象吗?

在C++03中,不可能按值返回具有私有(private)未定义复制构造函数的类的对象:structA{A(intx){...}private:A(Aconst&);};Af(){returnA(10);//error!return10;//errortoo!}我想知道,在C++11中是否取消了这个限制,从而可以为没有用于复制或移动的构造函数的类编写具有类类型返回类型的函数?我记得允许函数的调用者使用新返回的对象可能很有用,但他们无法复制该值并将其存储在某处。 最佳答案 这是它的工作原理Af(){return{10};}即使A没有工作

c++ - 我们可以从函数中按值返回具有已删除/私有(private)复制/移动构造函数的对象吗?

在C++03中,不可能按值返回具有私有(private)未定义复制构造函数的类的对象:structA{A(intx){...}private:A(Aconst&);};Af(){returnA(10);//error!return10;//errortoo!}我想知道,在C++11中是否取消了这个限制,从而可以为没有用于复制或移动的构造函数的类编写具有类类型返回类型的函数?我记得允许函数的调用者使用新返回的对象可能很有用,但他们无法复制该值并将其存储在某处。 最佳答案 这是它的工作原理Af(){return{10};}即使A没有工作

c++ - std::copy 如何与流迭代器一起工作

通常的STL构造是:vectorcol;copy(istream_iterator(cin),istream_iterator(),back_inserter(col));我们使用istream_iterator从std输入(cin)复制到vector。谁能解释这段代码是如何工作的?我的问题是我不太了解这部分:istream_iterator(cin),istream_iterator() 最佳答案 首先,请注意,在这种情况下,根本不需要使用std::copy。您可以直接从迭代器初始化vector:vectorcol((istrea

c++ - std::copy 如何与流迭代器一起工作

通常的STL构造是:vectorcol;copy(istream_iterator(cin),istream_iterator(),back_inserter(col));我们使用istream_iterator从std输入(cin)复制到vector。谁能解释这段代码是如何工作的?我的问题是我不太了解这部分:istream_iterator(cin),istream_iterator() 最佳答案 首先,请注意,在这种情况下,根本不需要使用std::copy。您可以直接从迭代器初始化vector:vectorcol((istrea

c++ - va_copy -- 移植到 Visual C++?

Apreviousquestion展示了一种打印到字符串的好方法。答案涉及va_copy:std::stringformat(constchar*fmt,...);{va_listap;va_start(ap,fmt);std::stringbuf=vformat(fmt,ap);va_end(ap);returnbuf;}std::stringvformat(constchar*fmt,va_listap){//Allocateabufferonthestackthat'sbigenoughforusalmost//allthetime.size_tsize=1024;charbuf

c++ - va_copy -- 移植到 Visual C++?

Apreviousquestion展示了一种打印到字符串的好方法。答案涉及va_copy:std::stringformat(constchar*fmt,...);{va_listap;va_start(ap,fmt);std::stringbuf=vformat(fmt,ap);va_end(ap);returnbuf;}std::stringvformat(constchar*fmt,va_listap){//Allocateabufferonthestackthat'sbigenoughforusalmost//allthetime.size_tsize=1024;charbuf

c++ - 我可以显式调用复制构造函数吗?

我对复制构造函数的机制有点困惑。如果我错了,请纠正我:如果一个方法将一个对象的引用作为参数,并且该类定义了一个复制构造函数,那么该类将使用构造函数创建自身的拷贝,并将其传递给函数而不是对原始的引用目的?另外,可以调用Object*obj=newObject(&anotherObject);创建另一个对象的拷贝? 最佳答案 不,如果一个函数需要引用:voidf1(Object&o);//callbyreference然后没有复制。如果一个函数有一个值:voidf2(Objecto);//callbyvalue然后编译器使用复制构造函数

c++ - 我可以显式调用复制构造函数吗?

我对复制构造函数的机制有点困惑。如果我错了,请纠正我:如果一个方法将一个对象的引用作为参数,并且该类定义了一个复制构造函数,那么该类将使用构造函数创建自身的拷贝,并将其传递给函数而不是对原始的引用目的?另外,可以调用Object*obj=newObject(&anotherObject);创建另一个对象的拷贝? 最佳答案 不,如果一个函数需要引用:voidf1(Object&o);//callbyreference然后没有复制。如果一个函数有一个值:voidf2(Objecto);//callbyvalue然后编译器使用复制构造函数

c++ - 使用 std::copy 插入 STL 队列

我想使用std::copy将元素插入到这样的队列中:vectorv;v.push_back(1);v.push_back(2);queueq;copy(v.begin(),v.end(),insert_iterator>(q,q.front()));但是这个编译失败,提示begin不是std::queue的成员。注意:我也用std::inserter进行了尝试-这也失败了,这一次说'reference'不是'std::queue'的成员。std::back_inserter和std::back_insert_iterator也会失败并出现同样的错误。我是否遗漏了一些明显的东西,或者in