#include <initializer_list>
#include <iostream>
namespace {
class C {
public:
C(C const &) = delete;
C(C &&) = delete;
C(int) {
std::cout << "int\n";
}
C(std::initializer_list<int>) {
std::cout << "initializer\n";
}
};
void f(C) {
}
// Compiles and prints "initializer" when called
C g() { return {0}; }
// Fails to compile
// C h() { return 0; }
} // namespace
int main() {
// Compiles and prints "initializer"
f({0});
// Fails to compile
// f(0);
}
Ist es möglich, C, einem nicht-kopierbaren, nicht beweglichen Typ, in einen Funktionsparameter oder Funktionsrückgabewert zu konstruieren, ohne dass den initializer_list-Konstruktor aufrufen?Konstruieren eines nicht-kopierbaren, nicht beweglichen Typ in einen Funktionsparameter ohne initializer_list Konstruktor aufruft
ich keine Möglichkeit, das zu tun, sehen (Dies ist auch ein Problem mit In-Class-Initialisierern: 'struct A {std :: vector x {2};}'. Sie können 'x' nicht initialisieren, um die Größe' 2' zu haben und nicht '= sagen 2', weil der Konstruktor explizit ist. –
Sie übergeben eine Kopie des Objekts eines nicht kopierbaren Typs usw. Warum? Macht keinen Sinn – deviantfan
@deviantfan: Ich versuche, das Objekt direkt an Ort und Stelle zu bauen. –