機器人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.pswp.cn/news/35070.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35070.shtml
英文地址,請注明出處:http://en.pswp.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表示顏色 二、…

多版本node環境搭建切換管理NVM

Node.js NVM 全名 Node Version Management 一、Node 模塊對象 參考博客 Node 模塊對象 二、Node 多版本管理NVM &#xff08;1&#xff09;參考 Node 多版本管理 &#xff08;2&#xff09;github上NVM工具 nvm-windows mirrors / coreybutler / nvm-windows GitCode…

消息隊列(12) - 定義服務器類

目錄 前言設計思想 前言 之前,我們寫了通信協議的具體設計,接下來我們設計服務器類 設計思想 我們先只考慮一個虛擬主機的情況下, 在一個虛擬主機的情況下,我們需要有一個session會話來幫助我們存儲信息,并且既然是網絡通信,那么socket關鍵字肯定也必不可少,我們在引入一個線…

解決lldb調試時可能出現的personality set failed: Function not implemented

最近在嘗試使用Visual Studio 2022遠程連接Linux進行C/C的開發&#xff0c;由于CentOS風波不斷&#xff0c;所以現在的開發基本上都是使用ubuntu了&#xff0c;但是目前VS2022有一些BUG&#xff0c;就是遠程調試時&#xff0c;如果目標系統是ubuntu則會出現啟動調試器很慢的問題…

mysql高并發下主鍵自增打來的問題

在一般情況下&#xff0c;在新增領域對象后&#xff0c;都需要獲取對應的主鍵值。使用應用層來維護主鍵&#xff0c;在一定程度上有利于程序性能的優化和應用移植性的提高。在采用數據庫自增主鍵的方案里&#xff0c;如果JDBC驅動不能綁定新增記錄對應的主鍵&#xff0c;就需要…

LeetCode 1281. 整數的各位積和之差

【LetMeFly】1281.整數的各位積和之差 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/subtract-the-product-and-sum-of-digits-of-an-integer/ 給你一個整數 n&#xff0c;請你幫忙計算并返回該整數「各位數字之積」與「各位數字之和」的差。 示例 1&#xff1a; …

學習筆記整理-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、…

數據庫字段命名導致的SQL報錯

1.表設計 create table variables (id bigint not null comment 主鍵,business_key varchar(128) null comment 業務key,key varchar(128) null comment Map中的key,value varchar(255) null comment…

Centos yum命令大全

1.使用YUM查找軟件包 $ yum search python 2.列出所有可安裝的軟件包 $ yum list | grep python 3.列出所有可更新的軟件包 $ yum list updates 4.列出所有已安裝的軟件包 $ yum list installed | grep python

[GIN-debug] [ERROR] listen tcp: address 8080: missing port in address

學習Golang_gin框架的第一天 遇到一下報錯 : [GIN-debug] [ERROR] listen tcp: address 8080: missing port in address 錯誤代碼 : package mainimport "github.com/gin-gonic/gin"func main() {router : gin.Default()router.GET("/index", func…

910數據結構(2014年真題)

算法設計題 問題1 已知一個帶頭結點的單鏈表head&#xff0c;假設結點中的元素為整數&#xff0c;試編寫算法&#xff1a;按遞增次序輸出單鏈表中各個結點的數據元素&#xff0c;并釋放結點所占的存儲空間。要求&#xff1a;(1)用文字給出你的算法思想&#xff1b;(2)不允許使…

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;適用于圖像識別、匹配和形狀…

C語言鏈表操作

目錄 鏈表基本操作 刪除重復元素 查找倒數第N個節點 查找中間節點 約瑟夫環 循環鏈表 合并有序鏈表 逆置鏈表 逆置鏈表(雙向鏈表) 鏈表基本操作 //linklist.c#include "linklist.h" #include <stdlib.h>struct node *head NULL; struct node *tail…

React 18 state 狀態更新函數

參考文章 把一系列 state 更新加入隊列 設置組件 state 會把一次重新渲染加入隊列。但有時可能會希望在下次渲染加入隊列之前對 state 的值執行多次操作。為此&#xff0c;了解 React 如何批量更新 state 會很有幫助。 React 會對 state 更新進行批處理 在下面的示例中&…

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…