[PROGRAMMATION] Devinez pourquoi ces codes est faux

ProloJusquaLOs
2021-04-14 20:25:00

J'espère simplement que vous réalisez que C++ est un langage de merde à cause de ces trucs débiles.
Dans le premier cas, un langage sensé t'aurais placé un noalias dans l'IR LLVM. Aussi, C t'aurais permis de place un restrict pour empêcher l'alias.
Dans le second cas, un langage un petit peu rigoureux t'aurais empêcher d'avoir une référence qui outlive calcul(tableau) si tableau est modifié.

cpp-nul-bordel
2021-04-14 20:26:08

Le 14 avril 2021 à 20:23:08 :

Le 14 avril 2021 à 20:00:47 :
Deuxième question, je vous sens pas trop chaud la :hap:

vector<bool> tableau;
initialisation(tableau);
auto b = tableau[0];
calcul(tableau);
calcul(b);

Est-ce safe d'utiliser b à la fin du code ? En supposant tableau est de taille au moins 1 quand b est créé

non ta fonction "calcul" est mal typée

On peut surcharger selon le type d'appel il me semble
(Pas le type de retour jcrois)

cpp-nul-bordel
2021-04-14 20:26:51

Aya les jean LLVM sont présent, nice

0xABCDEF
2021-04-14 20:33:00

Les gens qui parlent comme s'il n'existait qu'un compilateur pour le c++, jetant le doute sur leur compréhension de l'importance de la subtilité entre la spécification du langage et son implémentation pour la gestion de la portablilité et de la robustesse future.

bgsr___
2021-04-14 20:34:22

