草庐IT

copy-elision

全部标签

c++ - 如何在成功或失败的情况下返回 std::copy 的值?

我正在使用std::copy将std::deque中的对象复制到一个文件中。代码运行良好,但我需要检查复制是否成功,因此我需要设置标志或抛出异常。我用谷歌搜索但找不到如何检查std::copy是否已成功将值复制到文件中的解决方案。有人可以给它点亮吗。 最佳答案 如果写入文件失败,则文件流的错误标志将被设置-您可以在复制后检查这些,或者先调用exceptions成员函数使其抛出异常错误。如果其他方法失败,则会抛出异常。 关于c++-如何在成功或失败的情况下返回std::copy的值?,我们

c++ - 可以复制省略/RVO 导致从同一对象复制/移动

假设我有一个如下所示的函数:SomeObjectcopy_maybe(boolmake_new,constSomeObject&def){if(make_new)returnSomeObject();elsereturndef;}我这样调用它:SomeObjectobj;obj=copy_maybe(true,obj);如果没有复制省略,这显然总是会从copy_maybe中创建的临时文件复制到obj。但是,使用复制省略/RVO,复制是否有可能发生从obj到obj?更具体地说,在这些(或类似)条件下,是否有可能在复制运算符(voidoperator=(SomeObjectconst&ot

c++ - 通过 copy-and-swap 分配与两个锁

借款HowardHinnant'sexample并将其修改为使用copy-and-swap,这op=线程安全吗?structA{A()=default;A(Aconst&x);//Assumeimplementscorrectlockingandcopying.A&operator=(Ax){std::lock_guardlock_data(_mut);usingstd::swap;swap(_data,x._data);return*this;}private:mutablestd::mutex_mut;std::vector_data;};我相信这是线程安全的(记住op=的参数是按

c++ - Visual Studio C++ - 缺少 "Copy to Output Directory"

这个问题在这里已经有了答案:Automaticcopyfilestooutputduringapplicationbuilding(8个答案)关闭9年前。我在VisualStudio(2012)中创建了一个空的C++项目,当我在解决方案资源管理器中选择了某个文件时,在“属性”窗口中看不到“复制到输出目录”选项。为什么?

c++ - 使用哪个 : move assignment operator vs copy assignment operator

我似乎不明白为什么要使用移动赋值运算符:CLASSA&operator=(CLASSA&&other);//moveassignmentoperator结束了,复制赋值运算符:CLASSA&operator=(CLASSAother);//copyassignmentoperator移动赋值运算符仅采用r值引用,例如CLASSAa1,a2,a3;a1=a2+a3;在复制赋值运算符中,other可以是使用复制构造函数或移动构造函数的构造函数(如果other是用右值初始化的,它可以是移动构造的——如果move-constructor定义了——)。如果它是copy-constructed,我

c++ - gcc 和 clang 都省略了下面代码段中对移动构造函数的调用。这个对吗?

在下面的代码中,类S的对象s用于通过直接初始化来初始化类D的对象>Dd(s);。转换函数S::operatorD()用于将对象s转换为D类型的临时对象。然后,gcc和clang都省略了对移动构造函数D(&&)的显式调用,以将此临时对象移动到d中。参见liveexample.#includestructD;structS{operatorD();};structD{D(){}D(D&&){std::cout我基于以下理由质疑这种省略的正确性:这种情况包含在§8.5/16(N3337)的第一个子项目符号点中,其中没有提及省略。Iftheinitializationisdirect-init

c++ - 任何编译器真的会删除这些拷贝吗?

给定structRange{Range(doublefrom,doubleto):from(from),to(to){}doublefrom;doubleto;//ifitmatterstothecompiler,wecanaddmorefieldsheretomakecopyingexpensive};structBox{Box(Rangex,Rangey):x(x),y(y){}Rangex;Rangey;};someonesaid在Boxbox(Range(0.0,1.0),Range(0.0,2.0))中,编译器可以通过在box中构造它们来避免完全复制Range对象开始。真的有

c++ - ‘operator=’ 的模糊重载与 c++11 std::move and copy and swap idiom

我收到以下错误:[matt~]g++-std=c++11main.cpp-DCOPY_AND_SWAP&&./a.outmain.cpp:Infunction‘intmain(int,constchar*const*)’:main.cpp:101:24:error:ambiguousoverloadfor‘operator=’in‘move=std::move((*©))’main.cpp:101:24:note:candidatesare:main.cpp:39:7:note:Test&Test::operator=(Test)main.cpp:52:7:note:Test&

c++ - 为什么 std::copy_n 采用模板参数而不是 std::size_t?

这么简单的问题。templateOutputItcopy_n(InputItfirst,Sizecount,OutputItresult);为什么std::copy_n为要复制的元素数量取一个类型,而不是简单地std::size_t?我只是想不出一个理由。templateOutputItcopy_n(InputItfirst,std::size_tcount,OutputItresult); 最佳答案 在这种情况下,推测原始原理大多是徒劳的,但对于这种设计copy_n可以用负计数调用,例如int或ptrdiff_ttype,在这种情

c++ - 如何就地初始化数组?

如何在不复制或移动构造临时元素的情况下初始化数组?当元素具有显式deleted复制或移动构造函数时,只有当元素具有默认构造函数或具有所有默认参数的构造函数时,我才能初始化数组,并且我执行以下操作之一:(a)明确声明数组,(b)直接初始化和零初始化数组,或(c)复制初始化和零初始化数组。直接(但不是零)初始化和复制(但不是零)初始化都不会编译。structFoo{Foo(intn=5):num(n){}Foo(constFoo&)=delete;//Foo(Foo&&)=delete;//ERRORFooa5[2]={5,5};//copyinitialization->ERROR}这3