- 主题:今天才惊闻,原来STL对容器的迭代器未设越界保护
当然信息是来自于AI,向大家求证:
迭代器的偏移运算operator(iterator pos, iterator_diff n),如果n非常大,STL没有限制加法的结果处于begin()和end()以内,还有++ --这种运算也没有做边界保护。
为什么C++要这样做? 为什么不限制菜鸟程序员的违规操作?
--
FROM 106.44.3.*
以下是AI的回答:
高效性优先:通过零开销原则,确保高级抽象(如迭代器)的性能与底层操作(如指针)一致。
底层控制权:允许程序员直接操作内存和硬件,信任其专业能力。
选择自由:不强制任何安全机制,而是提供工具(如 at())让用户自行选择。
多范式融合:同时支持面向对象、泛型编程和底层操作,适应不同场景需求。
用白话来说也就是给你自由,出了事别赖我!
【 在 wanllow 的大作中提到: 】
: 当然信息是来自于AI,向大家求证:
: 迭代器的偏移运算operator(iterator pos, iterator_diff n),如果n非常大,STL没有限制加法的结果处于begin()和end()以内,还有++ --这种运算也没有做边界保护。
: 为什么C++要这样做? 为什么不限制菜鸟程序员的违规操作?
--
FROM 106.44.3.*
是这样吗?那为啥linux内核开始接收rust,却没有go?
【 在 hgoldfish 的大作中提到: 】
: C++ 一直都这样子啊。
: c++ -> java/c# -> python/php/ruby
: 业界的主流语言存在这三种生态位。
: ...................
--
FROM 106.44.3.*
鄙中就是菜鸟啊
【 在 z16166 的大作中提到: 】
: C++的哲学是信任码农、你不需要的东西是不用付出代价的
: 越界也是可以在外面检查的,不是非得在容器内部检查。
: 如果你在外部已经检查过了,在内部再检查一次就是冗余无用功
: ...................
--
FROM 36.163.208.*
嗯,最近通过阅读C++ core guideline,略懂了一点点
【 在 hyperLee 的大作中提到: 】
: bare-metal 本来就不该检查。
: 检查是业务代码的事情。
: 而且debug模式下是有检查的。
: ...................
--
FROM 36.163.208.*