C++随感:“我精通C++”,“不,你没有”

本文探讨了C++语言随着标准更新变得复杂,尤其是Modern C++带来的新特性与旧代码共存的问题。作者通过一个初始化引发的bug案例,展示了不同编译器在处理相同代码时可能存在的差异,提出C++已经变得过于“专家友好”。同时,文章提醒读者,C++的学习和理解需要深度,对于认为其简单的看法,作者持保留态度。
摘要由CSDN通过智能技术生成

除非你自认为属于几百万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++中仅仅初始化的方法有多少呢?
C++初始化数量
19种吗?
C++17初始化数量图样破了,是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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值