Bonjour je suis en train de suivre le cours c++ moderne sur le site "zeste de savoir" mais il y'a quelque chose qui me tracasse l'esprit, ils disent que pour utiliser le type "auto" dans une chaîne de caractère au lieux du "std::string" il faut mettre un s obligatoirement après le contenue de la variable . exemple :
#include <iostream>
#include <string>
int main()
{
auto chaine{"du texte"s};
std::cout << chaine;
return 0;
}
or que mon code fonctionne très bien sans le "s" après ""du texte"" , j'aimerais comprendre pourquoi si quelqu'un peux m'aider.
Comme tu le sais peut-être, quand tu écrit un littérale, par exemple le nombre 10, tu peux spécifier le type de ce nombre:
10 est in entier
10u est un entier non signé
10l est un long entier
Ces "qualifiers" sont dans la norme CPP (pas besoin de using namespace ...). ici c'est un peu la même chose, mais avec la lib standard et pas dans la norme, aussi il faut ajouter using namespace std::string_literals, pour dire au compilateur où il va trouver la définition de ce "s.
Bonne continuation. Merci, si tu n'attends plus de réponse sur le sujet, de le clore (tout en haut).
(Juste une petite correction : la lib standard est dans la norme. La norme contient la partie langage et la partie lib standard - qui nécessite "std::")
Je suis encore dubitatif avec auto pour les types explicites. Pour moi auto est bien meilleur dans le cas d'une véritable expression. Sinon on va finir par écrire du python en C++
auto foo = int(1);
auto bar = std::string("aa");
git is great because Linus did it, mercurial is better because he didn't.
ça veut pas dire que c'est une mauvaise chose justement python a souvent le crédit d'être très facilement lisible, si C++ peut lui emprunter cette qualité sans trop en souffrir, pourquoi s'en priver
Pour ma part, j'utilise les déclarations explicites pour toutes les variables représentant le modèle de mon application, les infos essentielles. Après il m'arrive d'utiliser auto dans les variables intermédiaires, qu'elles proviennent d'expressions ou non.
Mais là où je trouve intéressant que le tuto suggère de déclarer ses variables avec auto, c'est que ça force à prendre le réflexe d'initialiser systématiquement et correctement les variables, ce qui est plutôt une bonne chose !
- Edité par romantik 25 octobre 2019 à 10:10:56
Dream on, Dream on, Dream until your dream comes true
Beaucoup de langages utilisent des "auto" ou équivalents (set, var, etc) et les devs n'en meurent pas. Il faut reconnaître que c'est l'habitude qui fait qu'on n'aime pas ces syntaxes, pas parce qu'elles sont objectivement moins bonne.
auto foo = 1;
auto bar = "aa"s;
Et il n'est pas nécessaire d’écrire le type. Les litterals sont suffisantes (dans ces cas) pour identifier les types.
D'ailleurs, l'utilisation de = ou de {} est aussi une question d'habitude.
A noter, dans un cours, le choix des syntaxes se basent souvent sur des raisons de progression pédagogiques, par forcement ce qu'on va rencontrer au boulot.
Beaucoup de langages utilisent des "auto" ou équivalents (set, var, etc) et les devs n'en meurent pas. Il faut reconnaître que c'est l'habitude qui fait qu'on n'aime pas ces syntaxes, pas parce qu'elles sont objectivement moins bonne.
auto foo = 1;
auto bar = "aa"s;
Et il n'est pas nécessaire d’écrire le type. Les litterals sont suffisantes (dans ces cas) pour identifier les types.
D'ailleurs, l'utilisation de = ou de {} est aussi une question d'habitude.
A noter, dans un cours, le choix des syntaxes se basent souvent sur des raisons de progression pédagogiques, par forcement ce qu'on va rencontrer au boulot.
Et ca manque de const dans tous ces codes...
- Edité par gbdivers 25 octobre 2019 à 10:20:17
Outre la question d'habitude , n'y a t-il pas quand meme une différence ( avec le = on a le constructeur qui est apellé PUIS l'operateur d'affectation et avec {} juste le constructeur ? )
Outre la question d'habitude , n'y a t-il pas quand meme une différence ( avec le = on a le constructeur qui est apellé PUIS l'operateur d'affectation et avec {} juste le constructeur ? )
Non. La copy elision est garantie par la norme maintenant. Et les compilateur faisait déjà cette optimisation par défaut.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Discord NaN. Mon site.
Discord NaN. Mon site.
git is great because Linus did it, mercurial is better because he didn't.
Discord NaN. Mon site.
Discord NaN. Mon site.