Что не так в этом отрывке кода на С++?

Отредактировано

180К открытий180К показов
Что не так в этом отрывке кода на С++?

Есть следующий код, но в нём имеется некоторая проблема.

			operator int() const {
    return *this;
}
		

А вот полный код для проверки.

			class Foo {
public:
    operator int() const {
        return *this;
    }
};

int main() {
    Foo foo;
    int i = foo;
    return 0;
}
		

Он скомпилируется, хотя некоторые компиляторы могут кинуть warning, сразу же объясняющий в чём суть ошибки. Но вот при запуске вы словите stack overflow. Дело в том, что operator int будет пытаться привести возвращаемое значение к типу int, что вполне можно сделать, ведь для текущего объекта у нас есть замечательный operator int, который это и делает. Т.е. функцию вызовет сама себя и будет продолжать это делать рекурсивно, пока не переполнится стек.

Следите за новыми постами
Следите за новыми постами по любимым темам
180К открытий180К показов