例如
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个版本,哪个版本表现更好?
答案 0 :(得分:0)
如果没有优化,第二个版本将执行少一个副本。第一个先复制对象,然后按值将其传递给构造函数,然后将参数复制到字段中。第二个版本仅执行复制到字段中,因为参数是通过引用传递的。
但是,由于您在类声明中声明了这些构造函数,因此编译器很可能只是优化掉第一个副本,如果上下文允许,有时甚至可能同时优化它们。
不过,第二种方式几乎是行业标准。如果可以通过const引用来实现,那么没有理由通过值传递大的值。