explicit-conversion

___ qstnhdr ___ Ist "if (getline (fin, str)) {}" konform mit dem C ++ 11 Standard? ___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ answer14720925 ___

Der Code ist konform. Der explizite Konvertierungsoperator in %code% wird aufgerufen, wenn das Objekt automatisch als -Bedingung verwendet wird. Die Änderung des Standards sollte den gleichen Gebrauch beibehalten und gleichzeitig etwas sicherer machen.

    
___ tag123c11 ___ C ++ 11 ist eine 2011 verabschiedete Version des C ++ - Sprachstandards. Sie hat viele Änderungen und Ergänzungen der Kernsprache sowie der verbesserten und erweiterten C ++ - Standardbibliothek vorgenommen. ___ tag123typeconversion ___ Die Typkonvertierung ist die Art und Weise, wie eine Entität eines Datentyps implizit oder explizit in eine andere geändert wird. Dies geschieht, um bestimmte Merkmale von Typhierarchien oder Typendarstellungen auszunutzen. ___ tag123iostream ___ Die C ++ iostream-Bibliothek ist eine objektorientierte Bibliothek, die über Streams Ein- und Ausgabefunktionen bereitstellt. Die Iostreams-Klassen unterstützen typsichere I / O-Typen und können zur Unterstützung benutzerdefinierter Typen durch Überladen der Operatoren >> und << erweitert werden. ___ answer14721494 ___

%code% (und nur %code% ) hat eine spezielle Sprache, die es ermöglicht, dass sie implizit in eine %code% in bestimmten Umständen umgewandelt wird. Die Spezifikationssprache für diese Konvertierung wird "kontextuell in %code% " konvertiert.

Dies sind die Orte, an denen die Sprache boolesche Tests durchführt. Der von %code% verwendete bedingte Ausdruck wird "kontextuell in %code% " konvertiert. Ebenso wie die logischen Operatoren und der bedingte Operator ( %code% ).

So, während Sie diese nicht tun können:

%Vor%

Sie können dies tun:

%Vor%     
___ tag123explicitumversion ___ Dieses Tag behandelt das C ++ - Schlüsselwort 'Explicit'. ___ qstntxt ___

Ich überprüfte den C ++ 11-Standard und fand folgende Fakten:

  1. %code% gibt ein %code% -Objekt zurück, dessen Klasse eine Mitgliedsfunktion %code%

  2. hat
  3. Die Klasse %code% hat keine Memberfunktion %code% als pre-C ++ 11.

Also, ich denke, dass %code% nicht standardkonform ist. Es sollte als

geschrieben werden

%code% . (VC ++ 2012 warnt jedoch vor dieser Verwendung. D. H. Force void * to bool)

Habe ich Recht?

    
___ answer14721483 ___

David hat Recht, und hier sind die Zitate, um ihn zu unterstützen. In §12.3.2 / 2 heißt es im Standard

  

Eine Konvertierungsfunktion kann explizit (7.1.2) sein, in diesem Fall wird sie nur als a betrachtet   benutzerdefinierte Konvertierung für direkte Initialisierung (8.5). Andernfalls benutzerdefinierte Konvertierungen   sind nicht auf die Verwendung in Zuweisungen und Initialisierungen beschränkt. [ Beispiel :

%Vor%      

- Ende Beispiel ]

Einige Stellen, an denen diese kontextabhängige Konvertierung stattfindet, befinden sich im Operanden in %code% , in den Operanden in %code% und in der Bedingung in %code% .

So kann Initialisierung von expliziten Konvertierungsoperatoren und in §4 / 3

verwendet werden
  

Ein Ausdruck e kann implizit in einen Typ %code% konvertiert werden, wenn und nur wenn   Die Deklaration %code% ist wohlgeformt, für einige erfundene temporäre   Variable t (8.5). Bestimmte Sprachkonstrukte erfordern, dass a   Ausdruck wird in einen booleschen Wert umgewandelt. Ein Ausdruck e erscheint   In einem solchen Kontext wird gesagt, dass es kontextabhängig in bool umgewandelt wird und ist   wohlgeformt, wenn und nur wenn die Deklaration %code% wohlgeformt ist ,   für einige erfundene temporäre Variablen %code% (8.5) ...

Wie Sie sehen können, gibt der Standard eine direkte Initialisierung für kontextabhängige Conversions vor, weshalb explizite Konvertierungen in %code% conditions funktionieren.

    
___
4
Antworten

Erweiterungsmethode und explizites Casting

Ich verwende eine Klasse aus einer Assembly (Quellcode ist nicht verfügbar), daher ist es nicht möglich, ihren Code zu ändern Ich muss eine Erweiterungsmethode für den expliziten Darsteller hinzufügen, gibt es eine Möglichkeit, dies zu erreichen...
29.11.2011, 06:08
4
Antworten

isSet () oder operator void * () oder explizite opertor bool () oder etwas anderes?

Was ist der Stand der Technik über Funktionen, um zu überprüfen, ob ein Wert gesetzt ist oder nicht ? Beispielsweise analysiert der folgende Iterator Zellen. Einige Zellen enthalten einen Wert, andere Zellen sind leer. Was ist der bequ...
23.05.2017, 12:32
3
Antworten

Ist "if (getline (fin, str)) {}" konform mit dem C ++ 11 Standard?

Ich überprüfte den C ++ 11-Standard und fand folgende Fakten: std::getline(fin, str) gibt ein basic_ios -Objekt zurück, dessen Klasse eine Mitgliedsfunktion explicit operator bool() const; hat Die Klasse basic_ios hat keine...
06.02.2013, 03:18
3
Antworten

Unterschied zwischen impliziter Konvertierung und expliziter Konvertierung [duplizieren]

Was ist der Unterschied zwischen "impliziter Konvertierung" und "expliziter Konvertierung"? Ist der Unterschied in Java und C ++ anders?     
25.09.2011, 07:31
3
Antworten

C # Expliziter Operator und Objekt

FRAGE Bitte schauen Sie zuerst auf den Code. Hier ist meine benutzerdefinierte Klasse: %Vor% Und hier ist der Testcode, den ich geschrieben habe: %Vor% Wie Sie sehen, konnte der Wert nicht konvertiert werden, wenn der Werttyp nic...
17.12.2013, 13:11