关于 mustn't have done 的用法,许多人都做过研究和分析。下面引用上海外国语大学张月祥教授(章振邦主编《新编英语语法》的主要作者之一)在其《英语语法一点通》中的一个解释,供参考:
注意张月祥教授在解答中有一句特别重要的话,对于理解网友的问题很有帮助:也有人认为,推测性 must 有两个否定形式:can’t(不可能)和mustn’t(肯定不),前者 not 否定 can,后者 not 否定其后的主动词。这既适用于“ mustn’t +不定式一般式(即+动词原形)”,也适用于“ mustn’t +不定式完成式(即+ have +过去分词)”。
根据张月祥教授的分析,网友的问题选A和B都可以:
选A,即选 couldn't have spoken,表示“他不可能在今天早上的会上发了言”(因为当时他还在住院)。
选B,即选 mustn't have spoken,表示“他肯定没在今天上午的会上发言”(因为当时他还在住院)。
至于为什么不能选 shouldn't,主要是因为填它,与后面 He was in hospital at the time 不是很吻合。关于 shouldn't have done 的用法,本站有很多讨论,你可以自己去查阅。
最后补充一句,张月祥教授在其解答的最后有一条建议,也需注意一下:由以上所述可知,mustn’ t(尤其在美国英语中)能用于表示“推测”。但对初学者来说,我们还是认为应首先学会使用推测性must与can’t的对应关系,不要用mustn’t表示推测。这是基础。待到基础牢靠之后再进而考虑推测性用法的must能否用于否定形式的问题。