ABAP - 变量杂例1

** 常用的预定义数据类型
**
** 类型缩写  类型    默认长度     最大长度     初始值          描述
**    C     字符       1                      space           字符串,‘Program’
**    D     日期       8           8          '00000000'
**    F     浮点       8           8          0               浮点数
**    I     整         4           10         0               带正负符号的整数
**    N     数值       1           31         '00000000'      数值所组成的字符串
**    P     压缩       8           16         0               将两个十进制压缩到一个字节 可以表示整形或浮点型
**    T     时间型     6           6         ‘00000000’      时间
**
** 1.默认定义的数据类型是 CHAR
** 2.取值的时候C型默认从左取 N型从右取,超过定义长度则截断
** 3.C类型,可以赋值数值,也可以赋值字符,还可以混合,不过取值时如果是数值类型靠右取值
** 4.日期和时间类型的变量可进行加减乘除运算
** 5.P类型。小数点要使用DECIMAL声明
**
** 变量定义包含name length type等语法如下:
** 语法:DATA <name> {<length>] TYPE <type> [value <value>] [decimal <decimals>]
**       DATA <name> {<length>] LIKE <object> [value <value>] [decimal <decimals>]
**       TYPE和LIKE的区别:TYPE 参考某一数据类型
**                        LIKE 用在已有值的数据类型 如系统变量
** 其中:[] 里的内容表示可选项 <>表示名称
** <name>:变量名称,最长30个字符,不可含有 + . , ; ()等字符
** <length>长度 要用圆括号括起来 如LINE(20) TYPE C.
** <type>:数据类型
** <value>:初始值
** <decimals>:小数位
**
** 常量定义使用 CONSTANTS<常量名>[<长度>] TYPE <数据类型> VALUE<默认值>
** 常量值一旦被定义,即被长期保存在内存你,其值无法改变
** sy-subrc sy-uname sy-datum sy-uzeit sy-tcoce sy-index st-tabix sy-mandt sy-vline sy-uline
**
** 结构体的定义:
** 1.DATA:BEGIN OF <name>
** 2.程序中用DATA定义的局部变量
**
** DATA:BEGIN OF <NAME>
**   <field1>,
**   <field2>,
** END OF <name>.
**
** DATA <NAME> LIKE USERINF.
**
** 结构体赋值
** WRITE <NAME>(结构体名字) 输出结构体所有字段 使用<Name>-<field name>输出指定字段
** 相同结构体之间使用Move...To...进行赋值
** 有差异的结构体可以使用 MOVE-CORRESSPONDING匹配即赋值相同的字段
** 结构体继承 INCLUEDE STRUCTUREDATA lv_c TYPE c.
DATA lv_d TYPE d.
DATA lv_f TYPE f.
DATA lv_i TYPE i.
DATA lv_n TYPE n.
DATA lv_p TYPE p.
DATA lv_t TYPE t.WRITE: / 'lv_c:',  lv_c.
WRITE: / 'lv_d:',  lv_d.
WRITE: / 'lv_f:',  lv_f.
WRITE: / 'lv_i:',  lv_i.
WRITE: / 'lv_n:',  lv_n.
WRITE: / 'lv_p:',  lv_p.
WRITE: / 'lv_t:',  lv_t.WRITE sy-uline.** 给变量赋值
** A.定义变量的时候赋予初始值
** 语法:DATA <name> {<length>] TYPE <type> [value <value>] [decimal <decimals>]
** eg1: 定义C类型变量名为lv_c2的变量并给变量赋值'我是赋值了的lv_c2'
DATA lv_c2 TYPE c VALUE '我是赋值了的lv_c2'.
WRITE: / 'LV_C2:' ,lv_c2. "注意 此时变量定义的长度10 取值的时超过定义长度则截断** 定义C类型长度为10
** 方式1  在变量名后用括号(10)
DATA lv_c3(10) TYPE c VALUE '我是赋值了的lv_c3'.      "长度不够 也只截取变量的前10位
WRITE: / 'LV_C3:' ,lv_c3.
** 方式2   加LENGTH 关键字
DATA lv_c4 TYPE c LENGTH 10 VALUE '我是赋值了的lv_c4'."长度不够 也只截取变量的前10位
WRITE: / 'LV_C3:' ,lv_c4.** 定义C类型长度位20
** 方式1  在变量名后用括号(10)
DATA lv_c5(20) TYPE c VALUE '我是赋值了的lv_c5'.      "长度足够 完整输出
WRITE: / 'LV_C5:' ,lv_c5.
** 方式2   加LENGTH 关键字
DATA lv_c6 TYPE c LENGTH 20 VALUE '我是赋值了的lv_c6'."长度足够 完整输出
WRITE: / 'LV_C6:' ,lv_c6.** B.定义变量后再赋值  语法:变量名 =  跟变量类型相同类型的值
DATA lv_c7 TYPE c LENGTH 20.
DATA lv_c8(20) TYPE c.
DATA lv_i2 TYPE i.
DATA lv_n2 TYPE n LENGTH 5.lv_c7 = '我是赋值了的lv_c7'.
lv_c8 = '我是赋值了的lv_c8'.
lv_i2 = 10086422.
lv_n2 = 10010.WRITE: / 'LV_C7:',lv_c7.
WRITE: / 'LV_C8:',lv_c8.
WRITE: / 'LV_I2:',lv_i2.  "ABAP的用户默认的参数科学计数法 数值每隔三位用,分开
WRITE: / 'LV_N2:',lv_n2.  "N类型虽然表示数值 但是编译时候类型转换 用''把数值包含起来了 所以输出的时候是字符 而不是科学计数法DATA lv_d2 TYPE d VALUE '20230510'.
WRITE: / 'LV_D2:',lv_d2.
DATA lv_f2 TYPE f VALUE '4542.3232'.
WRITE: / 'LV_F2:',lv_f2.DATA lv_p2 TYPE p VALUE '34234.99'.
WRITE: / 'LV_P2:',lv_p2.  "没指定小数位 会进行四舍五入 输出34235
DATA lv_p3 TYPE p DECIMALS 2 VALUE '23234.99'.
WRITE: / 'LV_P3:',lv_p3.  "会保留两位小数
DATA lv_p4 TYPE p DECIMALS 2 VALUE '23234.999'.
WRITE: / 'LV_P4:',lv_p4.  "因为小数点后面有三位 只保留两位 所以编译器把第3个小数位运算四舍五入 变成了23235.000DATA lv_t2 TYPE t VALUE '202020'.  "表示20:20:20 晚上8点20分20秒
WRITE: / 'LV_T2:',lv_t2.DATA lv_d3 TYPE d.
lv_d3 = sy-datum.   "SY-DATUM是系统变量 用来存储系统的实时日期
WRITE: / 'LV_D3:',lv_d3.DATA lv_t3 TYPE t .
lv_t3 = sy-uzeit.   "SY-UZEIT是系统变量 用来存储系统的实时时间
WRITE: / 'LV_T3:',lv_t3.WRITE: sy-uline.    "SY-ULINE是系统变量 运行程序时 出现一条横线** 自定义数据类型.
** 语法:TYPES <类型名字> TYPE 数据类型
** 注意: LENGTH 关键字只有在 TYPE (C、N、X、P)类型时有效
**     所以在自定义类型时需结合实际情况定义数据类型的长度
TYPES ty_my_c1 TYPE c LENGTH 30.
TYPES ty_my_c2(30) TYPE c.
DATA lv_ty01 TYPE ty_my_c1 VALUE '我是参考了ty_my_c1类型的变量'.
WRITE: / 'lv_ty01:',lv_ty01.
DATA lv_ty02 TYPE ty_my_c2 VALUE '我是参考了ty_my_c2类型的变量'.
WRITE: / 'lv_ty02:',lv_ty02.** ABAP可以自定义类似C语言的结构体类型
** 用法和C语言的结构体类似
** 语法TYPES:BEGIN OF 结构名,
**           结构包含字段1,
**           结构包含字段2,
**           END OF 结构名.
** 注意:自定义结构体类型时不能赋值 结构体定义字段长度使用字段名(长度)
** WRITE <NAME>(参考了结构的变量名) 输出结构体所有字段 需要结构体字段全是文本型才能使用
** WRITE <Name>(参考了结构的变量名)-<field name>  输出结构体指定字段
** EG:
** 定义一个学生类型
TYPES:BEGIN OF ty_student,age(3)   TYPE i,name(10) TYPE c,sex(2)   TYPE c,END OF ty_student.
** 参考结构类型声明一个学生变量
DATA lv_student01 TYPE ty_student.** 给学生结构体变量赋值
lv_student01-age = 18.
lv_student01-name = '张三'.
lv_student01-sex = '男'.WRITE:/ 'lv_student01的年龄:',lv_student01-age.
WRITE:/ 'lv_student01的姓名:',lv_student01-name.
WRITE:/ 'lv_student01的性别:',lv_student01-sex.
WRITE:/.
**下面这种方式可以直接定义结构体变量 不需要参考结构体类型
DATA:BEGIN OF lv_student02,age(3)   TYPE i,name(10) TYPE c,sex(2)   TYPE c,END OF lv_student02.
** 给学生结构体变量赋值
lv_student02-age = 18.
lv_student02-name = '李四'.
lv_student02-sex = '女'.WRITE:/ 'lv_student02的年龄:',lv_student02-age.
WRITE:/ 'lv_student02的姓名:',lv_student02-name.
WRITE:/ 'lv_student02的性别:',lv_student02-sex.
WRITE:/.
** 结构体变量赋值的其他方式:
** 参考了相同类型的结构体变量间赋值:变量a = 变量b 或者 move 变量a to 变量b
** 参考ty_student结构体类型声明变量lv_student03 和 lv_student04
DATA lv_student03 TYPE ty_student.
DATA lv_student04 TYPE ty_student.lv_student03 = lv_student01.
MOVE lv_student01 TO lv_student04.WRITE:/ 'lv_student03的年龄:',lv_student03-age.
WRITE:/ 'lv_student03的姓名:',lv_student03-name.
WRITE:/ 'lv_student03的性别:',lv_student03-sex.
WRITE:/.
WRITE:/ 'lv_student04的年龄:',lv_student04-age.
WRITE:/ 'lv_student04的姓名:',lv_student04-name.
WRITE:/ 'lv_student04的性别:',lv_student04-sex.
WRITE:/.DATA lv_student05 TYPE ty_student.
DATA lv_student06 TYPE ty_student.
** 只要是结构体的结构相同(即两个结构体所有的字段名和字段名类型相同)也是可以直接赋值的
MOVE lv_student02 TO lv_student05.
lv_student06 = lv_student02.WRITE:/ 'lv_student05的年龄:',lv_student05-age.
WRITE:/ 'lv_student05的姓名:',lv_student05-name.
WRITE:/ 'lv_student05的性别:',lv_student05-sex.
WRITE:/.
WRITE:/ 'lv_student06的年龄:',lv_student06-age.
WRITE:/ 'lv_student06的姓名:',lv_student06-name.
WRITE:/ 'lv_student06的性别:',lv_student06-sex.
WRITE:/.WRITE sy-uline.
** 不同自定义结构体类型的赋值
** 定义两个不同的结构体类型 但是它们的结构相同(即所有结构体-字段名和字段名类型相同)
** 定义班级的结构体类型
TYPES:BEGIN OF ty_class,ccode(11) TYPE c,name(12)  TYPE c,dept(13)  TYPE c,END OF ty_class.
** 定义学生的结构体类型
TYPES:BEGIN OF ty_student02,scode(10) TYPE c,ccode(11) TYPE c,name(12)  TYPE c,dept(13)  TYPE c,END OF ty_student02.
** 根据班级结构体类型声明班级结构体变量
DATA ls_class TYPE ty_class.
** 根据部门结构体
DATA ls_student TYPE ty_student02.** 结构体变量 ls_student 赋值
ls_class-ccode = '1001'.
ls_class-name  = '王五'.
ls_class-dept  = '教学部'.** 结构体变量 ls_student赋值 语法: MOVE-CORRESPONDING 变量a TO 变量b.
ls_student-scode = '01'.
** 将ls_class和ls_student比较 如果两个结构体变量字段名和字段数据类型相同
** 则将ls_clss字段的值赋给ls_student相对应的值
MOVE-CORRESPONDING ls_class TO ls_student.
WRITE: / 'LS_STUDENT:',ls_student.
WRITE: / .
WRITE: / 'LS_CLASS:',ls_class.
WRITE: / .** 可以看到ty_student02结构体类型包含了ty_class结构体类型中的所有字段
** ABAP为了方便程序开发者 减少ABAPER开发的代码量 增加了INCLUDE 关键字
** 提高了代码复用率 防止代码冗余
** EG: 定义一个结构体类型ty_student03 使用INCLUE 关键字
TYPES: BEGIN OF ty_student03,scode(10) TYPE c.INCLUDE TYPE ty_class.
TYPES END OF ty_student03.
** 也可以这样定义
TYPES: BEGIN OF ty_student04.INCLUDE TYPE ty_class.
TYPES scode(10) TYPE c.
TYPES END OF ty_student04.
** ty_studen03和ty_student04这两个结构体类型和ty_student02结构体类型相似
** 接下来给变量复制看看效果
** 参考ty_student03结构体类型声明一个ls_student03的结构体变量
DATA ls_student03 TYPE ty_student03.
** 给ls_student03的结构体变量赋值
MOVE ls_student TO ls_student03.
WRITE: / 'ls_student03:',ls_student03.
** 参考ty_student04结构体类型声明一个ls_student04的结构体变量
DATA ls_student04 TYPE ty_student04.
** 给ls_student03的结构体变量赋值
MOVE ls_student TO ls_student04.
WRITE: / 'ls_student04:',ls_student04.** 使用 WRITE <name> TO <name> 赋值
** 不想写个DATA关键字圣声明变量这样声明变量
DATA: gv_char01(20) TYPE c,gv_char02(20) TYPE c,gv_p1(10)     TYPE p DECIMALS 2 VALUE '2215.12'.** 日期类型的赋值
** 使用WRITE TO 语法赋值
WRITE sy-datum TO gv_char01.
** 使用MOVE TO语法赋值
MOVE sy-datum TO gv_char02.
WRITE:/ '输出gv_char01 gv_char02看看有什么区别'.
WRITE:/ 'gv_char01:',gv_char01.
WRITE:/ 'gv_char02:',gv_char02.** P类型的赋值
** 使用WRITE TO 语法赋值
WRITE gv_p1 TO gv_char01.
** 使用MOVE TO语法赋值
MOVE gv_p1 TO gv_char02.
WRITE:/ '输出gv_char01 gv_char02看看有什么区别'.
WRITE:/ 'gv_char01:',gv_char01.
WRITE:/ 'gv_char02:',gv_char02.
SKIP.
** 使用偏移量赋值 只有效于与字符型
** 语法: MOVE  <源字段名>[+偏移量][(<取位数>)] TO <目标字段名>{+偏移量][(<取位数>)]
**       WRITE <源字段名>[+偏移量][(<取位数>)] TO <目标字段名>{+偏移量][(<取位数>)]
**       <目标字段名>{+偏移量][(<取位数>)] = <源字段名>[+偏移量][(<取位数>)]
**       []为可选 <>为必选 ()属于语法** 声明两个变量 lv_date1 lv_date2
** LIKE 和 TPYE 的区别 TYPE没有限制条件 LIKE必须要在SAP内存已经存在的变量或者类型
** 不过它们声明变量的数据类型是相同的
DATA:lv_data01 LIKE sy-datum,lv_data02 LIKE sy-datum,lv_data03 LIKE sy-datum,lv_data04 LIKE sy-datum,lv_data05(10) TYPE c,lv_data06(10) TYPE c.lv_data01 = sy-datum.
WRITE:/ 'LV_DATA01:',lv_data01.
WRITE:/ '日期的天数修改为30'.
** 偏移量赋值 LV-DATA01从第六位之后的二位改成30
lv_data01+6(2) =  '30'.
WRITE:/ 'LV_DATA01:',lv_data01.lv_data02 = sy-datum.
WRITE:/ 'LV_DATA02:',lv_data02.
WRITE:/ '日期的天数修改为31'.
** 偏移量赋值 LV-DATA01从第六位之后的数改成30
lv_data02+6 = '31'.
WRITE:/ 'LV_DATA02:',lv_data02.lv_data03 = '20220520'.
lv_data04 = '20220430'.** 偏移量赋值 当前系统实时日期的年份赋值给lv_data05
WRITE sy-datum+(4) TO lv_data05.
** 偏移量赋值 LV_DATA03的月份赋值给LV_DATA05
WRITE lv_data03+4(2) TO lv_data05+4(2).
** 偏移量赋值 LV_DATA04的天数赋值给LV_DATA05
WRITE lv_data04+6(2) TO lv_data05+6(2).
** 输出字符'20230530' 而不是日期格式'2023-05-30'.
WRITE:/ 'LV_DATA05:',lv_data05.
**
WRITE lv_data02 TO lv_data06.
WRITE:/ 'LV_DATA06:',lv_data06.DATA:lv_char01(9) TYPE c VALUE '123456789',lv_char02(9) TYPE c,lv_char03(9) TYPE c.WRITE:/ 'LV_CHAR01:',lv_char01,/ 'LV_CHAR02:',lv_char02,/ 'LV_CHAR03:',lv_char03.
lv_char02 = '12'.
** 偏移量赋值 LV_CHAR01第二位以后的值 赋给 LV_CHAR02第二位以后的值
MOVE lv_char01+2    TO lv_char02+2.
** 偏移量赋值 LV_CHAR01前六位赋值给 LV_CHAR03
MOVE lv_char01+(6)  TO lv_char03.
WRITE:/ 'LV_CHAR01:',lv_char01,/ 'LV_CHAR02:',lv_char02,/ 'LV_CHAR03:',lv_char03.

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

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

