除非你自认为属于几百万C++程序员中最顶尖的那几百个
这是我十几年前的观点,至今没有改变
虽然C++标准已经从98/03到11/14/17一路进化过来,成了所谓的modern C++,只看当前最新的惯用法的话,它几乎是一种全新的语言
20标准也在路上,20标准中coroutine也将被加入,以后C++中并行编程会越来越方便。微软这两年改弦更张,对标准跟的极紧,上个月20草案通过,紧接着,微软宣布vc第一个支持20标准中的concepts
但是,但是啊,我们还有大量现存的代码,这就意味着以前的C++用法依旧要熟悉,这是个大泥坑;而且,新的标准解决了不少旧问题,但新的标准也引发了一堆新的问题…
C++ has indeed become too “expert friendly” – Bjarne Stroustrup
C++已经变得太过专家友好了,想写出正确的代码,需要大量的精力投入在学习语言本身上。认为C++很简单的人,要么是个天才,要么连门在那里都没有看到呢
最简单的一个例子,我抱怨过Go里赋值/初始化的方法太多了,但是和C++比起来,连小巫都算不上
不算重新赋值,C++中仅仅初始化的方法有多少呢?
才19种吗?
图样破了,是42种
以下是一个初始化引发的bug,坑了我好久
#include <algorithm>
#include <iostream>
#include <vector>
#include <memory>
#include <string>
#include <future>
#include <chrono>
template <typename T>
void draw(const T &x, std::ostream &out, std::size_t pos) {
out << std::string(pos, ' ') << x << std::endl;
}
class object_t final {
public:
template <typename T> object_t(T x) : self_(std::make_shared<model<T>>(std::move(x))) {
}
friend void draw(const object_t