c/c++
huanhuaqian
这个作者很懒,什么都没留下…
展开
-
c++ std::function
std::function原创 2022-10-23 14:35:52 · 323 阅读 · 1 评论 -
.o .a .lo .la
动态静态库原创 2022-08-17 09:48:23 · 233 阅读 · 0 评论 -
笔记:静态成员static
static原创 2022-06-09 23:57:17 · 110 阅读 · 0 评论 -
模板template
c++ 模板template原创 2022-06-09 23:48:35 · 248 阅读 · 0 评论 -
c++ 宏中#和##
C/C++ 的宏中:#:功能是将其后面的宏参数进行字符串化操作,简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。##:连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。凡是宏定义里有用#或##的地方宏参数是不会再展开,例如_STRI(INT_MAX)中的INT_MAX就不会被展开为2147483647。如果想要使其中的宏参数展开,则需要多加一层中间转换宏: #define STRI(s) _STRI(原创 2022-05-15 23:32:21 · 3759 阅读 · 1 评论 -
thread
目录线程安全创建线程std::thread 创建线程 (线程不安全)互斥量(mutex) 原子变量(atomic)std::threadthread_local线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取 完,其他线程才可使用。不会出现数据不一致或者数据污染。”创建线程std::thread 创建线程 (线程不安全)#include <iostream>#includ原创 2022-05-15 21:00:43 · 191 阅读 · 0 评论 -
#define #undef noexcept
#define #undef#define:宏定义,程序在预处理阶段将用define定义的内容进行替换。#undef 取消一个宏的定义,限制宏定义的有效范围;#include <iostream>using namespace std;int main() { #define MODI 10 cout << "MODI = "<< MODI << endl; #undef MODI c原创 2022-05-15 17:42:14 · 217 阅读 · 0 评论 -
左值引用、右值引用&vector
目录左值引用右值引用构造函数的左引用和右引用左值引用demoint a = 10;int &b = a; // 定义一个左值引用变量b = 20; // 通过左值引用修改引用内存的值左值引用在汇编层面其实和普通的指针是一样的;定义引用变量必须初始化,因为引用其实就是一个别名,需要告诉编译器定义的是谁的引用。int &var = 10;上述代码是无法编译通过的,因为10无法进行取地址操作,无法对一个立即数取地址,因为立即数并没有在内.原创 2022-05-13 23:38:57 · 476 阅读 · 0 评论 -
学习笔记:局部类
局部类:在函数内部创建的类1、 作用域仅限于函数内部2、其所有的成员必须定义在类内部,不允许定义static成员变量3、 成员函数不能直接访问函数的局部变量(static变量除外)int g_age =10;void test(){ static int age =10; // 局部类 class Car{ public: void run(){ age = 20; } .原创 2022-02-21 00:46:55 · 94 阅读 · 0 评论 -
学习笔记:内部类(嵌套类)
如果将类A定义在类C的内部,那么类A就是一个内部类(嵌套类)内部类的特点1. 支持 Public, protected, private权限2. 成员函数可以直接访问外部类对象的所有成员(反过来则不行)3. 成员函数可以直接不带类名,对象名访问其外部类的static成员4. 不会影响外部类的内存布局。(仅仅是限制了访问权限)5. 可以在外部类内部声明,在外部类外面进行定义1. 支持 Public, protected, private权限#include <iostre原创 2022-02-21 00:44:26 · 438 阅读 · 0 评论 -
学习笔记:编译器自动生成的构造函数
c++的编译器在某些特定的情况下,会给类自动生成无参的构造函数,比如1. 成员变量再声明的同时进行了初始化2. 有定义虚函数3. 虚继承了其他类4. 包含对象类型的成员,且这个成员有构造函数(编译器生成或自定义)5. 父类有构造函数总结: 对象创建后,需要做一些额外操作时(比如内存操作,函数调用),编译器一般都会为其生成构造函数。demo:不会自动生成构造函数1. 无成员变量时,无需进行变量的初始化,在编译时没有必要生成构造函数。class Person {};原创 2022-02-20 23:59:46 · 704 阅读 · 0 评论 -
引用和指针
C++中的引用:引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。引用(reference)是c++对c语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。其格式为:类型 &引用变量名 = 已定义过的变量名。引用的特点:①一个变量可取多个别名。②引用必须初始化。③引用只能在初始化的时候引用一次 ,不能更改为转而引用其他变量。#include <iostream>int ma...原创 2022-02-08 22:04:05 · 532 阅读 · 0 评论 -
学习笔记:堆空间
在程序运行过程,为了能自由控制内存的声明周期、大小,会经常使用堆空间的内存堆空间的申请\释放malloc \free new \ delete new[] \delete[]int *p = (int *) malloc(4);* p = 10;下图是上面两行在X86环境的内存空间分布demo:#include <iostream>#include <cstring>using namespace std;void test(){ ...原创 2021-12-09 00:32:29 · 368 阅读 · 0 评论 -
堆栈,指针
转载:野指针及c++指针使用注意点 - 小菜鸡y - 博客园野指针1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。char *p; //此时p为野指针2)指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针.char *p=new char[10]; //指向堆中分配的内存首地址,p存储在栈区cin&.原创 2021-12-08 23:27:02 · 538 阅读 · 0 评论 -
学习笔记:友元
如果将函数A(非成员函数)声明为类C的友元函数,name在函数A内部就能直接访问类C对象的所有成员如果将类A声明为类C的友元类,那么在类A的所有成员函数内部都能直接访问类C对象的所有成员无友元demo:// 通过调用成员函数getx(),gety(),获取成员变量,增加开辟,关闭栈空间开销#include <iostream>#include <cstring>using namespace std;class Point { int m_x; .原创 2021-11-29 00:10:29 · 476 阅读 · 0 评论 -
学习笔记:隐式构造
隐式构造函数//C++中存在隐式构造的现象:某些情况下,会隐式调用单参数的构造函数// 隐式构造函数// C++ 中存在隐式构造的现象:某些情况下,会隐式调用单参数的构造函数#include <iostream>#include <cstring>using namespace std;class Person{private: int m_age;public: Person(/* args */) { ...原创 2021-11-28 23:25:29 · 647 阅读 · 0 评论 -
学习笔记:拷贝构造函数(浅拷贝,深拷贝)
#include <iostream>#include <cstring>using namespace std;class Car{ int m_price; char * m_name; void copy(const char * name =NULL){ if(name == NULL) return; // 申请新的堆空间 m_name = new char[strlen(name) + ...原创 2021-11-28 21:41:30 · 381 阅读 · 0 评论 -
笔记:继承
#include <iostream>using namespace std;struct Student{ int m_score; Student(int score) :m_score(score){cout << "Student::Student() - m_score = " << m_score << endl;} void study(){ cout << "Student::s...原创 2021-10-26 00:07:16 · 77 阅读 · 0 评论 -
虚析构函数
#include <iostream>using namespace std;struct Animal{ int m_age; void speak(){ cout << "Animal::speak()" << endl; } void run(){ cout << "Animal::run()" << endl; } Animal() { ...原创 2021-10-26 00:05:42 · 60 阅读 · 0 评论 -
父类指针、子类指针,多态,虚表
目录父类指针指向子类对象子类指针指向父类对象多态c++默认根据指针类型调用对应的函数非多态democ++中的多态通过虚函数实现(virtual修饰)虚函数实现demo虚函数实现原理汇编分析内存分析父类指针指向子类对象父类指针指向子类对象,是安全的的(继承方式必须是public)子类指针指向父类对象子类指针指向父类对象是不安全的struct Person{ int m_age;};struct Student...原创 2021-10-19 00:38:52 · 1174 阅读 · 0 评论 -
对象和内存
类的定义#include <iostream>using namespace std;class Persion{public: int m_age; //void run(Persion *persion){ // //显示调用 // cout << persion->m_age << " run()" <<endl; //} void run(){ //th原创 2021-10-10 13:42:01 · 110 阅读 · 0 评论 -
内联函数.
//内联函数//函数调用将展开为函数体代码编译器也会自动进行一定程度的优化,将部分可优化的函数调用直接展开。/*什么时候使用内联函数1、函数代码体积不大2、频繁调用(避免频繁开辟、回收栈空间)*/#include <iostream>using namespace std;inline void func(){ cout << "func1()" <<endl; cout << "func2()" <&原创 2021-10-10 11:13:23 · 63 阅读 · 0 评论