Je sais que le mot-clé contextuel code> code> a été introduit pour écrire un code Safer (en vérifiant pour une fonction code> virtuelle code> avec la même signature) mais je ne me sens pas bien C'est parce qu'il semble être redondant pour que je puisse écrire Est-ce une mauvaise pratique de ne pas utiliser Edit: En d'autres termes; Quel est l'avantage d'utiliser le mot-clé contextuel code> en C ++ 11 pendant que nous avions toujours un avertissement de compilateur si nous cachantons une fonction virtuelle à tort en C ++ 03 (sans utiliser remplacer code> chaque fois que je veux remplacer une fonction code> p>
Remplacer le mot-clé contextuel pour 99% des cas? Pourquoi / quand devrais-je devoir l'utiliser ( un avertissement de compilateur n'est pas suffisant lorsque nous masquons une fonction virtuelle à tort forte>)? P>
de remplacement < / Code> Mot-clé contextuel)? P>
3 Réponses :
Autant que je sache, rien de mal n'arrive pas si vous envisagez des anotations. Ce n'est ni juste ni faux. Comme vous avez déjà indiqué déjà: les annotations sont introduites pour écrire un code plus sûr em>.
Toutefois: ils ne changeront pas votre code de manière fonctionnelle forte>. P>
Si vous travaillez comme un seul programmeur de votre propre projet, cela pourrait ne pas contenir que vous les utilisez ou non. Il est toutefois une bonne pratique à coller à un style (c'est-à-dire que vous l'utilisez, soit vous ne l'utilisez pas. N'importe quoi d'entre eux comme parfois l'utiliser et parfois non seulement la confusion) P>
Si vous travaillez dans une équipe, vous devez discuter du sujet avec vos coéquipiers et décider que vous utilisez tous ou non. P> Annotations CODE> est ce que vous appelez les mots-clés contextuels, ils servent de clarification, afin de s'assurer que quiconque lit le code réalise est une fonction qui remplace une fonction dans une superclasse ou une interface.
Le compilateur peut également donner un avertissement si la fonction à l'origine remplacée a été supprimée, auquel cas vous voudrez peut-être penser à supprimer votre fonction. P>
Je dois signaler que j'ai découvert la balise C ++ (et la modification de C ++) après avoir posté ma réponse. J'ai d'abord pensé que c'était tout à propos de Java. Cependant, la façon dont je le vois, le concept d'annotations est la même pour les deux langues. Donc, cela ne devrait pas avoir d'importance. Mais peut-être que quelqu'un veut confirmer ma réponse ou modifier s'il est jugé nécessaire.
"Le compilateur peut également donner un avertissement si la fonctionnalité à l'origine réparée a été supprimée", mais en C ++, une erreur de compilateur. BTW Vous avez raison, en utilisant Remplacement du mot clé code> augmentera la lisibilité du code, mais je suis merveille pourquoi C ++ Community ajouta un mot-clé uniquement pour la lisibilité !? :-P
Nous avons inventé C C ++, etc. Parce que la lecture / écriture de la machine (zéros et celles-ci) ou code d'assemblage est un tracas. Les langages de programmation sont inventés dans un seul but: faciliter la programmation (et plus lisible). Et chaque langage de programmation a un concept différent de ce qui est nécessaire pour que cela se produise. =) Btw 10% du temps Un scientifique informatique crée un nouveau code, 20% du temps qu'il modifie le code existant et enfin 70% de son temps qu'il tente de comprendre ce que le code déjà existant fait réellement. Donc, oui la lisibilité fait une différence dans 90% des cas.
Quel est l'avantage d'utiliser le mot-clé contextuel de remplacement en C ++ 11 pendant que nous avions toujours un avertissement de compilateur si nous cachat une fonction virtuelle à tort p> blockQuote>
presque aucun!? P>
mais: Cela dépend de la manière dont vos avertissements seront acceptés par vos règles de construction. Si vous dites, chaque avertissement doit être corrigé, vous obtiendrez le même résultat jusqu'à ce que vous utilisiez un compilateur qui vous donne l'avertissement. P>
Nous avons décidé de toujours utiliser le remplacement et supprimer virtuel sur des méthodes de dépassement. Donc, la "surcharge" est zéro et le code est portable au sens de "donner une erreur" sur une mauvaise utilisation. P>
Je ressemble personnellement à cette nouvelle fonctionnalité, car cela rend la langue plus claire. Si vous dites que c'est un remplacement, ce sera vérifié! et si nous voulons ajouter une nouvelle méthode avec une signature différente, nous n'obtiendrons pas un faux avertissement positif fort>, qui est important dans votre scénario! P>
Le mot clé code> code> est Si vous MISSPELL < / EM> Votre fonction virtuelle Il va compiler une amende mais à l'exécution du programme appelera la mauvaise fonction forte>. Il appellera la fonction de la classe de base plutôt que votre substitution. P> Il peut s'agir d'un bogue vraiment difficile à trouver: p>
et Notez également que c'est probablement plus propre à omettre le maintenant redondant virtuel code>, i.e.
int FINC () remplacer code>
Pouvez-vous expliquer pourquoi vous pensez qu'il est redondant?