![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++
文章平均质量分 95
C++编程笔记
Glücklichste
Gesündeste
展开
-
c++智能指针转化:static_pointer_cast、dynamic_pointer_cast、const_pointer_cast、reinterpret_pointer_cast
C++基类和派生类的智能指针转换:static_pointer_cast、dynamic_pointer_cast、const_pointer_cast、reinterpret_pointer_cast当我们用“裸”指针进行类层次上的上下行转换时,可以使用dynamic_cast。当然我们也可以使用static_cast,只是dynamic_cast在进行下行转换的时候(即基类到派生类)具有类型检查功能,而static_cast没有。因此存在安全问题。当我们使用智能指针时,如果需要进行类层次上的上下原创 2020-09-06 09:12:46 · 25660 阅读 · 3 评论 -
C++11中std::reference_wrapper()和std::ref()
std::reference_wrapper是C++11引入的新特性,定义在<functional>头文件中template< class T >class reference_wrapper;reference_wrapper 将一个引用包装成一个可拷贝的,可分配的对象,是引用的包装器,她通常作为一种将引用存储在标准容器(比如std::vector)中的的机制,因为标准容器通常是无法存储引用的。reference_wrapper是一个可拷贝构造和可赋值构造的包装器,.原创 2020-07-04 21:34:10 · 2270 阅读 · 0 评论 -
使用Boost::Python在C++应用程序中嵌入Python
使用Boost::Python在C++应用程序中嵌入Python:第一部分翻译: Leon Lee(liyi@pansafe.com)原文:在此在本系列教程的简介中,我说了将Python代码集成到Granola代码库中的动机。简而言之,它可以使我使用Python语言和标准库的好处来完成在C++中通常很痛苦或笨拙的任务。当然,底线是我不必移植任何已有的C++代码。今天,我们看一下使用boost::python在C++中嵌入Python并与Python对象交互的基本步骤。我已将此部分中的所有代码放转载 2020-06-27 12:58:51 · 1747 阅读 · 0 评论 -
C/C++ 宏定义高级用法
c/c++ 宏定义高级用法1.ANSI标准五个预定义的宏名 __LINE__ 表示该行代码的所在行号 __FILE__ 表示源文件的文件名 __DATE__ 表示源文件被编译的日期,格式(月/日/年) __TIME__ 表示源文件被编译成目标代码的时间,格式(时:分:秒) __STDC__ 表示编译器是否标准,标准时表示常量1,非标准则表示其它数字测试用例#include <stdio.h>#include <stdlib.h&g...转载 2020-05-23 23:38:25 · 3026 阅读 · 0 评论 -
C++定时器实现定时任务
1、单次定时任务实现 boost的asio库里有几个定时器,老的有deadline_timer, 还有三个可配合 C++11 的 chrono 使用的high_resolution_timer、steady_timer和system_timer。deadline_timer是asio早期版本提供的定时器,使用boost.date_time库提供时间支持,deadline_timer会被逐渐淘汰。仅仅固定时间后去执行某任务,可以使用boost中的asio库提供了steady_ti...原创 2020-05-17 16:58:46 · 20523 阅读 · 3 评论 -
C++扫描文件夹中的文件,并对文件名字符串排序
最近遇到一个需求,需要读取文件夹中的所有图片,并根据图片名字对图片进行排序。这里利用boost::filesystem库对文件夹进行扫描,然后把对应图片后缀的文件名(绝对路径)放入一个容器中,再对容器中的元素进行排序,排完序在做后处理,具体实现如下:#include <iostream>#include <vector>#include <st...原创 2020-05-07 10:55:31 · 3073 阅读 · 2 评论 -
C++内存分配函数std::calloc()
函数:void* calloc(size_t num,size_t size); num为元素个数,size为每个元素的字节长度。头文件 malloc.h在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。用于在取得一块数组空间,数组元素初始化为0.一般使用后要使用 free(起始地址的指针) 对内存进行释放。跟m...原创 2020-05-05 08:17:51 · 3169 阅读 · 0 评论 -
C++ 11 创建和使用 unique_ptr
unique_ptr 是 C++ 11 提供的用于防止内存泄漏的智能指针中的一种实现,独享被管理对象指针所有权的智能指针。unique_ptr对象包装一个原始指针,并负责其生命周期。当该对象被销毁时,会在其析构函数中释放掉关联的原始指针的动态内存,并删除关联的原始指针。这样不管函数正常退出还是发生异常,都会释放delete掉动态内存,不会造成内存的泄露。unique_ptr具有->...原创 2020-01-20 22:06:13 · 1139 阅读 · 0 评论 -
C/C++ 引用作为函数的返回值
(1)什么是引用?引用就是变量的别名,操作一个变量的引用也就相当于操作变量本身,这一点跟指针很类似,但是操作引用不用像操作指针一样,利用取地址符号,很不方便。而操作引用的话,则跟操作普通变量一样,所以C++之中更加鼓励使用引用。(2)C++函数为什么要使用引用?C语言之中大量利用指针作为形参或者函数返回值,这是由于值拷贝会有很大的消耗(比如传入传出一个大的结构体)。所以在C++之中使用...原创 2020-01-20 10:55:04 · 2266 阅读 · 0 评论 -
C和C++中的左值和右值
一个简单定义这个部分先给出lvalue和rvalue的一个简单定义。文章下面将会详细描述。lvalue(locator value)代。左值、右值 在C++11中所有的值必属于左值、右值两者之一,右值又可以细分为纯右值、将亡值。在C++11中可以取地址的、有名字的就是左值,反之,不能取地址的、没有名字的就是右值(将亡值或纯右值)。左值代表一个在内存中占有确定位置的对象(换句话说就是...转载 2020-01-17 18:23:48 · 210 阅读 · 0 评论 -
C++虚函数 - 静态函数能否为虚函数
1.virtual与静态函数C++中,静态成员函数不能被声明为virtual函数。例如,下面的程序会编译失败。class Test{ public: // 编译错误:static成员函数不能声明为virtual virtual static void fun() { }};同样地,静态成员函数也不能被声明为const和volatile.下面的...转载 2019-12-22 14:51:57 · 2583 阅读 · 0 评论 -
boost库中thread多线程中的thread_specific_ptr
大多数函数都不是可重入的。这也就是说在某一个线程已经调用了一个函数时,如果你再调用同一个函数,那么这样是不安全的。举例来说,std::strtok就是不可重入的,因为它使用静态变量来保存要被分割成符号的字符串。 一个不可重入的函数通过连续的调用来保存静态变量或者是返回一个指向静态数据的指针,有两种方法可以让不可重用的函数变成可重用的函数。 方法1:就是...原创 2019-12-21 18:55:55 · 1192 阅读 · 0 评论 -
boost::filesystem文件操作
#include <boost/filesystem.hpp>#include <iostream>#include <boost/ratio.hpp>#include <map>#include <vector>#include <string>#include <memory>#include ...原创 2019-12-14 11:11:03 · 2627 阅读 · 0 评论 -
Boost asio 官方教程
7.1. 概述本章介绍了 Boost C++ 库 Asio,它是异步输入输出的核心。 名字本身就说明了一切:Asio 意即异步输入/输出。 该库可以让 C++ 异步地处理数据,且平台独立。 异步数据处理就是指,任务触发后不需要等待它们完成。 相反,Boost.Asio 会在任务完成时触发一个应用。 异步任务的主要优点在于,在等待任务完成时不需要阻塞应用程序,可以去执行其它任务。异步...转载 2019-12-10 21:46:06 · 885 阅读 · 0 评论 -
C++ 11 Lambda表达式
C++11的一大亮点就是引入了Lambda表达式。利用Lambda表达式,可以方便的定义和创建匿名函数。对于C++这门语言来说来说,“Lambda表达式”或“匿名函数”这些概念听起来好像很深奥,但很多高级语言在很早以前就已经提供了Lambda表达式的功能,如C#,Python等。今天,我们就来简单介绍一下C++中Lambda表达式的简单使用。声明Lambda表达式Lambda表达式完整的声...转载 2020-01-10 19:36:09 · 213 阅读 · 0 评论 -
动态规划及其在Apollo项目Planning模块的应用
https://blog.csdn.net/davidhopper/article/details/79399640原创 2019-12-06 21:29:46 · 358 阅读 · 0 评论 -
std::chrono时间
头文件:#include <chrono>c++11的时间库chrono均位于名字空间std::chrono下。命名空间:using namespace std::chrono;宏定义:#define _XTIME_NSECS_PER_TICK 100#define _XTIME_TICKS_PER_TIME_T (long long)10000000时钟c...转载 2020-01-20 10:27:21 · 3924 阅读 · 0 评论 -
C++ get(), at()和variant类型
1、std::get(std::span)template< std::size_t I, class T, std::size_t N >constexpr T& get( std::span<T,N> s ) noexcept;获得到 span s 的第 I 个元素的引用。该 span 必须拥有静态长度(即 N != std::dynamic_ex...原创 2019-11-09 08:34:44 · 2227 阅读 · 0 评论 -
cmake找不到库的解决方法
1、cmake在寻找库的时候,若直接提醒寻找库出错,则看看库安装没有,若安装了,看看环境变量,有没有把库所在的目录加进去。2、若cmake提示找到库了,但是在使用的时候却又找不到库的头文件和库文件,这种情况很有可能是因为具体的指代库目录的变量比如 LibName_INCLUDE_DIR,LibName_LIBRARY_DIRS不对。找具体的目录变量名可以通过寻找对应的.cmake文件,例如今天...原创 2019-10-17 22:06:54 · 23049 阅读 · 0 评论 -
rand()和srand()
rand():产生随机数的函数:int rand (void);1、生成伪随机数范围,在0和RAN_DMAX之间。2、RAN_DMAX:rand函数返回的最大值。此值依赖于库,但在任何标准库实现中都保证至少为32767。3、这个数字是由每次调用一个显然不相关的序列的算法生成的。该算法使用种子生成序列,使用函数srand将其初始化为一些有区别的值。(如果不设置种子,...转载 2019-09-10 09:23:54 · 1764 阅读 · 1 评论 -
C/C++多进程-1
C/C++进程与线程程序运行基础部分 1、时钟中断:即为多道程序设计模型的理论基础。 并发时,任意进程在执行期间都不希望放弃cpu。因此系统需要一种强制让进程让出cpu资源的手段。时钟中断有硬件基础作为保障,对...原创 2018-09-19 14:45:48 · 20825 阅读 · 0 评论