C++
语言特性等
飞、
这个作者很懒,什么都没留下…
展开
-
Unit Test
https://www.tsingfun.com/it/cpp/google_mock.html原创 2021-10-27 15:39:11 · 94 阅读 · 0 评论 -
C/C++内存对齐
1、什么是内存对齐还是用一个例子带出这个问题,看下面的小程序,理论上,32位系统下,int占4byte,char占一个byte,那么将它们放到一个结构体中应该占4+1=5byte;但是实际上,通过运行程序得到的结果是8 byte,这就是内存对齐所导致的。//32位系统#include<stdio.h>struct{ int x; char y;}s;int main(){ printf("%d\n",sizeof(s); // 输出8 retur转载 2020-09-04 09:58:26 · 114 阅读 · 0 评论 -
C++开发工程师笔试面试前必备知识
面试知识点原创 2020-09-02 17:22:35 · 144 阅读 · 0 评论 -
内存分配(malloc)的过程
内存分配(malloc)的过程原创 2020-09-02 15:21:31 · 533 阅读 · 0 评论 -
重要的一些API
std::optional的用法std::optional<glm::mat4> mPendingCameraUpdate;代替return null的一种方式。std::pairstd::pair<std::vector<float>, std::vector<unsigned int>> generateVeboData() const;用于函数需要返回多个参数的场景。lambda表达式、std::any_of、std::for_.原创 2020-08-24 11:35:58 · 105 阅读 · 0 评论 -
智能指针
unique_ptrunique_ptr实现独占式拥有或严格拥有概念,保证同一时间内只有一个智能指针可以指向该对象。unique_ptr<string> p3 (new string ("auto")); //#4 unique_ptr<string> p4; //#5 p4 = p3;//此时会报错!!当程序试图将一个 unique_ptr 赋值给另一个时,如果源 unique_ptr 是个右值,编译器允许这么做。unique_ptr<string> pu原创 2020-08-24 11:33:31 · 101 阅读 · 0 评论 -
模板技术(编译多态)
运行时多态通过虚函数及虚表实现。编译时多态通过模板、特化实现,通过为不同参数构建不同的类特化,实现编译时多态。模板相关,特化,部分特化://主类模板template<typename T>class Stack {private: std::vector<T> elems;};//完全特化template<>class Stack<std::string> {private: std::deque<T&原创 2020-08-24 11:29:52 · 267 阅读 · 0 评论 -
inline,friend,final,auto,decltype
inline: 修饰函数,可能被编译器优化(非一定),从而直接将函数调用替换成源码。friend: 修饰函数或者类。使得类外部方法或类可以访问本类私有成员。final:修饰类,表示不能被继承。不是一个关键字,而是一种描述符。修饰虚函数,表示一个虚函数不希望被override。auto:自动类型推导,只能推导值类型(不能推导引用类型)。“自动类型推导”实际上和“attribute”一样,是编译阶段的特殊指令,指示编译器去计算类型。如果初始化表达式是引用,则去除引用语义。如果初始化表达式为con原创 2020-08-24 11:25:58 · 147 阅读 · 0 评论 -
STL容器底层实现
C++STL的容器的底层实现详解I、vectorvector是我们用到最多的数据结构,其底层数据结构是数组,由于数组的特点,vector也具有以下特性:1、O(1)时间的快速访问;2、顺序存储,所以插入到非尾结点位置所需时间复杂度为O(n),删除也一样;3、扩容规则:当我们新建一个vector的时候,会首先分配给他一片连续的内存空间,如std::vector vec,当通过push_back向其中增加元素时,如果初始分配空间已满,就会引起vector扩容,其扩容规则在gcc下以2倍方式完成:首原创 2020-08-24 11:15:04 · 213 阅读 · 0 评论 -
C++代码执行顺序
对于子类父类的构造、析构:父类构造()->子类构造()->子类析构()->父类析构()初始化列表顺序与定义顺序无关:A():n2(0),n1(n2+2){} //n1的值不确定A(){n2=0;n1=n2+2;} //n1的值可以确定变量的初始化顺序是:1 基类的静态变量或全局变量2 派生类的静态变量或全局变量3 基类的成员变量4 派生类的成员变量类中const成员常量必须在构造函数初始化列表中初始化(或者在定义时直接初始化)。类中static成员变量,不能原创 2020-08-24 11:07:15 · 2022 阅读 · 0 评论 -
const,static,volatile,mutable
1.const它是一个类型修饰符,可以给任何对象附加上“只读”属性,保证安全;const修饰的还是变量,是运行期的,不是编译期的。编译时并不知道该变量的值。它可以修饰引用和指针,“const &”可以引用任何类型,是函数入口参数的最佳类型;它还可以修饰成员函数,表示函数是“只读”的,const 对象只能调用 const 成员函数。2.volatile它表示变量可能会被“不被察觉”地修改,禁止编译器优化(替换成常数),影响性能,应当少用。多线程下的volati原创 2020-08-24 11:03:57 · 116 阅读 · 0 评论 -
C++ 多线程
#include <iostream>#include <thread>void threadfunc(){ std::cout << "thread func" << std::endl;}int main(){ std::thread t1(threadfunc); t1.join(); //等待threadfunc运行结束 return 0;}首先定义线程对象t1,线程函数th转载 2020-07-24 10:21:08 · 121 阅读 · 0 评论 -
C++ 左值、右值
1、左值和右值的概念左值是可以放在赋值号左边可以被赋值的值;左值必须要在内存中有实体;一般是变量。右值当在赋值号右边取出值赋给其他变量的值;右值可以在内存也可以在CPU寄存器;一般是常量或临时变量或表达式。一个对象被用作右值时,使用的是它的内容(值),被当作左值时,使用的是它的地址。2、引用引用是C++语法做的优化,引用的本质还是靠指针来实现的。引用相当于变量的别名。引用可以改变指针的指向,还可以改变指针所指向的值。引用的基本规则:声明引用的时候必须初始化,且一旦绑定,不可把引用绑定到原创 2020-05-27 15:01:47 · 289 阅读 · 0 评论 -
C++对象模型
注:本文参考了:吴秦-C++对象模型一、何为C++对象模型?-在c语言中,“数据”和“处理数据的操作(函数)”是分开来声明的,也就是说,语言本身并没有支持“数据和函数”之间的关联性。在c++中,通过抽象数据类型(abstract data type,ADT),在类中定义数据和函数,来实现数据和函数直接的绑定。-概括来说,在C++类中有两种成员数据:static、nonstatic;三种成员函数:static、nonstatic、virtual。如下面的Base类定义:#include<io转载 2020-05-10 21:06:37 · 179 阅读 · 0 评论