Die meisten der C++ 11-Code, der std::initializer_list
Ich habe gesehen, dauert es nach Wert, aber manchmal wird es von Rvalue Bezug genommen. Gibt es einen guten Grund, dies zu tun?Warum eine std :: initializer_list nach Rvalue-Referenz vs. nach Wert?
Zum Beispiel fast jedes Beispiel ich kenne tut dies:
class A {
public:
A(std::initializer_list<int>);
};
Aber ich sehe immer wieder dies gelegentlich getan:
class B {
public:
B(std::initializer_list<int> &&);
};
Ich verstehe die Verwendung und Zweck rvalue Referenzen im Allgemeinen, aber warum sollte eines davon im Fall eines std::initializer_list
gegenüber dem anderen bevorzugt werden? Das einzige, was mir einfällt, ist, dass class A
erlaubt, dass die Initialisierungsliste separat aufgebaut wird, und class B
verhindert dies.
Aber ich kann mir keinen guten Grund vorstellen, warum das zu verhindern eine erstrebenswerte Sache wäre.
Also, warum würde man eine std::initializer_list
von Rvalue-Referenz anstelle von Wert nehmen?
Nun, es könnte nur sein, dass jemand wirklich möchte, dass Sie die Liste wörtlich übergeben ... –
Gute Frage, ich habe mich gefragt. By the way, ich denke, 'B b (std :: move (values));' würde immer noch kompilieren. – iavr
Dumme Frage, vielleicht - aber gibt die Implementierung der Rvalue-Referenzversion an irgendeinem der Orte, die Sie gesehen haben, irgendwelche Hinweise? – zmb