上位机图像处理和嵌入式模块部署(树莓派4b和c++新版本的问题)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        自己读书的时候是03年,学习c++也是差不多04年开始,到现在基本上20年了。这20年过程当中,其实c++的语言版本一直是在迭代当中的。早期的c++迭代还比较慢,但是11年之后,可能是与时俱进的需要,c++引入了很多其他语言的特性。对于这些新特性,使用上面一般自己还是比较偏保守的。但是,至少对coder来说,能够看懂别人的代码还是很重要的。

        这一段时间学习树莓派4b,安装和移植了不少软件,也开始对c++新版本有了一些体会和认识。这里正好总结一下。

1、添加了新的头文件

        编译过程中,发现新版本的c++,添加了好多不认识的头文件,比如说#include <filesystem>。一开始的时候,编译提示找不到,后来才知道,新版本的c++才有这个头文件。遇到这种情况,要么自己重写一下函数,要么update一下gcc的版本。

2、lamda函数

        之前lamda函数只是在其他语言中看到过,比如python、javascript等等。现在c++也有了自己的lamda函数,大家把它看成是函数指针就可以了。

auto compare = [](int a, int b) ->int {return a > b ? a : b;};
int result = compare(1,2);

3、auto变量的使用

        有的时候,不确定变量的类型,直接用auto代替了。看似是一个一劳永逸的做法。

4、循环的修改

        之前的c++循环,和c语言差不多,一般都是for、while和do while。现在c++的循环改了一下,添加了一种冒号的形式。

int data[] = { 1,2,3,4,5 };
for (auto val : data)
{std::cout << val << std::endl;
}

5、类里面模板的声明

        新式的c++语法,特别是类里面的定义,猛一看上去,还以为有语法错误,其实也是一种新添加的声明格式。

class demo
{
public:demo() {}~demo() {}template<typename t>t compare(t a, t b){return a > b ? a : b;}
};void process()
{demo d;auto result = d.template compare<int>(2, 1);std::cout << result << std::endl;
}

        这段示例代码里面,最神奇的就是这个d.template,一开始看的时候都以为是代码bug呢。

6、缺省模板

        缺省模板其实老早就有,只不过平时看得少。真的见多了,才知道是什么含义,

template <typename T>T compare(T a, T b)
{return a > b ? a : b;
}template <>
int compare(int a, int b)
{if (a == 0 || b == 0){assert(0);}return -1;
}

7、直接用stl创建多线程

        之前我们不管是windows,还是linux,创建多线程的时候,都是用的os api函数。不过最新的c++标准里面,对应的stl已经可以支持多线程编写了。

#include <iostream>
#include <vector>
#include <thread>void threadFunction(int threadID) 
{std::cout << "Thread " << threadID << " is executing." << std::endl;
}int demo() 
{std::vector<std::thread> threads;for (int i = 0; i < 5; ++i) {threads.push_back(std::thread(threadFunction, i)); }for (auto& thread : threads) {thread.join();}std::cout << "All threads have finished execution." << std::endl;return 0;
}

8、namespace的嵌套

        还有一个印象比较深刻的内容,就是namespace的嵌套,比如像这样,这是之前没有看到过的,居然也可以编译通过,

namespace A::B::C
{
};

总结:

        实际遇到的c++新特性还是蛮多的,大部分都能猜到它的意思是什么。是在理解不了的,一般也是通过搜索引擎,或者chatgpt review一下,看看是怎么一个情况。平时看到的时候,注意积累一下,没必要专门去学。至少保证自己可以学会、看懂,这就已经很好了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/682238.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

phpstudy(MySQL启动又立马停止)问题的解决办法

方法一&#xff1a;查看本地安装的MySQL有没有启动 1.鼠标右击开始按钮选择计算机管理 2.点击服务和应用程序 3.找到服务双击 4.找到MySQL服务 5.双击查看是否启动&#xff0c;如启动则停止他&#xff0c;然后确定&#xff0c;重新打开phpstudy,启动Mysql. 方法二&#xff…

【半夜学习MySQL】数据库概念详解探索数据库到底是如何存储的?

