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 :

[C++] constructions temporaires


Sujet :

C++

  1. #1
    b4u
    b4u est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Par défaut [C++] constructions temporaires
    (Re)bonsoir,
    est-ce que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	void test(const char *val)
    	{
    		int n;
    		std::string str(val);
    		std::istringstream strs(str);
    		strs >> n;
    	}
    peut être réduit en:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	void test(const char *val)
    	{
    		int n;
    		std::istringstream(std::string(val)) >> n;
    	}
    les deux syntaxes sont équivalentes?

    Pourquoi par contre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	void test(const char *val)
    	{
    		int n;
    		std::istringstream strs(std::string(val));
    		strs >> n;
    	}
    donne une erreur de compilation
    error C2296: '>>' : illegal, left operand has type 'std::istringstream (__cdecl *)(std::string)'?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Par défaut
    Ca m'a surpris e voir ça.
    J'ai testé sous mingw et vc8 : l'erreur existe.
    j'ai vérifié la grammaire du C++, et en effet ça n'a pas la signification que l'on pense.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::istringstream strs(std::string(val));
     
    // est équivalent à
     
    std::istringstream strs(std::string val);
    C'est une déclaration de fonction !


    Pour réaliser ce que tu souhaites, il faut forcer l'évaluation de std::string(val) avec une paire de parenthèses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::istringstream strs( (std::string(val)) );

  3. #3
    b4u
    b4u est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Par défaut
    Ok, merci
    Et les trois notations sont correctes pour arriver au résultat (conversion const char * vers int), ou il y a des différences subtiles?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par défaut
    Citation Envoyé par Volune
    Pour réaliser ce que tu souhaites, il faut forcer l'évaluation de std::string(val) avec une paire de parenthèses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::istringstream strs( (std::string(val)) );
    Ou tout simplement utiliser la conversion par défaut, sans faire d'appel explicite au constructeur de *string*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::istringstream strs(val);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JBuilder 7] Construction d'executable natif
    Par renaudfaucon dans le forum JBuilder
    Réponses: 3
    Dernier message: 24/11/2006, 22h28
  2. Desactiver temporairement les contraintes
    Par maitrebn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 05/10/2006, 17h58
  3. [JBuilder 9] Construction d'exécutables natifs
    Par jamloum dans le forum JBuilder
    Réponses: 3
    Dernier message: 10/10/2003, 11h16
  4. [jAPI]Probleme de construction
    Par exe dans le forum C++Builder
    Réponses: 10
    Dernier message: 07/08/2003, 10h03
  5. Ensemble de données temporaires
    Par pascalT dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/03/2003, 07h22

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