Pourquoi ne puis-je pas écrire le code suivant? prog.cpp: In function 'bool touch(const string&)':
prog.cpp:6:52: error: cannot convert 'std::ofstream {aka std::basic_ofstream<char>}' to 'bool' in return
return std::ofstream(file_path, std::ios_base::app);
3 Réponses :
C'est a opérateur bool () code> est défini comme
explicite code> que vous ne pouvez pas l'utiliser de cette manière. Le seul contexte où un opérateur
bool () code> est automatiquement appelé est destiné à des conditionnels sans ambiguïtés, tels que
si code>
pendant code>,
?: < / Code>,
! code> et l'expression médiane de
pour code>. (Pour un résumé plus complet, voir ma question quand puis-je utiliser Explicit
Opérateur BOOL CODE> SANS CAST?
). P>
Retour code> La valeur de l'instruction n'est jamais convertie contextuellement en
bool code> em>, donc si vous souhaitez convertir
std :: destream Code> to
BOOL code> comme valeur de retour, vous devez utiliser em> utiliser
static_cast
Comme l'opérateur est déclaré comme explicite et qu'il n'existe aucun contexte qui permet de convertir implicite à Bool (comme par exemple l'utilisation de l'instruction IF), vous devez convertir l'expression avec le flux vers bool code> explicitement.
Par exemple
La définition de Notez l'utilisation de Explicit ici, cela signifie qu'il n'y a pas de casting automatique de la classe à Bool. Cela signifie que pour votre code, vous devez le faire: p> Peu importe quoi, une distribution est requise (de préférence opérateur bool code> ressemble à ceci:
static_cast
Comme l'opérateur est explicite et qu'il n'y a pas de contexte à convertir à Bool implicitement, vous devez convertir explicitement BOOL. :)
Explicit ne fait pas convertir à Bool, sauf si vous invoquez directement CAST.
retour !! code> fonctionne ici.