锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / C++开源 / C++复杂性探讨、C++疑难点分析
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
量化预测
股票离线分析软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

锐英源精品原创,禁止全文或局部转载,禁止任何形式的非法使用,侵权必究。点名“简易百科”和闲暇巴盗用锐英源原创内容


C++复杂性探讨、C++疑难点分析


最近看了些C++11标准、C++14标准、C++17标准和C++22标准的部分代码,里面臭长的类型名,把简单的类型全部代替化后的代码,对初学者真是不友好,比如指针*,里面换成了Ptr,这对适应了的朋友来讲确实不难,还有好处,但是对于不适应的或者初学者来说,就很困难了,所以就想说些关于C++复杂性探讨和C++疑难点分析的话。

做为创业的老板,为了完成项目必须要接触多个语言,Python、C#、Go、VB、Java、JavaScript、Object-C和Swift都用过,说真的C++越来越复杂,完全脱离了简单易用这个层次。

从书籍上看,C++Primer比C++沉思录厚很多,C++Primer后面的STL、流、容器和泛型都是疑难点,对初学者来说并不好学,这些知识点如果在大学里没有团队讨论,很难掌握,很难使用上。

而C++新标准里加的类,更夸张,比如:future、promise 和 packaged_task,等——稍稍更高级的并发,并发理解这些需要操作系统里进程和线程基础没有基础肯定学不会,所以很多非专业的学生肯定学不成,一些教育机构也不会教。

下面讲个具体的疑难点,比如C++新标准里的高精度时间例子:

#include <iostream>
#include <chrono>

int main() {
    auto start = std::chrono::high_resolution_clock::now();

    // Code to benchmark

    auto end = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double> duration = end - start;
    std::cout << "Execution time: " << duration.count() << " seconds\n";

    return 0;
}

里面函数调用和类对象定义使用了三个域访问符::,现在虽然各类编辑器都有符号自动提示完成功能,但是这么长确实在第一印象上非常不好。而用API获取时间毫秒,用GetTickCount64就非常简单,返回的是ULONGLONG,类型上也好理解。

不过要想C++可以跨平台移植,还要想使用高精度时间,必须要用chrono的类。不想写这么长,试试用using,看chrono里有没有命名空间,用using std::chrono来导入命名空间,导入后可以直接使用类型high_resolution_clock。

新标准里涉及到的还有正则也是非常难学难用,但是处理字符串分析,正则最简洁直观,比如httplib的代码:

static const std::regex re_rfc5987_encoding(
    R"~(^UTF-8''(.+?)$)~", std::regex_constants::icase);

std::smatch m2;
if (std::regex_match(it->second, m2, re_rfc5987_encoding)) {
  file_.filename = decode_url(m2[1], false); // override...
} else {
  is_valid_ = false;
  return false;
}

字符串前的R在我写本文时也是第一次见到,意思里原文不变,不管转义,因为正则规则字符串里有可能和转义冲突,所以必须带R来修饰为原文字符串。

it是迭代器的知识点,这个不难理解。正则的功能是按正则规则字符串找满足与否,这个规则是用if else判断不出来的,用了正则处理流程很简单,但是正则字符串很难记,如果不常用,记了也容易忘记,但如果要应聘大公司,正则规则肯定要背。

C++把复杂的类直接暴露给用户使用,在第一版本的STL里就种下了坑,C++复杂性探讨的结果就是如此。我用过C#,里面的并发类也很麻烦,但是微软封装的好,用起来简单。C++标准可能不是一家公司说了算,有没有可能是为了实现而实现,不是为了用户而实现。

所以现在很多追求性能的语言在快速增长,比如Rust呼声很高。

友情链接
版权所有 Copyright(c)2004-2024 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州市金水区郑州大学北校区院(文化路97号院)内南门附近