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;
                  
                  
                  }
                  
                  
                
В списке инициализации
 Miroslav
                          Belov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Miroslav
                          Belov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Так? PositiveInt(int value) : value{ if (value < 0) { throw std::underflow_error("given value < 0 for PositiveInt"); } else { value } }
: value{value < 0 ? (throw /* ... */, 0) : value} Извините)
 Miroslav
                          Belov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Miroslav
                          Belov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Это хорошо) Но если код более сложный, то что делать?
ещё можно константный конструктор сделать и он вернёт константный объект, а остальные поля mutable......(бред)
Clazz(...) : v1(...), ... vn(...) { checkInvariant(); }
Запихни его в функцию, а её в init list
Странно, что никто ещё лямбду не предложил...
Обсуждают сегодня