&#x1f3e0;关于专栏&#xff1a;半夜学习MySQL专栏用于记录MySQL数据相关内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 什么是数据库主流数据库与数据库分类数据库的基本使用数据库的启动及关闭查看配置文件与数据库存储位置连接数据库服务器服务…

Linux网络部分——SSH远程访问及控制

目录 一、配置OpenSSH服务端【☆】 1. ssh服务端配置 vim /etc/ssh/sshd_config 2.客户端连接验证 二、使用SSH客户端程序 1.ssh 远程登录 2.scp 远程复制 3.sftp 安全FTP 三、SSH的验证方式 1. 密钥对验证【☆】 2. 如何实现免密登录 【拓展】免交互创建密钥对和免交…

配电室智能巡检机器人

近年来&#xff0c;生产过程高度自动化&#xff0c;各工矿企业关键场所需定期巡检维护。但目前巡检主要靠人工&#xff0c;既耗时费力效率又低&#xff0c;且受环境等因素影响&#xff0c;巡检难以全面规范&#xff0c;隐患或问题易被忽视。在此情况下&#xff0c;如何利用现有…

OpenHarmony实战开发——WLAN驱动框架介绍及适配方法

1. WLAN 驱动框架概述 WLAN 是基于 HDF(Hardware Driver Foundation)驱动框架开发的模块&#xff0c;该模块可实现跨操作系统迁移、自适应器件差异、模块化拼装编译等功能。从而降低 WLAN 驱动开发的难度&#xff0c;减少 WLAN 驱动移植和开发的工作量。 本文主要分析 WLAN 驱…

利用自动获客软件实现高效精准获客

在数字化时代的浪潮中&#xff0c;企业之间的竞争愈发激烈。客户资源的获取成为企业生存和发展的关键。传统的获客方式如广告投放、线下推广等不仅成本高昂&#xff0c;而且效率和准确性难以保证。随着科技的进步&#xff0c;自动获客软件应运而生&#xff0c;它以其独特的优势…

【Linux】yum与vim

文章目录 软件包管理器&#xff1a;yumLinux安装和卸载软件包Linux中的编辑器&#xff1a;vimvim下的底行模式vim下的正常模式vim下的替换模式vim下的视图模式vim下的多线程 软件包管理器&#xff1a;yum yum其实就是一个软件,也可以叫商店 和你手机上的应用商店或app store一…

多进程编程

创建一对父子进程&#xff1a; 父进程负责向文件中写入 长方形的长和宽 子进程负责读取文件中的长宽信息后&#xff0c;计算长方形的面积 代码&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #inc…

Linux(openEuler、CentOS8)企业内网DHCP服务器搭建(固定Mac获取指定IP)

----本实验环境为openEuler系统<以server方式安装>&#xff08;CentOS8基本一致&#xff0c;可参考本文&#xff09;---- 目录 一、知识点二、实验&#xff08;一&#xff09;为服务器配置网卡和IP&#xff08;二&#xff09;为服务器安装DHCP服务软件&#xff08;三&a…

STC8增强型单片机开发day02

逻辑分析仪 什么是逻辑分析仪 逻辑分析仪&#xff08;Logic Analyzer&#xff09;是一种工具&#xff0c;用于分析数字信号&#xff0c;例如控制信号&#xff0c;时钟信号等等。它可以用于调试和验证数字电路、嵌入式系统等等 本人采用的是mini版USB 逻辑分析仪。总共有10个…

【Linux】进程间通信方式之管道

&#x1f916;个人主页&#xff1a;晚风相伴-CSDN博客 &#x1f496;如果觉得内容对你有帮助的话&#xff0c;还请给博主一键三连&#xff08;点赞&#x1f49c;、收藏&#x1f9e1;、关注&#x1f49a;&#xff09;吧 &#x1f64f;如果内容有误的话&#xff0c;还望指出&…

7.基于麻雀搜索算法(SSA)优化VMD参数(SSA-VMD)

01.智能优化算法优化VMD参数的使用说明 02.基本原理 麻雀搜索算法&#xff08;SSA&#xff09;是一种基于鸟类觅食行为的启发式优化算法&#xff0c;它模拟了麻雀在觅食时的群体行为&#xff0c;通过模拟麻雀的觅食过程来寻找问题的最优解。SSA的基本原理是通过模拟麻雀的搜索…