- 主题:今天才惊闻,原来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.*
C++ 一直都这样子啊。
c++ -> java/c# -> python/php/ruby
业界的主流语言存在这三种生态位。
但越来越多的人认为在 c++ 和 java 之间,应该再开辟新的生态位。所以才会有 go,rust,nim, crystal, kotlin native, julia, v 这几门新语言。
以前的 d 语言是最早意识到这个生态位的。但是语言设计得太过于复杂,搞得跟 perl 似的。所以没流行起来。
如果 vb6/delphi 能沿着 native exe 这条路好好搞下来。现在说不定都是一霸了。
【 在 wanllow 的大作中提到: 】
: 当然信息是来自于AI,向大家求证:
: 迭代器的偏移运算operator(iterator pos, iterator_diff n),如果n非常大,STL没有限制加法的结果处于begin()和end()以内,还有++ --这种运算也没有做边界保护。
: 为什么C++要这样做? 为什么不限制菜鸟程序员的违规操作?
: ...................
--
修改:hgoldfish FROM 59.61.198.*
FROM 59.61.198.*
是这样吗?那为啥linux内核开始接收rust,却没有go?
【 在 hgoldfish 的大作中提到: 】
: C++ 一直都这样子啊。
: c++ -> java/c# -> python/php/ruby
: 业界的主流语言存在这三种生态位。
: ...................
--
FROM 106.44.3.*
C++的哲学是信任码农、你不需要的东西是不用付出代价的
越界也是可以在外面检查的,不是非得在容器内部检查。
如果你在外部已经检查过了,在内部再检查一次就是冗余无用功
“菜鸟程序员”不适合用C++
--
修改:z16166 FROM 114.254.115.*
FROM 114.254.115.*
go 有 gc.
上面列的几种语言里面,好像还真的只有 rust 适合进内核。
【 在 wanllow 的大作中提到: 】
: 是这样吗?那为啥linux内核开始接收rust,却没有go?
--
FROM 59.61.198.*
讲真,你们是不是用gc脑子都用坏了,每次我看见这种 xxx不检查xxx 之类的就抓狂,你用中文写作文的时候,中文自动帮你检查写脏话了么?怎么到了编程就变成要有个个人在边上监督了?
--
FROM 60.190.252.*
自己写的东西,自己不检查怪作业本?
--
FROM 60.190.252.*
go的runtime 影响性能
【 在 wanllow 的大作中提到: 】
: 是这样吗?那为啥linux内核开始接收rust,却没有go?
: --
发自「今日水木 on ELS-AN00」
--
FROM 124.64.18.*
rust和c++一个生态位,Java虚拟机越来越优秀,现在基本java/go/c#一个生态位。
【 在 hgoldfish 的大作中提到: 】
: go 有 gc.
: 上面列的几种语言里面,好像还真的只有 rust 适合进内核。
:
--
FROM 36.143.59.*