02 2024 档案
摘要:今天设计一个类时,根据需求在网上学到了单例模式,重新梳理了private构造析构函数的作用。 构造函数和析构函数 private 私有成员只能在类域内被访问,不能在类域外进行访问。 无论将构造函数还是虚构函数设置为private,都可以防止外部创建栈对象,而只能由类的成员函数创建(实际上只能由类的静
阅读全文
摘要:起因是做gitlet读取文件内容时遇到的内容不匹配错误,后来发现是自己读取文件内容时均使用getline函数,写回时读入的每个字符串都加上换行符,导致文件末尾可能多出换行符。 于是改成了 vector<string> Blob::readContentsForBlob(const string& f
阅读全文
摘要:鉴于git命令总是忘记,在此稍微记录一下 git命令 创建仓库 git init 初始化本地仓库 git clone url 克隆远程仓库 配置仓库 查看全部配置 git config --list 常用修改用户和邮箱 本仓库配置 git config user.name "your-usernam
阅读全文
摘要:std::thread thread() noexcept 创建一个空线程对象,什么也不做 template <class Fn, class… Args> explicit thread(Fn&& fn, Args&&… args) 创建线程,以 fn(args…) 作为线程函数执行 Fn 必须是
阅读全文
摘要:右值 每个 C++ 表达式都有一个类型,属于值类别。 值类别是编译器在表达式计算期间创建、复制和移动临时对象时必须遵循的规则的基础。 C++17的值类别有: glvalue (generalized lvalue):表示对象身份的表达式,如变量名、函数名、类名等(包括具名右值引用,匿名右值引用比如s
阅读全文
摘要:copy elision是指编译器为了优化,将不需要的copy操作直接省略了。比如函数返回值的copy操作和构造函数的copy操作等。 例子如下 #include<iostream> using namespace std; class A{ public: A(){ cout<<"default
阅读全文
摘要:可调用对象 函数 函数指针 函数类 lamda表达式 bind对象 函数类 重载了函数调用运算符()的类的对象,称为函数对象,也叫仿函数。 class callable { public: void operator() (int x) const { cout << "callable::oper
阅读全文
摘要:网络基础 各种协议的端口可以在/etc/services中查看,对应的protocol(IP头中的协议字段)在/etc/protocols。 常用检错方法: CRC 循环冗余校验,用于以太网帧 Checksum 检验和,双字节反码求和,回卷溢出(低位+1),最后取反,用于IP数据报(IP首部)、TC
阅读全文