IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

mot cle const


Sujet :

C++

  1. #41
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    Le sens contraire... ce que j'ai d'ailleurs dit « il est exceptionnel que le problème vienne du fait que tu as fait un passage par valeur d'un entier au lieu d'une référence constante ».
    Effectivement j'ai lu un peu vite ceci. Je suis en train de parler de l'inverse depuis tout à l'heure.

    pour résumer :

    sizeof(T) > ptr_size -> préférer ref const
    sizeof(T) =< ptr_size -> préférer valeur

  2. #42
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    C'est tout à fait ça. Nous étions en fait tous d'accord.
    Juste un petit problème de communication

  3. #43
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par corrector Voir le message
    Que ma thèse soit bien claire :

    void f (int);
    ne sera jamais moins efficace que

    void f (const int&);
    As tu fait des tests comparatifs concluant ?
    (clin d'oeil à Corrector qui aime répondre par une question)

  4. #44
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par corrector Voir le message
    Il faudrait écrire "perte par rapport à" pour m'éviter ce genre de doutes...
    Et il faudrait aussi parler de quel type de performance.

    Menfinbon au final le point n'était pas de parler de performances mais d'un problème de sûreté.

    En fait tout le monde est d'accord sur les performances non ?

  5. #45
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par Garulfo Voir le message
    As tu fait des tests comparatifs concluant ?
    Tu connais des tests comparatifs qui permettent de prouver une proposition quantifiée universellement?

    Citation Envoyé par Garulfo Voir le message
    (clin d'oeil à Corrector qui aime répondre par une question)
    Touché.

  6. #46
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par babar63 Voir le message
    Pour moi le const est utilisé pour associer une propriété à une donnée et non comme un moyen plus sûr, il permet une meilleur lecture du code, (d'ailleurs si je ne me trompe pas le compilateur apprécie aussi ) ... Mais ça c'est une question de point de vue je suppose
    Je crois que tu te trompes sur le sens qu'on peut associer à un paramètre référence constante ou pointeur constant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void f (const std::string &s); // s n'est pas modifié
    C'est ce que tu comprends?

    (Note : bien sûr, c'est une promesse morale. Avec const_cast, derrière, la fonction peut faire ce qu'elle veut. Ça n'est pas la question ici : je considère la promesse implicite d'écrire const dans un prototype.)

    Précisons ce que "pas modifié" veut dire : soit l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // string x; // x est une chaine, déclarée quelque part 
    f (x); // ne modifie pas x
    On veut dire que x a la même valeur après qu'avant (Hoare es-tu là?) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string __old_x = x; // on ajoute une variable imaginaire __old_x
    f (x); // ne modifie pas x
    assert (x == __old_x);
    Toujours d'accord?

    Et bien non, const n'est pas du tout supposé servir à ça!

    Peux-tu donner un exemple de f qui ne tient pas cette "promesse" illusoire?

  7. #47
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par NiamorH Voir le message
    Effectivement j'ai lu un peu vite ceci. Je suis en train de parler de l'inverse depuis tout à l'heure.
    Ouch!

    J'ai bien fais de demander un éclaircissement!

    (Je pense qu'entre l'affichage non-"threadé", et le fait que le bouton "Citer" enlève automatiquement les QUOTE imbriquées dès le 2ème niveau, on perd facilement le contexte, donc il vaut mieux faire des réponses compréhensibles en elles-mêmes dans les discussions complexes.)

    Citation Envoyé par NiamorH Voir le message
    pour résumer :

    sizeof(T) > ptr_size -> préférer ref const
    sizeof(T) =< ptr_size -> préférer valeur
    Attention, std::string peut très bien être implémentée comme contenant juste un pointeur; c'est même une implémentation évidente.

    Aussi, toutes les classes implémentées en terme de "pimpl" vont être définies par un seul pointeur.

    Cela ne veut pas dire que la copie va être rapide!

    sizeof petit != copie triviale.

    A contrario, vaut-il mieux passer un double en const &, donc en général[1] en registre d'adresse[2][3], ce qui augmente la pression sur ces registres, que par valeur, donc en général en registre flottant[3]? (Ce qui évitera une indirection pour lire le flottant.)

    Notes :
    [1] ça dépend des conventions d'appel, évidemment
    [2] "registre d'adresse" = registre où on met une adresse!
    [3] ou sur la pile s'ils sont déjà tous réservés

  8. #48
    Provisoirement toléré
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par Garulfo Voir le message
    As tu fait des tests comparatifs concluant ?
    Très sérieusement, peux-tu imaginer un scénario où ça ne serait pas vrai?

Discussions similaires

  1. [debutant] le mot clé const
    Par r0d dans le forum Débuter
    Réponses: 12
    Dernier message: 21/06/2006, 16h13
  2. Recherche par mots cles
    Par Seth77 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/03/2006, 15h58
  3. [deb]Mot cle tyledef complement d'info
    Par Marc_3 dans le forum C++
    Réponses: 9
    Dernier message: 11/12/2005, 22h12
  4. [Mots cles]Signification de transient et volatile
    Par Pill_S dans le forum Langage
    Réponses: 2
    Dernier message: 14/07/2004, 11h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo