C++(隐式或显式)值构造函数是否应该通过value或reference-to-const接受其参数,当它需要以任何方式在其对象中存储参数的副本时?
这是我能想到的最短的例子:
struct foo {
bar _b;
foo(bar [const&] b) // pass by value or reference-to-const?
: _b(b) { }
};
Run Code Online (Sandbox Code Playgroud)
这里的想法是,我希望在创建foo对象时,以创建foo对象的各种方式最小化对bar的复制构造函数的调用.
请注意我对copy elision和(Named)返回值优化有一点了解,我读过"想要速度?通过值传递",但我不认为这篇文章直接针对这个用例.
编辑:我应该更具体.
假设我无法知道sizeof(bar),或者是否bar是基本的内置类型(bar可能是模板参数,foo可能是类模板而不是类).另外,不要假设foo构造函数可以内联(或者bar就此而言).假设我至少可能使用实现RVO的编译器.
我想是为了有一个可能性(因为编译器优化),像这样的通话将调用没有调用bar"(S执行时甚至拷贝构造函数凡_b(b)在foo的初始化列表)":
foo f = function_that_creates_and_returns_a_bar_object_using_rvo();
Run Code Online (Sandbox Code Playgroud)
是否有可能(鉴于C++ 98标准)可以这样做,如果是这样,如果foo通过引用而不是值接受其参数,它或多或少可能工作?
c++ optimization constructor pass-by-reference pass-by-value