一些比较务实的缺陷:
C++ 20 和 C++ 17 的部分新东西(Ranges、pSTL) libc++ 基本没有实现,导致 Android、iOS、macOS 基本没法用这些东西(所以不要提 C++ 20、C++ 23 解决了下面的某些问题);
从 vector
里面判断东西有没有要 find(vec.begin(), vec.end(), v) != vec.end()
一是长(还不如写个 loop),二是很容易把后面那个 != vec.end()
手滑写成 vec2.end()
直接 UB(std::any_of
要传一个 pred,更恶心。。。)(其实不止 vector
有这个问题)
连个 FindIndex
都没有。。。
vector
append 另一个 vector
还要 insert(vec.end(), vec2.begin(), vec2.end())
std::unordered_{map, set}
的性能是在搞笑
std::map
连个返回 optional
的 find
都没有,例如想表达“如果有元素就用,没有就用默认值”。。呵呵(operator []
会修改原来的 map
,不在考虑之列)如果有 optional
返回的话,map.find(k).value_or(0)
这样就好
C++ 23 才有 string::contains
、starts_with
、ends_with
。。。没有 contains
只能 find(str) != std::string::npos
,而且我见过有人错写成 if (str.find("substr"))
C++ 23 终于有了一个凑合能用(但是依旧很难用,而且功能也是残的)的 string split, 然而依旧没有 string join、string trim
很多有用的容器都没有,例如 static_vector
、RingQueue
到现在连个 ScopeGuard
都没有。。。(千万别跟我说用 shared_ptr
提代,我怕恶心)
variant
谁用谁死。
错误处理能整出来三四种(C errno、`from_chars` 返回一个结构体、filesystem 的 error_code 的 out ref、异常、std::cout 那种判断是不是为空再去拿错误的、etc.)
std::lerp 在游戏开发人员眼里已经成为了笑话