parce que si la condition est fausse:
1) appelle à *exit, aucun traitement de l'erreur possible, aucun destructeur n'est exécuté, c'est un vrai massacre et c'est très convivial pour l'utilisateur
2) compile en -DNDEBUG et magique, y a plus d'assert.
si vous voulez travaillez (par ce qu'assert c'est la foutaise de merde de C faites pour cerner un bug quand on debug, un logiciel final ne doit pas en contenier), vérifier vos contraintes et renvoyez des code d'erreurs ou balancez des exceptions