Ich bin ein Java-Entwickler versucht, C++ abzuholen. Ist es in Ordnung, einen Setter in einem Konstruktor zu verwenden, um die vom Setter bereitgestellten Plausibilitätsprüfungen wieder zu verwenden?Verwenden von Setter in Konstruktor
Zum Beispiel:
#include <stdexcept>
using namespace std;
class Test {
private:
int foo;
void setFoo(int foo) {
if (foo < 42) {
throw invalid_argument{"Foo < 42."};
}
this->foo = foo;
}
public:
Test(int foo) {
setFoo(foo);
};
};
Es ist gültig. Beachten Sie, dass 'unsigned' Typen existieren, um den Test hier los zu werden. – Jarod42
Wenn Sie nicht möchten, dass Benutzer der Klasse keine negativen Zahlen übergeben, verwenden Sie stattdessen 'unsigned'. Dann wird der Compiler die Überprüfung zum Zeitpunkt der Kompilierung für Sie übernehmen, anstatt dass Sie eine Laufzeitprüfung benötigen. –
Das 'unsigned' Zeug ist nicht unumstritten; siehe z.B. https://channel9.msdn.com/Events/GoingNative/2013/Interactive-Panel-Ask-Us-Anything 9:50, 42:40, 1:02:50 (Panel, in dem mehrere prominente Mitglieder des Komitees diskutieren gegen die Verwendung von vorzeichenlosen Ganzzahlen für etwas anderes als Bit-Fiddling.) –