你已经知道怎样针对现在的情况提出建议:you should call her。但如果建议来得太迟——回头看一件已经发生的事,判断当初那样做对不对,该怎么说?英语正好有一组专门用来谈论过去的情态结构:should haveshouldn't haveneedn't have,构成方式和你已经学过的表推测结构一样——情态动词 + have + 过去分词。

  • You should have called me. Why didn't you?(批评:你没这么做,但本该这么做)
  • You shouldn't have shouted at him. It wasn't his fault.(批评:你这么做了,但这是不对的)
  • I needn't have brought an umbrella. It didn't rain.(我带了伞,结果发现没必要)

关键点: 这些情态形式既说明发生了什么,对此作出评判。Should have 通常表示这件事没有发生(但本该发生);shouldn't haveneedn't have 则表示这件事确实发生了——只是不该发生,或者没有必要。

Should have / shouldn't have:批评与后悔

should have + 过去分词说明某件事本来是对的,但没有发生。这是在批评某件本该做却没做的事;对象可以是别人,也可以是自己,这时往往带有后悔的意味。

  • You should have told me you were coming.(你没告诉我,但本该告诉我)
  • I should have studied harder for the exam.(我没有更用功,现在很后悔)
  • We should have left earlier — now we're stuck in traffic.

shouldn't have + 过去分词说明相反的情况:某件事确实发生了,而且是不对的。

  • You shouldn't have said that — it hurt her feelings.(你说了,而且说错了)
  • I shouldn't have eaten so much cake.(我吃了,现在很后悔)
  • He shouldn't have driven so fast in the rain.
形式 实际发生了什么 例句
should have + 过去分词 没有发生(但本该发生) She should have worn a coat.(她没穿)
shouldn't have + 过去分词 发生了(但本不该发生) She shouldn't have worn heels for the hike.(她穿了)

这和现在时的 should 意思完全不同。✅ You should call her(对未来的建议)和 ✅ You should have called her(对过去的批评)不是一回事——后者意味着时机已经过去,这通电话根本没有打。现在时的用法请参阅 Should (advice)

中文不靠动词变形来表示这种“过去 + 评判”,而常用“本该……却没……”“早该……”“本不该……”来表达。看到 should have / shouldn't have 时,要同时判断:事情有没有发生,以及说话人是在不满还是后悔。

Should have 也可以表示预期,而不是后悔——They should have arrived by now 意思是“我猜他们现在应该已经到了”,并不是批评。通常语境和语气能说明是哪种意思;这篇文章主要讲更常见的用法——批评/后悔。

Needn't have:没必要,但还是做了

needn't have + 过去分词,表示一个动作已经完成,但回头看,发现其实没有必要。关键的事实是这个动作确实发生过。

  • I needn't have hurried — the meeting was cancelled.(我赶得很急,但其实没必要)
  • You needn't have bought so much food — only three people came.(你买了这么多食物,但其实不需要这么多)
  • She needn't have worried; everything turned out fine.(她担心了,但其实是白担心)

把它和 didn't need to(以及作用相同的 didn't have to)比较一下:这个说法只是说明没有必要——单凭它本身并不能说明这件事到底做没做:

  • I didn't need to bring my passport, so I left it at home.(没必要,也确实没带)
  • I didn't need to bring my passport, but I brought it anyway, just in case.(同样没必要——但这里的上下文说明其实带了)
  • I needn't have brought my passport — it turned out I didn't need it.(这个形式总是说明动作已经做了,事后才发现是多此一举)

一个有用的区分: 如果你想用一个结构清楚地说明某件事已经做了、但后来发现没必要,needn't have 是更准确的选择——didn't need to 没有额外上下文时意思是含糊的。✅ I needn't have brought my umbrella — it didn't rain 意思很明确;✅ I didn't need to bring my umbrella, so I left it at home 同样正确,但那是因为句子后半部分说清楚了到底发生了什么。

形式 是否说明动作已经完成? 强调的重点
needn't have + 过去分词 ✅ 是——总是如此 动作发生了,事后证明没有必要
didn't need to / didn't have to + 动词原形 取决于上下文 没有义务或必要性

