Sto definendo più sovraccarichi dell'operatore assegnazione come segue:sovraccarichi booleani e stringhe dell'operatore di assegnazione (C++)
foo.h
class Foo
{
private:
bool my_bool;
int my_int;
std::string my_string;
public:
Foo& operator= (bool value);
Foo& operator= (int value);
Foo& operator= (const std::string& value);
};
Foo.cpp
// Assignment Operators.
Foo& Foo::operator= (bool value) {my_bool = value; return *this;}
Foo& Foo::operator= (int value) {my_int = value; return *this;}
Foo& Foo::operator= (const std::string& value) {my_string = value; return *this;}
Ed ecco il mio main.cpp (vedere il commento contrassegnato SURPRISE
):
Foo boolFoo;
Foo intFoo;
Foo stringFoo;
// Reassign values via appropriate assignment operator.
boolFoo = true; // works...assigned as bool
intFoo = 42; // works...assigned as int
stringFoo = "i_am_a_string"; // SURPRISE...assigned as bool, not string
std::string s = "i_am_a_string";
stringFoo = s; // works...assigned as string
// works...but awkward
stringFoo = static_cast<std::string>("i_am_a_string");
Domanda: Qualcuno può dirmi perché un valore letterale stringa non trasmesso viene valutato in un contesto booleano?
@Mooing Anatra: Perché togliere le costruttori? Li ho aggiunti per indicare intenzionalmente che una variabile può essere *** inizializzata *** tramite un costruttore e quindi *** *** riassegnata tramite un operatore di assegnazione. (Come ho visto in altri post SO, a volte è necessario *** *** entrambi.) – DavidRR
ho tagliato il codice a causa di [domande buone hanno un breve autonomo esempio compilabile] (http://sscce.org/) e [il tuo codice potrebbe essere significativamente più breve e più semplice e riprodurre ancora il problema] (http://ideone.com/W2nemc). Non ho letto la maggior parte della tua domanda la prima volta, perché aveva troppa parte del codice e ho indovinato (correttamente) che la maggior parte di essa non era correlata alla tua domanda. –
@Mooing Duck: Sì, sono molto d'accordo in linea di principio e ho considerato questo quando aggiungo i costruttori al mio esempio. Ma rimanderò al tuo giudizio qui. Tuttavia, la mia speranza è che chiunque incontri il mio commento saprà prendere in considerazione anche i relativi contructor. – DavidRR