Les opérateurs en ligne sont-ils bons?
Quelle est la différence entre les opérateurs et d'autres méthodes pour faire inline en C++?
J'ai cherché, mais il n'est pas une question, comme je le vois.
Quelqu'un a une bonne raison de l'utiliser ou à éviter?
Remarque: il est clair que je veux dire inline opérateurs lorsqu'ils sont petits.
source d'informationauteur JalalJaberi
Vous devez vous connecter pour publier un commentaire.
Tout ce pourrait varient entre compilateurs, je m'attends qu'à partir du compilateur, point de vue, un opérateur est juste une autre fonction avec un peu inhabituel nom qui permet à la syntaxe du code source à regarder d'un peu différent.
Néanmoins, une fois que le générateur de code partie du compilateur fonctionne, je m'attends à tout de la différence entre un opérateur surchargé et une autre fonction (qui fait la même chose) ont disparu.
En tant que tel, en la déclarant comme
inline
ou la définition de l'intérieur du corps d'une définition de classe aura autant (peu, selon votre point de vue) avec une surcharge de l'opérateur comme pour toute autre fonction. Je serais normalement s'attendre à ce que l'effet d'être assez minime dans les deux cas, au moins lorsque l'optimisation est activée, la plupart des compilateurs assez bien ignorer lainline
de mots clés et de prendre leur propre décision au sujet de quoi élargir en ligne (et ce n'est pas à l') sur leur propre.Note que, dans une manière dont le compilateur ne peut pas ignorer le
inline
mot-clé s'il existe des modifications à la "une définition de la règle" qui doivent être respectées, indépendamment du fait de savoir si une fonction est en fait élargi, en ligne ou pas.Vous pouvez utiliser le
inline
mot-clé à suggèrent au compilateur qu'une fonction être faite en ligne.Le compilateur n'est pas obligé d'obéir à cette demande.
Opérateurs sont similaires, ils peuvent ou ne peuvent pas être insérée.
Car le compilateur ne peut pas être contraint à inline il y a probablement pas de bonnes raisons d'utiliser ou d'éviter l'utilisation de l'in-lining conseils. Parce que c'est tout ce qu'ils sont: des indices.
Dans Visual C++, vous pouvez utiliser le
__forceinline
mot-clé à force de l'in-lining, le résultat est plus grand code et le potentiel de perte de performance. Il est commun dans des systèmes bien conçus que pour la suppression des options (en forçant les choses) entraîne souvent une moins bonne performance. Même si vous utilisez ce mot-clé, pas chaque fonction peut être correctement insérée.GCC inline est discuté ici.
Comme d'autres l'ont mentionné, si le compilateur 'inlines' une méthode ou pas n'est généralement pas en votre nom, au sujet de l'utilisation de la
inline
mot-clé et la stratégie d'optimisation du compilateur.Donc je pense que l'aspect le plus important est la lisibilité des fichiers d'en-tête, et
operator
méthodes sont susceptibles d'apparaître comme des ensembles, par exemple arithmétique opération implémentations, où les transformations simples peuvent être utilisés pour les construire. Donc, si je dois chercher dans un tel fichier d'en-tête, j'aimerais voir la logique des ensembles de opérateur de signatures de méthode pour obtenir un aperçu de tout ce qui est applicable ou non.Un exemple très simple est la mise en œuvre de
operator==()
etoperator!=()
: