我学习 C++20 的一点感想

Fifnmar edited 4 年,4 月前

刚才正式学习了 C++20 的很多东西。这太强了!我甚至觉得 Concepts 的引入使得所谓「接口」黯然失色(当然纯动态情况下还是得用那一套)!它不但将原来反人类的模板变成了傻瓜式操作,还直接引入了近乎完美的静态反射 (Static Reflection) 与非侵入式的静态多态 (Non-Invasive Static Polymorphism)。一个最直接的例子就是 Ranges Library,它使得函数式风格的代码在 Plain C++ 中也可以自然写出[1]。Concepts 是真正的新基石,与以往的 C++ 结合起来将迸发难以置信的威力。

回首这几年,对 C++ 是否已经过时的质疑甚嚣尘上。而我想起 C++11 发布前后的世界,也是这个样子。在整个 C++ 演化的轨迹里,它引入过相当多的创新。最经典的,其它常用语言中的模板与泛型都要跟 C++ 叫一声爸爸。C++ 的 RAII 思想等也深入地影响了很多语言——连 Java 都加上了 try-with-resource!C++ 不是 dead language,它的委员会,虽然散发着贫穷的气息,还经常搞出鬼畜的命名[2],但也有一批最顶尖的人类在不断维护、更新。它曾经有过很多创新,曾经长时间地站在时代前列;现在看来,它依然没有丢掉这份创新的基因。

[1] 其它语言中的 iterator 等更像 C++ 中的 ranges 和 view。

[2] 我真的不想再写 uint64_t 或者 array<array<uint32_t, 3>, 3> 这样的类型了,也不想再用 std::chrono::high_resolution_clock::now() 这样令人窒息的方法了,更不想写 decltype(std::remove_cv_t<std::declval<T>().foo()>)

PS: C++20 还引入了很多库和语法糖,比如 <format>, <bit>, <number, <span>, <format> 等等。

Comments