Après la lecture approfondie de ISO/IEC 14882, Programming language – C++ je ne sais toujours pas pourquoi const
est nécessaire pour la conversion implicite à un type défini par l'utilisateur avec un constructeur unique argument comme lePourquoi const pour conversion implicite?
#include <iostream>
class X {
public:
X(int value) {
printf("constructor initialized with %i",value);
}
}
void implicit_conversion_func(const X& value) {
//produces "constructor initialized with 99"
}
int main (int argc, char * const argv[]) {
implicit_conversion_func(99);
}
À partir de l'article 4 ligne 3
Une expression e peut être implicitement convertie en un type T si et seulement si la déclaration T t = e; est bien formé, pour une variable temporaire inventée t (8.5). Certaines constructions de langage requièrent qu'une expression soit convertie en une valeur booléenne. Une expression e apparaissant dans un tel contexte est dite convertie contextuellement en bool et est bien formée si et seulement si la déclaration bool t (e); est bien formé, pour une variable temporaire inventée t (8.5). L'effet de la conversion implicite est le même que l'exécution de la déclaration et de l'initialisation, puis l'utilisation de la variable temporaire comme résultat de la conversion. Le résultat est une lvalue si T est un type de référence lvalue (8.3.2), et une valeur rvalue sinon. L'expression e est utilisée comme lvalue si et seulement si l'initialisation l'utilise comme lvalue.
Après que je trouve la section sur les initialiseurs liés à des types définis par l'utilisateur dans 8.5 ligne 6
Si un programme appelle à l'initialisation par défaut d'un objet d'un type const qualifié T, T doit être un type de classe avec un constructeur par défaut fourni par l'utilisateur.
Enfin, je fini à 12.3 ligne 2 sur les conversions définies par l'utilisateur qui dispose
conversions définies par l'utilisateur sont appliquées que si elles sont sans ambiguïté (10.2, 12.3.2).
Inutile de dire que 10.2 et 12.3.2 n'ont pas répondu à ma question.
- Quelqu'un peut-il faire la lumière sur l'effet
const
a sur les conversions implicites? - Est-ce que l'utilisation de
const
rend la conversion "uniboque" par 12.3 ligne 2? - Est-ce que
const
affecte d'une manière ou d'une autre la valeur de lvalue par rapport à la valeur mentionnée à la section 4?
N'aimes-tu pas le C++? –