机器人CPP编程基础-02变量Variables
机器人CPP编程基础-01第一个程序Hello World
基础代码都可以借助人工智能工具进行学习。

C++
#include<iostream>using namespace std;main()
{//Declaring an integer type variable A, allocates 4 bytes of memory.int A=4;cout<<A <<endl;//Prints the address of the variable A.cout<<&A <<endl;/*1. Variables cant have the same name.2. Variable name cant start with a number.3. Variable name should not contain spaces.4. Variable name should be self-descriptive.5. Variable name can't have special characters or keywords.*///Re-initialization of A.A=10;cout<<A <<endl;cout<<&A;
}
该代码主要执行以下操作:
- 声明一个名为
A的整数类型变量,并将其初始化为4。在 C++ 中,int类型通常占用 4 个字节的内存空间。 - 使用
cout语句输出变量A的值,即4。 - 使用
cout语句输出变量A的地址,即变量在内存中的位置。 - 通过注释的方式,列出了一些关于变量命名的规则和注意事项。
- 重新初始化变量
A的值为10。 - 使用
cout语句再次输出变量A的值,即10。 - 最后,再次使用
cout语句输出变量A的地址。
代码解析完毕。
基本概念:
C++变量是一种在程序中存储数据的机制。变量是用于存储和操作数据的标识符。以下是C++变量的详细介绍:
- 变量的命名:变量名可以是字母、数字、下划线,并且必须以字母或下划线开头。变量名通常使用驼峰命名法或下划线命名法。
- 变量的类型:变量在声明时必须指定其类型。C++有许多内置类型,包括整数、浮点数、字符、布尔等。此外,还可以使用自定义类型,如结构体、类等。
- 变量的声明:在C++中,必须在程序中使用变量之前声明它们。声明告诉编译器变量的名称和类型,以便编译器知道如何为变量分配内存空间。
- 变量的赋值:在声明变量后,必须将其初始化为一个值。可以使用赋值运算符(=)将值赋给变量。
- 变量的作用域:变量的作用域是指变量在程序中的可见性和生命周期。C++中有两种类型的作用域:局部和全局。局部作用域限制了变量的可见性和生命周期,只能在定义它的代码块中使用。全局作用域使得变量在整个程序中都可见。
- 常量:常量是变量的特殊类型,表示一个不可变的值。在C++中,使用关键字
const来声明常量。 - 变量的类型转换:在C++中,可以进行隐式类型转换和显式类型转换。隐式类型转换发生在编译器自动将一种类型的值转换为另一种类型时,例如将整数转换为浮点数。显式类型转换使用类型转换运算符(如
static_cast、dynamic_cast等)来显式地将一个类型的值转换为另一个类型。
以上是C++变量的详细介绍,掌握这些概念对于编写高效的C++程序非常重要。
C++14是C++语言的最新标准,它引入了一些关于变量的新特性和改进。以下是一些关于C++14中变量的详细介绍:
-
auto关键字:C++14引入了auto关键字,用于自动推断变量的类型。使用auto关键字可以简化变量的类型声明,特别是在使用复杂表达式或嵌套容器时。
-
列表初始化和变量声明:C++14支持使用花括号({})进行列表初始化,可以直接将初始值赋给变量,无需使用赋值运算符。例如:
cpp复制代码
int a = {10}; | |
std::string str = {"Hello World"}; |
-
初始化列表的构造器:C++14引入了初始化列表构造器,允许在类的构造函数中使用初始化列表来初始化成员变量。例如:
cpp复制代码
class MyClass { | |
public: | |
MyClass(int a, int b) : m_a(a), m_b(b) {} | |
private: | |
int m_a; | |
int m_b; | |
}; |
- 通用委托表达式:C++14引入了通用委托表达式(Generalized Delegate Expressions),允许使用更灵活的表达式来构造委托表达式。
- 静态断言:C++14引入了静态断言(Static Assert),用于在编译时检查条件是否满足。如果条件不满足,编译器将产生错误或警告。
- 右值引用和移动语义:C++14引入了右值引用(Rvalue Reference)和移动语义(Move Semantics),以优化资源的管理和性能。
以上是C++14中关于变量的详细介绍。这些新特性和改进提高了代码的可读性和性能,使C++更加现代化和灵活。
C++20是C++语言的最新标准,引入了一些关于变量的新特性和改进。以下是一些关于C++20中变量的详细介绍:
-
类型推断和auto关键字:C++20扩展了类型推断的功能,使得变量声明时可以省略变量名的类型,而只使用变量名即可。这使得代码更加简洁易读。
cpp复制代码
auto x = 10; // 推断x的类型为int | |
auto v = {1, 2, 3}; // 推断v的类型为std::initializer_list<int> |
-
结构化绑定:C++20引入了结构化绑定(Structured Binding),允许将一个结构体或联合体的成员变量直接分配给多个变量。
cpp复制代码
struct Point { | |
int x; | |
int y; | |
}; | |
Point p; | |
auto [x, y] = p; // 将p的x和y成员变量分配给x和y变量 |
-
范围for循环:C++20引入了范围for循环(Range-based for loop),允许在for循环中直接遍历容器或数组的元素。
cpp复制代码
int arr[] = {1, 2, 3, 4, 5}; | |
for (int elem : arr) { | |
// 直接访问arr的每个元素 | |
std::cout << elem << std::endl; | |
} |
- 初始化列表的构造器:C++20继续支持初始化列表构造器,允许在类的构造函数中使用初始化列表来初始化成员变量。
- concept关键字:C++20引入了concept关键字,用于定义类型的概念,用于约束模板参数的类型。这有助于提高代码的可读性和可维护性。
- if constexpr和if let:C++20引入了if constexpr和if let,用于在编译时条件判断和模式匹配,有助于编写更加简洁和高效的代码。
- coroutines:C++20引入了协程(Coroutines),这是一种控制流机制,允许函数在执行过程中暂停执行并将控制权返回给调用者,然后在某个特定点重新进入执行。协程可以用于实现异步编程、生成器等功能。
以上是C++20中关于变量的详细介绍。这些新特性和改进进一步提高了代码的可读性和性能,使C++更加现代化和灵活。
Arduino
int A = 4; // 声明一个整数类型的变量 A,并初始化为 4 void setup() { Serial.begin(9600); // 初始化串口通信,波特率为 9600
} void loop() { Serial.print(A); // 输出变量 A 的值到串口 Serial.print(" "); // 输出一个空格 Serial.print(&A); // 输出变量 A 的地址到串口 Serial.println(); // 输出一个换行符 delay(1000); // 延时 1 秒 A = 10; // 重新初始化变量 A 的值为 10
}
在 Arduino IDE 中,可以通过串口监视器来查看输出结果。在 loop() 函数中,每次输出变量 A 的值、地址和重新初始化 A 的值后,都使用 delay(1000) 来延时 1 秒,以便观察输出结果的变化。
ROS1
#include <ros/ros.h> int main(int argc, char **argv)
{ // 初始化ROS节点 ros::init(argc, argv, "my_node"); // 创建ROS节点句柄 ros::NodeHandle nh; // 声明一个整数类型变量A,分配4个字节的内存空间 int A = 4; // 发布变量A的值到"chatter"话题 ros::Publisher chatter_pub = nh.advertise<std_msgs::Int32>("chatter", 1000); // 创建标准消息类型:整数类型(32位) std_msgs::Int32 msg; msg.data = A; // 发布消息到"chatter"话题 ros::Rate loop_rate(1); while (ros::ok()) { msg.data = A; chatter_pub.publish(msg); ros::spinOnce(); loop_rate.sleep(); } return 0;
}
上述代码是一个用于ROS1的C++节点,它使用了ROS的C++库。以下是代码的详细解释:
#include <ros/ros.h>: 引入ROS的命名空间和头文件,这些文件包含了ROS中使用的各种函数和类。using namespace std;: 引入std命名空间,这样我们就可以直接使用标准库中的函数和对象,而无需在每个前面加上std::。int main(int argc, char **argv): 主函数,程序的执行从这里开始。它接受两个参数:命令行参数的数量(argc)和命令行参数的值(argv)。ros::init(argc, argv, "my_node"): 初始化ROS节点。这是ROS中每个节点必须做的第一步。它接受三个参数:命令行参数的数量和值,以及该节点的名称。ros::NodeHandle nh;: 创建一个节点句柄对象nh。节点句柄是ROS中非常重要的对象,它提供了与ROS系统的通信接口。ros::Publisher chatter_pub = nh.advertise<std_msgs::Int32>("chatter", 1000);: 使用节点句柄创建一个名为chatter_pub的发布者对象,并使用advertise函数将其与名为"chatter"的话题关联起来。该发布者将使用std_msgs::Int32消息类型发布消息。第二个参数是发布者队列的大小,这里设置为1000。std_msgs::Int32 msg;: 创建一个名为msg的std_msgs::Int32消息对象,用于发布到"chatter"话题。msg.data = A;: 设置消息对象msg的数据字段为变量A的值。chatter_pub.publish(msg);: 使用发布者对象chatter_pub发布消息对象msg到"chatter"话题。ros::Rate loop_rate(1);: 创建一个名为loop_rate的速率对象,并将其设置为每秒发布一次消息(因为参数为1)。while (ros::ok()): 创建一个循环,当ROS系统正常运行时,该循环会一直执行。ros::spinOnce();: 执行一次ROS的Spin主循环,用于处理来自ROS系统的消息和调用回调函数。loop_rate.sleep();: 调用速率对象的sleep函数,暂停执行一段时间以保持发布频率为每秒一次。return 0;: 返回0表示程序成功执行结束。
总的来说,该代码创建了一个ROS节点,它周期性地发布一个整数变量A到名为"chatter"的话题中。它使用了ROS的核心组件,包括节点句柄、发布者和消息类型,以实现与ROS系统的交互。
……
相关文章:
机器人CPP编程基础-02变量Variables
机器人CPP编程基础-01第一个程序Hello World 基础代码都可以借助人工智能工具进行学习。 C #include<iostream>using namespace std;main() {//Declaring an integer type variable A, allocates 4 bytes of memory.int A4;cout<<A <<endl;//Prints the a…...
【学会动态规划】买卖股票的最佳时机 IV(18)
目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 动态规划怎么学? 学习一个算法没有捷径,更何况是学习动态规划, 跟我…...
请解释一下CSS中的rem和em单位有什么不同,分别如何使用?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CSS中的rem和em单位的区别和使用⭐ em单位使用示例: ⭐ rem 单位使用示例: ⭐ 区别和适用场景⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何…...
docker 导入镜像 REPOSITORY和tag都是null怎么解决
当使用 docker import 命令导入镜像时,REPOSITORY 和 TAG 字段可能会为 null,因为 docker import 命令不会保留镜像的元数据,例如镜像名称和标签。这是因为 docker import 命令主要用于将本地文件系统中的文件或目录导入为 Docker 镜像&#…...
c语言操作符
目录 运算符 移位操作符 左移操作符 右移操作符 位操作符 按位与& 按位或| 按位异或^ 异或交换数字 计算二进制中1的个数 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 隐式类型转换 整形提升实例: 算术转换 操作…...
python爬虫5:requests库-案例3
python爬虫5:requests库-案例3 前言 python实现网络爬虫非常简单,只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点,方便以后复习。 申明 本系列所涉及的代码仅用于个人研究与讨论,并不会对网…...
uni-app:实现点击按钮,进行数据累加展示(解决数据过多,导致出错)
效果 代码 核心代码 一、标签显示 <!-- 加载更多 --> <view class"load_more" v-if"info.length > pageNum * pageSize" tap"loadMore">加载更多 </view> v-if"info.length > pageNum * pageSize"…...
群晖6.X便捷的安装cpolar内网穿透
群晖6.X便捷的安装cpolar内网穿透 文章目录 群晖6.X便捷的安装cpolar内网穿透前言1. 下载cpolar的群晖套件1.1 打开群晖套件中心1.2 选择“手动安装”1.3 选择下载cpolar套件位置 2. 打开cpolar的Web-UI界面3. 注册会员 前言 随着硬件设备和软件技术的发展,以及数据…...
ffmpeg 4.4版本对MP4文件进行AES-CTR加密,和流式加密
对于ffmpeg的AES-CTR加密有两种方式,一个是普通的整个视频做加密,另一个是对视频做切片处理,然后进行加密。 一、对于普通的加密方式 直接使用下面的命令就行 ffmpeg -i animal.mp4 -vcodec copy -acodec copy -encryption_scheme cenc-aes…...
软件测试基础篇——Docker
1、docker技术概述 docker描述:docker是一项虚拟化的容器技术(类似于虚拟机),docker技术给使用者提供一个平台,在该平台上可以利用提供的容器,对每一个应用程序进行单独的封装隔离,每一个应用程…...
MySQL刷题遇到的盲点(五)窗口函数
窗口函数 语法: <窗口函数> over (partition by <用于分组的列名>order by <用于排序的列名>) partition by:用来对表分组( partition 子句可以省略,省略就是不指定分组) order by:是…...
【java】基础——多态
多态基本知识思维导图 多态的代码实现,注意父类对象引用指向子类对象引用(向上转型)的方法,父类就可以调用子类重写的方法和派生的方法,但不能调用子类特有的方法: class Animal {public void makeSound()…...
Go语言使用cron/v3实现定时任务
一、获取cron/v3包 go get github.com/robfig/cron/v3v3.0.0安装v3版本的cron包。 二、创建cron调度器 使用cron.New()创建一个新的Cron调度器: c : cron.New()三、添加定时任务 使用AddFunc方法添加定时任务,参数是cron表达式和任务函数: c.AddFunc("* * * * *&quo…...
photoshop PS 查看像素坐标、像素颜色、像素HSB颜色
方法一 photoshop 菜单栏 窗口菜单->信息菜单项(F8), 在信息窗口里会有当前的 x,y坐标 方法二 photoshop 菜单栏 视图菜单->标尺菜单项(ctrlR) 宽度和高度边上都有标尺,默认的是厘米,右键单机宽度和高度边上…...
SpringCloud实用篇3----Docker
1.初识Docker 1.1 什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署,环境不一定一致…...
使用阿里云服务器搭建Discuz论坛网站教程基于CentOS系统
阿里云百科分享使用阿里云服务器建站教程,本文是搭建Discuz论坛,Discuz!是一款通用的社区论坛软件系统,它采用PHP和MySQL组合的基础架构,为您提供高效的论坛解决方案。本文介绍如何在CentOS 7操作系统的ECS实例上搭建Discuz! X3.4…...
gitee(码云)如何生成并添加公钥配置用户信息
一,简介 在使用Gitee的时候,公钥是必须的,无论是克隆还是上传。本文主要介绍如何本地生成和添加公钥到服务器,然后配置自己的用户信息,方便日后拉取与上传代码。 二,步骤介绍 2.1 本地生成公钥 打开git ba…...
C++QT教程3——手册4.11.1自带教程(笔记)——创建一个QT快速应用
文章目录 创建一个QT快速应用创建项目创建主视图添加应用逻辑为视图添加动画素材文件 参考文章 创建一个QT快速应用 本教程使用内置的QML类型,介绍了Qt Quick的基本概念。有关可以选择的用户界面选项的更多信息,请参阅用户界面。 本教程描述了如何使用…...
用友时空KSOA SQL注入漏洞复现(HW0day)
0x01 产品简介 用友时空KSOA是建立在SOA理念指导下研发的新一代产品,是根据流通企业最前沿的I需求推出的统一的IT基础架构,它可以让流通企业各个时期建立的IT系统之间彼此轻松对话,帮助流通企业保护原有的IT投资,简化IT管理&#…...
java中编写代码:如何以sftp的形式把文件从服务器上面下载下来?(有账号和密码)
在Java中,你可以使用JSch库来实现通过SFTP协议下载文件。以下是一个简单的示例代码: import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; public class SFTPDownloa…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