c'est quoi le problème du second code ? b n'est pas une référence donc faut juste se rappeler que si on modifie tableau dans calcul, ça changera pas b :(

ProloJusquaLOs
2021-04-14 20:36:15

Le 14 avril 2021 à 20:24:55 :

Le 14 avril 2021 à 20:15:51 :
L'op qui doit être tombé sur une liste de quirks du c++ et qui fait genre je suis trop fort.
L'op qui donne le problème avec des références et la solution avec des pointeurs en disant juste "si x=y ça marche pas" dans sa pseudo explication qui fait douter grandement qu'il avait compris le problèlme étant donné la subtilité du problème parce que quelqu'un qui a compris le problème n'aurait justement pas utilisé cette formulation trop imprécise et trompeuse. L'op qui essaie de se rattrapper après.

Clairement je pensais que ça marchait pas pour le même nombre, pas juste pour la même variable
(Littéralement j'ai appris quelque chose, et c'est ce que j'ai mis dans mon message)
Sinon je connaissais ce piège du xorswap avant, et idem pour la proxy class de vector<bool> je voulais juste partager des trucs ahah

Ah, l'optimisation bit field, j'avais oublié ça. Mais remarque que c'est détecté à la compilation si tu fais des trucs débiles (lesquels ?) à cause de ça, tu n'auras pas de problème supplémentaire à l'exécution. Mais est-ce que ça change quoi que ce soit le fait que ce soit un vector<bool> ? Selon moi ça ne change absolument rien le fait que tu aies la proxy class pour émuler le bool& ou non. Dans tous les cas le auto va t'envoyer une référence qui est, dans le cas général, UB (à cause de la modification du vecteur). Peut importe le T de vector<T>.

Erismature
2021-04-14 20:38:00

Le 14 avril 2021 à 20:34:22 :
c'est quoi le problème du second code ? b n'est pas une référence donc faut juste se rappeler que si on modifie tableau dans calcul, ça changera pas b :(

le type Vector<Bool> est cassé en C++, en gros c'est une erreur de conception qu'ils gardent pour la rétro-compatibilité

bgsr___
2021-04-14 20:39:43

Le 14 avril 2021 à 20:38:00 :

Le 14 avril 2021 à 20:34:22 :
c'est quoi le problème du second code ? b n'est pas une référence donc faut juste se rappeler que si on modifie tableau dans calcul, ça changera pas b :(

le type Vector<Bool> est cassé en C++, en gros c'est une erreur de conception qu'ils gardent pour la rétro-compatibilité

ouais je sais que vector<bool> est casse couille mais c'est pas que quand t'essaie de chopper une référence sur un élément ? ou alors auto b = tableau[0]; fait pas ce que je pense

ProloJusquaLOs
2021-04-14 20:47:50

Le 14 avril 2021 à 20:36:15 :

Le 14 avril 2021 à 20:24:55 :

Le 14 avril 2021 à 20:15:51 :
L'op qui doit être tombé sur une liste de quirks du c++ et qui fait genre je suis trop fort.
L'op qui donne le problème avec des références et la solution avec des pointeurs en disant juste "si x=y ça marche pas" dans sa pseudo explication qui fait douter grandement qu'il avait compris le problèlme étant donné la subtilité du problème parce que quelqu'un qui a compris le problème n'aurait justement pas utilisé cette formulation trop imprécise et trompeuse. L'op qui essaie de se rattrapper après.

Clairement je pensais que ça marchait pas pour le même nombre, pas juste pour la même variable
(Littéralement j'ai appris quelque chose, et c'est ce que j'ai mis dans mon message)
Sinon je connaissais ce piège du xorswap avant, et idem pour la proxy class de vector<bool> je voulais juste partager des trucs ahah

Ah, l'optimisation bit field, j'avais oublié ça. Mais remarque que c'est détecté à la compilation si tu fais des trucs débiles (lesquels ?) à cause de ça, tu n'auras pas de problème supplémentaire à l'exécution. Mais est-ce que ça change quoi que ce soit le fait que ce soit un vector<bool> ? Selon moi ça ne change absolument rien le fait que tu aies la proxy class pour émuler le bool& ou non. Dans tous les cas le auto va t'envoyer une référence qui est, dans le cas général, UB (à cause de la modification du vecteur). Peut importe le T de vector<T>.

Autant pour moi "Note that using auto drops references, const qualifiers, and volatile qualifiers. "

cpp-nul-bordel
2021-04-14 20:59:25

Le 14 avril 2021 à 20:47:50 :

Le 14 avril 2021 à 20:36:15 :

Le 14 avril 2021 à 20:24:55 :

Le 14 avril 2021 à 20:15:51 :
L'op qui doit être tombé sur une liste de quirks du c++ et qui fait genre je suis trop fort.
L'op qui donne le problème avec des références et la solution avec des pointeurs en disant juste "si x=y ça marche pas" dans sa pseudo explication qui fait douter grandement qu'il avait compris le problèlme étant donné la subtilité du problème parce que quelqu'un qui a compris le problème n'aurait justement pas utilisé cette formulation trop imprécise et trompeuse. L'op qui essaie de se rattrapper après.

Clairement je pensais que ça marchait pas pour le même nombre, pas juste pour la même variable
(Littéralement j'ai appris quelque chose, et c'est ce que j'ai mis dans mon message)
Sinon je connaissais ce piège du xorswap avant, et idem pour la proxy class de vector<bool> je voulais juste partager des trucs ahah

Ah, l'optimisation bit field, j'avais oublié ça. Mais remarque que c'est détecté à la compilation si tu fais des trucs débiles (lesquels ?) à cause de ça, tu n'auras pas de problème supplémentaire à l'exécution. Mais est-ce que ça change quoi que ce soit le fait que ce soit un vector<bool> ? Selon moi ça ne change absolument rien le fait que tu aies la proxy class pour émuler le bool& ou non. Dans tous les cas le auto va t'envoyer une référence qui est, dans le cas général, UB (à cause de la modification du vecteur). Peut importe le T de vector<T>.

Autant pour moi "Note that using auto drops references, const qualifiers, and volatile qualifiers. "

Ouais, et pour vector<bool> vu que c'est pas bool& mais jeanjacktype qui simule bool& ça part en couille et tu te retrouves avec une référence

ProloJusquaLOs
2021-04-14 21:00:23

Le 14 avril 2021 à 20:39:43 :

Le 14 avril 2021 à 20:38:00 :

Le 14 avril 2021 à 20:34:22 :
c'est quoi le problème du second code ? b n'est pas une référence donc faut juste se rappeler que si on modifie tableau dans calcul, ça changera pas b :(

le type Vector<Bool> est cassé en C++, en gros c'est une erreur de conception qu'ils gardent pour la rétro-compatibilité

ouais je sais que vector<bool> est casse couille mais c'est pas que quand t'essaie de chopper une référence sur un élément ? ou alors auto b = tableau[0]; fait pas ce que je pense

Il se trouve que std::vector::operator[] renvoie une référence à un élément. C'est ce qui te permet d'avoir gratuitement la syntaxe vec[0] = Chien(36); (sinon il faudrait rajouter un ::operator[]=). Or, si la variable à laquelle tu associes le renvoi n'est pas une référence, il y a copie de l'élément. Comme auto drop la référence (parce que pourquoi pas), le type de e dans auto e = vec[0]; est celui contenu dans le vecteur. Mais comme la surcharge vector<bool> est implémentée différemment avec un trick, elle ne retourne pas une référence mais un objet qui se comporte presque comme une référence. Mais auto ne sait pas qu'on fake une référence et ne déréférence pas implicitement. Tu te trimbales donc une référence déguisée au lieu du type nu (car la fausse référence n'a pas été drop).

logohojoa
2021-04-14 21:01:59

Le 14 avril 2021 à 19:38:11 :
Un facile pour commencer

//x est échangé avec y
void swap(int &x, int &y) {
x ^= y;
y ^= x;
x ^= y;
}

a cause de l'orthographe ? ces codes est faux

ProloJusquaLOs
2021-04-14 21:02:31

Le 14 avril 2021 à 20:59:25 :

Le 14 avril 2021 à 20:47:50 :

Le 14 avril 2021 à 20:36:15 :

Le 14 avril 2021 à 20:24:55 :

Le 14 avril 2021 à 20:15:51 :
L'op qui doit être tombé sur une liste de quirks du c++ et qui fait genre je suis trop fort.
L'op qui donne le problème avec des références et la solution avec des pointeurs en disant juste "si x=y ça marche pas" dans sa pseudo explication qui fait douter grandement qu'il avait compris le problèlme étant donné la subtilité du problème parce que quelqu'un qui a compris le problème n'aurait justement pas utilisé cette formulation trop imprécise et trompeuse. L'op qui essaie de se rattrapper après.

Clairement je pensais que ça marchait pas pour le même nombre, pas juste pour la même variable
(Littéralement j'ai appris quelque chose, et c'est ce que j'ai mis dans mon message)
Sinon je connaissais ce piège du xorswap avant, et idem pour la proxy class de vector<bool> je voulais juste partager des trucs ahah

Ah, l'optimisation bit field, j'avais oublié ça. Mais remarque que c'est détecté à la compilation si tu fais des trucs débiles (lesquels ?) à cause de ça, tu n'auras pas de problème supplémentaire à l'exécution. Mais est-ce que ça change quoi que ce soit le fait que ce soit un vector<bool> ? Selon moi ça ne change absolument rien le fait que tu aies la proxy class pour émuler le bool& ou non. Dans tous les cas le auto va t'envoyer une référence qui est, dans le cas général, UB (à cause de la modification du vecteur). Peut importe le T de vector<T>.

Autant pour moi "Note that using auto drops references, const qualifiers, and volatile qualifiers. "

Ouais, et pour vector<bool> vu que c'est pas bool& mais jeanjacktype qui simule bool& ça part en couille et tu te retrouves avec une référence

Soit dit en passant, j'espère sincèrement pour toi que tu n'es pas dans une CPP.

cpp-nul-bordel
2021-04-14 21:02:56

C'est ce qui te permet d'avoir gratuitement la syntaxe vec[0] = Chien(36); (sinon il faudrait rajouter un ::operator[]=)

Stylé en vrai
Tain c'est bien foutu comme langage quand même, dommage que j'ai pas le qi pour en faire proprement

cpp-nul-bordel
2021-04-14 21:03:38

Le 14 avril 2021 à 21:02:31 :

Le 14 avril 2021 à 20:59:25 :

Le 14 avril 2021 à 20:47:50 :

Le 14 avril 2021 à 20:36:15 :

Le 14 avril 2021 à 20:24:55 :

Le 14 avril 2021 à 20:15:51 :
L'op qui doit être tombé sur une liste de quirks du c++ et qui fait genre je suis trop fort.
L'op qui donne le problème avec des références et la solution avec des pointeurs en disant juste "si x=y ça marche pas" dans sa pseudo explication qui fait douter grandement qu'il avait compris le problèlme étant donné la subtilité du problème parce que quelqu'un qui a compris le problème n'aurait justement pas utilisé cette formulation trop imprécise et trompeuse. L'op qui essaie de se rattrapper après.

Clairement je pensais que ça marchait pas pour le même nombre, pas juste pour la même variable
(Littéralement j'ai appris quelque chose, et c'est ce que j'ai mis dans mon message)
Sinon je connaissais ce piège du xorswap avant, et idem pour la proxy class de vector<bool> je voulais juste partager des trucs ahah

Ah, l'optimisation bit field, j'avais oublié ça. Mais remarque que c'est détecté à la compilation si tu fais des trucs débiles (lesquels ?) à cause de ça, tu n'auras pas de problème supplémentaire à l'exécution. Mais est-ce que ça change quoi que ce soit le fait que ce soit un vector<bool> ? Selon moi ça ne change absolument rien le fait que tu aies la proxy class pour émuler le bool& ou non. Dans tous les cas le auto va t'envoyer une référence qui est, dans le cas général, UB (à cause de la modification du vecteur). Peut importe le T de vector<T>.

Autant pour moi "Note that using auto drops references, const qualifiers, and volatile qualifiers. "

Ouais, et pour vector<bool> vu que c'est pas bool& mais jeanjacktype qui simule bool& ça part en couille et tu te retrouves avec une référence

Soit dit en passant, j'espère sincèrement pour toi que tu n'es pas dans une CPP.

Dans une CPP ? Mais sinon simple étudiant, donc pas pisseur pro de cpp si c'était la question

ProloJusquaLOs
2021-04-14 21:04:52

Le 14 avril 2021 à 21:03:38 :

Le 14 avril 2021 à 21:02:31 :

Le 14 avril 2021 à 20:59:25 :

Le 14 avril 2021 à 20:47:50 :

Le 14 avril 2021 à 20:36:15 :

Le 14 avril 2021 à 20:24:55 :

Le 14 avril 2021 à 20:15:51 :
L'op qui doit être tombé sur une liste de quirks du c++ et qui fait genre je suis trop fort.
L'op qui donne le problème avec des références et la solution avec des pointeurs en disant juste "si x=y ça marche pas" dans sa pseudo explication qui fait douter grandement qu'il avait compris le problèlme étant donné la subtilité du problème parce que quelqu'un qui a compris le problème n'aurait justement pas utilisé cette formulation trop imprécise et trompeuse. L'op qui essaie de se rattrapper après.

Clairement je pensais que ça marchait pas pour le même nombre, pas juste pour la même variable
(Littéralement j'ai appris quelque chose, et c'est ce que j'ai mis dans mon message)
Sinon je connaissais ce piège du xorswap avant, et idem pour la proxy class de vector<bool> je voulais juste partager des trucs ahah

Ah, l'optimisation bit field, j'avais oublié ça. Mais remarque que c'est détecté à la compilation si tu fais des trucs débiles (lesquels ?) à cause de ça, tu n'auras pas de problème supplémentaire à l'exécution. Mais est-ce que ça change quoi que ce soit le fait que ce soit un vector<bool> ? Selon moi ça ne change absolument rien le fait que tu aies la proxy class pour émuler le bool& ou non. Dans tous les cas le auto va t'envoyer une référence qui est, dans le cas général, UB (à cause de la modification du vecteur). Peut importe le T de vector<T>.

Autant pour moi "Note that using auto drops references, const qualifiers, and volatile qualifiers. "

Ouais, et pour vector<bool> vu que c'est pas bool& mais jeanjacktype qui simule bool& ça part en couille et tu te retrouves avec une référence

Soit dit en passant, j'espère sincèrement pour toi que tu n'es pas dans une CPP.

Dans une CPP ? Mais sinon simple étudiant, donc pas pisseur pro de cpp si c'était la question

Putain le con, CPP a fourché dans ma tête avec CCP. Désolé.

bgsr___
2021-04-14 21:05:30

Le 14 avril 2021 à 21:00:23 :

Le 14 avril 2021 à 20:39:43 :

Le 14 avril 2021 à 20:38:00 :

Le 14 avril 2021 à 20:34:22 :
c'est quoi le problème du second code ? b n'est pas une référence donc faut juste se rappeler que si on modifie tableau dans calcul, ça changera pas b :(

le type Vector<Bool> est cassé en C++, en gros c'est une erreur de conception qu'ils gardent pour la rétro-compatibilité

ouais je sais que vector<bool> est casse couille mais c'est pas que quand t'essaie de chopper une référence sur un élément ? ou alors auto b = tableau[0]; fait pas ce que je pense

Il se trouve que std::vector::operator[] renvoie une référence à un élément. C'est ce qui te permet d'avoir gratuitement la syntaxe vec[0] = Chien(36); (sinon il faudrait rajouter un ::operator[]=). Or, si la variable à laquelle tu associes le renvoi n'est pas une référence, il y a copie de l'élément. Comme auto drop la référence (parce que pourquoi pas), le type de e dans auto e = vec[0]; est celui contenu dans le vecteur. Mais comme la surcharge vector<bool> est implémentée différemment avec un trick, elle ne retourne pas une référence mais un objet qui se comporte presque comme une référence. Mais auto ne sait pas qu'on fake une référence et ne déréférence pas implicitement. Tu te trimbales donc une référence déguisée au lieu du type nu (car la fausse référence n'a pas été drop).

ah ok bon ben j'avais plein de truc faux

déjà auto qui drop les const et les références je savais pas et ça m'étonne que ça m'ai jamais mis dans la merde :rire:

cpp-nul-bordel
2021-04-14 21:07:03

Le 14 avril 2021 à 21:04:52 :

Le 14 avril 2021 à 21:03:38 :

Le 14 avril 2021 à 21:02:31 :

Le 14 avril 2021 à 20:59:25 :

Le 14 avril 2021 à 20:47:50 :

Le 14 avril 2021 à 20:36:15 :

Le 14 avril 2021 à 20:24:55 :

Le 14 avril 2021 à 20:15:51 :
L'op qui doit être tombé sur une liste de quirks du c++ et qui fait genre je suis trop fort.
L'op qui donne le problème avec des références et la solution avec des pointeurs en disant juste "si x=y ça marche pas" dans sa pseudo explication qui fait douter grandement qu'il avait compris le problèlme étant donné la subtilité du problème parce que quelqu'un qui a compris le problème n'aurait justement pas utilisé cette formulation trop imprécise et trompeuse. L'op qui essaie de se rattrapper après.

Clairement je pensais que ça marchait pas pour le même nombre, pas juste pour la même variable
(Littéralement j'ai appris quelque chose, et c'est ce que j'ai mis dans mon message)
Sinon je connaissais ce piège du xorswap avant, et idem pour la proxy class de vector<bool> je voulais juste partager des trucs ahah

Ah, l'optimisation bit field, j'avais oublié ça. Mais remarque que c'est détecté à la compilation si tu fais des trucs débiles (lesquels ?) à cause de ça, tu n'auras pas de problème supplémentaire à l'exécution. Mais est-ce que ça change quoi que ce soit le fait que ce soit un vector<bool> ? Selon moi ça ne change absolument rien le fait que tu aies la proxy class pour émuler le bool& ou non. Dans tous les cas le auto va t'envoyer une référence qui est, dans le cas général, UB (à cause de la modification du vecteur). Peut importe le T de vector<T>.

Autant pour moi "Note that using auto drops references, const qualifiers, and volatile qualifiers. "

Ouais, et pour vector<bool> vu que c'est pas bool& mais jeanjacktype qui simule bool& ça part en couille et tu te retrouves avec une référence

Soit dit en passant, j'espère sincèrement pour toi que tu n'es pas dans une CPP.

Dans une CPP ? Mais sinon simple étudiant, donc pas pisseur pro de cpp si c'était la question

Putain le con, CPP a fourché dans ma tête avec CCP. Désolé.

Ccp les écoles d'ingés ? Ou ca veut dire s2i ?

Napolissouu10
2021-04-14 21:08:14

https://image.noelshack.com/fichiers/2021/14/6/1618059281-ahi-taxi-driver-2.pngL'op qui vient tout fier faire son topic en mode grand chevalier déter et qui tombe de son cheval en arrivant à la porte de la taverne

Incas-L1
2021-04-14 21:08:57

def swap(a,b):
a,b = b,a

Aussi simple que ça en python :oui:

Infos
Gestion du forum

contact@geevey.com

API disponible. Utilisez le paramètre "api" en GET, peu importe le contenu, sur une page du site.

Notes

    Partenaire: JVFlux
    Ce site n'est pas associé à Jeuxvideo.com ou Webedia. Nous utilisons seulement des archives publiques.
    Il est inutile de me spammer par e-mail pour supprimer un topic. Au contraire, en conséquence, je mettrais votre topic dans le bloc ci-dessous.
Non-assumage
    Personne n'a pas assumé de topic pour le moment.