gpt4 book ai didi

c++ - 调用基类 move ctor [C++0x]

转载 作者:太空狗 更新时间:2023-10-29 21:29:49 25 4
gpt4 key购买 nike

调用基类 move ctor 的正确方法是什么?

这个(适用于 MSVC2010,但不适用于 CBuilder2010):

struct Foo
{
Foo(Foo&& other) { }
};

struct Bar : public Foo
{
Bar(Bar&& other) : Foo((Foo&&)other) { }
};

或(适用于 CBuilder2010,但不适用于 MSVC2010):

struct Foo
{
Foo(Foo&& other) { }
};

struct Bar : public Foo
{
Bar(Bar&& other) : Foo(&other) { }
};

或者,他们都错了吗?如果是这样,什么是正确的方法(根据 C++0x 标准中的规定)?

注意:我不知道如何让它在 CBuilderXE 中工作(两个版本都不起作用)。

最佳答案

第一个选项看起来合乎逻辑,尽管我会拼写它 std::forward<Bar>(other) .

我不知道是什么导致 CBuilder 认为 &other 的类型是Bar&&而不是 Bar* .

基本上这里发生的事情是,一旦右值引用被命名,它就不再是右值引用,这就是std::forward。是为了,它保持rvaluness(创造一个短语),所以当你调用: Foo(other)您正在调用复制构造函数而不是 move 构造函数。

这应该是实现您想要做的事情的惯用(且符合标准)方式(除非我严重误解了 FCD)。

关于c++ - 调用基类 move ctor [C++0x],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4068041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com