Type auto (variables C++)

a marqué ce sujet comme résolu.

Bonsoir

Débutant la programmation en C++, je suis bloqué au niveau de la déclaration des variables en type auto (afin de remplacer les types int, double etc).

En effet, lorsque je déclare ma variable en auto et que je souhaite avec une sortie standard, afficher cette dernière, j’ai plusieurs erreurs de compilation.

image.png
image.png
image.png
image.png

En tâtonnant un peu, je me suis rendu compte que le problème venait des accolades qui entourent la valeur de la variable (ici une chaîne de caractères, mais cela reste valable pour du type int ou double ou autre).

image.png
image.png

Est-ce que quelqu’un saurait m’expliquer pourquoi cela fonctionne t-il chez moi comme ça ?

En vous souhaitant une bonne soirée et en vous remerciant

Cordialement

Dan1337

Tu suis quel cours ? Je te conseille le cours de ce site, si ce n’est pas celui la que tu lis.

Pour initialiser une variable qui n’est pas un tableau, il faut utiliser soit =, soit {} (ou d’autres syntaxes, mais osef), pas les 2 en meme temps.

auto text = "blabla"s;
// ou
auto text { "blabla"s };

Quand tu utilises ={}, c’est interprété comme une liste de valeurs, pour initialiser un vector par exemple. (Avec 1 seul élément dans ton cas)

int main(int argc, char* argv[])
{
    const auto v = { "blabla" };    
    for (const auto i: v) // ok, v est une liste de valeurs
        std::cout << i << std::endl;
}
+3 -0

Bonjour

Je suis le cours du site, bien évidemment ! :)

Merci pour ta réponse, du coup je n’avais pas fait attention qu’il fallait retirer le signe égal avec le type de variable "auto".

Apparemment, les deux conventions existent avec le signe mais sans les accolades et sans le signe égale mais avec les accolades.

Cela n’est valable qu’avec le type "auto" ? Parce lorsque j’initialise une variable avec un type bien défini (par exemple int) et bien, le fait d’avoir le signe égal et les accolades simultanément fonctionne très bien.

image.png
image.png

Dans tous les cas, merci encore !

Cela n’est valable qu’avec le type "auto" ? Parce lorsque j’initialise une variable avec un type bien défini (par exemple int) et bien, le fait d’avoir le signe égal et les accolades simultanément fonctionne très bien.

Oui c’est normal, je ne sais pas trop à quoi c’est dût mais en C ces deux définitions sont valides.

  int tab[] = {11};
  int number = {11};

C++ aussi j’imagine. Du coup, l’inférence de type ne peut pas vraiment savoir si tu veux avoir un int ou un tableau dje int. L’explication est légèrement plus compliqué mais basiquement, le problème est là.

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte