Для розширення моїх коментарів, текст цієї книги незрозумілий, що заплутує проблему.
Як я коментував, ця книга намагається сказати: "давайте отримаємо нескінченну кількість мавп, щоб написати кожну можливу функцію C ++, яку можна було б коли-небудь записати. Будуть випадки, коли ми виберемо цю змінну (якусь певну функцію написали мавпи) використовує, ми не можемо визначити, чи змінить функцію цю змінну. "
Звичайно, для деяких (навіть багатьох) функцій у будь-якій програмі це може бути визначено компілятором, і це дуже легко. Але не для всіх (або обов'язково більшості).
Цю функцію можна легко проаналізувати:
static int global;
void foo()
{
}
"foo" явно не змінює "глобальний". Він взагалі нічого не модифікує, і компілятор може це зробити дуже легко.
Цю функцію неможливо так проаналізувати:
static int global;
int foo()
{
if ((rand() % 100) > 50)
{
global = 1;
}
return 1;
Оскільки дії "foo" залежать від значення, яке може змінюватися під час виконання , воно очевидно не може бути визначене під час компіляції чи буде воно модифікувати "глобальне".
Всю цю концепцію зрозуміти набагато простіше, ніж комп'ютерні вчені. Якщо функція може робити щось інше на основі того, що речі можуть змінюватися під час виконання, тоді ви не можете розробити те, що вона буде робити, доки вона не запуститься, і кожен раз, коли вона запускається, вона може робити щось інше. Незалежно від того, неможливо це чи ні, очевидно неможливо.