cpp primer笔记-010开始

  1. 下面的第5行代码可以写成第6行注释的代码
    #include<iostream>
    int main()
    {int v1{}, v2{};(std::cin >> v1) >> v2;//std::cin>>v1>>v2;(std::cout << v1) << " " << v2 << std::endl;return 0;
    }
    
  2. char类型在有些机器上是有符号的,在有些机器上是无符号的,需要使用char类型,最好明确是signed char还是unsigned char.
  3. 当赋给无符号类型一个超出其表示范围的值是,得到的结果是初始值对无符号类型表示数值总数取模后的余数,但是赋给有符号类型一个超出其表示范围的值,结果是未定义未知的,程序可能继续工作,可能崩溃,也可能产生垃圾数据。如果一个表达式中包含有符号和无符号类型,则有符号类型会转换成无符号类型进行计算,切勿混用带符号和无符号类型进行计算。
    #include<iostream>
    #include <climits>
    int main()
    {unsigned u = 10, v = 42;int i = -42;long long l = i + 10, num = UINT32_MAX + 1LL, g = i * 10;std::cout << u - v << " " << u + i << " " << u * i << std::endl;std::cout << (l + num) % num << " " << (g + num) % num << std::endl;return 0;
    }
    
    4294967264 4294967264 4294966876
    4294967264 4294966876
    
  4. 使用泛化的转义序列,其形式是\x后紧跟着1ge或者多个16进制数字,或者\后紧跟着1个或者多个八进制数组其中数字部分表示的是字符对应的数值,如果\后面跟着的八进制数组超过3个,则只有前面三个数字与\构成转义序列,如果\x跟着的十六进制数超过4个,则只有前面4个数组与\构成转义序列。
    #include<iostream>
    #include <climits>
    int main()
    {int num = ' ';std::cout << std::hex;std::cout << num << std::endl;std::cout << '\x20' << '\12' << "234" << std::endl;return 0;
    }
    
    20234
  5. void可以存放任意对象的地址,包括另一个指针所指向的地址,但是void的作用比较有限,只能拿它和别的指针比较,作为函数输入输出,或者给另外一个void指针赋值,但是不能直接操作void类型的指针所指向的对象。除了void*是个例外,其他大部分情况下指针的类型和指向的对象类型要严格匹配,不发生隐式类型转换。
    #include<iostream>
    #include <climits>
    int main()
    {double num = 3.14, * pd = &num;void* pv = &num;pv = pd;std::cout << *pd << " " << *(double*)(pv) << std::endl;
    }
    
  6. 引用本身不是一个对象,所以不能定义一个指向引用的指针,但是指针是对象,所以可以存在对指针的引用。
    #include<iostream>
    #include <climits>
    int main()
    {int i = 42;int* p;int*& r = p;r = &i;*r = 1;std::cout << i << " " << *p << " " << *r << std::endl;
    }
    
  7. const修饰的对象仅在定义文件内有效,非定义文件不存在该对象,如果想在其他文件一并使用,则对const变量不管是声明还是定义都加上extern关键字,这样只需要定义一次就够了,常变量引用初始化的时候可以使用任意表达式作为初始值。如果const引用的不是一个const的对象,则该对象可以通过另一个非const引用改变值,也可以通过自身改变值,但是不能通过const引用改变值
    //file.cc文件定义并初始化一个常变量,该常变量能够被其他文件使用
    extern const int bufSize=fuc();
    //file.h头文件
    extern const int bufSize;//和file.cc文件定义的bufSize是同一个
    double dval=3.45;
    int a=43,b=34;
    //允许任意表达式作为初始值
    const int &ri=a+b;
    //允许由双精度浮点数生成一个临时的整形变量
    const int &rp=dval;
    //允许常变量引用初始化值是常量
    const int& int_ptr = 10;
    
    #include<iostream>
    #include <climits>
    int main()
    {int i = 42;int& r1 = i;const int& r2 = i;std::cout << r1 << " " << r2 << " " << i << std::endl;r1 = 1;std::cout << r1 << " " << r2 << " " << i << std::endl;i = 2;std::cout << r1 << " " << r2 << " " << i << std::endl;
    }
    
    42 42 42
    1 1 1
    2 2 2
    
  8. constexpr可以类型必须用常量表达式初始化,一个constexpr指针的初始值必须是nullptr或者0,或者储存于某个固定地址的对象(比如函数体外)
    #include<iostream>
    #include <climits>
    //x必须定义在函数体外才能被consrexpr修饰
    int x = 10;
    int main()
    {const int a = 10;constexpr int b = 20;constexpr int c = a + b;//p1是指向整形常量的指针,const int* p1 = nullptr;//p2是指向整形的常量指针constexpr int* p2 = 0;//p3是指向整形常量的常量指针constexpr const int* p3 = &x;//p4是指向整形的常量指针constexpr int* p4 = &x;p1 = &b;*p4 = 20;std::cout << *p1 << " " << p2 << " " << *p3 << " " << *p4 << std::endl;
    

}

  1. CPP允许给类型起别名,包括使用typedef和using,注给指针起别名的时候使用const修饰的指针是常量指针,而不是指向常量的指针。

    #include<iostream>
    #include <climits>
    int main()
    {typedef double wages;typedef wages base, * p;base i = 1.0;const p ptr = &i;//相当于double * const ptr = &i;*ptr = 20;std::cout << i << " " << *ptr << std::endl;double* const num = &i;*num = 30;using Son = int;Son s = 10;
    }	
    
  2. auto一般会忽略掉顶层的const,不能将类型变成指向数据的常量指针,但是能够变为指向常量的指针,如果希望变出来的数据能够是指向数据的常量指针,则可以在auto左边加上const

    	#include<iostream>#include <climits>#include<typeinfo>int main(){int i = 10;const int ci = i, & cr = ci;auto a = i;auto b = ci;auto c = cr;auto d = &i;auto e = &ci;const auto f = ci;auto& g = ci;const auto& j = 42;auto& m = ci, * p = &ci;const auto* x = &ci;std::cout << "a " << typeid(a).name() << std::endl;std::cout << "b " << typeid(b).name() << std::endl;std::cout << "c " << typeid(c).name() << std::endl;std::cout << "d " << typeid(d).name() << std::endl;std::cout << "e " << typeid(e).name() << std::endl;std::cout << "f " << typeid(f).name() << std::endl;std::cout << "g " << typeid(g).name() << std::endl;std::cout << "j " << typeid(j).name() << std::endl;std::cout << "m " << typeid(m).name() << std::endl;std::cout << "p " << typeid(p).name() << std::endl;std::cout << "x " << typeid(x).name() << std::endl;}```
    ```cpp
    a intb intc intd int * __ptr64e int const * __ptr64f intg intj intm intp int const * __ptr64x int const * __ptr64	
    
  3. decltype注意点:

    #include<iostream>
    #include <climits>
    #include<typeinfo>
    int main()
    {int i = 42, * p = &i, & r = i;decltype(r + 0) b;//表达式加法结果为int类型,b为未初始化的intdecltype(*p) c=i; //如果表达式的内容是解引用操作则为引用类型,c为int&类型	decltype(r) d = i;//r本身是一个引用类型,所以d为引用类型decltype((i)) e = i;//变量名加上括号是引用类型,所以e是引用类型decltype((i + i)) f;//表达式加上括号不是引用类型const int* const num = &i;decltype(num) ret = &i;//ret属于指向常量的常量指针int z = 100;//*ret = 10;//ret = z;
    }
    
  4. 如果一个表达式中已经有了std::string的size()函数,就不要使用有符号整形,因为size()有可能返回一个unsigned int类型的数据。

  5. string的加号+必须保证+号的两侧至少有一个是string

    #include<iostream>
    #include <climits>
    #include<typeinfo>
    int main()
    {std::string s1 = "123";std::string s2 = "123" + s1 + "sdf";std::string s3 = s1 + "123" + s2;std::string s4 = (s1 + "sdf") + "sdf"; 
    }
    
  6. vector初始化注意一下代码:

    #include <iostream>
    #include <climits>
    #include <vector>
    int main()
    {std::vector<int> svec;std::vector<int> svec1(svec);std::vector<int> svec2 = svec;std::vector<std::string> svec3{ "wer","sdf","Sdf" };//std::vector<std::string> svec4("wer", "sdf", "Sdf");std::vector<std::string> svec4(10, "wer");//创建10个werstd::vector<int> svec5(10);//创建10个值为0的int类型std::vector<int> svec6{ 10 };//创建一个值为10的int类型std::vector<int> svec7(10, 1);//创建10个值为1的int类型std::vector<int> svec8{ 10,1 };//创建一个为10和一个为1的int类型std::cout << svec6.front() << std::endl;
    }
    
  7. 范围for语句for(statement : expression)体内不允许改变其遍历序列

  8. 迭代器中iterator可读写相关对象的元素,const_iterator只可以读取,不可以写相关元素。

    #include <iostream>
    #include <climits>
    #include <vector>
    int main()
    {std::vector<int> vec{ 1,4,2,4,6,23 };std::vector<int>::iterator it1 = vec.begin() + 2;*it1 = 100;for (auto x : vec){std::cout << x << " ";}std::cout << std::endl;std::vector<int>::const_iterator it2 = vec.begin() + 2;//*it=10;std::cout << *it1 << " " << *it2 << std::endl;
    }
    
  9. begin和end迭代器返回的具体类型由对象是否是常量决定,如果是常量,begin和end返回const_iterator,如果不是常量返回iterator,而cbegin和cend不管是否是常量容器都会返回const_iterator类型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/96602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oralce配置访问白名单的方法

目录 配置sqlnet.ora文件 重新加载使配置生效 注意事项 Oracle数据库安全性提升&#xff1a;IP白名单的配置方法 随着互联网的发展&#xff0c;数据库安全问题也越来越严重。Oracle是目前使用较为广泛的一款数据库管理系统&#xff0c;而IP白名单作为提升数据库安全性的有效…

深度学习——权重衰减(weight_decay)

深度学习——权重衰减&#xff08;weight_decay) 文章目录 前言一、权重衰减1.1. 范数与权重衰减1.2. 高维线性回归1.3. 从零开始实现1.3.1.初始化模型参数1.3.2. 定义L₂范数惩罚1.3.3. 定义训练代码实现1.3.4. 不管正则化直接训练1.3.5. 使用权重衰减 1.4. 简洁实现 总结 前言…

vue 项目打包性能分析插件 webpack-bundle-analyzer

webpack-bundle-analyzer 是 webpack 的插件&#xff0c;需要配合 webpack 和 webpack-cli 一起使用。这个插件可以读取输出文件夹&#xff08;通常是 dist&#xff09;中的 stats.json 文件&#xff0c;把该文件可视化展现&#xff0c;生成代码分析报告&#xff0c;可以直观地…

Leetcode901-股票价格跨度

一、前言 本题基于leetcode901股票价格趋势这道题&#xff0c;说一下通过java解决的一些方法。并且解释一下笔者写这道题之前的想法和一些自己遇到的错误。需要注意的是&#xff0c;该题最多调用 next 方法 10^4 次,一般出现该提示说明需要注意时间复杂度。 二、解决思路 ①…

神经网络中的知识蒸馏

多分类交叉熵损失函数&#xff1a;每个样本的标签已经给出&#xff0c;模型给出在三种动物上的预测概率。将全部样本都被正确预测的概率求得为0.70.50.1&#xff0c;也称为似然概率。优化的目标就是希望似然概率最大化。如果样本很多&#xff0c;概率不断连乘&#xff0c;就会造…

Qt编程中采用signal传递自定义数据类型

本文介绍Qt编程中采用signal传递自定义数据类型&#xff08;结构体类型&#xff09;。 Qt编程中可以通过signal传递标准类型&#xff0c;如常见的int,QString,bool类型&#xff0c;有时候需要传递特定的数据类型如结构体&#xff0c;Qt是不支持直接传递的&#xff0c;若将其分…

关于丢失msvcp71.dll的5个解决办法,msvcp71.dll丢失原因分析

计算机已经成为我们生活和工作中不可或缺的一部分&#xff0c;在使用计算机的过程中&#xff0c;我们经常遇到各种软件或应用程序崩溃的情况。其中&#xff0c;一个常见的错误提示是“MSVCP71.dll丢失”。这个错误通常出现在运行使用Visual C Redistributable for Visual Studi…

数据结构——多重链表的实现

//多重列表的实现 #include<stdio.h> #include<stdlib.h> struct lnode {int row,col,value; }; //没有用到down指针 //没有用到tag和next指针 typedef struct node {int tag;//区分头结点(0)和非零元素结点(1)struct node* right;struct node* down;//共用体与结…

Django基础讲解-路由控制器和视图(Django-02)

一 路由控制器 参考链接&#xff1a; Django源码阅读&#xff1a;路由&#xff08;二&#xff09; - 知乎 Route路由, 是一种映射关系&#xff01;路由是把客户端请求的 url路径与视图进行绑定 映射的一种关系。 这个/timer通过路由控制器最终匹配到myapp.views中的视图函数 …

抄写Linux源码(Day14:从 MBR 到 C main 函数 (3:研究 head.s) )

回忆我们需要做的事情&#xff1a; 为了支持 shell 程序的执行&#xff0c;我们需要提供&#xff1a; 1.缺页中断(不理解为什么要这个东西&#xff0c;只是闪客说需要&#xff0c;后边再说) 2.硬盘驱动、文件系统 (shell程序一开始是存放在磁盘里的&#xff0c;所以需要这两个东…

应用第三方ByteTrack实现目标跟踪

在上一篇博文&#xff0c;我们实现了应用官网ByteTrack实现的目标跟踪。但吹毛求疵地说&#xff0c;官网的ByteTrack有一些不足&#xff1a;1、为了通用性及科研的要求&#xff0c;代码过于冗长&#xff0c;但这不利于集成到自己的程序中&#xff1b;2、目标跟踪结果没有目标类…

MDC方式实现简单链路追踪

MDC 方式实现日志链路追踪 拦截器 package com.cdn.log.interceptor;import com.cdn.log.consts.CLogConst; import com.cdn.log.utils.IdUtil; import org.slf4j.MDC; import org.springframework.util.StringUtils; import org.springframework.web.servlet.ModelAndView; im…

山西电力市场日前价格预测【2023-10-08】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-10-08&#xff09;山西电力市场全天平均日前电价为258.40元/MWh。其中&#xff0c;最高日前电价为496.19元/MWh&#xff0c;预计出现在18:45。最低日前电价为0.00元/MWh&#xff0c;预计出…

PMP考试需要多少钱?费用总计来啦!

PMP项目管理专业人士资格认证是由项目管理协会&#xff08;Project Management Institute&#xff0c;简称PMI&#xff09;发起的。PMP作为世界级的项目管理认证证书&#xff0c;拥有着先进的项目管理知识体系&#xff0c;它严格评估项目管理人员知识技能是否具有高品质的资格认…

【FreeRTOS】内存管理简单介绍

有没有想过什么移植FreeRTOS时&#xff0c;为什么有多种的内存文件&#xff0c;我们工程只使用Heap_4&#xff0c;其他的有什么用&#xff1f;每个的区别是什么&#xff1f;FreeRTOS是一种流行的实时操作系统&#xff0c;广泛应用于嵌入式系统开发中。在嵌入式系统中&#xff0…

JEPG Encoder IP verilog设计及实现

总体介绍: 采用通用的常规 Verilog 代码编写,可用于任何 FPGA。 该内核不依赖任何专有 IP 内核,而是用 Verilog 编写了实现 JPEG 编码器所需的所有功能,代码完全独立。 编码器内核的输入是一条 24 位数据总线,红色像素、绿色像素和蓝色像素各有 8 位。 信号 "data_i…

记录使用vue-test-utils + jest 在uniapp中进行单元测试

目录 前情安装依赖package.json配置jest配置测试文件目录编写setup.js编写第一个测试文件jest.fn()和jest.spyOn()jest 解析scss失败测试vuex$refs定时器测试函数调用n次手动调用生命周期处理其他模块导入的函数测试插槽 前情 uniapp推荐了测试方案dcloudio/uni-automator&…

vue+vite项目静态文件引用丢失

排查问题&#xff1a; 查看vite.config.js中是否配置 base: ./, 如果配置了&#xff0c;那么 本地运行 例如&#xff1a;css中引入字体&#xff0c;可将字体文件直接放在public文件夹下通过"/"引入 如果需要动态引入图片&#xff0c;可通过 import defaultA fr…

(三)行为模式:8、状态模式(State Pattern)(C++示例)

目录 1、状态模式&#xff08;State Pattern&#xff09;含义 2、状态模式的UML图学习 3、状态模式的应用场景 4、状态模式的优缺点 &#xff08;1&#xff09;优点 &#xff08;2&#xff09;缺点 5、C实现状态模式的实例 1、状态模式&#xff08;State Pattern&#x…

光伏发电预测(LSTM、CNN_LSTM和XGBoost回归模型,Python代码)

运行效果&#xff1a;光伏发电预测&#xff08;LSTM、CNN_LSTM和XGBoost回归模型&#xff0c;Python代码&#xff09;_哔哩哔哩_bilibili 运行环境库的版本 光伏太阳能电池通过互连形成光伏模块&#xff0c;以捕捉太阳光并将太阳能转化为电能。因此&#xff0c;当光伏模块暴露…