En C ++ utilisation de const abrégé

Contenu de l'Internet, souhaite terminer cette collection

base const

Si le mot-clé const ne se rapporte pas à un pointeur, nous comprenons bien, voici la situation impliquant des pointeurs:

int b = 500;
const int* a = &b; [1]
int const* a = &b; [2]
int* const a = &b; [3]
const int* const a = &b; [4]

Il y a quatre cas en réalité ne sont que deux regards:

  • qualification Const et la position relative du nom de type variable ne modifie pas son rôle

Si astérisque const sur le côté gauche, le const est utilisé pour modifier le pointeur variable à , à savoir le pointeur pour être constant;

Si astérisque const à droite, est modifié const pointeur lui - même , qui est, le pointeur lui - même est constante.

Ainsi, [1] et le cas [2] est le même, le contenu est constant pointeur ne peut pas changer la valeur de la variable de fonctionnement ce cas, sinon * a = 3;

[3] Le pointeur lui-même est constante, et le contenu des points de pointeur n'est pas constante, le pointeur change lui-même ne peut pas fonctionner ce cas, comme ++ est faux;

[4] Le contenu lui-même et les points de pointeur sont des constantes.

En outre , certaines fonctionnalités puissantes est l'utilisation de const dans la déclaration de fonction. Dans une déclaration de fonction, la valeur const de retour de la fonction peut être modifiée, ou d' un paramètre, pour les fonctions membres peut également être modifiée est la fonction entière. Suite à des situations:
int & operator = (const int & A),
vide Fun0 (A const int *)
fun1 void () const; // fun1 () doit être une fonction membre de la classe
const int fun2 ();

initialisation const

Regardez l'initialisation situation const variable

constantes const:

int b;
const int a = b;

pointeur constant const:

int* d = new int();
const int* c = d;
const int* c = new int();

const référence constante:

f int;
const int & e = f;

Référence de l'objet Souvent const:

M1 MyClass;
const MyClass & M2 = M1, l'
accès // ne peut, comme e a déclaré que la fonction const, et ne peut pas accéder aux fonctions de membres ordinaires;

[Pensée 1]: L'affectation suivante de cette méthode correcte?
* C = new new int const int ();
int * E = c;
[pensée 2]: L'affectation suivante de cette méthode correcte?
nouveau new = C * const int int ();
int * B = C;

Comme les paramètres et les valeurs de retour

En fait, les deux paramètres ou des valeurs de retour, le motif est le même, les paramètres de temps et le temps passait retour de la fonction, l'initialisation des variables const

modification des paramètres Const

fun0 vide (const int * a);
fun1 vide (const int & a);

Fonction du temps d'appel, avec les constantes initialisation des variables const correspondant, puis le corps de la fonction exécutée souvent quantifié selon const la partie modifiée, en tant que paramètre est const int * a, il ne peut pas passer dans le pointeur contenu changement, protection du contenu de pointe le pointeur d' origine; paramètre tel que const int & a, il ne peut pas objets passés référence en changement, les propriétés protectrices de l'objet original.

[Note]: Paramètre argument const est généralement utilisé lorsqu'un pointeur ou une référence;

Modification de la valeur de retour const

const int fun2 ();
const int * fun3 ();

Après cette déclaration, la valeur de retour, selon const avec le « principe de modification » a été modifié en conséquence jouer un rôle protecteur.

const rational operator*(const rational& lhs, const rational& rhs)
{
return rational(lhs.numerator() * rhs.numerator(),
lhs.denominator() * rhs.denominator());
}

modifications const Valeur de retour peuvent être évitées en permettant à ces opérations se produisent:
Rational A, B;
radional C;
(A * B) = C;

Usage général const Renvoie l'objet en lui-même est utilisé pour deux fins de fonctions et opérateurs surchargées En cas de modification d'un nouvel objet.

[Résumé]
En général, la fonction renvoie la valeur d'un objet, si elle est déclarée const, utilisé pour la surcharge de l' opérateur. En général, la modification est recommandé de ne pas utiliser le type const de retour de la situation ou d' une référence d'objet à un objet de la fonction de valeur.
Les raisons suivantes:
Si la valeur de retour est une référence d'objet à un objet ou const const est, la valeur de retour est l' attribut const, les membres de données publiques d'une instance de classe peut être consultée et la fonction retourne membres const et ne permet pas mener à bien sa mission, qui est rarement utilisé en général.

[Réflexions]: cette définition les surcharges opérateur d'affectation peut - il?
const un opérateur & = (const a & a);

L'utilisation de la fonction membre de la classe const

En général, sur le corps de la fonction, la forme: fun vide () const;

Si une fonction membre ne modifie pas les membres de données , il est préférable de le déclarer comme const, car les données ne permettent pas aux membres de modifier les fonctions membres const, en cas de modification, le compilateur signale une erreur, ce qui améliore grandement la robustesse du programme.

Certains recommandent l'utilisation de const

1, en gras utilisation const, qui vous donnera des avantages sans fin, mais seulement si vous avez à comprendre toute l'histoire;

2, afin d'éviter le plus d'erreurs d'affectation courantes, telles que l'affectation variable const, béton et questions tangibles;

3, dans la référence de paramètre const ou pointeur doit être utilisé, au lieu de l'instance d'objet général, pour la même raison;

4, les fonctions membres const dans trois utilisations à bon escient;

5, ne retourne pas facilement le type de la fonction

6, en plus du type général des opérateurs non surchargé en tant que valeur de retour de référence const à un objet;

Je suppose que tu aimes

Origine www.cnblogs.com/tc43/p/cpp_const.html
conseillé
Classement