File tree Expand file tree Collapse file tree
tutorial/expert/01-qtbase Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -292,25 +292,16 @@ const 版本不触发:
292292
293293### 3.5 const 正确性——你的性能就藏在这里
294294
295- 我们前面看了三个容器的源码,它们遵循完全一样的模式:非 const 方法调 detach(),const 方法不调。这意味着 `const` 不只是一个编译器检查——它在运行时直接决定了你的代码会不会触发一次深拷贝。先看一张总结图 :
295+ 我们前面看了三个容器的源码,它们遵循完全一样的模式:非 const 方法调 detach(),const 方法不调。这意味着 `const` 不只是一个编译器检查——它在运行时直接决定了你的代码会不会触发一次深拷贝。先看一张总结表 :
296296
297- ```mermaid
298- flowchart LR
299- subgraph 安全["✓ 不触发 detach"]
300- S1["constData()"]
301- S2["data() const"]
302- S3["at(i)"]
303- S4["begin() const\nend() const"]
304- S5["cbegin()\ncend()"]
305- S6["operator[] const"]
306- end
307- subgraph 危险["✗ 触发 detach(共享时)"]
308- D1["data() 非const"]
309- D2["begin() / end()"]
310- D3["operator[] 非const"]
311- D4["range-for\n(auto& x : c)"]
312- end
313- ```
297+ | ✓ 不触发 detach | ✗ 触发 detach(共享时) |
298+ |---|---|
299+ | `constData()` | `data()`(非 const) |
300+ | `data()` const | `begin()` / `end()` |
301+ | `at(i)` | `operator[]`(非 const) |
302+ | `begin()` const / `end()` const | range-for(`auto& x : c`) |
303+ | `cbegin()` / `cend()` | |
304+ | `operator[]` const | |
314305
315306左边这些是安全的——不会触发 detach,零额外开销。右边这些在容器被共享时会触发一次完整的深拷贝。几个实际场景:
316307
You can’t perform that action at this time.
0 commit comments