私はC++を手に入れようとしているJava開発者です。 setterが提供する健全性チェックを再利用するために、コンストラクタ内でsetterを使用するのは大丈夫ですか?例えばコンストラクタでセッターを使用する
:
#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);
};
};
それは有効です。ここでは、テストを取り除くために 'unsigned'型が存在することに注意してください。 – Jarod42
クラスのユーザーが負の数を渡さないようにしたい場合は、代わりに 'unsigned'を使用してみてください。次に、コンパイラは、コンパイル時に、ランタイムチェックが必要ではなく、チェックを処理します。 –
'署名されていない 'ものは、明白ではありません。例えば、 https://channel9.msdn.com/Events/GoingNative/2013/Interactive-Panel-Ask-Us-Anything 9:50、42:40、1:02:50(委員会のいくつかの著名なメンバーが主張するパネル –