相关文章

vue3使用自定义组件内方法

重点 使用 defineExpose 来导出方法 // child <script setup> import { ref, Ref } from vueconst prop: Ref<string> ref(child)const method (val: string) > {console.log(val) }defineExpose({prop,method, }) </script>// father <template&g…

Linux Shell脚本入门

目录 介绍 编写格式与执行方式 Shell脚本文件编写规范 脚本文件后缀名规范 首行格式规范 注释格式 shell脚本HelloWord入门案例 需求 效果 实现步骤 脚本文件的常用执行三种方式 介绍 3种方式的区别 小结 多命令处理 Shell变量 环境变量 目标 Shell变量的介绍 变量类型 系统环境…

手把手带你死磕ORBSLAM3源代码(四十九) FrameDrawer.cc DrawFrame

目录 一.前言 二.代码 2.1完整代码 一.前言 这段代码的主要部分。 变量声明: 使用OpenCV库(表示为cv::)声明了多个变量,包括图像(im)、关键点(vIniKeys, vCurrentKeys等)、匹配(vMatches)、跟踪点(vTracks)等。state 表示跟踪的状态。Frame、MapPoint 可能是自…

计算机毕业设计 基于SpringBoot的红色革命文物征集管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

学习JavaEE的日子 day12 构造方法 类的制作

