草庐IT

move_member

全部标签

c++ - 为什么标准库的 move 构造函数和 move 赋值运算符会使对象处于未指定状态?

在C++标准库中有一个关于move构造函数和move赋值运算符的特殊描述,它表示从中move数据的对象在调用后处于有效但未指定的状态。为什么?坦率地说,我不明白。这是我直觉上没有预料到的。真的,如果我在现实世界中将某物从一个地方move到另一个地方,我move的地方将空(是的,有效),直到我将新东西move到那里。为什么在C++世界中它应该有所不同?例如,根据以下代码的实现:std::vectora{1,2,3};std::vectorb{4,5,6};a=std::move(b);可能等价于下一段代码:std::vectora{1,2,3};std::vectorb{4,5,6};a

c++ - 未调用 move 构造函数

在尝试编写有关move构造函数的示例后,我遇到了以下代码:#include#includeusingnamespacestd;classData{public:Data():x(3){cout为什么这里不调用move构造函数?程序打印:Data()3我发现更奇怪的是,通过添加复制构造函数,突然间,它确实调用了move构造函数...Data(constData&):x(2){cout现在它会打印Data(&&)4P.S我正在使用gcc4.4.5 最佳答案 好吧,你的代码对我来说工作正常。Seethissample.输出:Data()D

c++ - 为什么 std::move 对 std::unique_lock 没有任何影响?

我有以下C++(11)代码:#includevoidunlock(std::unique_lock&&ulock){}intmain(void){std::mutexm;std::unique_lockulock(m);unlock(std::move(ulock));if(ulock.mutex()==&m||ulock.owns_lock()){throwstd::runtime_error("");}return0;}我想不通的是为什么在unlock()返回后互斥体仍然被持有。我的期望是std::move()导致锁在从unlock()调用返回时超出范围(并被析构函数解锁).至少,

C++03 通过构造函数将 vector move 到类成员中( move 语义)

我只能访问C++03,而且我经常想像在C++11中那样将vectormove到函数中。如何做到这一点的问题不会过多地混淆代码的用户。所以我的问题是在C++11之前程序员是如何做到的。我知道可以使用交换函数“move”vector。所以这就是我想出的:classFoo{public:Foo(std::vector&vec){usingstd::swap;swap(vec,m_vec);//"move"vecintomembervector}private:std::vectorm_vec;};//usage:std::vectorv(100,1337);Foofoo(v);//v.emp

android - 错误 : 'to_string' is not a member of 'std'

它可能是重复的,但我尝试了我在StackOverflow内外找到的所有解决方案。我正在使用OpenCV在C++上创建一个库,并尝试为Android编译它。我不能使用to_string(int)但我不能。我试图多次修改我的makefile。我最后的配置是:Android.mkLOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)OPENCV_CAMERA_MODULES:=offOPENCV_INSTALL_MODULES:=oninclude$(LOCAL_PATH)/jsoncpp/Android.mkinclude/Users/rafaelrui

C++ - 错误 : 'list' does not name a type (list object as member variable in class)

关闭。这个问题是notreproducibleorwascausedbytypos.它目前不接受答案。这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这个问题的解决方式不太可能帮助future的读者。关闭8年前。Improvethisquestion我经常遇到“'xxx'doesnotnameatype”错误,我之前读过的大多数帖子都提到这个错误是由于一些依赖性问题而发生的。但是,我似乎找不到我的。这是我得到的:GameLib.h#ifndefGAMELIB_H_#defineGAMELIB_H_//Structuresstructplayer

c++ - 成员初始化列表 : initialize two members from a function returning a tuple

memberinitializerlist中的多个成员是否可以从函数获得的元组中初始化?随着通过元组返回多个值变得越来越流行,我希望有一个解决方案。除了语言限制,我看不出有什么其他原因无法做到这一点。这是我所拥有的mcve:autonew_foo(std::size_tsize)->std::tuple,int*>{autobuffer=std::make_unique(size*sizeof(int)+8);autobegin=static_cast(static_cast(buffer.get()+4));returnstd::make_tuple(std::move(buffer

c++ - 'struct std::pair<int, int >' has no member named ' 序列化'

我正在尝试将序列化集成到我的代码中。但是,我收到“没有命名的成员”错误。我正在阅读的书说std::pair不需要包含头文件并且不存在。如何修复此错误?我的代码如下所示:#include//ofstream/ifstream#include#include#include//stringstream#include//#include#include//#includeusingnamespacestd;intmain(){complexc(1,0);bitsetb(BOOST_BINARY(101));pairp(1,2);strings;std::stringstreamss(s);

c++ - 使用 std::move 返回 std::vector

我有一个非常基本的问题:返回std::vector是个好主意吗?使用std::move?例如:classA{};std::vector&&func(){std::vectorv;/*fillv*/returnstd::move(v);}我应该返回std::map,std::list..等...以这种方式? 最佳答案 你声明了一个通过右值引用返回的函数——这几乎永远不应该做(如果你通过引用返回局部对象,你最终会得到一个悬空引用)。而是声明函数按值返回。这样,调用者的值将由函数返回的右值构造。返回值也将绑定(bind)到任何引用。其次,

c++ - 不能 std::move 从 lambda 捕获到 lambda 内部的函数调用,为什么?

这个问题在这里已经有了答案:Whycan'tImovethestd::unique_ptrinsidelambdainC++14?(1个回答)关闭4年前。在下面的代码中#include#include#includevoidf1(std::unique_ptr&&uptr){}voidf(std::unique_ptr&&uptr){autothread=std::thread([uptr{std::move(uptr)}](){f1(std::move(uptr));});}intmain(){return0;}无法编译lambda中对std::move的调用:[x86-64gcc8