Start
prog.cc:8:22: error: non-constant-expression cannot be narrowed from type 'size_t' (aka 'unsigned long') to 'char' in initializer list [-Wc++11-narrowing]
std::string s1 { s, 'A' };
^
prog.cc:8:22: note: insert an explicit cast to silence this issue
std::string s1 { s, 'A' };
^
static_cast<char>( )
1 error generated.
1
Finish
GCC :
Start
prog.cc: In function 'int main()':
prog.cc:8:22: warning: narrowing conversion of 's' from 'size_t' {aka 'long unsigned int'} to 'char' [-Wnarrowing]
8 | std::string s1 { s, 'A' };
| ^
prog.cc:8:22: warning: narrowing conversion of 's' from 'size_t' {aka 'long unsigned int'} to 'char' [-Wnarrowing]
A
A
0
Finish
Il faut savoir que lorsqu'il existe un constructeur par initializer_list, il est prioritaire avec l'initialisation avec {}. En particulier, le compilateur preferera essayer de convertir les arguments pour qu'ils puissent etre dans l'initializer_list plutot que d'appeler un constructeur qui a des parametres plus adaptes.
Perso, la regle que j'utilise, c'est :
{} = des valeurs qu'on veut mettre dans les variables
int i { 123 };
vector<int> v { 1, 2 }; // on s'attend a trouver
// les valeurs 1,2 dans le tableau
() = appelle d'un constructeur specifique (c'est la meme syntaxe qu'un appel de fonction)
vector<int> v(1, 2); // on ne s'attend pas forcement a trouver
// les valeurs 1,2 dans le tableau
× 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.
GitHub
Discord NaN. Mon site.