Day12 需求&#xff1a;创建人类的对象&#xff0c;并操作对象 分析&#xff1a; 人类 - Person 属性&#xff1a;name、sex、age 方法&#xff1a;eat、sleep 场景&#xff1a;创建多个对象&#xff0c;去操作对象 //测试类&#xff1a;该类中有main方法&#xff0c;测试我们写…

F - Digital Roots HUOJ

题目 The digital root of a positive integer is found by summing the digits of the integer. If the resulting value is a single digit then that digit is the digital root. If the resulting value contains two or more digits, those digits are summed and the pro…

让你的Pandas代码快得离谱的两个技巧

如果你曾经使用过Pandas处理表格数据&#xff0c;你可能会熟悉导入数据、清洗和转换的过程&#xff0c;然后将其用作模型的输入。然而&#xff0c;当你需要扩展和将代码投入生产时&#xff0c;你的Pandas管道很可能开始崩溃并运行缓慢。在这篇文章中&#xff0c;笔者将分享2个技…

项目管理十大知识领域之项目质量管理

一、项目质量管理概述 项目质量管理是指通过计划、组织、控制和监督项目过程&#xff0c;以确保项目满足特定的质量要求的一系列活动。项目质量管理是整个项目管理体系中不可或缺的一部分&#xff0c;它涉及到对项目所涉及的产品或服务的质量进行规划、控制和保证的过程。在项…

