La déclaration de variables C++ const aide-t-elle ou nuit-elle aux performances ?

La déclaration de variables C++ const aide-t-elle ou nuit-elle aux performances ?


Je comprends le comportement de const -types de données qualifiés. Je suis curieux, cependant, s'il y a un gain ou une perte de performance dû à un zèle excessif ou insuffisant des variables de qualification comme const . Je pense notamment aux variables déclarées et utilisées exclusivement au sein d'un bloc de code isolé. Par exemple, quelque chose comme :


const qreal padding = CalculatePadding();
const QSizeF page_size = CalculatePagePreviewSize(padding);
const QRectF content_rect = CalculatePagePreviewContentRect(page_size);
const QList<QRectF> pages = renderer.BuildPrintPages(printer_, map_scene_);
const QFont page_number_font = CalculatePageNumberFont();
const QFontMetrics metrics(page_number_font);

Supposons que j'ai seulement besoin de const -méthodes qualifiées sur toutes ces (et plus.) Y a-t-il un gain de performances à les déclarer toutes const ? Ou, à l'inverse, cela nuit-il réellement aux performances ?


Je suis curieux des performances d'exécution (je suppose que cela ne fait aucune différence car le const est exclusivement une vérification au moment de la compilation--quelqu'un peut-il confirmer ? ) et les performances au moment de la compilation. Je n'ai pas assez d'expérience avec C++ pour avoir une idée de cela, et je me demande si je devrais pécher par excès ou sous-application de const quand toutes les autres choses (maintenabilité, etc.) sont égales.


Réponses :


const est principalement une chose au moment de la compilation, cependant, déclarer quelque chose comme const permet parfois certaines optimisations. Si le code en question n'est pas un goulot d'étranglement des performances, je ne m'en soucierais pas et j'utiliserais simplement const comme prévu :pour produire un code plus clair et vous empêcher de faire des choses stupides.


Quelques réponses de code


const qreal padding = CalculatePadding();
const QSizeF page_size = CalculatePagePreviewSize(padding);
const QRectF content_rect = CalculatePagePreviewContentRect(page_size);
const QList<QRectF>
pages = renderer.BuildPrintPages(printer_, map_scene_);
const QFont page_number_font = CalculatePageNumberFont();
const QFontMetrics metrics(page_number_font);