私が見たC++11 コードのほとんどはstd::initializer_list
値で取得しますが、右辺値参照で取得されることもあります。これを行う正当な理由はありますか?
たとえば、私がこれまでに目にしたほとんどすべての例では、次のようになります。
class A {
public:
A(std::initializer_list<int>);
};
しかし、私は時々これが行われているのを見ます:
class B {
public:
B(std::initializer_list<int> &&);
};
右辺値参照の使用法と目的を理解している一般的にですが、 の場合に、なぜこれらのいずれかが他よりも優先されるのでしょうかstd::initializer_list
? 私が考えられる唯一の理由は、 ではclass A
初期化リストを個別に構築できるようになり、class B
これが防止されるということです。
std::initializer_list<int> values {1,2,3,4};
A a(values); // valid
B b(values); // error
しかし、それを防ぐことが望ましいことであるという十分な理由が思いつきません。
では、なぜstd::initializer_list
値ではなく右辺値参照を使用するのでしょうか?
ベストアンサー1
私は良い理由はわかりませんが、私の推測では、コードの作成者は、初期化リストを値で渡すと、リスト内の要素の不要なコピーが作成されると考えていた可能性があります。もちろん、これは真実ではありません。初期化リストをコピーしても、基礎となる値はコピーされません。