1. Tu peux toujours faire un vrai systeme de cache.
Mais moins efficace.
2. Tu peux faire des castings de structures.
Je ne vois pas ce que tu veux dire. Virer le const? Tu dis toi-même que c'est illégal (à moins de rajouter volatile, ce qui est

niveau efficacité

)
3. Tu peux reecrire ton code pour que le compilo optimise.
Comment? Pour que ça soit le cas, il faudrait intégrer le code de 'chars.c' dans 'utils.c', et il faudrait aussi que le compilo soit assez bon; ce n'est pas tjs possible (lib dynamique...), et en plus un compilo tel que GCC n'est pas assez bon pour le faire (sauf qd il inline la fonction, mais c svt loin d'être une bonne idée...)
4. De toute facon, ca m'etonnerait fortement que ca soit ca qui soit a optimiser dans ton programme...
Oui. Mais reconnais au moins que le code généré est moins bon, et qu'en plus au niveau sémantique ça ne correspond pas à ce qu'on peut vouloir (surtout si le développeur de la classe qui utilise un mutable est distinct de celui du prog qui utilise cette classe).
Ce qui n'est pas la definition d'un pointeur constant.
Pff, ça ne veut rien dire. Tu peux aussi t'imaginer que le mot-clé "mutable" est un wrapper du même style que le symbole "*" : son contenu n'est pas read-only, même quand il est en read-only. La différence étant que c'est un wrapper vers un objet unique alloué dans la structure, donc qu'il n'y a pas besoin de modifier l'adresse de ce vers quoi il pointe, donc qu'on peut omettre l'étoile pour y accéder.
Tu ne vas pas me dire qu'une structure est plus constante si je fais "SYM** foo;" que si je fais "mutable SYM* foo;" (la différence est que dans le deuxième cas, c'est le compilo qui s'occupe de l'allocation, et que le code est plus efficace parce qu'il n'y a pas besoin de pointeur supplémentaire).
Non, il ne l'autorise pas.
OK, merci. Tu en es absolument sûr? (que je ne mette pas dans GTC des "optimisations" interdites par le standard)