机器人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.mzph.cn/news/35070.shtml

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

相关文章

Matlab绘制圆形(rectangle函数、viscircles函数和圆的参数方程)

基于matlab绘制圆形 一、rectangle函数 对于绘制圆心坐标为&#xff08;x&#xff0c;y&#xff09;半径为r的圆形&#xff0c;函数为&#xff1a; x0; y0; r1; rectangle(Position, [x-r,y-r,2*r,2*r], Curvature, [1 1],EdgeColor, r); axis equalEdgeColor表示颜色 二、…

解决lldb调试时可能出现的personality set failed: Function not implemented

最近在尝试使用Visual Studio 2022远程连接Linux进行C/C的开发&#xff0c;由于CentOS风波不断&#xff0c;所以现在的开发基本上都是使用ubuntu了&#xff0c;但是目前VS2022有一些BUG&#xff0c;就是远程调试时&#xff0c;如果目标系统是ubuntu则会出现启动调试器很慢的问题…

学习笔记整理-JS-03-表达式和运算符

[[toc]] 一、表达式和运算符 1. 表达式 表达式种类 算术、关系、逻辑、赋值、综合 二、JS基本表达式 1. 算术运算符 意义运算符加减-乘*除/取余% 加减乘除 加减的符号和数学一致&#xff0c;乘号是*号&#xff0c;除法是/号默认情况&#xff0c;乘除法的优先级高于加法和…

安卓源码分析(10)Lifecycle实现组件生命周期管理

参考&#xff1a; https://developer.android.google.cn/topic/libraries/architecture/lifecycle?hlzh-cn#java https://developer.android.google.cn/reference/androidx/lifecycle/Lifecycle 文章目录 1、概述2、LifeCycle类3、LifecycleOwner类4、LifecycleObserver类 1、…

nginx禁用3DES和DES弱加密算法

nginx禁用3DES和DES弱加密算法 项目背景 最近护网行动&#xff0c;收到漏洞报告&#xff0c;如下&#xff1a; 漏洞名称SSL/TLS协议信息泄露漏洞(CVE-2016-2183)【原理扫描】详细描述TLS是安全传输层协议&#xff0c;用于在两个通信应用程序之间提供保密性和数据完整性。 TLS…

opencv 基础50-图像轮廓学习03-Hu矩函数介绍及示例-cv2.HuMoments()

什么是Hu 矩&#xff1f; Hu 矩&#xff08;Hu Moments&#xff09;是由计算机视觉领域的科学家Ming-Kuei Hu于1962年提出的一种图像特征描述方法。这些矩是用于描述图像形状和几何特征的不变特征&#xff0c;具有平移、旋转和尺度不变性&#xff0c;适用于图像识别、匹配和形状…

Docker查看、创建、进入容器相关的命令

1.查看、创建、进入容器的指令 用-it指令创建出来的容器&#xff0c;创建完成之后会立马进入容器。退出之后立马关闭容器。 docker run -it --namec1 centos:7 /bin/bash退出容器&#xff1a; exit查看现在正在运行的容器命令&#xff1a; docker ps查看历史容器&#xff0…

docker小白第二天

centos上安装docker docker官网&#xff0c;docker官网&#xff0c;找到下图中的doc文档。 进入如下页面 选中manuals&#xff0c;安装docker引擎。 最终centos下的docker安装文档链接&#xff1a;安装文档链接. 具体安装步骤&#xff1a; 1、打开Centos&#xff0c;输入命…

【BASH】回顾与知识点梳理(十五)

【BASH】回顾与知识点梳理 十五 十五. 指令与文件的搜寻15.1 脚本文件名的搜寻which (寻找『执行档』) 15.2 文件档名的搜寻whereis (由一些特定的目录中寻找文件文件名)locate / updatedbfind与时间有关的选项与使用者或组名有关的参数与文件权限及名称有关的参数额外可进行的…

JVM垃圾回收

如何确定垃圾 对堆垃圾回收前的第一步就是要判断哪些对象已经死亡&#xff08;即不能再被任何途径使用的对象&#xff09; 引用计数法 这个方法就是为对象添加计数器来标识引用个数&#xff0c;计数器为 0 的对象就是不可能再被使用的。但是这种方法存在循环引用问题&#x…

布谷鸟配音:一站式配音软件

这是一款智能语音合成软件&#xff0c;可以快速将文字转换成语音&#xff0c;拥有多种真人模拟发音&#xff0c;可以选择不同男声、女声、童声&#xff0c;以及四川话、粤语等中文方言和外语配音&#xff0c;并且可对语速、语调、节奏、数字读法、多音字、背景音等进行全方位设…

学习笔记整理-JS-01-语法与变量

文章目录 一、语法与变量1. 初识JavaScript2. JavaScript的历史3. JavaScript与ECMAScript的关系4. JavaScript的体系5. JavaScript的语言风格和特性 二、语法1. JavaScript的书写位置2. 认识输出语句3. REPL环境&#xff0c;交互式解析器4. 变量是什么5. 重点内容 一、语法与变…

二、编写第一个 Spring MVC 程序

文章目录 一、编写第一个 Spring MVC 程序 一、编写第一个 Spring MVC 程序 代码示例 创建 maven 项目&#xff0c;以此项目为父项目&#xff0c;在父项目的 pom.xml 中导入相关依赖 <dependencies><dependency><groupId>junit</groupId><artifactI…

分支和循环语句(2)(C语言)

目录 do...while()循环 do语句的语法 do语句的特点 do while循环中的break和continue 练习 goto语句 do...while()循环 do语句的语法 do 循环语句; while(表达式); do语句的特点 循环至少执行一次&#xff0c;使用的场景有限&#xff0c;所以不是经常使用。 #inc…

【uniapp】uniapp自动导入自定义组件和设置分包:

文章目录 一、自动导入自定义组件&#xff1a;二、设置分包和预加载&#xff1a; 一、自动导入自定义组件&#xff1a; 【Volar 官网】https://github.com/vuejs/language-tools 二、设置分包和预加载&#xff1a; 【官方文档】https://uniapp.dcloud.net.cn/collocation…

【服务平台】Rancher运行和管理Docker和Kubernetes,提供管理生产中的容器所需的整个软件堆栈

Rancher是一个开源软件平台&#xff0c;使组织能够在生产中运行和管理Docker和Kubernetes。使用Rancher&#xff0c;组织不再需要使用一套独特的开源技术从头开始构建容器服务平台。Rancher提供了管理生产中的容器所需的整个软件堆栈。  完整软件堆栈 Rancher是供采用容器的团…

idea添加作者信息

idea添加作者信息 自定义作者信息idea添加作者信息自定义作者信息 自定义作者信息 idea添加作者信息 在idea中&#xff0c;经常会有这些波浪纹提示&#xff0c;放在上面之后会提示添加作者信息,点击添加作者信息后&#xff0c;但是不是自己想要的 这里提取的话好像没什么办法…

JavaWeb课程学习--Day01

HTML 建立css文件&#xff1a; css使用方式&#xff1a; <span>...</span>无语意包裹标签 css中的三种选择器&#xff1a; 注意&#xff1a;播放视音频时要留出播放空间 盒子模型&#xff1a; 表格标签&#xff1a; 以上表格&#xff1a; 表单标签&#xff1a; 表…

分布式 - 服务器Nginx:一小时入门系列之动静分离

文章目录 1. 动静分离的好处2. 分离静态文件3. 修改 Nginx 配置文件4. location 命令修饰符优先级 1. 动静分离的好处 Apache Tocmat 严格来说是一款java EE服务器&#xff0c;主要是用来处理 servlet请求。处理css、js、图片这些静态文件的IO性能不够好&#xff0c;因此&…

ROS学习--HelloWorld的实现(C++)

1.创建工作空间并初始化 mkdir -p 自定义空间名称/src cd 自定义空间名称 catkin_make上述命令&#xff0c;首先会创建一个工作空间以及一个 src 子目录&#xff0c;然后再进入工作空间调用 catkin_make命令编译。 2.进入 src 创建 ros 包并添加依赖 cd src catkin_create_pk…