CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

(C++) const, pointeur et reference.

Fvirtman
Fvirtman
Niveau 10
13 avril 2007 à 10:22:23

Voici un petit code :

void fonc(const int*& test)
{
}

void fonc2(int* test)
{
}

int main()
{
int* t = 0;
fonc(t);
//fonc2(t);
return 0;
}

J´ai une erreur sur l´appel de fonc, impossible de caster ´int *´ en ´const int *&´
testé sous Visual C++ et gcc Linux.

Il est vrai qu´au niveau sémantique, le seul avantage de passer un pointeur par référence est de pouvoir le réallouer. Donc y mettre un const avant n´a pas d´intéret : autant passer le pointeur par recopie (sachant que passer un pointeur par recopie ou bien une référence, ça recopie toujours sizeof(void*), donc on n´y gagne pas en recopie)

Mais il y a quand meme un truc qui m´échappe : pourquoi est ce que ça ne veut pas compiler ? C´est pas bien malin de le faire, ok, mais pourquoi :

void fonc(const int*& t) // fonction
int* t; // appel
fonc(t);

ne passe pas, alors que :

void fonc(const int& t) // fonction
int t; // appel
fonc(t);

passe bien ?

godrik
godrik
Niveau 30
13 avril 2007 à 11:54:29

ahah, tu t´es fait avoir par const! :)

quand tu fais:
void fonc(const int* & test)
int* t = 0;
fonc(t);

gcc te dit:
error: invalid initialization of reference of type ‘const int*&’ from expression of type ‘int*’

mais si tu ecris:
fonc((const int*)t);
l´erreur devient:
error: invalid initialization of non-const reference of type ‘const int*&’ from a temporary of type ‘const int*’

et tout devient clair!
ce n´est pas la reference qui est constante dans: const int* & c´est la donné pointé!

tu voulais probablement ecrire:
void fonc( int* const & test)
int* t = 0;
fonc(t);

Fvirtman
Fvirtman
Niveau 10
13 avril 2007 à 12:26:07

Arf !

La priorité des opérateurs !
C´est vrai que moi, j´y voyais comme ça implicitement :

void fonc(const (int*) & )

et le compilo comme ça :

void fonc((const int*) & )

Ceci explique cela :-)

Cela dit, ce n´était pas quelque chose de bloquant pour moi, c´était juste un test tordu, et je ne comprenais pas la réaction du compilo :)
Je comprends mieux maintenant !

:merci:

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment