Para expandir meus comentários, o texto desse livro não é claro, o que ofusca a questão.
Como comentei, esse livro está tentando dizer: "vamos obter um número infinito de macacos para escrever todas as funções C ++ concebíveis que possam ser escritas. Haverá casos em que se escolhermos uma variável que (alguma função particular que os macacos escreveram) usa, não podemos descobrir se a função irá alterar essa variável. "
É claro que, para algumas (até mesmo muitas) funções em qualquer aplicativo, isso pode ser determinado pelo compilador e muito facilmente. Mas não para todos (ou necessariamente para a maioria).
Esta função pode ser facilmente analisada:
static int global;
void foo()
{
}
"foo" claramente não modifica "global". Ele não modifica absolutamente nada, e um compilador pode resolver isso facilmente.
Esta função não pode ser analisada desta forma:
static int global;
int foo()
{
if ((rand() % 100) > 50)
{
global = 1;
}
return 1;
Uma vez que as ações de "foo" dependem de um valor que pode mudar em tempo de execução , ele patentemente não pode ser determinado em tempo de compilação se irá modificar "global".
Todo esse conceito é muito mais simples de entender do que os cientistas da computação fazem parecer. Se a função pode fazer algo diferente com base em coisas que podem mudar no tempo de execução, então você não pode descobrir o que ela fará até que seja executada, e cada vez que for executada, pode fazer algo diferente. Independentemente de ser impossível ou não, é obviamente impossível.