{% note warning modern %}这里的结构体是在c++的语法体系中,c语言的语法中并没有结构体继承这种说法。...objA.a = 0; //私有继承或者保护继承也称之为实现继承** //使得父类中的公有成员变成了私有或者保护 //子类就失去了父类的接口。...return 0; } 0x03 关于继承中的重定义问题 当两个类存在继承关系时: 基类和派生类有同名成员变量或者成员函数,在派生类实例化对象的时候,访问到的是派生类自己的成员。...,都会发生重定义,基类中的标识符都会被隐藏,只能访问派生类自己的成员,如果想要使用基类中的同名成员,那么需要使用域作用符来指定作用域。...,又有类成员的时候,先调用基类的构造,再调用成员变量,最后调用自己的构造函数 析构函数: 析构函数的调用顺序则刚好相反,如果父类或类成员只有有参构造,那么需要在子类的构造函数中给他们赋值,使用初始化参数列表即可
YamlCpp #1 环境 macOS 10.15.5 Cmake #2 安装 git clone git@gitee.com:Coxhuang/yaml-cpp.git cd yaml-cpp mkdir...-D BUILD_SHARED_LIBS=ON make sudo make install 安装后,库文件和头文件路径: 头文件: /usr/local/include/yaml-cpp 库文件...: /usr/local/lib/libyaml-cpp.a #3 使用 #3.1 Cmake配置文件 cmake_minimum_required(VERSION 3.17) project(yaml_demo...) # 查找yaml-cpp link_directories( ${YAMLCPP_LIBRARY_DIRS} # 添加yaml-cpp库文件路径 ) add_executable(yaml_demo...main.cpp) target_link_libraries(yaml_demo ${YAMLCPP_LIBRARIES} # 将yaml-cpp库连接到yaml_demo可执行文件中
2.如果客户需要对类中某个函数抛出的异常做出反应,那么这个类应当给用户提供一个普通函数,在里面调用那个会抛出异常的函数。...9:绝对不要在构造和析构过程中调用虚函数 当构造子类的时候,需要先去调用父类的构造函数,这时候子类还不存在,是无法去自动调用子类的虚函数的。...3.还有如果一个子类继承了你的这个类,那么这个子类在调用拷贝函数时,就不会自动调用父类中你写的拷贝函数了,需要你手动调用。...4.不要尝试以某个拷贝函数实现另一个拷贝函数,应该将共同功能的代码放入第三个函数,然后在这两个拷贝函数中调用。...3.函数提供的“异常安全保证”通常最高只等于其所调用之各个函数的“异常安全保证”中的最弱者。
union的大小为最大的那一个变量。 它与结构体struct的不同就是struct需要满足内存对齐,例如下面这段代码。...4; i++) { cout (u.bits[i]) << " "; } return 0; } union比较短字符串 在字符串中,...可以通过下面的示例代码通过union快速获得短字符串的哈希值进行比较。...但是访问具体的数据就要通过line.p1.x这样的语句。...给var类型变量赋值时,会根据参数类型调用对应的构造函数,然后为union结构赋值。
usr/include/c++/7/cstdio" 3 \# 40 "/usr/include/c++/7/cstdio" 3 \# 3 "test.cpp" 2 \# 5 "test.cpp"...当gcc编译c程序时 gcc a.c -o a #这样就生成可执行文件a了 当gcc编译c++程序时 gcc a.cpp -lstdc++ #加个-lstdc++链接上c++的库才行....当g++编译c程序时,跟gcc用法是一样的,实际上g++在编译c程序是也是直接调用的gcc 当g++编译cpp程序时,看下面一节....最最常用的命令 无论编译.c还是.cpp,g++都挺方便,一般直接都用g++就可以了....有时候只是想快速的运行一个c或cpp程序而已,就不用看上面那一坨了…直接用这条命令就够了: g++ test.cpp -o test #cpp程序 .
项目日志——Log4cpp 开源的C++类库Log4cpp提供了很多功能,帮助我们的应用程序更方便地记录日志。...cpp/OstreamAppender.hh> 初始化日志输出的目的地 示例1:输出到标准输出std::cout log4cpp::Appender *appender = new log4cpp...// 发送到缺省系统调试器 log4cpp::NTEventLogAppender // 发送到win 事件日志 注意: 实际上日志输出到终端或文件中是很慢的,可能会引起IO中断,所以我们可以先输出到内存中...程序中仅有一个的对象。.../conf/log.conf 查看: 在log.conf中。/var/log/share_bike.log为保存路径。
大家好,又见面了,我是你们的朋友全栈君。 一、基本概念 本文主要分析右值引用中的:移动语意(move semantics)。...二、右值的生存期只到表达式结束,即语句的分号之后右值的生存期就结束了。 三、能够对左值取地址,但无法对右值取址。...但本质上来说,右值的移动语意是对浅拷贝语意的完善,减少内存的分配次数。 二、实例分析 我们来分析几个具体例子。 第一个是关于自加符号的。...t++是一个右值,我们知道t++返回了t的值之后然后再加1。表达式在最后返回时是t的值,实际过程是先复制一个t_copy,然后将t的值加1,最后将t_copy返回,这样才能保证返回的是最开始t的值。...三、std::move()的作用 理解了右值的作用之后,需要看看c++11中增加的std::move()函数。 为什么需要这个函数?当函数为右值的时候不是可以自动重载吗?
.cpp 是源程序代码c++文件 .h 是包含函数声明和变量定义的头文件 .rc 是定义资源的资源脚本文件 .dsp 是工程文件,记录当前工程的有关信息 .dsw 是工作区文件,一个工作区可能包含一个或多个工程...ClassWizard出问题,手工修改CLW文件可以解决.如果此文件不存在的话,每次用ClassWizard的时候绘提示你是否重建. .plg 是编译信息文件,编译时的error和warning信息文件...(实际上是一个html文件),一般用处不大.在Tools->Options里面有个选项可以控制这个文件的生成. .hpj (Help Project)是生成帮助文件的工程,用microsfot Help...Compiler可以处理. .mdp (Microsoft DevStudio Project)是旧版本的项目文件,如果要打开此文件的话,会提示你是否转换成新的DSP格式. .bsc 是用于浏览项目信息的...,在调试的时候可能有用. .exp 只有在编译DLL的时候才会生成,记录了DLL文件中的一些信息.一般也没什么用. .ncb 无编译浏览文件(no compile browser)。
1.问题 程序在启动加载时非常慢,后来排查到时这行代码有问题Aws::S3::S3Client client 2.解决办法 在查AWS-SDK-CPP的仓库时,发现也有人提到了类似的问题,可以加个环境变量...先说最后可以做到的解决办法 在代码中添加环境变量或者在我的电脑高级设置中添加 AWS_EC2_METADATA_DISABLED=true 其中在代码中添加时,需要把这个环境变量注册到path中,自己写一个函数...的127-134行代码删除 注意setenv是Linux添加环境变量的方法,windows是这样的 SetEnvironmentVariable("AWS_EC2_METADATA_DISABLED",..."true"); 但我用windows的方法没用,不知道为什么 另外我在电脑里clientConfiguration.cpp也没有找到 所以最简单的方法,直接在电脑环境变量加上就好 4.参考 c++...(github.com) Severe Performance Degradation for S3 using SDK 1.8.32 · Issue #1440 · aws/aws-sdk-cpp
C++中有的东西需要放在可以在.h文件中定义,有的东西则必须放在.cpp文件中定义,有的东西在不同的cpp文件中的名字可以一样,而有的则不能一样 那么究竟哪些东西可在头文件中定义,声明,哪些东西又必须在...typedef 在不同的cpp中可以一样 变量 1、在.h中只能声明,在.cpp中可以声明与定义一个变量 如果在.h中的定义一个变量,则该变量被include两次以上时则会出现重定义错误 2、在不同....cpp中定义的变量的名字与类型不同一样 常量 1、如果const常量是用常量表达式进行初始化的,则可以在.h中声明与定义 2、如果const变量是用非常量表达式进行初始化的,那么该变量应该在cpp文件中定义...3、不同cpp中以定义名字与类型一样的变量 static变量 1、在不同的cpp中可以定义名字与类型一样的变量 2、如果在.h中定义一个static成员,则所有include该文件的文件均拥有一份独立的该...static函数 在不同的cpp中可以定义函数原型一样的函数 类 不同的cpp中类的名字可以一样 类成员与函数 在.h中定义,所有成员必须在类中声明,在cpp中实现 非静态的常量整形数据成员不能就地初始化
双精度浮点数数组中的默认值为0.0,单精度浮点数数组中的默认值为0.0f。boolean类型数组默认元 素为false。...数组的基本要素 标识符 也就是数组的名称,只是在数组中的一个专业术语,本质就是一个变量名 数组元素 也就是数组中的每一块空间存储的数据 元素类型 也就是数组存放的数据类型 元素下标 数组中每一个元素所处的位置就是数组元素的下标...} } 2.向数组中添加元素 案例 在某机票代售点有A、B、C、D、E 5人正排队购票,B的好朋友F现在也来排队购票,发现B正在排队, 于是插队至B的后面,请使用数组的相关知识完成程序设计。...第二个参数表示,扩容后的新的数组的长度 //作用: 新建一个数组,并将原数组的所有元素全部拷贝至新数组中 //newArr = {"A","B","C","D","E"...静态变量可以在static修饰的方法中使用,也可以在非静 态的方法中访问。主要解决在静态方法中不能访问非静态的变量。
注:此程序其实并没有什么用 想必大家都知道,在C里面,我们的汉字等东西是可以拆分为两个整数的(类似ascii码),那怎样获得每个字的字表码呢?...first <= 253) (seconnd >= -192 && seconnd = 64 && seconnd <= 254) 然后我们利用C的文件输入输出函数将此字表写入文件中...但是,当我们进行查找时,却会发现一个问题,那就是同样的字符在字表中通常有4个版本,观察后我们可以发现他们的位置是对称的,每两个对称的第二个数的绝对值相加为256,第一个数也是一样的情况,也就是说,实际上的字表并没有这么多的字符...于是我们在代码中减少打印的范围,只保留打印数字为正数的部分,并且改进循环的条件,减少循环的次数。 改进后的代码: ? 效果: ?...还有,我们可以发现,汉字在字表中的排列似乎是以拼音顺序来排序,但是却找不出其中的规律,希望能以后能发现其中的规律。
今天的博文介绍的是如何在 C++ 开发中利用 yaml-cpp 开源库读写 yaml 配置文件。...你如果不想每次都到 copy 头文件到不同的工程中,那么你可以将头文件 copy 到系统默认的头文件目录,比如 ubuntu 的地址是 /usr/local/include,将库文件拷贝到系统默认的 lib...Node Node 是 yaml-cpp 中的核心概念,它用于存储解析后的 yaml 信息。 生成 Node 的形式有很多种, loadFile() 是最常见的一种。...中的迭代 yaml-cpp 中也可以通过迭代的方式,访问 Node 中的内容。...yaml-cpp 写配置文件 日常开发中,除了读取配置参数,我们经常需要保存参数,yaml-cpp 自然也提供了相应的功能。
背景 Opentelemetry-cpp 是可观测领域,opentelemetry (CNCF基金会孵化项目)的C++ SDK接入层。...首先简单介绍一下 opentelemetry-cpp 的内部模块结构,主要是三部分: API, SDK, Exporter 。然后还有其他一些扩展和辅助性功能。...这部分的变化,由于原先的 SDK模块中也有个 LogRecord 结构,这里其实是不同含义,但是重名了。所以我们废弃了 SDK中的 LogRecord 。...Exporter的数据中。...详见: https://github.com/open-telemetry/opentelemetry-cpp/pull/2004 这个PR的合入进展。
如果它发现在一个头文件中包含了宏 Q_OBJECT,则会生成另外一个 C++ 源文件。这个源文件中包含了 Q_OBJECT 宏的实现代码。这个新的文件名字将会是原文件名前面加上 moc_ 构成。...全删除了(是在VS的工程项目中删除的,在文件夹中删除了,无所谓,每次编译的时候,会自动moc,这个过程是你XXX.cpp文件的设置)。...当我删除Generated/Debug 中的 moc_bridge.cpp 时,在Release模式下,编译运行都没什么影响,但是在切换到Debug后,链接生成exe就会报错,熟悉的error LNK2001...那么我直接将删除的moc_bridge.cpp文件添加进Generated/Debug 中,这样Debug模式下,程序就可以正常的编译运行了。 ? 3.警告LNK4042 以及解决 但是!...这是因为,参与编译链接的有两个moc_bridge.cpp,一个是Generated/Debug 中的,一个是Generated/Release 中的。
一般我们继承QObject类在头文件中添加,但是有时候需要在源文件中添加。这样就会不可避免地出现编译错误。那么我们该究竟怎么解决它呢?...问题重现 执行下列源码会报以下错误: error: undefined reference to `vtable for Object' 错误: 未定义引用'Object'的虚函数表 问题源码: /*...工具不识别cpp导致。...由于moc工具不识别cpp文件中继承于QObject的类,这样就不能自动为该类添加一些实现函数(元对象函数),就会导致函数未定义的错误。...当qmake运行起来时,moc工具会自动识别处理头文件中所有继承于QObject的类和一系列Qt元对象属性。 要想让moc识别cpp文件,只需要包含#include 当前文件.moc就可以了。
类型形参,即出现在模板参数列表中,跟在class或者typename之类的参数类型名称。 非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。...上述示例中,p1指 向的d1显然小于p2指向的d2对象,但是Less内部并没有比较p1和p2指向的对象内容,而比较的是p1和p2指 针的地址,这就无法达到预期而错误。 此时,就需要对模板进行特化。...// 此处需要在排序过程中,让sort比较v2中存放地址指向的日期对象 // 但是走Less模板,sort在排序时实际比较的是v2中指针的地址,因此无法达到预期 sort(v2.begin(),...⚡模板的分离编译 假设有以下场景,模板的声明与定义分离开,在头文件中进行声明,源文件中完成定义: // a.h template T Add(const T& left, const..."xxx.cpp" 里面或者xxx.h其实也是可以的。
这里我们要引入的一个新概念就是树的旋转,在这里按照次数分为单旋转和双旋转,按方向分为左旋转和右旋转,如下图,想象树的树枝是活动的,旋转可以很轻松地让树的结点变得平衡。 ?...仔细地理解上面的动图,就会发现树的单旋转其实就是一个交换指针的过程,树的双旋转其实就是对两个结点各自进行了两次方向相反的单旋转。二旋转的方向其实是个对称的过程。然后是声明。 ? ?...然后为了表现出树的层次,打印函数选择了带深度的递归打印。测试如下。 ? ? ? ? AVL树是最早被发明的平衡二叉树,所以它有一些缺陷,但它是很多其他平衡树的变种,这确立了它的学习意义。...我们在AVL树中的思想是严格控制子树与子树之间的高度差(深度),但是这种限制使得每次插入删除都要进行复杂的操作来平衡它。...一些新的平衡树不再追求这样的条件,它们允许子树有任意的深度,只保证整体的最坏查找时间可控,下次我们来介绍这种平衡树,它是AVL树的一种变种——伸展树(SplayTree)。
在最初使用Clion这款软件做C++开发时,有时会遇到在同一个Project中有多个cpp文件,而每个cpp文件又都有main函数,因此运行时会出现multiple definition of `main...'这样的错误。...一,问题重现 二,解决问题 这是因为一个编译链接生成的EXE文件只能有一个main函数,为了能使多个带main函数的cpp文件能在同一project中运行,我们需要在CMakeList.txt中做一些修改...在add_executable()中给cpp文件取一个别名,这个别名便会成为生成的EXE文件的名字。...先看一下未修改之前的: 下面我们修改一下: 然后运行一下: 第二cpp文件的运行: 没有报错都成功执行了。 接着看一下生成的EXE文件: 至此问题就彻底解决了!
var@NS1@@3HA) 已经在 src.obj 中定义,fatal error LNK1169: 找到一个或多个多重定义的符号。...根据 static 对变量的作用域的影响,推断应该是预编译过程中 NS1::var 分别被引入了 src.cpp 和 main.cpp,而在两个源文件中的 NS1::var 非同一个变量,而且其作用域分别为各自所在的...cpp 文件。...求证: 将两个 cpp 文件中的 printf 语句都改为 printf("%d address is : 0x%X\n", NS1::var, &NS1::var); 输出为: 10 address...is : 0x3C8004 10 address is : 0x3C8000 可见两个源文件中的 var 非同一个。