C++
学习C++过程中遇到的问题,总结的笔记等
rungo_liang
这个作者很懒,什么都没留下…
展开
-
std::bind实现在类外访问类私有成员函数
#include <iostream>#include <functional>using namespace std;class test;typedef std::function<void (test*)> Func;class test{ public: Func get(void){ return std::bind(&test::privat原创 2022-04-10 16:00:41 · 722 阅读 · 0 评论 -
自由链表(free list)——SGI STL的空间配置器(allocator)第二级配置器维护方法
参考:STL空间配置器之第二级配置器的free-list详解/*free list的节点*/union obj{ union obj * free_list_link; // 第一字段 char client_data[1]; // 第二字段};/*16个free list的头指针存放于数组free_list[]*/static obj * volatile free_list[16];(1)链表头指针数组free_list[ ] 自由链表free list包含了16个链表,每个链原创 2021-10-30 21:57:08 · 2080 阅读 · 3 评论 -
C++ Lambda表达式
参考:C++ 11 Lambda表达式C++之Lambda表达式1、Lambda表达式写法格式[捕获变量列表] (输入参数列表) mutable 或 exception 声明 -> 返回值类型 {函数体}几种省略写法:[] (输入参数列表)-> 返回值类型 {函数体} // 捕获变量列表为空[] (输入参数列表){函数体} // 自动推导返回值类型,没有return语句时返回类型为void[]{函数体} // 捕获列表、输入参数均为空2、Lambda的名称与执行2.1为L原创 2021-10-18 19:38:13 · 268 阅读 · 0 评论 -
C++ 模板的特化(specialization)
参考:C++模板的偏特化与全特化#include <iostream>/***************************函数全特化***************************/template<typename T1,typename T2>void fun(T1 t1, T2 t2) { std::cout << t1 << " " << t2 << std::endl;}/** 全特化模板函原创 2021-10-16 19:01:12 · 695 阅读 · 0 评论 -
C++ 哑元参数
参考:C++ static 函数的定义、使用,参数只有类型,没有形参是什么情况?C++编译器会对函数名进行名字修饰(name mangling),名字修饰是函数名和参数类型的组合,编译器以此来区分重载函数。而如果重载函数的参数列表一样时,编译器将会报告重复定义。因此加入一个没有形参名、只有形参类型的哑元参数用于区分不同的重载函数,这个哑元参数在函数内部不能也不需要使用#include <iostream>void fun(int) { std::cout << "u原创 2021-10-16 16:58:51 · 392 阅读 · 0 评论 -
C++ 可变参数列表 与 列表初始化
可变参数列表参考:文章1 文章2列表初始化参考:c++initializer_list详解#include <iostream>#include <stdarg.h> // 使用可变参数列表需要这个头文件/** 可变参数列表* num:将要输出的数字个数* buf:需要输出的数字*/void outprint(int num, ...) { va_list buf; // 定义一个可变参数列表buf va_start(buf,num); //开始取用,num为原创 2021-10-16 16:31:19 · 378 阅读 · 0 评论 -
C++ 可变模板参数初探
参考:泛化之美–C++11可变模版参数的妙用根据参考资料,简单验证了一下模板函数、模板类中总共4种情况。4种情况的详细讲解直接看参考资料吧,大佬写的非常好,在这里本人就不瞎说了。#include <iostream>//用哪个就取消相应注释#define func_recursion // 可变模板参数函数——递归法//#define func_comma // 可变模板参数函数——逗号表达式法//#define class_recursion // 可变模板参数类——原创 2021-10-16 14:44:06 · 290 阅读 · 0 评论 -
C++ traits萃取技术初探
阅读了大佬的博客C++ traits技术浅谈。为了方便自己的理解,对给出的代码稍加注释和修改。#include <iostream>using namespace std;/*先定义一些tag*/struct A {};struct B : A {}; // 继承的好处就是,当函数需要参数为A,而你传入的参数为B的时候,可以往上一直找到适合的对象// unknown_class类用来掩盖实际类型,测试萃取器的作用template <class realtype>原创 2021-10-15 17:59:42 · 213 阅读 · 0 评论 -
C++ Copy Constructor什么时候才会被编译器生成出来呢?
文章内容基于《深度探索C++对象模型》P48~60整理得到,掺杂个人理解,如有错误,敬请斧正!还可结合我另一篇博客一起看:Default Constructor什么时候才会被编译器生成出来呢?原文:“和default constructor一样,copy constructor也是在‘必要的时候’才由编译器产生出来。……就像default constructor一样,C++ Standard上说,如果class没有声明一个copy constructor,就会有隐式的声明或隐式的定义出现。和以前一样,C原创 2021-05-16 19:30:26 · 234 阅读 · 0 评论 -
C++ Default Constructor什么时候才会被编译器生成出来呢?
文章内容基于《深度探索C++对象模型》P39~59整理得到,掺杂个人理解,如有错误,敬请斧正!注:文中“合成”一词一般指的是“编译器implicit声明nontrivial的default constructor”这个动作一、Default Constructor首先default constructor指的是在声明class object时可以不用给定参数的constructor。分为两大类:1、explicit声明的default constructor(1)无参数的constructor原创 2021-05-16 11:12:00 · 1048 阅读 · 4 评论 -
C++ vector二维方阵初始化
vector<vector<int> > result(n,vector<int>(n)); //result有n个元素,每个元素都是vector<int>(n)的数组原创 2021-03-29 20:39:46 · 266 阅读 · 0 评论 -
C++【泛型编程】
谭书:谭浩强版《C++程序设计(第3版)》Cpp:《C++ Primer Plus(第6版)》EC:《Effective C++(第3版)》一、模板函数模板【CppP231】声明:template<typename Type> void fun(Type a,float b);定义:template<typename Type>void fun(Type a,float b){……}(1)函数模板本身不会创建任何函数,只有在调用函数模板时才会根据实际情况创建相原创 2021-01-31 10:37:21 · 235 阅读 · 0 评论 -
C++【面向对象】
谭书:谭浩强版《C++程序设计(第3版)》Cpp:《C++ Primer Plus(第6版)》EC:《Effective C++(第3版)》一、类类的声明【谭书P245 P289】(1)类是一种抽象的数据类型,并不占用存储空间,因此不能在类的声明中对成员变量进行初始化。(2)对一个类进行“提前引用声明”后,可以用该类的名字来定义指向该类的对象的指针变量、对象的引用。虽然这时系统还没见到这个类的声明的具体内容,但指针变量和引用与其所指向的类的对象的大小无关,因此是合法的。二、对象对象的初始化原创 2021-01-31 10:25:59 · 215 阅读 · 0 评论 -
C++【基础】
今天调试的时候,一开始定义了一个宏定义:#define status 0用这个宏定义去作if语句的判断,虽然是0,但结果直接就进入if里面了。。if(status){……}然后把宏定义改成了bool型变量,就不会进if了。。bool status = false;有大佬看到了知道原因的话麻烦不吝赐教。。谢谢...原创 2020-11-21 21:12:46 · 459 阅读 · 0 评论