move-semantics

    1热度

    1回答

    我有一个实现移动构造函数的类Bar。 对于一个示例Bar b,如果我使用fooRvalRef(std::move(b))调用void fooRvalRef(Bar&&),则不会调用Bar的移动构造函数。 另一方面,对于函数void foo(Bar),使用foo(std::move(b))调用它将调用Bar的移动构造函数。 这是为什么?

    0热度

    2回答

    我正在制作一个小行星的版本,并且我正在尝试创建一个系统,您可以将特定数量的像素传送到您面对的任何方向。每次我尝试时,图像都会传送到地图上的相同位置。我放弃了这个想法并继续前进,但我想起了这个网站,并决定如果有人知道,那会是你们。 我开始用这个概念: //也许跳到位置// x = xstart; y = ystart; 由于需要的位置是动态的,但我想尝试实施这一概念: laser = inst

    4热度

    1回答

    我在这里讲述了一个长期的背景故事,因为除了直接的答案之外,我想知道我的推理是否导致这种情况是正确的。 我有一个函数采取dynamic_bitset<>参数(从Boost.dynamic_bitset)。 说它看起来像这样。 void foo(boost::dynamic_bitset<> db) { // do stuff } 恰巧,它只会被调用与临时工,从构造建成,为foo(bo

    2热度

    3回答

    形势 我设计,支持移动语义类模板logic类模板移动语义。 logic具有模板参数Visitor,并且类型为Visitor&的参考成员。这是一个库代码。 用户继承类模板logic并传递一个自定义访问者,如my_visitor。自定义访问者可能包含可移动成员。例如,my_visitor具有构件v这类型是std::vector。 问题 见test2()。当我移动my_logic时,my_visitor

    3热度

    1回答

    我试图合并两个向量unique_ptr(即std::move他们从一个到另一个),我一直遇到一个“使用已删除的函数...” “错误文字墙。根据错误,我显然试图使用unique_ptr的删除拷贝构造函数,但我不知道为什么。以下是代码: #include <vector> #include <memory> #include <algorithm> #include <iterator> s

    2热度

    1回答

    我试图创建一个非常简单的基本C++类来实现线程安全列表,即当您访问它时会自动锁定的列表。不幸的是,编译器不想让我创建并返回一个包含unique_lock的结构。这是我最初试图: template<typename T> struct LockedQueue { private: std::mutex mutex; using lock_t = std::uniq

    1热度

    1回答

    我不知道为什么编译器会给我关于模板实例化的警告。 那是一个代码段它运行得很好并正确输出左值/右值: //template<typename T> void overloaded(const /*T*/std::string& in) { std::cout << "lvalue" << std::endl; } //template<typename T> void over

    4热度

    1回答

    下面的代码无法编译GCC 6.1,但在Clang 3.8.0和Visual Studio 2015工作: #include <memory> class base { public: base(std::unique_ptr<int>) {} }; class derived : public base { public: using base::base; }

    2热度

    1回答

    我在Rust中包装了一个C库,并且它的许多函数都是通过指向结构体的指针来引用参数的,这些结构体通常指向其他结构体。为了减少开销,我希望能够缓存将Rust数据封送到C结构中的结果。 这里的C库会如何期待一些参数的例子: #[repr(C)] struct Foo { x: i32, y: f32 } #[repr(C)] struct Bar { p_foo:

    8热度

    1回答

    Rust的示例网站上提供了Rust的移动语义示例:Rust Move Semantics。 我对这两种情况都有基本的了解。首先是一个原语如何可以有一个新的别名,原始仍然可以使用,因为最终的结果是一个复制看到i32利用Copy特质。这对我来说很有意义。 此外,出于许多充分的理由,第二个示例在堆中具有多个引用i32的别名方面是有意义的。 Rust实施所有权规则,因此在创建新绑定后,原始别名不能使用。这