C++Primer笔记

最近打算看STL源码剖析,但是自感C++语法不精,还是从《C++Primer》补起,两年前看过的书,现在再看,又是另一番感觉了。


类型

  • 指定类型:
前缀类型
u(unicode16)char16_t
U(unicode32)char32_t
Lwchar_t
u8(utf8)char
后缀类型
u/Uunsigned
l/LLlong
ll/LLlong long
f/Ffloat
l/Llong double
  • C++区分声明和定义:声明使得名字为程序所知,定义在此之上分配空间。
    • 仅声明一个变量:extern int i;
    • 一旦声明显式初始化则视为定义:extern int i=1;
    • using,typedef功能相似
  • 定义于函数体外的变量被初始化为0。【包括类成员】P40
  • 显式访问局部变量: ::global
  • 引用:不占空间,由此引发与指针的诸多不同,个人猜测在汇编阶段就是一个标记符。
    • 不能定义引用的引用。
  • 指针:不能定义指向引用的指针;推荐用nullptr;int* p1,p2;p1指针,p2int,的作用范围仅为最近的一个变量;int *p;int &r=p;r为对指针p的引用。
  • const:

    • 默认下const对象仅在本文件有效,于其他文件的同名对象而言实际上是不同的变量。当需要使用全局跨文件的变量,声明和定义都加上extern即可:
      //file.cpp
      extern const int i=1;
      //file.h
      extern const int i;

    • const+引用=该引用只读。
      const的对象只能由const引用来引用:
      const int i=2;
      const int &j=i; //对
      int &k=i; //错
      允许为一个const引用绑定到非常量,字面值或者一般表达式。因为在实现的时候,上述值是保存在编译器提供的临时变量,与原变量没有任何关联,即使修改了也达不到通过引用修改值的目的,所以干脆const掉。详见P55

    • const+指针=顶层const/底层const
      1. 顶层const:变量本身是常量,指针本身是常量,不能改指向
        int i=0,j=0;
        int *const p1=&i;
        p1=&j; //错
      2. 底层const:指针指向的对象是常量
        const int h=0;
        const int *p2=&h;
        在涉及指针的copy的时候,底层const仅能赋值给底层const,而不能赋值给其他非底层const。【出于保证底层const指向的对象不被修改】P58
  • 常量表达式:在编译过程就能得到计算结果的表达式。
    const int s=get(); //错,因为需要在运行时才知道s的值
    constexpr:P66声明为constexpr的变量一定是常量,而且必须用常量表达式初始化:
    constexpr int sz=size() //iff size()是一个constexpr函数时正确
    constexpr+指针=顶层const

  • auto+引用/指针/常量 P62
  • decltype():自动推断式子中的类型并作为声明类型
  • size_type:string的返回类型,与机器相关的无符号,被设计的足够大来表示内存中任意对象的大小。
  • 范围for: for(auto c:s)//只读
    for(auto &c:s)//可写
  • 类模版不能以引用为类型
  • 范围for内不应修改遍历序列的大小,因为遍历终点被预先保存下来。
  • 迭代器类型:iterator/const_iterator 可读写/只读
    凡是用了迭代器的循环体,都不能添加元素

运算符

  • ->=(*p). 箭头运算符将解引用和成员运算结合在一起
  • 复杂的数组声明:
    int (*p)[10]=&arr;//p指向有10个int的数组
    int (&q)[10]=arr;//q引用有10个int的数组
    从内到外阅读。P103
    关于auto 和decltype对数组的类型推断P105
  • 用范围for处理多为数组,除了最内层,所有层的循环的控制变量都应该是引用类型
    for(const auto &row:ia)
    for(auto col:row)
  • 对于未定义运算顺序的表达式结果不可控:
cout<<i<<" "<<++i<<endl;
定义了运算顺序的只有&&,||,?:和,四种运算符
f()+g()*k()-h(),四个函数调用顺序完全未定义
while(beg!=s.end()&&isspace(*beg))
*beg=toupper(*beg++)    //错,因为未定义运算顺序,一条子表达式(*beg++)修改了某个对象的值,而另一条子表达式又要用该值(*beg=)这种行为的运算顺序未定义
  • 强调使用++i,尤其是迭代器
  • 符号位的处理未定义,所以仅将位运算用于无符号数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数字乡村和智慧农业的数字化转型是当前农业发展的新趋势,旨在通过应用数字技术,实现农业全流程的再造和全生命周期的管理服务。中国政府高度重视这一领域的发展,提出“数字中国”和“乡村振兴”战略,以提升国家治理能力,推动城乡融合发展。 数字乡村的建设面临乡村治理、基础设施、产业链条和公共服务等方面的问题,需要分阶段实施《数字乡村发展战略纲要》来解决。农业数字化转型的需求包括满足市民对优质农产品的需求、解决产销对接问题、形成优质优价机制、提高农业劳动力素质、打破信息孤岛、提高农业政策服务的精准度和有效性,以及解决农业融资难的问题。 数字乡村建设的关键在于构建“1+3+4+1”工程,即以新技术、新要素、新商业、新农民、新文化、新农村为核心,推进数据融合,强化农业大数据的汇集功能。数字农业大数据解决方案以农业数字底图和数据资源为基础,通过可视化监管,实现区域农业的全面数字化管理。 数字农业大数据架构基于大数据、区块链、GIS和物联网技术,构建农业大数据中心、农业物联网平台和农村综合服务指挥决策平台三大基础平台。农业大数据中心汇聚各类涉农信息资源和业务数据,支持大数据应用。信息采集系统覆盖市、县、乡、村多级,形成高效的农业大数据信息采集体系。 农业物联网平台包括环境监测系统、视频监控系统、预警预报系统和智能控制系统,通过收集和监测数据,实现对农业环境和生产过程的智能化管理。综合服务指挥决策平台利用数据分析和GIS技术,为农业决策提供支持。 数字乡村建设包括三大服务平台:治理服务平台、民生服务平台和产业服务平台。治理服务平台通过大数据和AI技术,实现乡村治理的数字化;民生服务平台利用互联网技术,提供各类民生服务;产业服务平台融合政企关系,支持农业产业发展。 数字乡村的应用场景广泛,包括农业生产过程、农产品流通、农业管理和农村社会服务。农业生产管理系统利用AIoT技术,实现农业生产的标准化和智能化。农产品智慧流通管理系统和溯源管理系统提高流通效率和产品追溯能力。智慧农业管理通过互联网+农业,提升农业管理的科学性和效率。农村社会服务则通过数字化手段,提高农村地区的公共服务水平。 总体而言,数字乡村和智慧农业的建设,不仅能够提升农业生产效率和管理水平,还能够促进农村地区的社会经济发展,实现城乡融合发展,是推动中国农业现代化的重要途径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值