【面试】测试/测开(ING3)

190. 栈和堆在内存管理上的区别 栈 1&#xff09; 栈是由系统自动分配和回收的内存。 2&#xff09;栈的存储地址是由高地址向低地址扩展的。 3&#xff09;栈是一个先进后出的结构。 4&#xff09;栈的空间大小是一个在编译时确定常数&#xff0c;即栈的大小是有限制的&#x…

Kubernetes的minikube

文章目录 环境概述准备安装启动和集群交互dashboard创建deployment创建service启用addon清理参考 环境 RHEL 9.3Docker Community 24.0.7miniKube v1.32.0 概述 minikube可以快速的在macOS、Linux和Windows上搭建本地的Kubernetes集群&#xff0c;帮助Kubernetes小白快速上手…

DBeaver连接Teradata数据库中文乱码问题

如下配置url即可&#xff1a; jdbc:teradata://{ip}/CLIENT_CHARSETGBK,TMODETERA,CHARSETASCII

鲁大师2023年牛角尖颁奖盛典揭晓,年度最强产品诞生

1月18日&#xff0c;鲁大师2023年度牛角尖颁奖典礼在四川省内江市威远县船石湖豪生温泉度假酒店完美落幕。 本届鲁大师牛角尖颁奖盛典举办地选在了威远县可谓是深有其意&#xff0c;其名称的由来最早可追溯到隋朝&#xff0c;取“威名远震”之意。而这也与鲁大师牛角尖奖项的设…

