Operator stackoverflow

7

Betrachten Sie den folgenden Code:

%Vor%

Warum in aller Welt:

  • gibt Visual 2010 eine C4717-Warnung im Operator aus %Code%
  • stürzt << bei Stackoverflow ab, wie von Visual? vorhergesagt?

Btw, ersetzt std::cout << textMsgInstance; durch m.text funktioniert.

    
Calvin1602 01.06.2011, 15:45
quelle

3 Antworten

14

Ich vermute, dass Sie #include <string> nicht geschafft haben. Wenn der Compiler also ein std::string ausgibt, kann er das nicht und beginnt nach impliziten Konvertierungen zu suchen - und Ihr impliziter Konstruktor zu einer TextMessage sieht nur wie die Rechnung aus. Aber warten Sie - jetzt geben wir eine TextMessage in der Ausgabefunktion von TextMessage und bam aus.

    
Puppy 01.06.2011, 15:48
quelle
6

Ich kann mir nur vorstellen, dass es keinen Operator & lt; & lt; Für std :: string sucht es also nach einer Konvertierung und findet den einen Argumentkonstruktor TextMessage (std :: string).

Es ist oft ratsam, unerwartete Aufrufe an einen Argumentkonstruktor zu verhindern, indem Sie sie explizit machen.

%Vor%

Dann wird der Konstruktor für implizite Konvertierungen nicht berücksichtigt.

    
Eelke 01.06.2011 15:53
quelle
3

Es ist weil m.text ist std::string und es wird innerhalb des Operators zu TextMessage konvertiert und der Operator wird erneut aufgerufen.

    
Dani 01.06.2011 15:48
quelle

Tags und Links