M.P.O.
Non-Profit, International

  • C++ 17 中对可变参数模板的参数包进行了一项改进,即使用折叠表达式来简化递归式的“函数调用”,简化了语法。

  • C++ 17 开始,编译器添加了 constexpr if 用于模板的编译期判断,以及 constexpr lambda 用于常量优化。

  • 死锁是多线程同时访问多个共享对象的常见问题,其本质是当两个线程各自持有一份数据,又再次想要各自持有另外的数据,但是这组新的数据又被对方持有,造成相互的资源竞争。C++ 提供了 std::lock 以提供一种解决死锁的方案:即对于两个资源,使其同时锁定或者等候的操作具有原子性,这样就消除了由于顺序而产生的死锁。

  • 对于单一对象的单一线程访问,天然就没有线程安全方面的问题,但是对于单一对象的多线程访问,就存在着线程访问顺序甚至指令执行顺序的问题,因此存在一些安全隐患。为此,系统提供了互斥锁和原子指令来保证单一对象同时仅有一个线程在访问,在 C++ 中抽象为 std::mutex 和 std::atomic 。

  • C++ 11 开始正式在语言层面通过标准模板库的方式提供了 std::thread 来进行多线程优化,使用多线程进行并行计算是现代计算机上软件对计算进行加速的最普遍的方式。

  • C++ 11 开始,弃用了 C 风格的显示类型转换,额外提供了 3 个模板来完成不同的类型转换,便于调试。