用通俗易懂的方式讲解:使用Llama-2、PgVector和LlamaIndex,构建大模型 RAG 全流程

近年来&#xff0c;大型语言模型&#xff08;LLM&#xff09;取得了显著的进步&#xff0c;然而大模型缺点之一是幻觉问题&#xff0c;即“一本正经的胡说八道”。其中RAG&#xff08;Retrieval Augmented Generation&#xff0c;检索增强生成&#xff09;是解决幻觉比较有效的…

自建呼叫中心还是使用云呼叫中心?

随着云呼叫技术的逐渐普及&#xff0c;云呼叫中心在全国的推广&#xff0c;越来越多中小企业开始使用云呼叫中心开展企业外呼及电话客服业务。但还是有很多企业坚持使用传统的自建呼叫中心。那么云呼叫中心跟自建呼叫中心有什么区别呢&#xff1f;企业又该作何选择&#xff1f;…

百德朗王晓明:用差异化创新,解决智能楼控项目深层痛点

近年来&#xff0c;国家对物联网产业的支持政策不断释放&#xff0c;《“十四五”数字经济发展规划》明确提出了要加速空间信息基础设施升级。作为AIoT控制系统核心技术引领者是如何看待物联网时代下的智慧楼宇与能源应用发展的呢&#xff1f;近日&#xff0c;百德朗联合创始人…

