Erreurs, bugs, questions - page 2417

 
Andrey Pogoreltsev:

Vous voyez, si vous ne précisez pas :

Le C++ compile parfaitement ce code. Alors la syntaxe est correcte.

Logique intéressante :) Et si vous supprimez tout le code, la syntaxe est encore plus correcte ? ) J'ai cité un code concret. Je n'ai pas dit que la classe B en particulier était incorrecte. Elle peut très bien être utilisée pour appeler des méthodes statiques, etc.

Imaginez un modèle dont vous ne vérifierez pas l'utilisation dans l'en-tête. Que doit faire le compilateur dans ce cas ?

Il n'y a pas besoin de substituer des notions. Un modèle n'est vérifié que lorsqu'il est étendu avec des types spécifiques, c'est compréhensible.

Pourriez-vous préciser comment vous vérifiez la syntaxe de *.h à partir de la ligne de commande pour vérifier ce code ? C'est devenu intéressant)

Ici, je ne peux pas dire, parce que je n'ai pas pris la peine avec de tels tambourins, et a écrit une macro pour VS, qui compile l'en-tête. À cette fin, il passe à la volée le mode de document actuel à cpp, compile, puis revient en arrière. Simple et de bon goût.

Je ne comprends pas pourquoi il n'y a pas du tout d'option normale pour vérifier la syntaxe des en-têtes dans le studio. J'utilise une version assez ancienne, peut-être est-elle déjà disponible.

 
Alexey Navoykov:

Je ne comprends pas pourquoi il n'y a pas du tout d'option normale pour vérifier la syntaxe des en-têtes dans le studio.

Ctrl+F7 , cette combinaison est probablement disponible depuis au moins 2008 - compiler un fichier séparé
 
TheXpert:
Ctrl+F7 , cette combinaison existe probablement depuis au moins Studio 2008 - compiler un fichier séparé.
Je parle d'en-têtes, alors que cette combinaison fait référence à cpp. Du moins, c'est le cas dans mon studio de 2010.
 

J'ai longuement hésité avant de poster, en revérifiant ma propre construction, mais il y a toujours quelque chose qui cloche avec le testeur...

Le test s'est littéralement arrêté au début :

Sans rien changer, j'appuie une seconde fois sur "start", va jusqu'au bout (avec une petite pause à l'endroit où il s'est interrompu) :

J'ai fait quelques approches supplémentaires - les résultats sont strictement alternés (l'un après l'autre, pair/impair). Jusqu'au point de "falaise", les graphiques d'équilibre sont similaires. Encore une fois, je ne change rien, je clique juste sur "démarrer".

C'est très probablement le moment où il ajoute un personnage supplémentaire (pourquoi pas les 5 depuis le début du test ?) :


Si l'on laisse de côté la question de la disponibilité réelle de la mémoire (selon le gestionnaire de tâches, 1,2 à 1,4 Go de mémoire libre, ce qui correspond au rapport), il n'est pas possible que le même test nécessite des quantités de mémoire différentes pour fonctionner ? Et si le rapport dit que 400Mo est suffisant, vous pouvez effectuer trois tests de ce type sur 1,2Gb...

Données supplémentaires : test sur 5 symboles, par ouverture de barre, H1, 2004...aujourd'hui. Le corps a 7 tableaux doubles avec 500 éléments et une petite structure de tableau (stocke les données pour chaque symbole, c'est-à-dire dans ce cas 5 x 13), la taille est fixée pendant l'initialisation et ne change plus, c'est-à-dire qu'il n'y a rien qui consomme de la mémoire. Le code est procédural, simple, petit, sans récursion et sans bibliothèques incluses.

Il fonctionne sur quatre symboles, mais sur 6-7-8 il a le même effet que sur 5 symboles - une seule fois. En même temps, la première fois après l'ajout d'un nouveau personnage - ça marche toujours, la suivante - non, puis ça marche à nouveau, etc.

Il y a un soupçon que la mémoire n'est pas libérée en temps voulu, juste la présence d'une erreur liée à son manque.

Total de 3 problèmes :

  • le test ne s'exécute qu'une seule fois (strictement) s'il n'y a pas de changement dans les paramètres ou le code.
  • il y a assez de mémoire libre pour plusieurs tests (si l'on se fie au message après la réussite d'un test), mais une erreur de mémoire insuffisante apparaît (à chaque tentative). (400 ont été utilisés lors du "succès", 1200 étaient libres lorsque l'erreur s'est produite)
  • certains personnages sont connectés au milieu du test, s'il y a un historique (vous pouvez le voir sur le journal de synchronisation). Signal d'interrogation sur chaque nouvelle barre de tous les symboles (en boucle)

 
Alexey Navoykov:
C'était à propos des en-têtes, et cette combinaison fait référence à cpp. En tout cas, dans mon studio de 2010, c'est le cas.
oui ( et votre méthode semble être plus pratique que de faire un cpp vide pour l'en-tête
 

Pourquoi est-ce interdit ?

void fn(const int&) {}

void start() {
   fn(5);  // parameter passed as reference, variable expected

}
 
Vict:

Pourquoi est-ce interdit ?

littéral uniquement par valeur. pourquoi - je ne sais pas, vous devez demander à l'équipe de développement
 
TheXpert:
C'est la tradition depuis des temps immémoriaux. les littéraux par valeur seulement. pourquoi - je ne sais pas, vous devez demander aux développeurs

Passer un paramètre par référence implique l'existence d'une variable distribuée en mémoire.

Les constantes ne sont stockées nulle part et sont utilisées directement.

 
TheXpert:
Je ne sais pas pourquoi, je vais devoir demander aux développeurs.

Pour faire plaisir aux masochistes. Je n'ai pas été impressionné par le bilio standard, j'ai donc décidé d'écrire un vecteur similaire, mais à cause de l'abondance de "trucs", il s'avère être un autre sous-développement.

void push_back(const T &value);
 
Slava:

Lepassage d'un paramètre par référence implique qu'il existe une variable allouée en mémoire.

Les constantes, quant à elles, ne sont stockées nulle part, mais sont utilisées directement.

et qu'est-ce qui vous empêche de créer une variable temporaire ?