一、 “must+have+done”“一定做过某事”,用于肯定句。
It must have rained last night, for the ground is wet. 昨晚一定下雨了,因为地面还是湿的。
二、 “can't+have+done”“不可能做过某事”。
Mr. Smith can't have gone to Beijing, for I saw him in the library just now. 史密斯先生不可能去北京了,我刚才还在图书馆见过他。
三、 “can+have+done”表示对过去行为的怀疑,用于疑问句,译成“可能做过……吗?”。
There is no light in the room. Can they have gone out? 屋里没有灯,他们可能出去了吗?
四、 “could+have+done”本来能够做某事(而没有做)。
He could have passed the exam, but he was too careless. 本来他能够通过考试,但是他太粗心。
五、 “may+have+done”表示对发生过的事情的推测,意思是“可能已经”或“也许已经”。
—What has happened to George?
—I don't know. He may have got lost.
—乔治发生了什么事?
——我不知道,他可能迷路了。
六、 “might+have+done”表示对过去事情的推测,might与may意思相同,但可能性更小。多用于虚拟语气结构中。
She might have achieved greater progress, if you had given her more chances. 如果你多给她点机会,她可能已经取得更大的成绩。
七、 “would+have+done”虚拟语气,表示对过去事情的假设,意思是“本来会做”。
1. I would have told you all about the boy's story, but you didn't ask me. 我本来会告诉你这个小男孩的故事,但是你没有问我。
2. Without your help, I wouldn't have achieved so much. 没有你的帮助,我是不会取得如此大的成绩。
八、 “should+have+done”意思是“本来应该做某事,而实际没做。”
“shouldn't+have+done”表示本来不应该做某事,而实际做了。含有指责对方或自责的含意。
1. Tom, you are too lazy. The work should have been finished yesterday. 汤姆,你太懒惰了,这项工作本来应该昨天就做完的。
2. Look, Tom is crying. I shouldn't have been so harsh on him. 看,汤姆哭了,我本来不应该对他如此严厉。
九、 “ought to+have+done”表示过去应该做而实际并没有做,译成“理应做……”,往往表示遗憾。与“should+have+done”用法基本一样。
I ought to have gone home last Sunday. 我理应上星期日回家。
You ought not to have given him more help. 你不应该帮助他那么多。
10、 “need+have+done”表示本来需要做某事而没有做。
“needn't+have+done”则表示“本来不需要做某事而做了”。
I needn't have bought so much wine—only five people came. 我本来没有必要买这么多酒,只来了五个人。
He need have hurried to the station. In that case, be wouldn't have missed the train. 他本来需要快点去车站,那样的话,他就不会误了火车。
can have done通常只用于否定句和疑问句。用于否定句时表否定推断,推测肯定没做;用于疑问句时意为“难道真的做了吗”,表示怀疑。
could have done 可用于肯定句、疑问句和否定句。用于肯定句既可以表示过去能够做而实际未做,有惋惜、遗憾或委婉批评之意,也可以表示对过去动作的推测;用于否定句和疑问句的情况与can have done相同。
can't have done 的语气比 couldn't have done 要强一些。