这取自实用程序员的练习19。
快速检查现实。哪些“不可能”的事情会发生?:
少于28天的月份
stat(“。”,& sb)== -1(即无法访问当前目录)
在C ++中:a = 2; b = 3; if (a + b != 5) exit(1);
内角为≠180°的三角形
没有60秒的分钟
在Java中:(a + 1) <= a
我有一些答案,但我不认为我的答案是“正确的”(从某种意义上说,这是作家在撰写问题时所考虑的答案)。
这是我的尝试:
2) - 我想我们可以跳过这个,而不是理解问题 -
3)我不了解C ++,但它是否与线程和volatile变量(如Java)有关?
4)不可能......
5)Due to occurence of leap Seconds
6)
double a = 100000000000000001d;
我想知道是否有人知道这些问题的正确的答案?
答案 0 :(得分:13)
3:如果a和b属于类类型,则重载运算符+可以执行任何(或重载赋值运算符,或运算符!=,或者甚至是隐式转换运算符)。
4:曲面上的三角形的内角总和不是180。
6:a。溢出。
问题的关键是恕我直言,以证明很多“不可能”的事情确实发生了,并且当你在非常防守的情况下编程时,你可能不仅仅是偏执狂。
答案 1 :(得分:6)
2
很容易发生。例如如果您在进入目录时删除目录,然后执行某些操作。许多程序实际上处理这个。
noufal@sanitarium% ls
noufal@sanitarium% cd
noufal@sanitarium% mkdir /tmp/foo
noufal@sanitarium% cd /tmp/foo
noufal@sanitarium% touch x
noufal@sanitarium% ls
x
noufal@sanitarium% rm -Rf /tmp/foo
noufal@sanitarium% ls
noufal@sanitarium% touch x
touch: cannot touch `x': No such file or directory
答案 2 :(得分:3)
nr 5发生在leap seconds
的情况下