随笔分类 - C/C++学习笔记
学习C/C++时的一些想法
摘要:拷贝构造函数 class Foo{ public: Foo(); Foo(const Foo&); //自己定义的拷贝构造函数 }; 如果不自己定义,编译器会自己合成一个默认拷贝构造函数: class Foo{ public: int a,b,c; Foo(); Foo(const Foo&); /
阅读全文
摘要:new在申请内存时,他将内存分配和对象的构造放在了一起,delete也将对象的析构和内存的释放结合在一起。但allocator类允许将内存分配和对象构造分开。 分配内存 allocator<string> alloc; auto p = alloc.allocate(n); 构造对象 根据args调
阅读全文
摘要:智能指针:shared_ptr类 shared_ptr是一个模板类,智能指针本质是个对象,有一些方法可以调用。 shared_ptr<int> p; p.get();//获得指针的值(内存地址) p.use_count();//有几个智能指针指向这个内存地址 p.unique();//如果p.use
阅读全文
摘要:bind()是一个函数适配器,返回一个可调用对象,他可以将一个函数的参数列表做魔改。 设置默认参数 using namespace std::placeholders; void f(int a, int b) { cout << a << ' ' << b; } int main() { int
阅读全文
摘要:https://stackoverflow.com/questions/19735395/stl-assignment-operator-vs-assign-member-function assign函数的主要作用是将一种容器的数据复制到另一种容器 vector<int> v; list<int>
阅读全文
摘要:CPP的IO类 继承图: IO对象不能拷贝或赋值 istream in = cin; //错! istream &in = cin; //正确! IO对象的状态 strm::good:读正常 strm::fail:读失败,但可以恢复,例如:一个整数类型的变量读到了字母。 strm::eof:读到文件
阅读全文
摘要:auto推导类型忽略顶层const,不忽略底层const。 顶层const:指针或引用本身是const不可变,也就是指针指向的内存地址不可变,但指向的内存内容可变。 底层const:指针指向的内存地址可变,但指向内存的内容不可变。 const int a = 10; auto x = a; //x是
阅读全文
摘要:指针是一个实体,有自己的地址;引用只是一个别名,取地址操作为被引用对象的地址 引用只能在定义时被初始化一次,且不能为空,指针可以修改 sizeof 引用,得到的是所指向变量的大小;sizeof 指针,得到的是指针的大小; 指针 ++,是指指针的地址自增;引用++是指所指变量自增; 引用是类型安全的,
阅读全文
摘要:一般字符字面值用前缀,数字字面值用后缀: ——C++ Primer第五版2.1.3
阅读全文
摘要:静态变量具有全局变量的生命周期,但属于不同作用域。 (全局)静态变量:作用域为本文件,无法在别的文件用extern声明。 局部静态变量:作用域为所在代码块。 类内静态变量:作用域为类内。 静态成员函数只能访问类的静态变量,不能访问某个对象的非静态变量。 全局变量、(全局)静态变量、类内静态变量在编一
阅读全文
摘要:静态库 静态库的链接过程 #include <cstdio> void foo(); extern int b; //foo函数和b的定义都在libh.a里 int main() { foo(); int a = b; foo(); return b; } 编译成目标文件:g++ a.cc -g -
阅读全文
摘要:假设一个cpu一次只从内存中读取8个字节,那么cpu的只能读取0,8,16,24,...,倘若有一个结构体这么定义: struct x { int x; double y; }; 结构体内存结构如下: 此时,若想读取 y 值,则cpu必须读取两次内存:第一次读取字节0-8,第二次读取字节9-16,然
阅读全文
摘要:cin不仅遇到EOF会返回无效状态(通常用来终止循环),遇到无效输入的时候也会返回无效状态,比如向整型变量输入字符。 char类型的大小和机器有关,最小8位,大多数机器字节(byte)是8位,byte是可寻址的最小内存块,所以地址的尺寸就是byte的尺寸。 char是signed char或者uns
阅读全文
摘要:如何确定一个变量的类型 [toc] 1.如果一个变量声明中没有括号 如果一个变量声明中没有括号,从 右往左读 ,离变量名 最近的修饰符 确定这个变量的类型。如果最近的修饰符是 指针或引用 ,那么除了这个修饰符,其余部分(也从右往左读)确定这个指针(引用)指向什么类型。 如何声明一个数组的指针?注意,
阅读全文
摘要:不用额外变量可以在函数中得到数组长度信息,函数的形参声明为数组引用 cpp include using namespace std; void f(int(&a) [3]) { //不能声明为 int& a[3], 这样会被认为是引用的数组 cout 注意:实参和形参数组的长度必须一样
阅读全文
摘要:https://img2020.cnblogs.com/blog/1742389/202003/1742389-20200308170929994-1015936864.png
阅读全文
摘要:彻底搞清 const int\ , int const\ , int \ const\ ... 其实做一下实验就可以轻松总结出来 const 和 指针混合起来的用法. 先说结论: 查const后边的 号的数量,有几个\ , 就修饰的几级指针. 实验1: int\ \ const p 修饰p本身 实验
阅读全文
摘要:explicit 关键字修饰构造函数 防止类的初始化的时候进行隐式转换。 class MyClass { string m_s; int m_a, m_b; public: MyClass(string const& s, int const& a=10, int const& b=10):m_s(
阅读全文
摘要:C++ 派生类对象的构造与析构过程 因为基类的成员变量和派生类的成员变量在内存中的连续的(下面程序会验证这一点),如下图所示: 所以构造派生类对象的时候,构造成员变量的过程就像入栈一样: 那么很自然,派生类对象析构的时候就是出栈的过程,先进后出,后进先出: 下边一个简单的程序验证这个结论:
阅读全文
摘要:lvalue(左值)和rvalue(右值) 昨天写代码遇见一个这样的错误: 代码类似下边 编译器告诉我们:“不能将非const的lvalue引用 和 rvalue绑定”,里边有两个关键词: 和`rvalue`。 什么是lvalue(左值) 简单定义:内存中有确定存储地址的对象的表达式的值,可以是一个
阅读全文

浙公网安备 33010602011771号