La programmation en C++ moderne

Apprenez la programmation de zéro jusqu'à l'infini !

a marqué ce sujet comme résolu.

A mon avis, "référence constante" ne veut pas dire grand chose.

Dans l'absolue, oui, c'est une "référence vers un objet const". Mais c'est largement entré dans le langage courant de dire "référence constante".

Oui, je pense bien, même si de mon côté j'ai toujours dit "référence vers constante". ^^ Mais en fait c'est surtout le passage "référence constante vers une variable constante ou non" qui m'a dérangé, je pense qu'il faudrait au moins préciser que l'expression "référence constante" signifie "référence vers une variable considérée comme constante".

Ce n'est plus vrai, il y a eu un changement.

N3922 n'est qu'un proposal, ce n'est pas dans les normes C++11/14. Ca devrait être dans le C++17 […]

gbdivers

Ah, au temps pour moi. A vrai dire, j'ai remarqué ce changement en testant le type d'une variable initialisée de cette nouvelle manière (auto a {3};) et le type était bel et bien int avec GCC 5.2, donc je ne m'étais pas trop attardé sur les détails de ce proposal et je l'avais considéré comme déjà accepté par la norme actuelle.

Avec Clang 3.7 (Coliru), avec le code :

1
2
auto a {3};
std::cout << a << std::endl;

affiche l'erreur :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
main.cpp:70:12: warning: direct list initialization of a variable with a deduced type will 
change meaning in a future version of Clang; insert an '=' to avoid a change in behavior 
[-Wfuture-compat]
    auto a {3};
           ^
           =
main.cpp:71:15: error: invalid operands to binary expression ('ostream' (aka
'basic_ostream<char>') and 'std::initializer_list<int>')
    std::cout << a << std::endl;
    ~~~~~~~~~ ^  ~

Mais effectivement, avec GCC 5.2 (sur Coliru aussi), cela ne produit pas de warning.

Après recherche : http://llvm.org/releases/3.6.0/tools/clang/docs/ReleaseNotes.html et http://scottmeyers.blogspot.co.uk/2015/09/thoughts-on-vagaries-of-c-initialization.html

An upcoming change to C++ <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3922.html>_ changes the semantics of certain deductions of auto from a braced initializer list. Following the intent of the C++ committee, this change will be applied to our C++11 and C++14 modes as well as our experimental C++17 mode. Clang 3.6 does not yet implement this change, but to provide a transition period, it warns on constructs whose meaning will change. The fix in all cases is to add an = prior to the left brace.

Several compilers have implemented N3922. In fact, it can be hard—maybe even impossible— to get such compilers to adhere to the C++14 standard, even if you want them to. GCC 5.1 follows the N3922 rule even when expressly in C++11 or C++14 modes, i.e., when compiled with -std=c++11 or -std=c++14. Visual C++ 2015 is similar: type deduction is performed in accord with N3922, even when /Za ("disable language extensions") is used.

Donc c'est un peu vicieux. C'est bien du C++1z, mais considéré comme une erreur du C++11/14. Du coup, les compilateurs activent cette option par défaut quand on active C++11/14… Donc ok, on peut effectivement le mettre dans un cours C++11/14.

+0 -0

Oui, je pense bien, même si de mon côté j'ai toujours dit "référence vers constante". ^^ Mais en fait c'est surtout le passage "référence constante vers une variable constante ou non" qui m'a dérangé, je pense qu'il faudrait au moins préciser que l'expression "référence constante" signifie "référence vers une variable considérée comme constante".

Olybri

C'est vrai que ce passage est peu clair. Je vais essayer de le reformuler, et d'y ajouter un exemple de code. Une fois que j'aurais fini la première partie, je reviendrai sur tout ça.

+0 -0

Bonjour les agrumes !

La bêta de votre tutoriel « La programmation en C++ moderne » a été mise à jour et coule sa pulpe à l'adresse suivante :

Merci d'avance pour vos commentaires.

P.S : Ce n'est pas pour être lourd, mais vos avis sur le tutoiement/vouvoiement sont toujours attendus ;)

+0 -0

Entre tutoiement et vouvoiement, je suis plus pour le vouvoiement, non pas pour une plus grande politesse, mais plutôt pour représenter un groupe entier de lecteurs.

Le tutoiement, c'est trop personnel je trouve. Le tutoriel risquerait d'avoir un air de "réponse à une question sur un forum", ou de discussion privée.

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