1

Existe-t-il une différence de performances lors de l'utilisation d'une référence constante et d'une référence non constante en C++? Si oui, alors qu'est-ce qui est mieux et pourquoi?Performances des références constantes par rapport aux références non constantes

Il existe une instruction dans le manuel SystemC indiquant que le passage d'objets par référence non-const est une solution rapide.

+0

'const-reference' et' non-const-reference' sont utilisés dans différents cas. Lorsque vous avez la garantie, que dans votre objet de fonction ne sera pas changé - utilisez 'const-refenrence', si vous voulez des changements - utilisez' reference'. – ForEveR

+0

Qu'est-ce que * vous * pensez? –

+0

Je connais l'utilisation, je veux savoir si l'un d'entre eux est meilleur que les autres en termes de performances. – Dexter

Répondre

1

Non, il n'y a pas de différence du tout. Le const s'applique uniquement localement, mais tout compilateur récent est trivialement capable de déterminer si une référence a été modifiée, donc cela ne fait aucune différence.

Tenir compte de ce scénario:

void MyClass::foo(const int& param) 
{ 
    m_myInt1 = param + 1; 
    m_myInt2 = param; 
} 

Dans ces deux cas, chaque accès à param doit passer par la mémoire. Pourquoi? Parce que param peut alias m_myInt1.

MyClass bar; 
bar.foo(bar.m_myInt1); 

La référence const signifie seulement que param ne peut être modifié par cette référence. Vous pouvez toujours le modifier via une autre référence (dans ce cas, via this->m_myInt1).

+0

J'ajouterais une petite note: si vous passez la référence const à une fonction, il est plus facile pour le compilateur d'aligner son corps car il n'aura pas à gérer l'alias et la réassignation de l'objet. – UnknownGosu

+0

@UnknownGosu: Même si la référence est 'const', la fonction pourrait la modifier en utilisant' const_cast', de sorte que le compilateur ne peut faire aucune hypothèse supplémentaire basée sur 'const'. –

Questions connexes