Пример переполнения стека на C++
2026-03-10 21:47 Diff

Теги: c++, stack overflow, переполнение стека

Представьте, что у вас есть кусочек кода следующего содержания:

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, который, собственно говоря, это и делает.

Таким образом, функция вызывает сама себя и продолжает это делать рекурсивно, то есть до тех пор, пока стек не переполнится.