回归预测 | Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测

回归预测 | Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测 目录 回归预测 | Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测&…

通义千问Qwen模型运行异常解决记录:FlashAttention only supports Ampere GPUs or newer

通过langchain调用Qwen/Qwen-1_8B-Chat模型时&#xff0c;对话过程中出现报错提示&#xff1a; ERROR: object of type NoneType has no len() Traceback (most recent call last): File "/root/anaconda3/envs/chatchat/lib/python3.10/site-packages/langchain/chains/…

Linux系统下安装Vcpkg,并使用Vcpkg安装、编译OpenSceneGraph

环境&#xff1a;CentOS7 内存&#xff1a;8g(内存过少编译osg时会出现内存不足导致编译失败的情况&#xff0c;内存设置为4G时失败了&#xff0c;我直接加到了8g&#xff0c;所以就以8g为准了) 安装和配置vcpkg cd ~/ git clone https://www.github.com/microsoft/vcpkg cd …

《Effective C++》条款02、条款03、条款20、条款21阅读笔记:关于static、const、constexpr的思考

《Effective C++》条款02、条款03、条款20、条款21阅读笔记:关于static、const、constexpr的思考 —— 杭州 2024-01-15 文章目录 《Effective C++》条款02、条款03、条款20、条款21阅读笔记:关于`static`、`const`、`constexpr`的思考1.《Effective C++》条款03、条款04、条…

Redis持久化方案RDB和AOF

Redis两种持久化方案 RDB持久化AOF持久化 RDB持久化 RDB全称Redis Database Backup file&#xff08;Redis数据备份文件&#xff09;&#xff0c;也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后&#xff0c;从磁盘读取快照文…