Die Dokumentation zu Boost Variant sagt Folgendes über den Konstruktor, der einen beliebigen Typ akzeptiert:
%Vor% Das Gleiche gilt für die Konstruktoren, die const T&
und T&&
akzeptieren. Also ich erwarte, dass der folgende Code nicht kompiliert:
Aber der Code kompiliert und v
wird zu einem bool, was ich definitiv nicht wollte. Natürlich besteht die Lösung darin, das String-Literal in einen std::string
-Konstruktor zu schreiben. Meine Frage ist:
const char*
sowohl in std::string
als auch in bool
konvertierbar ist)? Im Allgemeinen verlieren benutzerdefinierte Conversions den Prozess der Überladungsauflösung in Standardkonvertierungen.
Es gibt eine integrierte Konvertierung von const char
pointers nach bool
, was gegenüber der nicht integrierten Konvertierung von const char *
in std::string
bevorzugt ist (zB siehe Implizite Conversions ).
std::string
ist, obwohl es sich um einen Teil der Standardbibliothek handelt, kein eingebauter Typ, daher werden seine Konvertierungskonstruktoren nur nach Konvertierungen in integrierte Typen berücksichtigt.
Einige Referenzen:
Tags und Links c++ boost boost-variant