Erreurs, bugs, questions - page 2860
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Est-ce un comportement correct du compilateur ? Il semble que A::i ne soit pas créé au moment de l'appel de la méthode A::f() appelant A::i.
Qu'entend-on par "créé" ?
static est juste un moyen de créer un râteau pour cacher une variable globale ou une fonction, limitant la visibilité d'une fonction ou d'une classe
. La mémoire d'une variable globale existe toujours.
Et oui, pour les variables globales l'ordre d'initialisation est très important (je veux dire, éviter d'accéder à la variable avant qu'elle ne soit initialisée)
Cet exemple a fonctionné...
Dans l'exemple ci-dessus, cela a fonctionné...
Allez-vous changer le compilateur à ce stade ? Personnellement, j'aimerais garder le système tel qu'il est.
Allez-vous changer le compilateur à ce stade ? Personnellement, j'aimerais que tout reste en l'état.
Nous n'avons pas l'intention de modifier le comportement.
Mais il existe une tâche différée de détection des erreurs d'accès aux variables globales (avant l'initialisation).
Si nous implémentons cette fonctionnalité, nous obtiendrons un avertissement lors de la compilation du code ci-dessus : la fonction A::f() est utilisée pour initialiser A::i, ce qui donne accès à la variable A::i en cours d'initialisation.
Si nous implémentons cette fonctionnalité, vous obtiendrez un message d'avertissement lors de la compilation du code ci-dessus : la fonction A::f() est utilisée pour initialiser A::i, qui accède à la variable A::i en cours d'initialisation.
Merci !
Nous ne prévoyons pas de changer le comportement
Ensuite, cela contredit votre concept selon lequel une variable est considérée comme déclarée lorsque la déclaration est complète. Pourquoi l'avez-vous inventé en premier lieu ? Si c'est comme ça dans un cas et différent dans un autre.
Une bonne langue a des règles uniformes, et non l'inverse.Ensuite, cela contredit votre propre concept selon lequel une variable est considérée comme déclarée lorsque la déclaration est complète. Pourquoi l'avez-vous inventé en premier lieu ? S'il en est ainsi dans un cas et différent dans un autre...
Une bonne langue a des règles uniformes, et non l'inverse.Je suis un ignorant total, mais je n'y aurais pas pensé (int i = i) même si j'avais trop bu........ 8(
Je suis un ignorant total, mais je n'aurais pas pensé à ceci (int i = i) même si j'avais trop bu........ 8(
Et quelle est la principale différence par rapport à l'exemple original? Supprimez les choses inutiles et vous l'obtiendrez :
Seulement, il y a beaucoup de cordes là-bas, et une seule ici.
S'il n'y a pas d'erreur de compilation, il ne devrait pas y en avoir une ici aussi (et vice versa), sinon c'est le bordel.
Ensuite, cela contredit votre propre concept selon lequel une variable est considérée comme déclarée lorsque la déclaration est complète. Pourquoi l'avez-vous inventé en premier lieu ? S'il en est ainsi dans un cas et différent dans un autre...
Une bonne langue a des règles uniformes, et non l'inverse.Quelle est la différence fondamentale par rapport à l'exemple original? Enlevez les trucs en trop et vous l'avez :
Seulement, il y a beaucoup de cordes là-bas, et une seule ici.
S'il n'y a pas d'erreur de compilation, il ne devrait pas y en avoir ici aussi (et vice versa), sinon c'est le bazar.
Vous avez tort, ce n'est pas la même chose.
La description d'une variable statique dans une classe est sa prédéfinition (similaire à la prédéfinition d'une fonction ou d'une classe), mais l'emplacement, en fait, indique simplement au compilateur où la variable sera stockée en mémoire et quand elle doit être initialisée.
Vous avez tort, ce n'est pas la même chose.
La description d'une variable statique dans une classe est sa prédéfinition (similaire à la prédéfinition d'une fonction ou d'une classe), mais le placement indique essentiellement au compilateur où la variable sera stockée en mémoire et quand elle doit être initialisée.
Alors pourquoi l'erreur (2) est ici, si i est déjà pré-déclaré plus tôt (1) ?