C與C++的區別,類型轉換,引用

1.從C到C++

語言的區別

C語言

編譯性語言
面向過程語言靈活
移植性好
效率高

shell

解釋性語言
面向過程語言Linux運維

C++

編譯性語言
面向對象面向對象語言效率最高的
應用領域:系統開發(APP開發,服務器開發),引擎開發,游戲開發,嵌入式開發,GUI界面開發。

python

解釋性語言
面向對象人工智能,絕大部分都是python開發的
應用領域:系統開發(APP開發,服務器開發),游戲開發,運維,爬蟲,大數據,GUI界面開發,人工智能

面向過程

把需求/問題,拆解成一個個步驟

程序=數據結構+算法

面向對象

將需求/問題,抽象成多個對象

程序=對象+對象間的通信機制

2.C++與C的差異

編譯一個C++程序

C++的文件后綴

有很多:.C,.cc, .cpp, .c++, …

推薦使用:.cpp

原因:通用。各種操作系統,各種IDE軟件都是識別。

編譯

Linux:g++

注意:理論上C語言用gcc,C++用g++。

windows:MinGW

IDE

QT

Vscode

Dev-c++

。。。

2.1更加嚴格的語法檢查

1.更加嚴格的類型檢查

char a = 'A';
int *q = &a;char *p = malloc(1);c++會直接報錯

2.更加嚴格的函數形式

1.返回值如果函數不是void,那么需要返回值,否則報警告
2.形參如果沒寫,默認是void。不能傳實參,否則報錯

3.不允許同名的全局變量

int a;
int a;C++會直接報錯

4.可以對寄存器類型取地址

只要編譯器發現你有這個操作,register變成auto

5.新增布爾(bool)類型

true--1
false--0

2.2const

C:

? 對于C語言來說,const只修飾變量名

C++:

? 有點類似于#define,在預處理的階段進行替換

? 1.絕對的常量,不能直接修改

? 2.必須初始化

? 3.可以間接修改,volatile(易變的)

volatile const int var = 10;	// 必須定義在其他文件
在本文件中,extern引入

和宏常量的區別:

? 1.宏的邊緣效應

? 2.錯誤檢查

? 推薦各位,使用const而不是宏常量

定義及初始化

左值引用–引用普通的變量

<存儲類型> <數據類型> &引用名;int a = 10;
int &r = a;

右值引用–引用臨時變量

int &&r;
移動構造。

使用

和普通變量名一樣使用
r+=10;

特點

1.必須初始化,沒有空引用。(空引用相當于是野指針)

2.引用在初始化后,不能引用其他空間。(只會修改內容)

3.一個變量可以被多次引用。(一個人,可以有很多外號)

4.不能直接引用地址類型(破壞了引用的使用規則)

 int * (&qqq) = p;*qqq = 777;給一個指針取別名

引用和函數

作為參數
相當于地址傳遞,獲取的是實參的空間
和變量名一樣使用
作為返回值

1.可以作為左值

fun_referance() = 99;
r = 99;
修改引用的內容

2.如果返回局部變量,需要加static。

2.5函數高級

內聯函數

也叫做內嵌函數

是什么?

就是一個函數
在計算機編譯階段,將函數的代碼拷貝到函數的調用處

有什么用?

以空間換時間
定義
inline void fun()
{}
特點

優勢:減少函數的跳轉,效率更高

劣勢:代碼量更大


0.相當于對編譯器的一個建議

1.代碼量很小(一般是5條語句以下)

2.頻繁使用

3.聲明和定義必須寫在同一個文件里面(計算機需要在編譯時,知道代碼長什么樣)

可以看匯編代碼,來驗證內聯函數
和宏函數的區別
1、宏函數在預處理階段,進行替換。內聯函數在編譯時進行替換。
2、內聯函數本質上還是函數,編譯器會檢查語法錯誤

默認參數

函數的形參,可以有默認的值

函數不傳實參,那么就使用默認值
函數傳了實參,實參會覆蓋默認值
特點

1.必須從后往前寫默認參數

2.當函數有默認參數時,聲明和定義需要寫到一起。

3.引用類型不能有默認的值,可以有默認的變量

$$$函數重載overload

概念
函數名相同,但是功能/內容不同
特點

1.函數名

2.參數必須不一樣(類型,數量)

3.處在同一個名字空間下面

思考

1.函數重載和默認參數
2.形參是引用類型,可不可以區分?
3.計算機在什么時候,知道該調用哪個函數的。在什么時候確定?
編譯時確定。

3.內存模型和名字空間

作用域

概念

描述了一個名字在文件(編譯單元)的多大范圍內可見。

局部域

模塊
函數

類域

不同的類,是單獨的作用域

名字空間域

不同的名字空間,是單獨的作用域

鏈接性

概念

描述了名稱如何在各個單元中的共享

空鏈接

只在模塊內可用

