Это самостоятельная инициализация действует?
у меня есть этот вопрос, о котором я думал ранее, но решил, что это не тривиально ответить
int x = x + 1;
int main() {
return x;
}
мой вопрос заключается в том, является ли поведение программы определенным или неопределенным, если оно действительно вообще. Если он определен, это значение x
известно в main
?
4 ответа:
Я уверен, что он определен, и x должен иметь значение 1. §3.6.2 / 1 гласит: "объекты со статической длительностью хранения (3.7.1) должны быть инициализированы нулем (8.5) до любой другой инициализации."
после этого, я думаю, что все довольно просто.
мой вопрос заключается в том, является ли поведение программы определенным или неопределенным, если оно действительно вообще. Если он определен, известно ли значение x в main?
этот код наверняка не чистый, но для меня он должен работать предсказуемо.
int x
помещает переменную в сегмент данных, который определяется как ноль при запуске программы. Раньшеmain()
, вызываются статические инициализаторы. Ибоx
вот кодx = x + 1
.x = 0 + 1 = 1
. Таким образом основное() вернется 1.код определенно будет работать непредсказуемым образом, если
x
- локальная переменная, выделенная в стеке. Состояние стека, в отличие от сегмента данных, в значительной степени гарантированно содержит неопределенный мусор.