Zmieniam starą procedurę, która używała parametru integer tak, że teraz przyjmuje referencję do obiektu. Miałem nadzieję, że kompilator powie mi, skąd funkcja jest wywoływana (ponieważ typ parametru jest nieprawidłowy), ale obiekt ma konstruktor, który pobiera liczbę całkowitą, więc zamiast niepowodzenia, kompilator tworzy obiekt tymczasowy, przekazując go integer i przekazuje odwołanie do procedury. Przykładowy kod:Jak mogę powiedzieć kompilatorowi, aby nie tworzył obiektu tymczasowego?
class thing {
public:
thing(int x) {
printf("Creating a thing(%d)\n", x);
}
};
class X {
public:
X(const thing &t) {
printf("Creating an X from a thing\n");
}
};
int main(int, char **) {
thing a_thing(5);
X an_x(6);
return 1;
}
Chcę linia do X an_x(6)
nie skompilować, ponieważ nie ma X
konstruktor, która pobiera int
. Ale to nie skompilować, a wyjście wygląda następująco:
Creating a thing(5)
Creating a thing(6)
Creating an X from a thing
Jak mogę utrzymać konstruktora thing(int)
, ale zabronić tymczasowy obiekt?
Zobacz tę odpowiedź: http://stackoverflow.com/questions/121162/what-does-the-explicit-keyword-in-c-mean – Skizz
Perfect - Piszę kod C++ przez około 15 lat i mam nigdy nie słyszałem o jawnym słowie kluczowym. Dzięki! –
Powiązane pytanie - czy możesz użyć jawnego słowa kluczowego w metodzie, która nie jest konstruktorem? –