內部鏈接

本文件中使用

外部鏈接

可以在其他文件中使用

語言鏈接性

C++的程序,可以使用C的函數

存儲性

自動:auto

靜態:static

動態:malloc,new

new和delete

為什么不直接用malloc和free?

如果用malloc開辟對象空間,不會調用構造函數

new

用法

1.開辟一個元素的空間
int *p = new int;2.開辟一個數組的空間
int *arr = new int[5];3.開辟一個對象的空間
類 *p = new 類名;

初始化

int *p = new int(99);int *arr = new int[5]{123};Studen *zs = new Student(90, 'f', 18);

delete

1.回收單個元素
delete p;2.回收數組空間
delete []arr;計算機會記錄每個內存塊的大小和狀態信息

名字空間

概念

一種作用域

作用

解決代碼里面,標識符重名的問題

定義

namespace 標識符(名字)
{任何內容變量函數對象
}

使用

1.單獨使用
名字空間::內容
::,表示作用域限定符作用域::內容2.整個程序使用	
using namespace 名字;
直接使用內容

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895412.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895412.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895412.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL-leetcode—1581. 進店卻未進行過交易的顧客

1581. 進店卻未進行過交易的顧客 表&#xff1a;Visits -------------------- | Column Name | Type | -------------------- | visit_id | int | | customer_id | int | -------------------- visit_id 是該表中具有唯一值的列。 該表包含有關光臨過購物中心的顧客的信息。 …

Jenkins 部署 之 Mac 一

Jenkins 部署 之 Mac 一 一.Jenkins 部署依賴 JDK 環境 查看 Mac JDK 環境&#xff0c;如果沒有安裝&#xff0c;先安裝 打開終端輸入命令:java -version Mac安裝配置 JDK 二. 檢查 HomeBrew 安裝 檢查 HomeBrew 是否安裝&#xff0c;終端輸入命令:brew -v Mac安裝HomeB…

鴻蒙HarmonyOS NEXT開發:優化用戶界面性能——組件復用(@Reusable裝飾器)

文章目錄 一、概述二、原理介紹三、使用規則四、復用類型詳解1、標準型2、有限變化型2.1、類型1和類型2布局不同&#xff0c;業務邏輯不同2.2、類型1和類型2布局不同&#xff0c;但是很多業務邏輯公用 3、組合型4、全局型5、嵌套型 一、概述 組件復用是優化用戶界面性能&#…

【AI大模型】Ollama部署本地大模型DeepSeek-R1,交互界面Open-WebUI,RagFlow構建私有知識庫

文章目錄 DeepSeek介紹公司背景核心技術產品與服務應用場景優勢與特點訪問與體驗各個DeepSeek-R系列模型的硬件需求和適用場景 Ollama主要特點優勢應用場景安裝和使用配置環境變量總結 安裝open-webui下載和安裝docker desktop配置鏡像源安裝open-webui運行和使用 RagFlow介紹主…

更加通用的Hexo多端部署原理及實現,適用于各種系統之間

本文推薦在作者的個人博客網站閱讀&#xff1a;shenying.online 一、故事背景 故事發生在大學上學期間&#xff08;而不是寒假&#xff09;。上學期間&#xff0c;宿舍條件極其惡劣&#xff0c;半夜斷電、空間狹小。我們大學垃圾條件使用游戲本的種種弊端被無限放大&#xff1…

開源、免費項目管理工具比較:2025最新整理30款

好用的開源、免費版項目管理系統有&#xff1a;1.Redmine&#xff1b;2. Taiga&#xff1b;3. OpenProject&#xff1b; 4.ProjectLibre&#xff1b; 5.GanttProject&#xff1b; 6.Tuleap&#xff1b; 7.Trac&#xff1b;8. Phabricator&#xff1b; 9.Notion&#xff1b; 10.…

組織結構改革:激活企業活力的 “源頭活水”

難以適應市場變化、內部溝通與協作不暢、決策效率低下、運營成本增加、人才流失嚴重、員工士氣下降、戰略目標難以實現……企業如何根據市場環境變化和自身發展需求&#xff0c;靈活調整組織框架&#xff0c;賦能企業的持續健康發展&#xff1f; 某國有投資建設集團旗下的二級…

oracle中decode怎么轉換成pg

對于 PostgreSQL 中的 Oracle DECODE 函數&#xff0c;可以使用 CASE 表達式或聯合。CASE 表達式根據條件返回第一個匹配的結果&#xff0c;語法為&#xff1a;CASE WHEN 條件 THEN 結果 ELSE 結果 END。聯合通過 UNION ALL 操作符組合多個 SELECT 語句&#xff0c;返回一個包含…

Mac之JDK安裝

