หากต้องการขยายความคิดเห็นของฉันข้อความในหนังสือเล่มนั้นไม่ชัดเจนซึ่งทำให้ปัญหาสับสน
ตามที่ฉันแสดงความคิดเห็นหนังสือเล่มนั้นพยายามจะพูดว่า "ขอให้มีลิงจำนวนไม่ จำกัด เพื่อเขียนทุกฟังก์ชัน C ++ ที่เป็นไปได้ซึ่งสามารถเขียนได้จะมีบางกรณีที่ถ้าเราเลือกตัวแปรที่ (ฟังก์ชันเฉพาะบางอย่างที่ลิงเขียน) ใช้เราไม่สามารถสรุปได้ว่าฟังก์ชันจะเปลี่ยนตัวแปรนั้นหรือไม่ "
แน่นอนสำหรับบางฟังก์ชั่น (แม้กระทั่งหลายอย่าง) ในแอปพลิเคชันใด ๆ สิ่งนี้สามารถกำหนดได้โดยคอมไพเลอร์และทำได้ง่ายมาก แต่ไม่ใช่สำหรับทุกคน (หรือจำเป็นที่สุด)
ฟังก์ชันนี้สามารถวิเคราะห์ได้อย่างง่ายดาย:
static int global;
void foo()
{
}
"foo" ไม่แก้ไข "global" อย่างชัดเจน มันไม่ได้ปรับเปลี่ยนอะไรเลยและคอมไพเลอร์สามารถทำงานนี้ได้อย่างง่ายดาย
ฟังก์ชันนี้ไม่สามารถวิเคราะห์ได้:
static int global;
int foo()
{
if ((rand() % 100) > 50)
{
global = 1;
}
return 1;
เนื่องจากการกระทำของ "foo" ขึ้นอยู่กับค่าที่สามารถเปลี่ยนแปลงได้ในขณะรันไทม์จึงไม่สามารถระบุได้ในขณะคอมไพล์ว่าจะแก้ไข "global" หรือไม่
แนวคิดทั้งหมดนี้เข้าใจง่ายกว่าที่นักวิทยาศาสตร์คอมพิวเตอร์กำหนดไว้ หากฟังก์ชันสามารถทำสิ่งที่แตกต่างไปจากสิ่งที่สามารถเปลี่ยนแปลงได้ในขณะรันไทม์คุณจะไม่สามารถคำนวณได้ว่าจะทำอะไรจนกว่าจะทำงานและทุกครั้งที่เรียกใช้ฟังก์ชันอาจทำบางอย่างที่แตกต่างออกไป ไม่ว่าจะเป็นไปไม่ได้ที่พิสูจน์ได้หรือไม่ก็เป็นไปไม่ได้อย่างชัดเจน