Untuk memperluas komentar saya, teks buku itu tidak jelas yang mengaburkan masalah.
Saat saya berkomentar, buku itu mencoba mengatakan, "mari kita dapatkan monyet dalam jumlah tak terbatas untuk menulis setiap fungsi C ++ yang mungkin dapat ditulis. Akan ada kasus di mana jika kita memilih variabel yang (beberapa fungsi tertentu yang ditulis monyet) menggunakan, kami tidak dapat mengetahui apakah fungsi akan mengubah variabel itu. "
Tentu saja untuk beberapa (bahkan banyak) fungsi dalam aplikasi tertentu, ini dapat ditentukan oleh kompilator, dan dengan sangat mudah. Tetapi tidak untuk semua (atau sebagian besar).
Fungsi ini dapat dengan mudah dianalisis:
static int global;
void foo()
{
}
"foo" jelas tidak mengubah "global". Itu tidak mengubah apa pun sama sekali, dan kompiler dapat mengerjakannya dengan sangat mudah.
Fungsi ini tidak bisa begitu saja dianalisis:
static int global;
int foo()
{
if ((rand() % 100) > 50)
{
global = 1;
}
return 1;
Karena tindakan "foo" bergantung pada nilai yang dapat berubah saat runtime , ia tidak dapat ditentukan pada waktu kompilasi apakah ia akan memodifikasi "global".
Keseluruhan konsep ini jauh lebih sederhana untuk dipahami daripada yang dibayangkan oleh para ilmuwan komputer. Jika fungsi dapat melakukan sesuatu yang berbeda berdasarkan hal-hal yang dapat berubah saat runtime, maka Anda tidak dapat menentukan apa yang akan dilakukannya hingga berfungsi, dan setiap kali dijalankan, fungsi tersebut dapat melakukan sesuatu yang berbeda. Apakah itu terbukti tidak mungkin atau tidak, itu jelas tidak mungkin.