【问题标题】:Does right value of an array will improve performance?数组的正确值会提高性能吗?
【发布时间】:2016-10-14 05:32:36
【问题描述】:

例如,我有

class A
{
    std::array<Object, 5> m_objects;

    A(std::array<Object, 5> objects)
       : m_objects(std::move(objects)) //does using right value will improve 
                                       // performance in some cases??
    {}
};

在某些情况下,在构造函数中使用正确的值会提高性能吗??

【问题讨论】:

  • 如果您不想提高性能(在某些情况下),请参考通用参考
  • “正确的价值”?你的意思是“右值”吗?!

标签: c++ rvalue-reference


【解决方案1】:

您还应该添加另一个构造函数来接受临时数组。

class A
{
    std::array<Object, 5> m_objects;

    A(std::array<Object, 5> objects)
       : m_objects(std::move(objects)) 
    {}
    A(std::array<Object, 5>&& robj): m_objects(std::move(robj))
    {}
};

您也可以选择forwarding reference T&amp;&amp;,但为了清楚起见,我把它留在这里了。这更明确。

还要注意,在这种情况下使用 move 并不总是保证性能。对于array,移动意味着移动array 持有的元素。在这种情况下,Object 类实例。

为了更好地执行此操作,您应该向Object 类提供move constructor,否则此处的移动操作将只是单个Object 实例的副本。

注意:Object 的移动构造函数应该比复制构造函数便宜。否则移动和复制在性能方面没有区别。

【讨论】:

    猜你喜欢
    • 2013-04-12
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 2019-06-20
    相关资源
    最近更新 更多