Angenommen, Sie haben dies:Wie kann die implizite Konvertierung von int in unsigned int verhindert werden?
struct Foo {
Foo(unsigned int x) : x(x) {}
unsigned int x;
};
int main() {
Foo f = Foo(-1); // how to get a compiler error here?
std::cout << f.x << std::endl;
}
Ist es möglich, die implizite Konvertierung zu verhindern?
Der einzige Weg, ich denken konnte, ist explicilty einen Konstruktor zur Verfügung stellen, die ein int
nimmt und eine Art von Laufzeitfehler, wenn die int
negativ ist, aber es wäre schöner, wenn ich einen Compiler-Fehler für diese bekommen kann.
Ich bin mir fast sicher, dass es ein Duplikat gibt, aber die nächste, die ich finden konnte, ist this question, die eher fragt, warum die implizite Konvertierung erlaubt ist.
Ich interessiere mich für beide, C++ 11 und pre C++ 11 Lösungen, vorzugsweise eine, die in beiden funktionieren würde.
nur möglich in C++ 11, oder? – user463035818
Ja, hast du gesagt, dass du C++ 11 nicht benutzen kannst? – skypjack
nein ich habe nicht, aber wenn es eine Lösung gibt, die gut in pre C++ 11 und in post C++ 11 funktioniert, bevorzuge ich diese. Leider kann ich im größten Teil meines Codes nicht C++ 11 – user463035818