Der folgende Code wird aufgrund der impliziten Konvertierung für char
kompiliert. Ich bin mir nicht sicher warum, denn die einzige implizite Konvertierung, die ich erwarten würde (und von der ich erwarte, dass sie scheitert), ist von char const*
bis size_t
.C++ unerwartete implict Konvertierung
#include <cstddef>
struct foo
{
int operator[](size_t i) const { return 1; }
operator char() const { return 'a'; }
};
int main()
{
foo f;
f["hello"]; // compilation error desired here
}
Was ist die implizite Konvertierung hier, die dies kompilieren lässt? Wenn ich operator char
entferne oder es explicit
mache, dann schlägt die Kompilierung an der gewünschten Stelle fehl. Die Klasse, aus der dieser Code extrahiert wird, benötigt sowohl die implizite Konvertierung als auch die operator[]
. Gibt es eine Möglichkeit, das Verhalten zu verhindern, ohne die Konvertierung explizit zu machen?
Haben Sie versucht, das Hinzufügen ein privater 'operator [] (char const *)'? –