Mac之JDK安裝 一.安裝 jdk 打開終端輸入命令:java -version 查看是否已安裝 JDK Oracle 官方下載地址 根據自己Mac 系統安裝 查看 Mac 系統&#xff0c;打開中斷命令&#xff0c;輸入: uname -a Compressed Archive 是壓縮文檔&#xff0c;下載的是一個 .tar.gz 壓縮包 D…

【含文檔+PPT+源碼】基于Python的全國景區數據分析以及可視化實現

項目介紹 本課程演示的是一款基于Python的全國景區數據分析以及可視化實現&#xff0c;主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Java 學習者。 包含&#xff1a;項目源碼、項目文檔、數據庫腳本、軟件工具等所有資料 帶你從零開始部署運行本套系統 該…

Unity中快速制作2D沙雕動畫:流程編

Unity中快速制作2D沙雕動畫&#xff08;搞笑/無厘頭風格&#xff09;&#xff0c;通過以下方案實現低成本、高成效的開發流程&#xff0c;結合夸張的動作、滑稽的物理效果和魔性音效&#xff1a; 1. 角色與素材設計 核心原則&#xff1a;丑萌即正義&#xff0c;越怪越好&#…

保存字典類型的文件用什么格式比較好

保存 Python 字典類型的數據時&#xff0c;有幾個常見的格式可以選擇&#xff0c;這些格式都具有良好的可讀性和提取內容的便利性。以下是幾種推薦的格式&#xff1a; JSON 格式&#xff1a; 優點&#xff1a;JSON 格式非常適合存儲和傳輸結構化數據&#xff0c;具有良好的跨平…

SQL注入之布爾和時間盲注,sqli-labs

實驗環境&#xff1a; sqli-labs&#xff0c;小皮面板搭建&#xff0c;edge瀏覽器 apache&#xff1a;2.4.39&#xff0c;MySQL&#xff1a;5.7 PHP&#xff1a;5.39 Python&#xff08;pycharm2023&#xff09;:3 less-8 布爾盲注&#xff1a; 1.我這里是采用最簡單的直接采…

基于SSM的農產品供銷小程序+LW示例參考

1.項目介紹 系統角色&#xff1a;管理員、農戶功能模塊&#xff1a;用戶管理、農戶管理、產品分類管理、農產品管理、咨詢管理、訂單管理、收藏管理、購物車、充值、下單等技術選型&#xff1a;SSM&#xff0c;Vue&#xff08;后端管理web&#xff09;&#xff0c;uniapp等測試…

移植BOA服務器到GEC2440開發板

所需軟件:boa-0.94.13.tar.tar(下載:http://www.boa.org/boa-0.94.13.tar.gz) 步驟: 設置好交叉編譯工具鏈。 1、解壓下載好的壓縮包(tar xzvf boa-0.94.13.tar.tar),并進入解壓后的目錄(cd boa-0.94.13),再進行如下操作: 先進入到src目錄(下面操作都是在該目錄下進行…

Go 語言里中的堆與棧

在 Go 語言里&#xff0c;堆和棧是內存管理的兩個重要概念&#xff0c;它們在多個方面存在明顯差異&#xff1a; 1. 內存分配與回收方式 棧 分配&#xff1a;Go 語言中&#xff0c;棧內存主要用于存儲函數的局部變量和調用信息。當一個函數被調用時&#xff0c;Go 會自動為其…

從360度全景照片到高質量3D場景:介紹SC-Omnigs 3D重建系統

在當今的數字化時代,3D重建技術正在迅速發展,并廣泛應用于文旅、空間智能和3D重建等領域。為了簡化360度全景相機拍攝數據的處理流程,提高3D場景重建的質量和效率,我們開發了一款專門處理360度全景相機數據的3D重建系統——SC-Omnigs。本文將詳細介紹這一系統的功能、特點及…

LayUi table 列寬 th和td不同步變化

原因 在td所在的table中&#xff0c;當table寬度小于頁面寬度&#xff0c;滾動條會消失&#xff0c;進而table會被加以下樣式 style"width: auto"解決 在layui.js中將以下語句 !p&&h?y.width(o.getContentWidth(l)):y.width("auto")替換成 !…

HARCT 2025 分論壇10:Intelligent Medical Robotics智能醫療機器人

會議名稱&#xff1a;機電液一體化與先進機器人控制技術國際會議 會議簡稱&#xff1a;HARCT 2025 大會時間&#xff1a;2025年3月28日-30日 大會地點&#xff1a;中國桂林 主辦單位&#xff1a;桂林航天工業學院、廣西大學、桂林電子科技大學、桂林理工大學 協辦單位&…

前端可以不用依賴后端實現導出大數據了

theme: channing-cyan hightlight: channing-cyan 前言 在我們公司表格數據導出都是前端去處理。一開始數據量不大&#xff0c;倒沒什么問題。但隨著數據量的加大&#xff0c;問題也逐漸暴露出來。 一天的數據量有一來萬條&#xff0c;導出一定時間范圍的數據&#xff0c;30…