• [^] # Re: Existe-t-il des compilateurs C/C++ qui donnent une sémantique à tous les programmes ?

    Posté par . En réponse au journal Compilateur trop intelligent. Évalué à 5.

    Le problème c'est que tu ne sacrifie pas "un peu" mais "énormément" en perf. Par exemple, un simple

    for (int i = 0; i < my_array.size(); i++) {
     something(my_array[i]);
    }

    Deviendrait:

    for (int i = 0; i < my_array.size(); i++) {
     assert(i > 0 && i < my_array.size());
     something(my_array[i]);
    }

    Ce qui est totalement inutile et redondant. La raison pour laquelle on utilise systématiquement operator[] en C++ et pas la méthode at(), c'est justement pour profiter du gain de vitesse d'un UB. Bien sur, dans cet exemple, un analyseur statique pourrais arriver à garantir que l'utilisation de operator[] ne peux pas lever de UB, mais dans un cas plus complexe, ce n'est pas forcément garantit.

    bépo powered