草庐IT

移动侦测

全部标签

c++ - 当复制 elison 失败时,有没有办法阻止移动构造函数后跟移动赋值运算符?

我有一种情况,我想用一个参数调用一个函数,并将结果返回到同一个参数中foo=f(foo);另外,我假设参数x很大,所以我不想调用它的复制构造函数,而是调用它的移动构造函数。最后,我不想通过引用传递参数,因为我想将函数f与另一个函数g组合在一起。因此,这样的事情foo=g(f(foo));有可能。现在,有了移动语义,这一切几乎都是可能的,如下面的程序所示#includestructFoo{Foo(){std::cout这个程序的输出是:constructorCalledfmovemoveassignmentdestructorFinishedwithf(foo)CalledfmoveCa

c++ - 返回具有已删除移动/复制构造函数的临时类型

考虑以下程序:#includeusingnamespacestd;structS{S()=default;S(constS&other)=delete;S(S&&other)=delete;inti;};SnakedBrace(){return{};//noSconstructedhere?}StypedBrace(){returnS{};}intmain(){//produceanobservableeffect.cout示例session:$g++-Wall-std=c++14-ono-copy-ctorno-copy-ctor.cppno-copy-ctor.cpp:Infunc

c++ - 将数据从未对齐结构的数组移动到 C++ 中的对齐数组

将数据从CameraSpacePoint数组移动到PointXYZ数组的最佳方法是什么?structCameraSpacePoint{floatX;floatY;floatZ;};__declspec(align(16))structPointXYZ{floatx;floaty;floatz;};constexprintBIG_VAL=1920*1080;CameraSpacePointcamera_space_points[BIG_VAL];PointXYZpoints_xyz[BIG_VAL];我的解决方案:CameraSpacePoint*camera_space_points_

c++ - 移动构造函数和赋值运算符 : why no default for derived classes?

为什么没有为派生类创建默认移动构造函数或赋值运算符?证明我的意思;具有此设置代码:#includestructA{A(){}A(A&&){throw0;}A&operator=(A&&){throw0;}};structB:A{};以下任一行抛出:Ax(std::move(A());Ax;x=A();但以下都没有:Bx(std::move(B());Bx;x=B();以防万一,我使用GCC4.4进行了测试。编辑:后来使用GCC4.5进行的测试显示了相同的行为。 最佳答案 通读0xFCD中的12.8(12.8/17特别是移动构造函数)

c++ - 应用于四边形时,OpenGL 纹理稍微向左移动

我对OpenGL有点陌生,而且我在使用纹理方面遇到了问题。纹理似乎加载正常,但当我运行程序时,纹理显示向左移动了几个像素,右侧出现了被移动切断的部分。我不知道这里的问题是出在我的TGA加载器中,还是我将纹理应用到四边形的方式。这是加载程序:#include"texture.h"#includeGLubyteuncompressedheader[12]={0,0,2,0,0,0,0,0,0,0,0,0};GLubytecompressedheader[12]={0,0,10,0,0,0,0,0,0,0,0,0};TGA::TGA(){}//Privateloadingfunctionca

C++ 重构 - 将方法移动到实现文件

我有很多头文件,里面有很长的方法实现。是否有自动执行此操作的方法?一个接一个会花很多时间...谢谢。 最佳答案 如果您使用的是VisualStudio,则有一个名为VisualAssist的插件可以帮助您做到这一点。我在工作中使用它,它真的很有帮助。很遗憾,此插件不是免费的,但您可以安装试用版来执行您的操作并对其进行测试。 关于C++重构-将方法移动到实现文件,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.

c++ - 从具有一个分配器的 vector 移动到具有另一个分配器的 vector

我有一个vector其中alloc是std::allocator上的简单包装器执行一些额外的簿记,比如计算创建对象的数量等。现在我想从我的vector移动进入vector.vector移动函数似乎都不接受vectors具有不同的分配器。如何将数据从一个vector移动到分配器不同的另一个vector? 最佳答案 正如JohnZwinck在他的回答中解释的那样,您不能移动vector。但是,您可以按如下方式移动vector的元素:vectoru;...vectorv(std::make_move_iterator(u.begin())

c++ - 对 std/boost 移动的模糊调用

遇到无法编译的代码:#include#include#include#include#include#includeusingnamespacestd;intmain(){typedefstd::pair>FirstPair;typedefstd::vectorVectorFirstPair;typedefstd::pairSecondPair;typedefstd::mapMap;MapmapInstance;SecondPairnewElement=make_pair(boost::posix_time::not_a_date_time,VectorFirstPair());map

c++ - 当基类提供时,派生类是否需要实现移动语义?

我看完了ThomasBecker's"C++RvalueReferences".我有几个关于右值和右值引用的问题。假设我有一个简单的数组类:templateMyArray{...T*m_ptr;//Pointertoelementssize_tm_count;//Countofelements};进一步假设它提供:#if(__cplusplus>=201103L)MyArray(MyArray&&t):m_ptr(std::move(t.m_ptr)),m_count(std::move(t.m_count)){t.m_ptr=NULL;t.m_count=0;}MyArrayoper

c++ - 如何正确地将所有权从原始指针移动到 std::unique_ptr?

我的做法是:classSomeClass{std::vector>myObjects;public:voidtakeOwnership(MyObject*nowItsReallyMyObject){myObjects.emplace_back(std::move(nowItsReallyMyObject));}};我做的每件事都正确吗?有没有更好的解决方案? 最佳答案 move是多余的。我自己,我会这样做:voidtakeOwnership(std::unique_ptrnowItsReallyMyObject){myObjects