constructor list же вроде такой код не запихнешь?
#include <stdexcept>
#include <iostream>
class PositiveInt {
public:
const int value;
PositiveInt(int value) {
if (value < 0) {
throw std::underflow_error("given value < 0 for PositiveInt");
}
this->value = value;
}
~PositiveInt() = default;
};
int main() {
PositiveInt* pi = new PositiveInt(-5); // can throw underflow_error
std::cout << "Value is " << pi->value << "\n";
return 0;
}
В списке инициализации
Так? PositiveInt(int value) : value{ if (value < 0) { throw std::underflow_error("given value < 0 for PositiveInt"); } else { value } }
: value{value < 0 ? (throw /* ... */, 0) : value} Извините)
Это хорошо) Но если код более сложный, то что делать?
ещё можно константный конструктор сделать и он вернёт константный объект, а остальные поля mutable......(бред)
Clazz(...) : v1(...), ... vn(...) { checkInvariant(); }
Запихни его в функцию, а её в init list
Странно, что никто ещё лямбду не предложил...
Обсуждают сегодня