explicit explicit是C++中用于修饰类的构造函数的一个关键字,一般用于修饰只有一个参数类的构造函数。它的作用是防止隐式转换发生,使得只有显式调用才能进行类对象的转换。当声明了一个使用了explicit关键字的构造函数时,编译器将不再支持隐式转换,需要使用强制类型转换或者显式地调用构造函数来完成转换。跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式)。
C++11中的std::function和std::bind C++语言中有几种:函数、函数指针、lambda 表达式、bind 创建的对象以及重载了函数调用运算符的类。和其他对象一样,也有类型。两个不同类型的可调用对象可能共享同一种调用形式指明了调用返回的类型以及传递给调用的实参类型。一种调用形式对应一个函数类型,例如:int (int, int) 是一个函数类型,它接受两个int,返回一个int。C++中虽然都有一个比较统一的操作形式,但是定义方法五花八门,这样就导致使用统一的方式保存可调用对象或者传递可调用对象时,会十分繁琐。
c++11 call_once 和 once_flag std::call_once 和 std::once_flag 是 C++11 中引入的线程安全的函数和类型,用于确保某个函数只被调用一次。使用std::call_once时,需要先创建一个std::once_flag对象,并将其作为参数传递给std::call_once函数。当多个线程同时调用std::call_once时,只有一个线程会执行func函数,其他线程会被阻塞,直到func函数执行完毕。
C++多线程同步之条件变量(condition_variable) 在C++11中,使用条件变量(condition_variable)可以实现多个线程间的同步操作;当条件不满足时,相关线程被一直阻塞,直到某种条件出现,这些线程才会被唤醒。条件变量用于阻塞一个或多个线程,直到某个线程修改线程间的共享变量,并通过condition_variable通知其余阻塞线程。从而使得已阻塞的线程可以继续处理后续的操作。条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:1、一个线程因等待"条件变量的条件成立"而挂起;
Git远程仓库打标签 删除远程分支上的tag。例如:git push origin :refs/tags/dev-v1.1.11。如果需要删除本地仓库上的标签,可以使用命令git tag -d。例如,可以使用以下命令删除一个轻量标签:$ git tag -d v1.4-lw。git tag -a 标签名称 -m “标签说明”。例如:git tag -a dev-v1.1.11 -m “dev分支代码版本存储”。例如:git push origin dev-v1.1.11。例如:git tag -d dev-v1.1.11。
Git 打patch 未执行git add 打patch可以使用执行git add 打patch可以使用指定某个文件的修改打patch可以使用git diff 文件名 > test.patch对已经提交的代码打patchgit log 查看那些是需要打ptach的(commit_id1是最后1次id commit_id2 是倒数第几个次提交的id)
C++字符串通配符匹配 给定一个字符串 (s) 和一个字符模式 §,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。’ 可以匹配任何单个字符;‘*’ 可以匹配任意字符串;
自动驾驶名词解释 国家标准全文公开系统:https://openstd.samr.gov.cn/bzgk/gb/index。GB/T 39263-2020:道路车辆 先进驾驶辅助系统(ADAS) 术语及定义。
C++动态加载 插件 动态加载(Dynamic Loading)是指在程序运行时,根据需要动态地加载和链接代码或资源。动态加载的主要目的是实现程序的灵活性和可扩展性,以及减少内存消耗和启动时间。通过动态加载,程序可以根据运行时的需求加载特定的模块、库或插件,而不需要将所有代码和资源都打包在一起。这样可以实现模块化设计,减少程序的体积,以及在需要时进行动态升级和扩展。在C++中,常见的动态加载方式是使用动态链接库(Dynamic Link Library,DLL)或共享对象(Shared Object,SO)文件。
C++符号导出问题 在Windows下生成DLL时,可以使用dll_export来将需要对外的符号导出来。__declspec在Linux中,默认是所有的符号都是导出的,只有使用了相应的attribute才能将不想导出的(库内部使用的)的符号隐藏起来。visibilityDLLEXPORT是一个宏定义,通常用于C/C++语言中的动态链接库(DLL)的开发。DLLEXPORT的作用是在编译动态库时,将函数或变量标记为可导出,以便其他程序可以调用这些函数或变量。
分布式通信:发布订阅介绍 消息的发送者称为发布者(Publisher),消息的接收者称为订阅者(Subscriber);发布订阅(Publish-Subscribe)是一种常用的分布式通信模式;它基于消息传递实现了解耦和异步通信。在发布订阅模式中,发布者和订阅者之间并不直接进行通信,而是通过消息代理进行交互。消息的生产者(发布者)将消息发送到一个中心地点,称为消息代理(Message Broker),而消费者(订阅者)则从消息代理订阅感兴趣的消息类型。
C++协变(covariant) C++中,协变(covariant)是指派生类(子类)中的返回类型可以是基类(父类)中返回类型的子类型。换句话说,如果一个虚函数在基类中返回的是基类类型的指针或引用,那么派生类可以重写该虚函数并返回基类类型的子类类型的指针或引用。协变在C++中是通过使用返回类型协变(return type covariance)来实现的。返回类型协变是指派生类中重写的虚函数可以具有比基类更具体的返回类型。这种协变的能力使得在使用多态时更加灵活,可以根据具体的派生类返回不同的子类型,而不需要进行显式的类型转换。
联合体和位域的结合 总的来说,联合体和位域的结合使用可以在某些场景下提供更高效和灵活的内存管理方式。然而,需要注意跨平台兼容性、可读性和可维护性,以及位域的范围限制。位域成员变量的类型必须是整型(signed或unsigned)或枚举类型。位域是一种用于在一个字节或更小的空间中存储多个标志位或数据的机制。位域使用冒号 : 来声明成员变量所占用的位数。
STL常用算法 stable_sort与sort的用法类似,也可以对容器中的元素进行排序,但它保证了相等元素的相对顺序不会发生改变。partial_sort可以对容器中的元素进行部分排序,即只将前k个最小(或最大)的元素放在容器的前k个位置上。sort是STL中最常用的排序算法,它可以对容器中的元素进行排序。在已排序的容器中查找第一个大于或等于指定元素的位置,并返回迭代器。如果找到了指定元素,则返回指向该元素的迭代器,否则返回指向容器末尾的迭代器。在已排序的容器中查找指定元素的范围,并返回一对迭代器。
AUTOSAR架构介绍 I/O硬件抽象模块抽取外设I/O设备(芯片或面板)的位置和ECU硬件分层(μC管脚连接和信号转变)。I/O硬件抽象并不提取传感器/执行器。通过I/O信令接口访问不同的I/O设备。功能如下:・I/O信令与ECU硬件的连接(电流、电压、频率);・为较高的软件层隐藏ECU硬件和布局特性通信硬件抽象层抽取通信控制器的位置和ECU硬件布局。对所有通信系统必须有一个指明的通信硬件抽象(LIN、CAN、MOST、FlexRay)。