【C/C++学院】0816-引用包装器/仿函数/转义字符 R”()”/using别名/模板元编程 比递归优化/智能指针/多线程/静态断言以及调试技能的要求 assert
2023-09-14 08:57:16 时间
//创建函数指针,类结构体,数据私有,代码共享
//函数通过调用,调用需要传递对象名进行区分
void(MyStruct::*p)(int ) = MyStruct::add;
cin.get();
int main1()
MyStruct struct1;
//auto自动变量,地址,函数指针,bind绑定
//第一个参数引用内部函数,绑定一个实体对象,
auto func = bind( MyStruct::add, struct1, _1);//一个参数
auto func2 = bind( MyStruct::add2, struct1,_1, _2);//二个参数
auto func3 = bind( MyStruct::add3, struct1, _1, _2,_3);//三个参数
func(100);
func2(10, 20);
func2(10, 20, 30);//只会接收前2个参数
func3(10, 20,30);
cin.get();
return 0;
}
转义字符 R”()”
#include iostream #include string #include stdlib.h
std::string path =R"( "C:\Program Files\Tencent\QQ\QQProtect\Bin\QQProtect.exe")"; //R"()" 括号之间去掉转义字符 system(path.c_str()); system("pause"); }
using别名
#include iostream模板元编程 比递归优化
using FUNC = int (*)(int a, int b);//别名 using co = std::ios_base::fmtflags;//using只可以用于简写数据类型 void main() ADD p=add; std::cout p(1, 2) std::endl; FUNC func = add; std::cout func(1, 2) std::endl; //space::ptr int pint(new int(15)); //std::cout *pint " " pint std::endl; std::cin.get();
#include iostream //模板元把运行时消耗的时间,在编译期间优化 template int N struct data enum {res =data N-1 ::res+data N-2 ::res}; template struct data 1 enum {res =1}; template struct data 2 enum {res= 1 }; //递归 斐波那契数列 //1 1 2 3 5 8 int getdata(int n) if (n==1 || n==2) return 1; else return getdata(n - 1) + getdata(n - 2); void main() const int myint = 40; int num = data myint ::res;// 内部不可以有变量 std::cout num std::endl; std::cout getdata(40) std::endl;
//利用模板特化机制实现编译期条件选择结构,利用递归模板实现编译期循环结构,模板元程序则由编译器在编译期解释执行。 //优劣及适用情况 //通过将计算从运行期转移至编译期,在结果程序启动之前做尽可能多的工作,最终获得速度更快的程序。也就是说模板元编程的优势在于: //1.以编译耗时为代价换来卓越的运行期性能(一般用于为性能要求严格的数值计算换取更高的性能)。通常来说,一个有意义的程序的运行次数(或服役时间)总是远远超过编译次数(或编译时间)。 //2.提供编译期类型计算,通常这才是模板元编程大放异彩的地方。 //模板元编程技术并非都是优点: //1.代码可读性差,以类模板的方式描述算法也许有点抽象。 //2.调试困难,元程序执行于编译期,没有用于单步跟踪元程序执行的调试器(用于设置断点、察看数据等)。程序员可做的只能是等待编译过程失败,然后人工破译编译器倾泻到屏幕上的错误信息。 //3.编译时间长,通常带有模板元程序的程序生成的代码尺寸要比普通程序的大, //4.可移植性较差,对于模板元编程使用的高级模板特性,不同的编译器的支持度不同。
#include iostream void main1() //auto_ptr; for (int i = 0; i 10000000; i++) double *p = new double;//为指针分配内存 std::auto_ptr double autop(p); //创建智能指针管理指针p指向内存 //智能指针 //delete p; std::cin.get(); }
C++11智能指针
#include iostream #include memory //内存 void main() for (int i = 0; i 10000000;i++) //新型指针,新型的数组 std::unique_ptr double pdb(new double); //double *p = new double; std::cin.get(); }
#include thread #include iostream #include windows.h #include vector using namespace std; using namespace std::this_thread; void msg() MessageBoxA(0, "12345", "678910", 0); void msgA(int num) std::cout get_id() " num= " num std::endl; void main1() // thread::hardware_concurrency线程 auto n = thread::hardware_concurrency(); std::cout n std::endl; //获取当前线程编号 std::cout "thread=" get_id() std::endl;
C++第十一节——单例模式 C++11 智能指针 异常 有关讲述 可以用同样的方式来实现,就是将构造函数私有化,然后让创建类的时候只能通过一个接口函数来实现,而在这个接口函数中我们将其创建在栈上。
从C语言到C++你必须学会的---动态内存和智能指针 不管你是C++初学者,还是想从C语言转变为C++,你都应该了解C++的动态内存和智能指针,今天我们就来看一下有关这两个方面的内容。 本文章内容篇幅较长,且干货满满,感兴趣的大家可以收藏+点赞,以后慢慢看!
【C++11】Smart Pointer 智能指针 首先看一个下面的栗子,左边是木有使用智能指针的情况,当执行foo()函数,其中的e指针会在bar(e)时传入bar函数,但是在bar函数结束后没有人为delete e时,就会导致内存泄漏;但是在右边的栗子中,使用了unique_ptr智能指针(single ownership),就能防止内存泄漏。
相关文章
- [C++]怎么将.h和.cpp文件分别放在不同的目录
- 【C/C++学院】0904-boost智能指针/boost多线程锁定/哈希库/正则表达式
- 【C/C++学院】0826-文件重定向/键盘输入流/屏幕输出流/字符串输入输出/文件读写简单操作/字符文件读写二进制与文本差别/get与getline挖掘数据/二进制与文本差别/随机位置/多线程初级
- MAC配置C++运行环境
- C++ thread类多线程编程
- C++ 多线程(两个线程卖火车票)
- (C++)浅谈多态基类析构函数声明为虚函数
- (C++)C++类继承中的构造函数和析构函数
- C++多线程编程笔记
- C语言/C++常见习题问答集锦(二十八)
- paip.提升用户体验---c++ qt自定义窗体(2)---边框线的绘制
- C++多线程编程超详解
- 在Qt(C++)中使用QThread实现多线程
- 【华为OD机试 2023最新 】 人数最多的站点(C++ 100%)
- 【华为OD机试 2023】 打印机队列(C++ Java JavaScript Python)
- 解答私信@被c++折磨头秃的花季美少女 //C++ 编写一个进阶版的进制转换程序,运行功能如下:请选择要输入的数字的进制(2、8、10、16):请输入该数字:请选择要转换成的进制(2、8。。。
- c++ socket 多线程 网络聊天室
- c++11 测量时间
- 复习C++标准库多线程的基本使用
- C++多线程编程:同步之互斥量Mutex
- C/C++每日面试之句子的逆序
- C++多线程使用条件变量
- C++ 多线程同步之临界区(CriticalSection)
- C++单例结合智能指针解决释放
- C++ Primer Plus 文章17章 进,输出和文件
- C++ in Chromium 101 - Codelab 编程开始 bind 多线程 回调
- C++移位运算符
- c++ vector C++ vector存放结构体 并且排序
- C++之非const引用无法绑定临时变量原因(一百一三十六)
- C++11 完美转发
- C++11 __func__预定义标识符
- C++并行计算之OpenMP多线程
- 使用C++智能指针的树结构的问题
- C/C++编程工具及实用小软件推荐