Конструктор с параметром bool позволяет компилировать код Java-esque

Это взорвало мой разум сегодня, пока я не понял это только компилирует с логическими параметрами.

#include <iostream>
using namespace std;
class Foo {
bool _param;
public:
Foo(bool param) {
_param = param;
}
void say() {
cout << "Param is "<< _param << endl;
}
};

int main() {
Foo foo = new Foo(true);
foo.say();
return 0;
}

Я также заметил, что конструктор вызывается дважды, тогда я предполагаю, что указатель, созданный «new Foo (true)», приводится к логическому значению. Это оно? Если так, то почему он не работает с другими типами параметров? Есть ли что-то еще, чего я не вижу?

0

Решение

Foo foo = new Foo(true);

эквивалентно

   Foo foo(new Foo(true));

и результат указателя new превращается в true,

Вот почему он компилируется, и у вас есть утечка памяти.

4

Другие решения

Я добавлю к πάντα ῥεῖответ. Причина, по которой это (похоже) работает только с boolявляется то, что указатели могут быть использованы с рассветом как булевы операнды. Так что неявное преобразование должно существовать.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector