
c++
文章平均质量分 64
行走在路上的蜗牛
空杯心态,学无止境
展开
-
c++之编译过程
文章目录编译过程process目标文件存储格式目标文件格式拓展编译过程process预编译(预编译器处理如 #include、#define 等预编译指令,生成 .i 或 .ii 文件)编译(编译器进行词法分析、语法分析、语义分析、中间代码生成、目标代码生成、优化,生成 .s 文件)汇编(汇编器把汇编码翻译成机器码,生成 .o 文件)链接(连接器进行地址和空间分配、符号决议、重定位,生成 .out 文件)目标文件存储格式段功能File Header文件头,描述整个原创 2021-01-14 11:44:26 · 229 阅读 · 0 评论 -
c++代码中加载动态库
文章目录c++代码中加载动态库生成动态库代码中加载动态库,并调用warningc++代码中加载动态库生成动态库1.h#pragma once// extern "C" void print(); // 以c的方式编译void print(); // 以c++的方式编译extern void func();1.cpp#include <iostream>#include "1.h"using namespace std;void print(){ cou原创 2021-01-14 11:24:16 · 1819 阅读 · 0 评论 -
c++11之新特性
HOME文章目录HOME统一初始化缩窄std::initializer_listcode声明统一初始化c++扩大了用{}的使用范围,使其可用于内置类型和自定义类型缩窄初始化列表语法可防止缩窄,即禁止将数值赋给无法存储它的数值变量; 在编译器会报错std::initializer_listC++11提供了模板类initializer_list,可将其用作构造函数的参数code#include <iostream>#include <cstring>#i原创 2021-01-11 21:29:21 · 230 阅读 · 0 评论 -
c++之extern 变量
extern 变量如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显式地初始化变量extern int i; //声明i而非定义iint j;// 声明并定义jtips:是引用其它源文件中的变量的时候用codemain.cpp#include <iostream>#include "1.h"using namespace std;extern int aa; // 引用其它源文件中的变量void modify(){ aa =原创 2021-01-04 16:31:09 · 424 阅读 · 0 评论 -
STL迭代器
头文件:<iterator>迭代器种类:output迭代器:Ostream,inserter input迭代器:istream forward迭代器:Forward list,unordered containers Bidirectional迭代器:List,set,multiset,map,multimap Random-access迭代器:Array,vector...原创 2020-04-17 21:48:16 · 152 阅读 · 0 评论 -
c++运行时类型识别:RTTI
1.通过RTTI,能够通过基类的指针或应用来检索其所指对象的实际类型。2.c++通过两个操作符提供RTTI:<1>typeid:返回指针或者应用所指对象的实际类型<2>dynamic_cast:将基类的指针或者引用安全的转换为派生类的指针或者引用。注意:基类至少有一个虚函数(虚析构也算);指针转换失败,返回0;引用转换失败,抛出bad_cast类型异常3.注意type...原创 2020-04-17 21:54:17 · 237 阅读 · 0 评论 -
c++ IO流
1.分为3类:标准io流,文件流,字符串流2.结构如图:3.缓冲区--输出设备或磁盘文件,系统开辟一块内存作为输出缓冲区(buffer),写操作只是写到缓冲区中,等多次或者需要时将缓冲区数据真正写入文件中。如此,来解决高速设备和低速设备的匹配。4.cout<<endl; 或者cout<<flush;或者cout<<ends;都会刷新缓冲区...原创 2020-04-17 21:46:29 · 180 阅读 · 0 评论 -
c++多继承
多继承派生类对象内存布局:先放有虚函数的基类,接着放没有虚函数的基类,然后是派生类自己的数据成员 在多继承下,有多少个虚函数的基类就有多少个虚函数表指针 派生类中新增的虚函数,添加在第一张虚函数表中 在派生类对象中,同名的虚基类只产生一个虚基类子对象,而同名的非虚基类则各产生一个非虚基类子对象 虚基类的子对象是由最后派生出来的类的构造函数通过调用虚基类的构造函数来初始化的 虚基类并不是在...原创 2020-04-17 21:49:08 · 184 阅读 · 0 评论 -
c++匿名命名空间
匿名命名空间是c++的特性,相对于c的static声明来说,可以在匿名的空间里面声明很多变量和函数,这样可以省去对每个变量和函数添加static声明。实质上匿名空间的功能跟static声明是一样。 当定义一个匿名命名空间时,编译器在内部会为这个命名空间生成一个唯一的名字,而且还会为这个匿名的命名空间生成一条using指令. namespce { char c; ...原创 2020-04-17 21:42:39 · 450 阅读 · 0 评论 -
c++对象只能在堆上或者栈上创建
栈上创建对象:只有使用new运算符,对象才会建立在堆上,因此,只要禁用new运算符就可以实现类对象只能建立在栈上。将operator new()设为私有即可。代码如下: class B{private: void* operator new (size_t t) {} // 注意函数的第一个参数和返回值都是固定的 void operator delete (v...原创 2020-04-17 21:42:58 · 829 阅读 · 0 评论 -
c++虚函数表
1.c++通过基类指针或者引用调用虚函数时,执行的代码是其真实类型中的函数,是通过虚函数表实现的,虚函数表存放的是指向虚函数地址的虚函数指针2.代码如下:#include<iostream>#include<functional>using namespace std;//注意此段代码兼容32位和64位系统,在X86和X64下运行正常class Base...原创 2020-04-17 21:53:37 · 239 阅读 · 0 评论 -
operator new/operator delete
1.重载operator new(),可以写出多个版本,前提是每一个版本的声明都必须有独特的参数列,其中第一个参数必须是size_t,其余参数以new所指定的placement arguments为初值。出现于new(...)小括号内的便是所谓的placement arguments.Foo *pf = new(300,'c') Foo;2.也可以重载class member oper...原创 2020-04-17 21:50:59 · 180 阅读 · 0 评论 -
remove_refrance/std::move
它唯一的功能是将一个左值强制转化为右值引用,继而可以通过右值引用使用该值,以用于移动语义。 代码如下: template <typename T>typename remove_reference<T>::type&& move(T&& t){ return static_cast<typename remove_refer...原创 2020-04-17 21:50:22 · 301 阅读 · 0 评论 -
STL分配器(allocator)
allocator代表一种特定内存模型,并提供一种抽象概念,将对内存的索求最终转变为对内存的直接调用。可以自己实现一个分配器。allocator:使内存分配和构造分离,提高性能;销毁内存和析构分离:提高性能,内存可重用例子:new string[100],意味着要执行100次string类的默认构造函数,哪怕后面的用不到!同样析构也会需要执行100次!可以通过alloca...原创 2020-04-17 21:28:19 · 325 阅读 · 0 评论 -
STL适配器
适配器(Adapters)--一种用来修饰容器/仿函数/迭代器接口的东西容器适配器:stacks(基于deque),queues(基于deque),priority queue(基于vector)仿函数适配器:bind,mem_fn,not1,not2迭代器适配器:reverse,insert,stream,move...原创 2020-04-17 21:48:29 · 166 阅读 · 0 评论 -
STL之容器
unordered map == hash mapunordered set == hash setunordered 容器通过hash table实现set,map,multiset,multimap 存入元素必须有比较运算(如<,要保证序关系)unordered_set,unordered_map,unordered_multiset,unordered_mul...原创 2020-04-17 21:39:20 · 173 阅读 · 0 评论 -
STL整体结构
STL整体结构包含六大组件容器(containers)--各种数据结构(vector,list,array,Deque,Set,Map),各容器为类模板 算法(Algorithms)--是用来操作容器中数据的函数模板,sort,search,copy,erase等, 迭代器(Iterators)--提供访问容器中对象的方法,扮演容器和算法的之间的胶合剂,为一种Class Template,...原创 2020-04-17 21:47:26 · 273 阅读 · 0 评论 -
c++11语言新特性
模板的闭符之间不需要空格:vector<list<int> > 等同于vector<list<int>> nullptr取代0或者NULL 以auto完成类型自动推导 一致性初始化与初值列;使用大括号进行初始化动作,如: int values[]{1,2,3} vector<int> v{1,2,3};初值列如:int ...原创 2020-04-17 21:42:21 · 221 阅读 · 0 评论 -
c++ struct和class区别
class的默认访问权限是private,struct的默认访问权限是public class D:Base(),struct D:Base(); class默认是private,struct 默认是public原创 2020-04-17 21:50:35 · 158 阅读 · 0 评论 -
c++模板
模板是c++泛型编程的基础,是实现代码重用机制的一种工具,他可以实现类型参数化,即把类型定义为参数,从而实现真正的代码可重用性。模板分为两类,一个是函数模板,另外一个是类模板。形式为template<typename T>/template<class T> 函数模板的实例化(利用给定的实参来推断模板参数或者是指定的模板参数)在编译期进行 编译器不能为类模板推断模板参数...原创 2020-04-17 21:49:24 · 309 阅读 · 0 评论 -
c++ RAII
概念:RALL(Resource Acquisition Is Initialization),也称为“资源获取就是初始化”,是c++语言的一种管理资源,避免泄漏的惯用法。 效果:c++标准保证任何情况下,已构造的对象(生命周期结束时)最终会销毁,即它的析构函数最终会被调用。 智能指针就是通过使用RAII技术,来保证资源正确的初始化和释放,实质上是一个对象,行为上表现得却像一个指针...原创 2020-04-17 21:51:29 · 559 阅读 · 0 评论 -
std::bind
1.概念:通用的函数适配器,它接受一个可调用对象(普通函数,函数指针,函数对象,lambda表达式,bind创建的对象),生成一个新的可调用对象(函数对象/std::function)2.实现原理:它可以将函数(函数指针、functor、lambda)和函数所需的参数(任意个数参数)绑定为一个对象,我们在后续用到的时候可以直接调用这个对象的operator()函数即可实现对这个函数的调用。...原创 2020-04-17 21:53:52 · 212 阅读 · 0 评论