c++
杳杳星河
这个作者很懒,什么都没留下…
展开
-
c++函数对象
1.可调用对象需要重载operator()class G {public: int operator()(int i, int j) { return i + j; }};调用方式一定是一个G的对象,然后参数为两个int。 G g; cout << g(40, 50) << endl; cout << G()(30, 40) << endl; cout << greater<int>()(11,原创 2021-08-11 19:51:04 · 96 阅读 · 0 评论 -
函数,类模板全特化,偏特化
以一个普通函数模板为例:template <typename A, typename B>void f(A a, B b) {}template <typename A>void f(A a, int b) {} //这个写法有点奇怪,我认为这里是重载,跟偏特化有迷惑性void f(char a, int b) {} //普通的函数template <>void f(char a, int b) {} //这跟上面的f是同一个意思,不属于全特原创 2020-12-30 11:48:22 · 266 阅读 · 0 评论 -
c++ 默认移动构造函数
class Test {public: Test(int v, const string& str) { p = new int(v); s = str; cout << "test()" << endl; } ~Test() { cout << "~Test()" << endl; delete p; p = nullptr;原创 2020-12-28 18:01:21 · 3643 阅读 · 2 评论 -
windows异步之APC验证
using namespace std;HANDLE hfile;OVERLAPPED ov = { 0 };void __stdcall apc(DWORD dwErrorCode, DWORD dwNumberOfBytesTransfered, LPOVERLAPPED lpOverlapped) { cout << "enter apc" << endl; cout << dwErrorCode << ", " << dwNu.原创 2020-12-04 21:36:52 · 168 阅读 · 0 评论 -
windows线程用户模式同步测试
1.利用Interlocked序列函数,原子同步俩个线程,不停的对gl_num进行修改,gl_num = 5 认为是未加锁的状态,6是加锁状态调用InterlockedExchange(&gl_num, 6)以后:返回的值是5,表明是该线程拿到了“锁”,可以执行代码,同时执行完成后置为5.返回的不是5,而是6,则说明这个线程未拿到锁,需要sleep。等拿到锁的释放后再次竞争。#include <Windows.h>#include <iostream>#i原创 2020-12-04 15:57:09 · 95 阅读 · 0 评论 -
reserver_iterator 失效问题
真是蛋疼啊,今天打开牛客网,准备写一道生成Gray码的题目,结果居然发现了一个坑。题目:在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码。给定一个整数n,请返回n位的格雷码,顺序为从0开始。测试样例:1返回:["0","1"]要求用递归,我的想法:1位: 0,12位:00,01,11,103位: 000, 001 ,011, 010 , 110 ,...原创 2020-11-25 21:07:23 · 166 阅读 · 0 评论 -
&重载 ,std::ref
今天研究了半天。&既可以是取地址符的重载,也可以引用的重载。如下:class Test {public: int operator & () { //取地址符&的重载 return 122; } operator int& () { //int& 引用的重载 return v; } operator float& () { return vf; }pr...原创 2020-11-20 20:17:44 · 169 阅读 · 0 评论 -
vs2019 进入库函数源码调试
默认F11不会进入一些标准库源码,把这个选项改一下就可以了。原创 2020-11-19 15:57:31 · 3439 阅读 · 3 评论 -
std::thread 中的一些问题理解
class bak_task {public: void operator()() { cout << "bak task run" << endl; }};int main() { thread t { bak_task() }; t.join(); // t.detach(); return 0;}1.std::thread 对象t创建完成以后,内部调用_beginthreadex创建底层线程,称之为_Thr。_Thr实际是包含 线程的句柄和i..原创 2020-11-19 13:06:43 · 1339 阅读 · 0 评论 -
fsteam in out ate app理解
这里的放的不是很好,个人理解,以fstream为例子:1.以in方式打开时,可以搭配ate,binary2.以out方式打开时,可以搭配app,ate,trunc,binary。默认out是out | trunc,会清空。如果不想清空,则用out | app。3.以in|out同时打开,可以搭配app,ate,trunc,binary(与out一样)。app与ate的区别:1.app只能搭配out,ate in|out都可以2.单独out|ate没啥大用处,会清空文件,也不能seekp。3.原创 2020-11-18 19:13:28 · 806 阅读 · 0 评论 -
GBK UTF-8 UTF-16 宽字符,中文输出
1.GBK是中国标准,每个汉字2个字节2.Unicode是国际标准,每个汉字分配一个unicode编码。3.unicode的编码实现有多种表示形式,比如UTF-8,UTF-16…。UTF-8有的汉字是3个字节。4.定义 const char m[] = “你好”; 时,"你好"所占的字节与cpp文件的格式(GBK,UTF-8,UTF-16…)有关。例如string s = “你好”;默认这里是GBK,s.size() = 4如果把文件格式改成UTF-8,则每个汉字为3个字节,s.size() =原创 2020-11-18 12:10:20 · 673 阅读 · 1 评论