mercredi 30 septembre 2020

Le comité C++ prend enfin les vrais problèmes à bras le corps !

J'avoue, il m'arrive parfois de me planter lamentablement et d'initialiser une std::string avec un pointeur null. Comme ça marche avec un char *, on ne fait pas attention, et hop !

std::string a(nullptr);

Le souci, c'est que c'est un comportement non défini. Dans la pratique, ça crashe. Mais ne craignez rien ! Cette proposition suggère la mise en place d'une surcharge supprimée prenant un nullptr:

constexpr basic_string(nullptr_t) = delete;

Simple, mais génial: quand on passe un pointeur null, c'est cette surcharge, meilleure, qui est choisie, et ensuite le compilo hurle parce que la méthode est supprimée. Alors certes, ça ne couvre pas le cas où l'on passe une variable pointeur initialisée à null, parce que le compilo, même s'il pouvait déduire à la compilation que le pointeur est nul, doit quand même choisir la surcharge char *. Mais ça couvre quand même tout un tas de cas stupides qui ne peuvent clairement pas marcher.

Je soutiens unilatéralement cette proposition, et j'espère qu'elle atterrira dans C++23 !

Aucun commentaire: