机器人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;
}

该代码主要执行以下操作:

  1. 声明一个名为 A 的整数类型变量,并将其初始化为 4。在 C++ 中,int 类型通常占用 4 个字节的内存空间。
  2. 使用 cout 语句输出变量 A 的值,即 4
  3. 使用 cout 语句输出变量 A 的地址,即变量在内存中的位置。
  4. 通过注释的方式,列出了一些关于变量命名的规则和注意事项。
  5. 重新初始化变量 A 的值为 10
  6. 使用 cout 语句再次输出变量 A 的值,即 10
  7. 最后,再次使用 cout 语句输出变量 A 的地址。

代码解析完毕。

基本概念:

C++变量是一种在程序中存储数据的机制。变量是用于存储和操作数据的标识符。以下是C++变量的详细介绍:

  1. 变量的命名:变量名可以是字母、数字、下划线,并且必须以字母或下划线开头。变量名通常使用驼峰命名法或下划线命名法。
  2. 变量的类型:变量在声明时必须指定其类型。C++有许多内置类型,包括整数、浮点数、字符、布尔等。此外,还可以使用自定义类型,如结构体、类等。
  3. 变量的声明:在C++中,必须在程序中使用变量之前声明它们。声明告诉编译器变量的名称和类型,以便编译器知道如何为变量分配内存空间。
  4. 变量的赋值:在声明变量后,必须将其初始化为一个值。可以使用赋值运算符(=)将值赋给变量。
  5. 变量的作用域:变量的作用域是指变量在程序中的可见性和生命周期。C++中有两种类型的作用域:局部和全局。局部作用域限制了变量的可见性和生命周期,只能在定义它的代码块中使用。全局作用域使得变量在整个程序中都可见。
  6. 常量:常量是变量的特殊类型,表示一个不可变的值。在C++中,使用关键字const来声明常量。
  7. 变量的类型转换:在C++中,可以进行隐式类型转换和显式类型转换。隐式类型转换发生在编译器自动将一种类型的值转换为另一种类型时,例如将整数转换为浮点数。显式类型转换使用类型转换运算符(如static_castdynamic_cast等)来显式地将一个类型的值转换为另一个类型。

以上是C++变量的详细介绍,掌握这些概念对于编写高效的C++程序非常重要。

C++14是C++语言的最新标准,它引入了一些关于变量的新特性和改进。以下是一些关于C++14中变量的详细介绍:

  1. auto关键字:C++14引入了auto关键字,用于自动推断变量的类型。使用auto关键字可以简化变量的类型声明,特别是在使用复杂表达式或嵌套容器时。

  2. 列表初始化和变量声明:C++14支持使用花括号({})进行列表初始化,可以直接将初始值赋给变量,无需使用赋值运算符。例如:

 

cpp复制代码

int a = {10};
std::string str = {"Hello World"};
  1. 初始化列表的构造器:C++14引入了初始化列表构造器,允许在类的构造函数中使用初始化列表来初始化成员变量。例如:

 

cpp复制代码

class MyClass {
public:
MyClass(int a, int b) : m_a(a), m_b(b) {}
private:
int m_a;
int m_b;
};
  1. 通用委托表达式:C++14引入了通用委托表达式(Generalized Delegate Expressions),允许使用更灵活的表达式来构造委托表达式。
  2. 静态断言:C++14引入了静态断言(Static Assert),用于在编译时检查条件是否满足。如果条件不满足,编译器将产生错误或警告。
  3. 右值引用和移动语义:C++14引入了右值引用(Rvalue Reference)和移动语义(Move Semantics),以优化资源的管理和性能。

以上是C++14中关于变量的详细介绍。这些新特性和改进提高了代码的可读性和性能,使C++更加现代化和灵活。

C++20是C++语言的最新标准,引入了一些关于变量的新特性和改进。以下是一些关于C++20中变量的详细介绍:

  1. 类型推断和auto关键字:C++20扩展了类型推断的功能,使得变量声明时可以省略变量名的类型,而只使用变量名即可。这使得代码更加简洁易读。

 

cpp复制代码

auto x = 10; // 推断x的类型为int
auto v = {1, 2, 3}; // 推断v的类型为std::initializer_list<int>
  1. 结构化绑定:C++20引入了结构化绑定(Structured Binding),允许将一个结构体或联合体的成员变量直接分配给多个变量。

 

cpp复制代码

struct Point {
int x;
int y;
};
Point p;
auto [x, y] = p; // 将p的x和y成员变量分配给x和y变量
  1. 范围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;
}
  1. 初始化列表的构造器:C++20继续支持初始化列表构造器,允许在类的构造函数中使用初始化列表来初始化成员变量。
  2. concept关键字:C++20引入了concept关键字,用于定义类型的概念,用于约束模板参数的类型。这有助于提高代码的可读性和可维护性。
  3. if constexpr和if let:C++20引入了if constexpr和if let,用于在编译时条件判断和模式匹配,有助于编写更加简洁和高效的代码。
  4. 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++库。以下是代码的详细解释:

  1. #include <ros/ros.h>: 引入ROS的命名空间和头文件,这些文件包含了ROS中使用的各种函数和类。
  2. using namespace std;: 引入std命名空间,这样我们就可以直接使用标准库中的函数和对象,而无需在每个前面加上std::
  3. int main(int argc, char **argv): 主函数,程序的执行从这里开始。它接受两个参数:命令行参数的数量(argc)和命令行参数的值(argv)。
  4. ros::init(argc, argv, "my_node"): 初始化ROS节点。这是ROS中每个节点必须做的第一步。它接受三个参数:命令行参数的数量和值,以及该节点的名称。
  5. ros::NodeHandle nh;: 创建一个节点句柄对象nh。节点句柄是ROS中非常重要的对象,它提供了与ROS系统的通信接口。
  6. ros::Publisher chatter_pub = nh.advertise<std_msgs::Int32>("chatter", 1000);: 使用节点句柄创建一个名为chatter_pub的发布者对象,并使用advertise函数将其与名为"chatter"的话题关联起来。该发布者将使用std_msgs::Int32消息类型发布消息。第二个参数是发布者队列的大小,这里设置为1000。
  7. std_msgs::Int32 msg;: 创建一个名为msgstd_msgs::Int32消息对象,用于发布到"chatter"话题。
  8. msg.data = A;: 设置消息对象msg的数据字段为变量A的值。
  9. chatter_pub.publish(msg);: 使用发布者对象chatter_pub发布消息对象msg到"chatter"话题。
  10. ros::Rate loop_rate(1);: 创建一个名为loop_rate的速率对象,并将其设置为每秒发布一次消息(因为参数为1)。
  11. while (ros::ok()): 创建一个循环,当ROS系统正常运行时,该循环会一直执行。
  12. ros::spinOnce();: 执行一次ROS的Spin主循环,用于处理来自ROS系统的消息和调用回调函数。
  13. loop_rate.sleep();: 调用速率对象的sleep函数,暂停执行一段时间以保持发布频率为每秒一次。
  14. return 0;: 返回0表示程序成功执行结束。

总的来说,该代码创建了一个ROS节点,它周期性地发布一个整数变量A到名为"chatter"的话题中。它使用了ROS的核心组件,包括节点句柄、发布者和消息类型,以实现与ROS系统的交互。


……


 

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

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

相关文章

即将发布的 Kibana 版本可运行 Node.js 18

作者&#xff1a;Thomas Watson Kibana 构建在 Node.js 框架之上。 为了确保每个 Kibana 版本的稳定性和使用寿命&#xff0c;我们始终将捆绑的 Node.js 二进制文件保持为最新的最新长期支持 (LTS) 版本。 当 Node.js 版本 18 升级到 LTS 时&#xff0c;我们开始将 Kibana 升级…

最新AI系统ChatGPT网站程序源码+搭建教程/公众号/H5端/安装配置教程/完整知识库

1、前言 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01;…

Linux文件属性查看和修改学习

一、基本属性 1、看懂文件属性&#xff1a; Linux系统是一种典型的多用户系统&#xff0c;不同的用户处于不同的地位&#xff0c;拥有不同的权限。为了保护系统的安全性&#xff0c; Linux系统对不同的用户访问同一文件&#xff08;包括目录文件&#xff09;的权限做了不同的…

工程监测振弦采集仪采集到的数据如何进行分析和处理

工程监测振弦采集仪采集到的数据如何进行分析和处理 振弦采集仪是一个用于测量和记录物体振动的设备。它通过测量物体表面的振动来提取振动信号数据&#xff0c;然后将其转换为数字信号&#xff0c;以便进行分析和处理。在实际应用中&#xff0c;振弦采集仪是广泛应用于机械、建…

力扣刷题(C++)知识点

一&#xff0c;找到数组的中间位置 这个是错的&#xff0c;不能分开来 C vector<int>& nums 用法 创建一维数组vector&#xff1a; vector<int> nums; //不指定长度vector<int> nums(n); //指定长度为n c &#xff1c;numeric&#xff1e; accumul…

解决方案 | 法大大加速医疗器械行业创新升级

科技的不断进步&#xff0c;带动医疗器械产品不断创新升级。数字化、智能化的技术也开始广泛应用在医疗器械行业中。行业的蓬勃发展&#xff0c;进一步驱动了医疗器械行业规范化管理政策的出台&#xff0c;2019年&#xff0c;《医疗器械产品注册管理办法》&#xff08;2019&…

Linux 当fork在for循环中的问题

以下代码会打印几个"A"&#xff1f; 例1.代码如下&#xff1a; int main(int argc, char* argv[],char* envp[]) { for(int i 0;i < 2; i ) { fork(); printf("A\n"); } exit(0); } 代码分析&#xff1a; //父进程for(int i …

【C语言】const修饰普通变量和指针

大家好&#xff0c;我是苏貝&#xff0c;本篇博客是系列博客每日一题的第一篇&#xff0c;本系列的题都不会太难&#xff0c;如果大家对这种系列的博客感兴趣的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 文章目录 一.const修饰普通变量二.const修饰指…

echarts绘制仪表盘

代码展示&#xff1a; /**绘制仪表盘图表 */function drawInstrument(id) {setTimeout(()> {var chart echarts.init(document.getElementById(id)); var option {series: [{name: 风险指数,type: gauge,center: [50%, 60%],radius: 90%,min: chartData.min,max: chartDat…

Opencv将数据保存到xml、yaml / 从xml、yaml读取数据

Opencv将数据保存到xml、yaml / 从xml、yaml读取数据 Opencv提供了读写xml、yaml的类实现&#xff1a; 本文重点参考&#xff1a;https://blog.csdn.net/cd_yourheart/article/details/122705776?spm1001.2014.3001.5506&#xff0c;并将给出文件读写的具体使用实例。 1. 官…

大模型相关知识

一. embedding 简单来说&#xff0c;embedding就是用一个低维的向量表示一个物体&#xff0c;可以是一个词&#xff0c;或是一个商品&#xff0c;或是一个电影等等。这个embedding向量的性质是能使距离相近的向量对应的物体有相近的含义&#xff0c;比如 Embedding(复仇者联盟)…

【JavaWeb】实训的长篇笔记(下)

文章目录 八、功能实现1、注册功能2、登录功能3、问题说明4、首页数据显示5、后台管理 八、功能实现 1、注册功能 jsp&#xff1a;能够在页面中把数据动态化&#xff0c;jsp和html在元素标签上是无区别的&#xff0c;区别是html中写上java代码就成了jsp文件。filename.jsp。 需…

Go http.Handle和http.HandleFunc的路由问题

Golang的net/http包提供了原生的http服务&#xff0c;其中http.Handle和http.HandleFunc是两个重要的路由函数。 1. 函数介绍 http.HandleFunc和http.Handle的函数原型如下&#xff0c;其中DefaultServeMux是http包提供的一个默认的路由选择器。 func HandleFunc(pattern st…

关于MYSQL日期相减问题

错误写法&#xff1a; SELECT DATE_FORMAT(STR_TO_DATE(20230701,%Y%m%d) -60,%Y%m%d); 但是这种格式有个问题&#xff0c;则会输出空。 正确写法&#xff1a; SELECT DATE_FORMAT(DATE_SUB(20230701,INTERVAL 60 DAY),%Y%m%d);

基于Spring Boot的高校图书馆管理系统的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的高校图书馆管理系统的设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java sp…

C++QT教程3——手册4.11.1自带教程(笔记)——创建一个QT快速应用

文章目录 创建一个QT快速应用创建项目创建主视图添加应用逻辑为视图添加动画素材文件 参考文章 创建一个QT快速应用 本教程使用内置的QML类型&#xff0c;介绍了Qt Quick的基本概念。有关可以选择的用户界面选项的更多信息&#xff0c;请参阅用户界面。 本教程描述了如何使用…

实现C++多线程的完全指南

目录 引言&#xff1a;1. 理解多线程编程的基本概念2. 引入C标准库中的线程库3. 创建线程4. 线程同步和互斥5. 线程间的通信使用多线程需要关注的要点结论&#xff1a; 引言&#xff1a; 在现代软件开发中&#xff0c;多线程编程已经成为一项非常重要的技能。通过利用多线程&a…

每日一题——圆圈中最后剩下的数字(约瑟夫环问题)

圆圈中最后剩下的数字&#xff08;约瑟夫环问题&#xff09; 题目链接 约瑟夫环 这是一道典型的约瑟夫环问题&#xff0c;而约瑟夫问题的一般形式是这样的&#xff1a; 约瑟夫问题是个有名的问题&#xff1a;N个人围成一圈&#xff0c;从第一个开始报数&#xff0c;第M个将被…

P12-Retentive NetWork-RetNet挑战Transformer

论文地址:https://arxiv.org/abs/2307.08621 目录 Abstract 一.Introduction 二.Retentive Networks 2.1Retention 2.2Gated Multi-Scale Retention 2.3Overall Architecture of Retention Networks 2.4Relation to and Differences from Previous Methods 三.Experime…

【ARM Cache 系列文章 8 -- ARM DynamIQ 技术介绍

文章目录 DynamIQ 技术背景DynamIQ技术详解DynamIQ 与 big.LITTLEDynamIQ cluster 分类硬件支持 DynamIQ为什么适合人工智能&#xff1f; DynamIQ 技术背景 2017年3月21日下午&#xff0c;ARM在北京金隅喜来登酒店召开发布会&#xff0c;正式发布了全新的有针对人工智能及机器…