草庐IT

move_member

全部标签

C++11 : error: ‘begin’ is not a member of ‘std’

我正在尝试执行以下操作:source=newint[10];dest=newint[10];std::copy(std::begin(source),std::end(source),std::begin(dest));但是,编译器报如下错误。copy.cpp:5434:14:error:‘begin’isnotamemberof‘std’copy.cpp:5434:44:error:‘end’isnotamemberof‘std’copy.cpp:5434:72:error:‘begin’isnotamemberof‘std’我已经包含了所需的代码中的header。有人可以帮我解决这

c++ - 在 vector 中使用没有拷贝且没有 noexcept move 构造函数的对象。到底是什么坏了,我该如何确认?

我检查了很多moveconstructor/vector/noexcept线程,但我仍然不确定当事情应该出错时实际发生了什么。我无法按预期产生错误,所以要么我的小测试有误,要么我对问题的理解有误。我正在使用BufferTrio对象的vector,它定义了一个noexcept(false)move构造函数,并删除了所有其他构造函数/赋值运算符,这样就没有什么可以回退到:BufferTrio(constBufferTrio&)=delete;BufferTrio&operator=(constBufferTrio&)=delete;BufferTrio&operator=(BufferTr

c++ - '&' : illegal operation on bound member function expression

这个问题在这里已经有了答案:Printaddressofvirtualmemberfunction(5个答案)关闭7年前。当我尝试从具有主要功能的单个cpp文件时,这有效,sprintf(smem_options,"#transcode{vcodec=RV24}:smem{""video-prerender-callback=%lld,""no-time-sync},",(longlongint)(intptr_t)(void*)&cbVideoPrerender);如何在类中将函数参数传递给sprintf?sprintf(smem_options,"#transcode{vcodec

c++ - move 语义和完美转发的区别

我已经从这个问题中得到了什么是move语义:Whataremovesemantics?但我仍然不明白与move语义相关的完美转发是什么。谁能用简单的英语和一个简单的例子解释一下什么是完美转发? 最佳答案 纯英语尝试这个问题可能太复杂了,无法用简单的英语句子准确描述,但可以将完美转发视为一种将传递给一个函数的临时值move到另一个函数的方法,就好像第一个函数没有完全存在,因此没有任何不必要的拷贝或分配。当您尝试获取引用(右值或左值)时,C++11允许您通过在类型的右值(&&)和左值(&)引用之间引入一些转换规则来执行此操作R值引用是C

c++ - std::is_member_function_pointer 不适用于 noexcept 成员函数

我在使用std::is_member_function_pointer时遇到问题。据我所知,在给定noexcept成员函数时它不起作用。我在标准中找不到任何声明它不适用于noexcept合格成员函数的内容。问题示例:#includeclassA{public:voidmember()noexcept{}};intmain(){//failsatcompiletimeifA::memberisadatamemberandnotafunctionstatic_assert(std::is_member_function_pointer::value,"A::memberisnotamemb

c++ - 添加 move 构造函数会破坏二进制兼容性吗?

如果我将一个move构造函数(或move赋值运算符)添加到我的库中,我会破坏二进制兼容性吗?这种添加会以任何方式破坏用户的代码吗?classFoo{public:Foo();Foo(Fooconst&);Foo&operator=(Fooconst&);//newmethods:Foo(Foo&&);Foo&operator=(Foo&&);}; 最佳答案 在我看来,只要您不添加成员或虚函数,就不会对二进制兼容性产生任何影响,因为对象的布局不会改变。如果一个组件(比如共享库,Windows上的.dll或Linux上的.so)使用旧版

c++ - decltype( (A{}.int_member) ) 的正确结果是什么?

给定类型A的定义:structA{inti;};根据规范[expr.ref](我使用了n4618):(ifE2isnon-reference,)...IfE1isanlvalue,thenE1.E2isanlvalue;otherwiseE1.E2isanxvalue...显然A{}.i是xvalue;还考虑到[dcl.type.simple]:(fordecltype(e),)—...ifeisanunparenthesizedid-expressionoranunparenthesizedclassmemberaccess...—otherwise,ifeisanxvalue,de

c++ - 堆栈可以有一个异常安全的方法来返回和删除具有 move 语义的顶部元素吗?

在对关于std::stack::pop()的问题的回答中Iclaimedpop不返回值的原因是出于异常安全原因(如果复制构造函数抛出会发生什么)。@Konrad评论说现在有了move语义,这不再相关。这是真的吗?据我所知,move构造函数canthrow,但也许与noexcept它仍然可以实现。对于奖励积分,此操作可以提供哪些线程安全保证? 最佳答案 当然,并非所有类型都支持move,C++0x甚至允许抛出move构造函数。只要从右值构造对象可能会抛出它就不可能是异常安全的。但是,move语义允许您拥有许多在给定右值源的情况下不可抛

c++ - 使用 move 构造函数抛出异常? (C++)

如果我有一个Error类型的对象e实现了一个move构造函数,将抛出std::move(e)使用将Error的构造函数move到“复制”e,那么它是否避免制作对象的实际拷贝?所以如果我有Errore;throwstd::move(e);Error的拷贝构造函数会不会被调用?当您的move构造函数是noexcept(它应该是)但您的复制构造函数不是时,这很有趣。 最佳答案 §15.1[except.throw]:Throwinganexceptioncopy-initializes(8.5,12.8)atemporaryobject,

c++ - 在 C++ 中将通用构造函数分配给成员变量时的 std::move 或 std::forward

考虑以下类foo1和foo2templatestructfoo1{Tt_;foo1(T&&t):t_{std::move(t)}{}};templatestructfoo2{foo1t_;foo2(T&&t):t_{std::forward(t)}{}};foo1的构造函数总是这样吗?表示初始化成员变量的正确方式T?即通过使用std::move.foo2的构造函数总是这样吗?表示初始化成员变量的正确方式foo1由于需要转发给foo1的构造函数?即通过使用std::forward.更新以下示例因foo1而失败使用std::move:templatefoo1make_foo1(T&&t){