你已经知道怎样针对现在的情况提出建议:you should call her。但如果建议来得太迟——回头看一件已经发生的事,判断当初那样做对不对,该怎么说?英语正好有一组专门用来谈论过去的情态结构:should have、shouldn't have 和 needn'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 have 和 needn'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.
关于表达必要性和义务的现在时形式——must、have to、don'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)
检验一下
为每个句子选出最合适的形式。
- The roads were empty, so we ____ (leave) so early — we arrived an hour before the shop opened.
- I'm so sorry — I ____ (tell) you about the change of plans. It was wrong of me to stay silent.
- She was rude to the waiter. She ____ (be) so impatient.
- We ____ (buy) tickets in advance — they told us at the door it was free entry.
显示答案
- We needn't have left so early.(我们出发得很早,结果发现没必要)
- I should have told you about the change of plans.(本该做的,但没有发生)
- She shouldn't have been so impatient.(发生了,而且是不对的)
- We needn't have bought tickets in advance.(我们提前买了票,但其实没必要)
用 GrammarMama 学得更快
这篇文章只讲了一个知识点——来看看 GrammarMama 如何帮你把它变成持久的进步:
-
了解你的水平 — 快速定级测试帮你确定 CEFR 等级,让每道练习都适合你。 测试我的水平 →
-
沿着清晰的路径学习 — 按照正确的顺序练习每个主题,从 A1 一直到 C2。 查看完整路径 →
-
设定你自己的目标 — 告诉我们你学习的理由,练习内容会围绕你的兴趣展开。 设定目标 →
-
追踪你的错误 — 发现让你反复出错的规律,并彻底改正它们。 查看我的错误 →
-
积累词汇量 — 练习中遇到的单词会被保存,并通过间隔重复来复习。 打开我的词汇表 →
-
练习口语 — 随时可以用说的来回答练习,而不用打字。 试试口语练习 →
-
训练发音 — 逐词获得即时的发音反馈。 训练发音 →
-
每天练一点点 — 适合你水平的简短每日练习,让语感保持新鲜。 开始练习 →
要点总结
- 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 + 过去分词的模式——绝不加 to,have 后面也绝不用一般过去式。