对于数组副本,const&表现更好?

时间:2016-06-14 09:27:09

标签: c++ performance

例如

class A
{
    std::array<int, 10> m_data;

    A(std::array<int, 10> data) : m_data(data) {} // version 1 without const&

    A(std::array<int, 10> const& data) : m_data(data) {} // version 2 with const&
};

对于2个版本,哪个版本表现更好?

1 个答案:

答案 0 :(得分:0)

如果没有优化,第二个版本将执行少一个副本。第一个先复制对象,然后按值将其传递给构造函数,然后将参数复制到字段中。第二个版本仅执行复制到字段中,因为参数是通过引用传递的。

但是,由于您在类声明中声明了这些构造函数,因此编译器很可能只是优化掉第一个副本,如果上下文允许,有时甚至可能同时优化它们。

不过,第二种方式几乎是行业标准。如果可以通过const引用来实现,那么没有理由通过值传递大的值。