随笔分类 -  C/C++

摘要:可以参考这篇文章:https://www.xiaolincoding.com/os/6_file_system/file_system.html#阻塞与非阻塞-i-o-vs-同步与异步-i-o 阅读全文
posted @ 2024-09-20 15:12 阿玛尼迪迪 阅读(15) 评论(0) 推荐(0) 编辑
摘要:比如定义: struct Test {}; 使用sizeof(Test)可以查看到内存占用并不是0,而是1字节。 原因主要有两点: 一是用于对象标识:在C++中,每个对象都需要有一个唯一的地址。如果空类或结构体的大小为0字节,那么创建两个这样的对象时,它们在内存中的地址将是相同的,这与C++的对象模 阅读全文
posted @ 2024-09-14 10:55 阿玛尼迪迪 阅读(39) 评论(0) 推荐(0) 编辑
摘要:一、universal references(通用引用) 当右值引用和模板结合的时候T&&并不一定表示右值引用,它可能是个左值引用又可能是个右值引用。例如: 1 template<typename T> 2 void f( T&& param){ 3 4 } 5 f(10); //10是右值 6 i 阅读全文
posted @ 2024-09-14 09:22 阿玛尼迪迪 阅读(62) 评论(0) 推荐(0) 编辑
摘要:一、何为多态 多态(polymorphism)指为不同数据类型的实体提供统一的接口,或使用单一的符号来表示多个不同的类型。比如我们熟悉的函数重载、模板技术,都属于多态。无论是模板还是函数重载,都是静态绑定的。也就是说,究竟该调用哪个重载函数或者说调用哪个模板类的实例化,在编译期就是确认的。虚函数也是 阅读全文
posted @ 2024-09-13 22:41 阿玛尼迪迪 阅读(52) 评论(0) 推荐(0) 编辑
摘要:在 C 语言中,container_of 是一个宏定义,可以通过指向结构体中的成员来获取该结构体的地址。它的定义如下: #define container_of(ptr, type, member) \ ((type *)((char *)(ptr) - offsetof(type, member) 阅读全文
posted @ 2023-04-07 10:48 阿玛尼迪迪 阅读(118) 评论(0) 推荐(0) 编辑
摘要:对于前置单目运算符,重载函数没有形参,对于后置单目运算符,重载函数有一个int型形参。这个int型参数在函数体中并不使用,纯粹是用来区别前置与后置,因此参数表中可以只给出类型名,没有参数名。 1 #include <iostream> 2 3 using namespace std; 4 5 cla 阅读全文
posted @ 2021-03-07 15:54 阿玛尼迪迪 阅读(341) 评论(0) 推荐(0) 编辑
摘要:一、当为取地址操作符重载 取地址成员函数是“类的六大默认成员函数之一”。其分为两种,普通取地址操作符和const取地址操作符。 取地址是什么意思呢?就是返回当前对象的地址,对于成员函数来讲,this指针就是它的地址。 将'&'重载重载为成员函数时,是否需要传参? Date* operator&() 阅读全文
posted @ 2021-03-07 15:33 阿玛尼迪迪 阅读(1333) 评论(0) 推荐(0) 编辑
摘要:std::move 函数在 C++ 标准库中实际上是一个非常简单的函数模板。它的主要目的是将一个对象强制转换为一个右值引用(rvalue reference),从而允许在后续的操作中对其进行移动语义(而不是复制语义)。这在处理资源密集型对象(如动态分配内存的对象)时特别有用,因为它可以避免不必要的资 阅读全文
posted @ 2021-03-02 21:29 阿玛尼迪迪 阅读(102) 评论(0) 推荐(0) 编辑
摘要:常量表达式 常量表达式(const expression)是指值不会改变并且在编译过程就能得到计算结果的表达式。显然,字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。 一个对象(或表达式)是不是常量表达式由它的数据类型和初始值共同决定,例如: 1 const int max_ 阅读全文
posted @ 2020-12-22 11:46 阿玛尼迪迪 阅读(396) 评论(0) 推荐(0) 编辑
摘要:当一个类的对象向该类的另一个对象赋值时,就会用到该类的赋值构造函数。 当没有重载赋值构造函数(赋值运算符)时,通过默认赋值构造函数来进行赋值操作 A a; A b; b = a; 注意:这里a,b对象是已经存在的,是用a对象来赋值给b的。 赋值运算符的重载声明如下: A& operator = (c 阅读全文
posted @ 2020-12-10 20:13 阿玛尼迪迪 阅读(4210) 评论(0) 推荐(1) 编辑
摘要:对象所有权 首先需要理清楚的概念就是对象所有权的概念。所有权在 rust 语言中非常严格,写 rust 的时候必须要清楚自己创建的每个对象的所有权。 但是 C++ 比较自由,似乎我们不需要明白对象的所有权,写的代码也能正常运行。但是明白了对象所有权,我们才可以正确管理好对象生命周期和内存问题。 C+ 阅读全文
posted @ 2020-10-28 20:27 阿玛尼迪迪 阅读(921) 评论(0) 推荐(0) 编辑
摘要:标准STL容器List(Linux GNU,sgi的实现),其size()函数的要遍历所有list中的元素来获得链表长度,来看看它的实现: 1 size_type size() const { 2 size_type __result = 0; 3 distance(begin(), end(), 阅读全文
posted @ 2020-09-02 21:42 阿玛尼迪迪 阅读(1780) 评论(0) 推荐(0) 编辑
摘要:概述 队列(queue)是一种只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 队列是一种先进先出(First In First Out)的线性表,简称FIFO。 允许插入的一端称为队尾,允许删除的一端称为队头。 因为已经限制了插入和删除的位置,所以对于队列,插入和删除时只需要考虑满和空两 阅读全文
posted @ 2018-06-02 16:11 阿玛尼迪迪 阅读(7543) 评论(0) 推荐(0) 编辑
摘要:首先要说明的一个问题是:如何安全地将this指针返回给调用者。一般来说,我们不能直接将this指针返回。想象这样的情况,该函数将this指针返回到外部某个变量保存,然后这个对象自身已经析构了,但外部变量并不知道,此时如果外部变量使用这个指针,就会使得程序崩溃。 使用智能指针shared_ptr看起来 阅读全文
posted @ 2018-06-01 22:44 阿玛尼迪迪 阅读(6580) 评论(5) 推荐(2) 编辑
摘要:别跟我说 return *this 表示返回当前对象,return this 表示返回当前对象的地址(指向当前对象的指针)。 正确答案为:return *this 返回的是当前对象的克隆或者本身(若返回类型为A,则是克隆,若返回类型为A&,则是本身)。 return this 返回当前对象的地址(指 阅读全文
posted @ 2018-06-01 20:33 阿玛尼迪迪 阅读(668) 评论(0) 推荐(0) 编辑
摘要:当定义一个类时,我们显式地或隐式地指定了此类型的对象在拷贝、赋值和销毁时做什么。一个类通过定义三种特殊的成员函数来控制这些操作:拷贝构造函数、拷贝赋值运算符和析构函数。 拷贝构造函数定义了当用同类型的另一个对象初始化新对象时做什么,拷贝赋值运算符定义了将一个对象赋予同类型的另一个对象时做什么,析构函 阅读全文
posted @ 2018-05-30 14:13 阿玛尼迪迪 阅读(2693) 评论(0) 推荐(2) 编辑
摘要:delete p后,只是释放了指针中存放的地址中的内存空间。但是指针变量p仍然存在(即指针p本身所占有的内存),且p中存放的地址还是原来的地址。 例如: 对一个非空指针delete后,若没有将p赋为NULL,若再次delete的话,会出现问题。 如下代码: 在ubuntu14.04中使用g++进行编 阅读全文
posted @ 2018-05-20 23:20 阿玛尼迪迪 阅读(3072) 评论(0) 推荐(2) 编辑
摘要:1、申请的内存所在位置 new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用 阅读全文
posted @ 2017-11-19 21:01 阿玛尼迪迪 阅读(291) 评论(0) 推荐(0) 编辑
摘要:首先说明一下Little_endian和Big_endian是怎么回事。 Little_endian模式的CPU对操作数的存放方式是从低字节到高字节,而Big_endian模式则是从高字节到低字节,比如32位的数0x12345678在两种模式下的存放如下: Little_endian: 内存地址 存 阅读全文
posted @ 2017-11-16 19:29 阿玛尼迪迪 阅读(1630) 评论(0) 推荐(0) 编辑
摘要:C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件。 istringstream类用于执行C++风格的串流输入操作。 ostringstream类用于执行C++风格的串流输出操作。 strings 阅读全文
posted @ 2017-10-11 18:33 阿玛尼迪迪 阅读(4188) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示