在美式英语中,needn't have 用得较少;人们更常说 didn't have to,靠上下文来说明动作其实还是做了:I didn't have to bring an umbrella, but I did.

关于表达必要性和义务的现在时形式——musthave todon't need to——请参阅 Have to / must (obligation)

Could have:错过的可能性,有时是批评

Could have + 过去分词描述一种未实现的可能性——某件事本来是有可能的,但没有发生。根据语境的不同,它听起来可以是中性的、带着欣赏的,或者——尤其是搭配 you 时——像是轻微的责备。

  • You could have told me you'd be late!(本来是可能的,但你没这么做——轻微的责备)
  • We could have taken a taxi, but we decided to walk.(一个没被选择的选项——中性)
  • She could have won the race, but she stopped to help a friend instead.(这里完全没有批评的意思——甚至可以说是欣赏)

它和 should have 的区别在于:should have 总是表示这个行为是对的,而 could have 只是指出这件事是可能的——听起来像是责备、赞赏还是纯粹的事实陈述,完全取决于具体情境。You should have called 总是一种批评;You could have called 则不一定。

Could have 还有你可能已经学过的推断含义(she could have missed the bus = 她也许没赶上公交车)——上下文会告诉你是哪种意思。这种用法请参阅 Modals of deduction: past (must have, can't have)

四种形式对照

情态动词 + have 含义 例句
should have + 过去分词 本该如此,但没有发生 He should have apologised.
shouldn't have + 过去分词 本不该如此,却发生了 He shouldn't have laughed.
needn't have + 过去分词 发生了,但没有必要 He needn't have apologised — it wasn't his fault.
could have + 过去分词 有可能,但没有发生(中性,有时是批评) He could have apologised, but he was too proud.

这四种形式都遵循同一个结构:情态动词 + have + 过去分词,而且 have 后面的动词永远不会因为时态或主语而变化。

常见错误

  • You should call me yesterday. → ✅ You should have called me yesterday.(表达对过去的后悔,需要 have + 过去分词,而不是动词原形)
  • I should to have told her. → ✅ I should have told her.should 后面不加 to,过去形式也一样)
  • I needn't have to bring an umbrella. → ✅ I needn't have brought an umbrella.(不加 to——needn't 的用法跟情态动词一样,have 后面接的是过去分词,不是动词原形)
  • He should have went home. → ✅ He should have gone home.(用过去分词 gone,不是一般过去式 went
  • You should of called me. → ✅ You should have called me.should of 是一个很常见的拼写错误,来自缩略形式 should've 的发音——一定要写 have,不要写 of

检验一下

为每个句子选出最合适的形式。

  1. The roads were empty, so we ____ (leave) so early — we arrived an hour before the shop opened.
  2. I'm so sorry — I ____ (tell) you about the change of plans. It was wrong of me to stay silent.
  3. She was rude to the waiter. She ____ (be) so impatient.
  4. We ____ (buy) tickets in advance — they told us at the door it was free entry.
显示答案
  1. We needn't have left so early.(我们出发得很早,结果发现没必要)
  2. I should have told you about the change of plans.(本该做的,但没有发生)
  3. She shouldn't have been so impatient.(发生了,而且是不对的)
  4. We needn't have bought tickets in advance.(我们提前买了票,但其实没必要)

要点总结

  • Should have + 过去分词 = 批评或后悔某件事没有发生,但本该发生(也可以表示预期:they should have arrived by now)。
  • Shouldn't have + 过去分词 = 批评某件事发生了,但本不该发生。
  • Needn't have + 过去分词 = 这个动作已经完成,但结果证明没有必要——比 didn't need to / didn't have to 更精确,后两者只说明没有义务,至于动作到底做没做则要靠上下文判断。
  • Could have + 过去分词指出一个错过的可能性——某件事本来是可能的,但没有发生;根据具体情况,这可以是批评、欣赏,也可以只是中性的事实陈述。
  • 所有这些形式都遵循情态动词 + have + 过去分词的模式——绝不加 tohave 后面也绝不用一般过去式。