首页
chatGPT
关于
友链
其它
统计
更多
壁纸
留言
Search
1
cgroup--(4)cgroup v1和cgroup v2的详细介绍
6,405 阅读
2
修改Linux Kernel defconfig的标准方法
6,381 阅读
3
Android系统之VINTF(1)manifests&compatibility matrices
5,972 阅读
4
使用git生成patch和应用patch
3,451 阅读
5
c语言的__attribute__
3,168 阅读
默认分类
文章收集
学习总结
算法
环境配置
知识点
入门系列
vim
shell
Git
Make
Android
Linux
Linux命令
内存管理
Linux驱动
Language
C++
C
工具
软件工具
Bug
COMPANY
登录
Search
标签搜索
shell
Linux
c
uboot
Vim
vintf
Linux驱动
Android
device_tree
git
DEBUG
arm64
链表
数据结构
IDR
内核
ELF
gcc
ARM
网址
adtxl
累计撰写
367
篇文章
累计收到
14
条评论
首页
栏目
默认分类
文章收集
学习总结
算法
环境配置
知识点
入门系列
vim
shell
Git
Make
Android
Linux
Linux命令
内存管理
Linux驱动
Language
C++
C
工具
软件工具
Bug
COMPANY
页面
chatGPT
关于
友链
其它
统计
壁纸
留言
搜索到
367
篇与
的结果
2021-04-23
Android的adb网络调试方法
[转载]
2021年04月23日
1,639 阅读
0 评论
0 点赞
2021-04-08
Linux设备树(3)--address-cells和size-cells的含义
设备树中address-cells和size-cells的含义
2021年04月08日
1,711 阅读
0 评论
0 点赞
2021-04-08
Linux设备树(2)--memreserve和reserved-memory的区别
转载自https://blog.csdn.net/kickxxx/article/details/54631535memreserve和reserved-memory的区别
2021年04月08日
1,825 阅读
0 评论
0 点赞
2021-04-08
Linux设备树(1)--概述
暂无简介
2021年04月08日
1,365 阅读
0 评论
0 点赞
2021-04-01
Android10.0的init执行顺序
暂无简介
2021年04月01日
841 阅读
0 评论
0 点赞
2021-03-17
C库函数-snprintf()
暂无简介
2021年03月17日
811 阅读
0 评论
0 点赞
2021-03-17
C库函数-sscanf()
暂无简介
2021年03月17日
638 阅读
0 评论
0 点赞
2021-03-16
C库函数-fgets()
暂无简介
2021年03月16日
739 阅读
0 评论
0 点赞
2021-03-10
CPP基础--表达式之类型转换
类型转换何时发生隐式类型转换在下面这些情况下,编译器会自动地转换运算对象的类型:在大多数表达式中,比int类型小的整型值首先提升为较大的整数类型。在条件中,非布尔值转换成布尔类型初始化过程中,初始值转换成变量的类型;在赋值语句中,右侧运算对象转换成左侧运算对象的类型如果算术运算关系或关系运算的运算对象有多种类型,则需要转换成同一种类型。函数调用时也会发生类型转换1. 算术转换算术转换的含义是把一种算术类型转换成另外一种算术类型。2. 其他隐式类型转换数组转换成指针在大多数用到数组的表达式中,数组自动转换成指向数组首元素的指针:int ia[10]; // 含有10个整数的数组 int* ip = ia; // ia转换成指向数组首元素的指针当数组被用作decltype关键字的参数,或者作为取地址符(&)、sizeof及typeid等运算符的运算对象时,上述转换不会发生。同样的,如果用一个引用来初始化数组,上述转换也不会发生。指针的转换C++还规定了其他的指针转换方式,包括常量整数值0或者字面值nullptr能转换成任意指针类型;指向任意非常量的指针能转换成void*;指向任意对象的指针能转换成const void*。转换成布尔类型存在一种从算术类型或指针类型向布尔类型自动转换的机制。如果指针或算术类型的值为0,转换结果是false;否则转换结果是true转换成常量允许将指向非常量类型的指针转换成指向相应的常量类型的指针,对于引用也是这样。3. 显式转换有时我们希望显式地将对象强制转换成另外一种类型。例如,如果想在下面的代码中执行浮点数除法;int i, j; double slope = i/j;就要使用某种方法将i或j显式地转换成double,这种方法称作强制类型转换(cast)。注:虽然有时不得不使用强制类型转换,但这种方法本质上是非常危险的。命名的强制类型转换一个命名的强制类型转换具有如下形式:cast-name<type>(expression);其中,type是转换的目标类型,而expression是要转换的值。如果type是引用类型,则结果是左值。cast-name是static_cast、dynamic_cast、const_cast和reinterpret_cast中的一种。cast-name指定了执行的是哪种转换。static_cast任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。// 进行强制类型转换以便执行浮点数除法 double slope = static_cast<double>(j) / i;static_cast对于编译器无法自动执行的类型转换也非常有用。例如,我么可以使用static_cast找回存在于void*指针中的值:void* p = &d; // 正确:任何非常量对象的地址都能存入void* // 将void*转换回初始的指针类型 double *dp = static_cast<double*>(p);const_castconst_cast只能改变运算对象的底层const:const char *pc; char *p = const_cast<char*>(pc); //正确,但是通过p写值是未定义的行为对于将常量对象转换成非常量对象的行为,我们一般称其为“去掉const性质”。一旦我们去掉了某个对象的const性质,编译器就不能再阻止我们对该对象进行写操作了。如果对象本身不再是一个常量,使用强制类型转换获得写权限是合法的行为。然而如果对象是一个常量,再使用const_cast执行写操作就会产生未定义的后果。只有const_cast能改变表达式的常量属性,同样,const_cast不能用来改变表达式的类型。const_cast常常用于有函数重载的上下文中。reinterpret_castreinterpret_cast通常为运算对象的位模式提供较低层次上的重新解释。建议:避免强制类型转换,尤其是reinterpret_cast
2021年03月10日
889 阅读
0 评论
0 点赞
2021-03-10
CPP基础--迭代器介绍
迭代器介绍可以使用下标运算符来访问string对象的字符或vector对象的元素,还有另外一种更通用的机制也可以实现同样的目的,这就是迭代器(iterator)。类似于指针类型,迭代器也提供了对对象的间接访问。就迭代器而言,其对象是容器中的元素或者string对象中的字符。使用迭代器可以访问某个元素,迭代器也能从一个元素移动到另外一个元素。1. 使用迭代器和指针不一样的是,获取迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员。比如,这些类型都拥有名为begin和end的成员,其中begin成员负责返回指向第一个元素(或第一个字符)的迭代器。如有下述语句:// b表示v的第一个元素,e表示v尾元素的下一位置 auto b = v.begin(), e = v.end(); // b和e的类型相同end成员则负责返回指向容器(或string对象)“尾元素的下一位置”的迭代器,也就是说,该迭代器指示的是容器的一个本不存在的“尾后”元素。这个迭代器没什么实际含义,仅是个标记而已,表示我们已经处理完了容器中的所有元素。end成员返回的迭代器常被称作尾后迭代器。如果容器为空,则begin和end返回的都是同一个迭代器,都是尾后迭代器。迭代器运算符和指针类似,也能通过解引用迭代器来获取它所指示的元素,执行解引用的迭代器必须合法并确实指示着某个元素。试图解引用一个非法迭代器或者尾后迭代器都是未被定义的行为。string s("some string"); if (s.begin() != s.end()) { // 确保s非空 auto it = s.begin(); // it表示s的第一个字符 *it = toupper(*it); // 将当前字符改写成大写形式 }将迭代器从一个元素移动到另外一个元素迭代器使用递增(++)运算符来从一个元素移动到下一个元素。因为end返回的迭代器并不实际指示某个元素,所以不能对其进行递增或解引用的操作。迭代器类型就像不知道string和vector的size_type成员到底是什么类型,一般来说我们也不知道(其实是无须知道)迭代器的精确类型。而实际上,那些拥有迭代器的标准库类型使用iterator和const_iterator来表示迭代器的类型:vector<int>::iterator it; // it能读写vector<int>的元素 string::iterator it2; // it2能读写string对象中的字符 vector<int>::const_iterator it3; // it3只能读元素,不能写元素 string::const_iterator it4; // it4只能读字符,不能写字符begin和end运算符begin和end返回的具体类型由对象是否是常量决定,如果对象是常量,begin和end返回const_iterator;如果对象不是常量,返回iterator为了便于专门得到const_iterator类型的返回值,C++11新标准引入了两个新函数,分别是cbegin和cend.不论vector对象本身是否是常量,返回值都是const_iterator。结合解引用和成员访问操作解引用迭代器可获得迭代器所指的对象,如果该对象的类型恰好是类,就有可能希望进一步访问它的成员。例如,对于一个由字符串组成的vector对象来说,要想检查其元素是否为空,令it是该vector对象的迭代器,只需检查it所指字符串是否为空就可以了,其代码如下,(*it).empty()为了简化上述表达式,C++定义了箭头运算符(->)。箭头运算符把解引用和成员访问两个操作结合在一起,也就是说,it->mem和(*item).mem表达的意思相同某些对vector对象的操作会使迭代器失效虽然vector对象可以动态地增长,但是也会有一些副作用。已知的一个限制是不能在范围for循环中向vector对象添加元素。另外一个限制是任何一种可能改变vector对象容量的操作,比如push_back,都会使该vector对象的迭代器失效。谨记,但凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素。2. 迭代器运算string和vector迭代器提供了更多额外的运算符,一方面可使得迭代器每次移动跨过多个元素,另外也支持迭代器进行关系运算。所有这些运算被称作迭代器运算所谓两个迭代器之间的距离指的是右侧的迭代器向前移动多少位置就能追上左侧的迭代器,其类型是名为difference_type的带符号整型数。
2021年03月10日
862 阅读
0 评论
0 点赞
1
...
28
29
30
...
37