Pourquoi C a introduit l'opérateur de résolution de portée
Par rapport à Java, C fournit un opérateur de résolution de portée distinct (::) au lieu de s'appuyer sur uniquement sur l'opérateur point (.). Malgré le succès de Java sans opérateur distinct, C a nécessité cet ajout en raison d'une fonctionnalité unique du langage : la possibilité d'utiliser le même identifiant pour une variable membre et un type de classe dérivé.
Cette distinction devient évidente lorsque l'on considère le code. comme l'exemple ci-dessous :
struct foo { int blah; }; struct thingy { int data; }; struct bar : public foo { thingy foo; };
Dans ce scénario, la variable membre foo dans la structure bar et le type de classe dérivé foo partagent le même nom. Pour résoudre cette ambiguïté, l'opérateur de résolution de portée :: est utilisé.
Lorsque le compilateur rencontre un ., il suppose que l'opérande de gauche est un objet. En revanche, :: signifie un nom de type, un espace de noms ou l'espace de noms global. Cette différenciation permet au compilateur d'interpréter le code comme suit :
test.foo.data = 5; test.foo::blah = 10;
Dans la première instruction, test.foo.data est reconnu comme accédant aux données membres de l'objet test.foo. Dans la deuxième instruction, test.foo::blah indique l'accès au membre blah de la classe dérivée foo.
Ainsi, l'opérateur de résolution de portée en C sert d'outil de précision pour résoudre les ambiguïtés créées par l'autorisation de valeurs identiques. identifiants pour les variables membres et les types de classes dérivées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!