1.
struct ID { mutable SYM *cached_sym; char name[]; SYM *sym() const { if (!cached_sym) cached_sym=Find(name); return cached_sym; } };
Je veux bien voir comment tu fais plus efficace.
2. Je ne vois pas comment tu peux faire comme ça sans casser la compatibilité ANSI.
3. Ah oui. Mais 1) ça devient vite relou (on n'est plus à l'époque des variables 'register') et 2) comme le compilo n'est pas capable d'établir l'équivalence des 2 représentations, si par hasard tu "optimises" trop de variables pour le nombre de registres du processeur, ton code est moins bon (et donc ton code ne sera efficace que sur une plateforme donnée)
5. Non, justement

Considère qu'un "mutable int" est un wrapper (éventuellement constant) vers un "int" (non-constant), de même qu'un "int *" est un wrapper (éventuellement constant) vers un "int" (non-constant). Je ne vois pas en quoi dans le premier cas, ce serait contraire à la 'philosophie' du "const", alors que dans le second cas non...
7. Mais c tjs moins efficace...