【C++】入門基礎【上】

目錄

  • 一、C++的發展歷史
  • 二、C++學習書籍推薦
  • 三、C++的第一個程序
    • 1、命名空間`namespace`
    • 2、命名空間的使用
    • 3、頭文件`<iostream>`是干什么的?

個人主頁<—請點擊
C++專欄<—請點擊
在這里插入圖片描述

一、C++的發展歷史

C++的起源可以追溯到1979年,當時Bjarne Stroustrup(本賈尼·斯特勞斯特盧普)在貝爾實驗室從事計算機科學和軟件工程的研究工作。面對項目中復雜的軟件開發任務,特別是模擬和操作系統的開發工作,他感受到了現有語言(如C語言)在表達能力、可維護性和可擴展性方面的不足。
1983年,Bjarne Stroustrup在C語言的基礎上添加了面向對象編程的特性,設計出了C++語言的雛形,此時的C++已經有了類、封裝、繼承等核心概念,為后來的面向對象編程奠定了基礎。這?年該語言被正式命名為C++。在隨后的幾年中,C++在學術界和工業界的應用逐漸增多。?些大學和研究所開始將C++作為教學和研究的首選語言,而?些公司也開始在產品開發中嘗試使用C++。這?時期,C++的標準庫和模板等特性也得到了進?步的完善和發展。
C++的標準化工作于1989年開始,并成立了?個ANSIISOInternational Standards Organization)國際標準化組織的聯合標準化委員會。1994年標準化委員會提出了第一個標準化草案。在該草案中,委員會在保持斯特勞斯特盧普最初定義的所有特征的同時,還增加了部分新特征。
在完成C++標準化的第?個草案后不久,STLStandard Template Library)是惠普實驗室開發的?系列軟件的統稱。它是由Alexander StepanovMeng LeeDavid R Musser在惠普實驗室工作時所開發出來的。在通過了標準化第?個草案之后,聯合標準化委員會投票并通過了將STL包含C++標準中的提議。STLC++的擴展超出C++的最初定義范圍。雖然在標準中增加STL是個很重要的決定,但也因此延緩了C++標準化的進程。
1997年11月14日,聯合標準化委員會通過了該標準的最終草案。1998年,C++ANSI/IS0標準被投入使用。

Bjarne Stroustrup:

Bjarne Stroustrup
在這里插入圖片描述
上面這副圖片是C++的版本更新情況,字體越大代表更新的力度越大,目前C++26預計在2026年公布。

二、C++學習書籍推薦

在這里插入圖片描述

  • C++ Primer:主要講解語法,經典的語法書籍,前后中期都可以看。
  • STL源碼剖析:主要從底層實現的角度結合STL源碼,庖丁解牛式剖析STL的實現,是侯捷老師的經典之作。
  • Effctive C++:本書也是侯捷老師翻譯的,本書有?句評價:把C++程序員分為看過此書的和沒看過此書的。

三、C++的第一個程序

在學習C語言的時候我們打印的第一個程序就是hello world!,所以我們C++的第一個程序也從它開始,C++兼容C語言絕大多數的語法,所以C語言實現的hello world!依舊可以運行,這里我們就不用C語言實現了,我們來看看C++怎么寫,C++中需要把定義文件
代碼后綴改為.cpp

C++:

#include <iostream>
using namespace std;int main()
{cout << "hello world!" << endl;return 0;
}

這就是C++版本的hello world!了。

運行結果:
在這里插入圖片描述
剛從C語言接觸到C++,這里的大部分東西,我們都看不懂,沒有關系,接下來我會一一講解。

1、命名空間namespace

C/C++中,變量、函數和后面要學到的類都是大量存在的,這些變量、函數和類的名稱將都存在于全局作用域中,可能會導致很多沖突。使用命名空間的目的是對標識符的名稱進行本地化,以避免命名沖突或名字污染namespace關鍵字的出現就是針對這種問題的

C語言中的命名沖突:
我們知道在C語言中qsort是函數,假設我將它定義成int類型的全局變量,然后我不包含頭文件<stdlib.h>,我們執行下面的代碼:

#include <stdio.h>int qsort = 10;int main()
{printf("%d", qsort);return 0;
}

執行結果
在這里插入圖片描述
之后我再加上頭文件<stdlib.h>執行結果
在這里插入圖片描述
程序就會出現這樣的報錯,因為函數在全局變量中發現了兩個這樣的變量名稱,這就導致了命名沖突問題,而我們今天要講的命名空間就是專門解決這個問題的。

注:只有將qsort定義成全局變量時,才會出現這樣的錯誤,因為當它為局部變量時,打印的時候,程序會首先在局部域尋找變量,當它在局部域中找到后,就不會前往全局域尋找,就不會引發命名沖突了。

命名空間解決該問題的思路呢也很簡單,舉個生活中常見的例子,假設你家的大黃和鄰居家的大黃一摸一樣,而且都叫大黃,總是分不清誰是誰,解決這個問題只需要在狗的身上做個標記,比如讓它戴個牌子就可以分清楚了,命名空間解決命名沖突的問題和這個類似,就是定義一個空間然后把沖突的變量,放進這個空間就可以了。

#include <stdio.h>
#include <stdlib.h>namespace qs
{int qsort = 10;
}int main()
{printf("%d",qs::qsort);return 0;
}

測試結果:
在這里插入圖片描述
這里由于我們定義了一個命名空間,而訪問這個空間需要一些小的操作,即用命名空間::成員名的方式訪問指定命名空間中的成員。::是作用域解析運算符。

::變量名這樣使用時表示全局作用域,即可以訪問全局變量
在這里插入圖片描述
如上圖,當我放開時,它就會訪問全局變量中的qsort函數。

注意:

  • 定義命名空間,需要使用到namespace關鍵字,后面跟命名空間的名字,然后接?對{}即可,{}中即為命名空間的成員。命名空間中可以定義變量/函數/類型
  • namespace本質是定義出?個這個域跟全局域各自獨立,不同的域可以定義同名變量,所以qsort不再沖突了
  • namespace只能定義在全局,當然它還可以嵌套定義
  • 項目工程中多文件中定義的同名namespace會認為是?個namespace不會沖突
  • C++標準庫都放在?個叫std(standard)命名空間中。(也就是我們打印程序中用到的std)。

2、命名空間的使用

編譯查找?個變量的聲明/定義時,默認只會在局部或者全局查找,不會到命名空間里面去查找。

例如:

#include <stdio.h>namespace test
{int a = 100;int b = 200;
}int main()
{printf("%d", a);return 0;
}

以上代碼會出現一下錯誤:
在這里插入圖片描述

  • 解決方案1:指定命名空間訪問
#include <stdio.h>namespace test
{int a = 100;int b = 200;
}int main()
{printf("%d", test::a);return 0;
}

在這里插入圖片描述

  • 解決方案2:using將命名空間中某個成員展開,項目中經常訪問的不存在沖突的成員推薦這種方式
#include <stdio.h>namespace test
{int a = 100;int b = 200;
}using test::a;
int main()
{printf("%d",a);return 0;
}

在這里插入圖片描述

  • 解決方案3:展開命名空間中全部成員,項目不推薦,沖突風險很大,日常小練習程序為了方便推薦使用。
#include <stdio.h>namespace test
{int a = 100;int b = 200;
}using namespace test;
int main()
{printf("%d",a);return 0;
}

在這里插入圖片描述
我們的打印程序就是使用的方案3,將C++標準庫全部展開了,即using namespace std;

3、頭文件<iostream>是干什么的?

C++編程語言中,<iostream>是一個標準庫頭文件,它的主要作用是實現基本的輸入輸出功能,包含了輸入輸出流相關的定義和聲明

其中定義了std::cin(標準輸入流對象)相當于C語言中的scanf,定義了std::cout(標準輸出流對象)相當于C語言中的printf等等。

  • std::cinistream 對象,它主要面向窄字符(narrow characters (of type char))的標準輸入流
  • std::coutostream 對象,它主要面向窄字符標準輸出流
  • std::endl 是?個函數插入輸出時,相當于插入?個換行字符加刷新緩沖區

我們在實現第一個程序的時候發現其中有<<符號,這個操作符是流插入運算符,被用于向輸出流中去插入數據,相對的>>流提取運算符,被用于從輸入流中提取數據

我們還從程序中發現C++中打印時沒有使用%d、%f這些符號,這是因為cout輸出時會自動識別數據類型,進行相應的轉換和輸出,不容易出現因格式化字符串與實際數據類型不匹配而導致的錯誤。而C語言使用%d時,如果不小心將其他類型的數據以 %d 格式輸出,可能會導致錯誤的結果或程序崩潰。

總結:
以上就是本期博客分享的全部內容啦!如果覺得文章還不錯的話可以三連支持一下,你的支持就是我前進最大的動力!
技術的探索永無止境! 道阻且長,行則將至!后續我會給大家帶來更多優質博客內容,歡迎關注我的CSDN賬號,我們一同成長!
(~ ̄▽ ̄)~

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

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

相關文章

1panel第三方應用商店(本地商店)配置和使用

文章目錄 引言資源網站實戰操作說明 引言 1Panel 提供了一個應用提交開發環境&#xff0c;開發者可以通過提交應用的方式將自己的應用推送到 1Panel 的應用商店中&#xff0c;供其他用戶使用。由此衍生了一種本地應用商店的概念&#xff0c;用戶可以自行編寫應用配置并上傳到自…

Evidential Deep Learning和證據理論教材的區別(主要是概念)

最近終于徹底搞懂了Evidential Deep Learning&#xff0c;之前有很多看不是特別明白的地方&#xff0c;原來是和證據理論教材&#xff08;是的&#xff0c;不只是國內老師寫的&#xff0c;和國外的老師寫的教材出入也比較大&#xff09;的說法有很多不一樣&#xff0c;所以特地…

text-decoration: underline;不生效

必須得紀念一下&#xff0c;在給文本加下劃線時&#xff0c;發現在win電腦不生效&#xff0c;部分mac也不生效&#xff0c;只有個別的mac生效了&#xff0c;思考了以下幾種方面&#xff1a; 1.兼容性問題&#xff1f; 因為是electron項目&#xff0c;不存在瀏覽器兼容性問題&…

VUE SSR(服務端渲染)

&#x1f916; 作者簡介&#xff1a;水煮白菜王&#xff0c;一位前端勸退師 &#x1f47b; &#x1f440; 文章專欄&#xff1a; 前端專欄 &#xff0c;記錄一下平時在博客寫作中&#xff0c;總結出的一些開發技巧和知識歸納總結?。 感謝支持&#x1f495;&#x1f495;&#…

ARCGIS國土超級工具集1.5更新說明

ARCGIS國土超級工具集V1.5版本更新說明&#xff1a;因作者近段時間工作比較忙及正在編寫ARCGISPro國土超級工具集&#xff08;截圖附后&#xff09;的原因&#xff0c;故本次更新為小更新&#xff08;沒有增加新功能&#xff0c;只更新了已有的工具&#xff09;。本次更新主要修…

劉鑫煒履新共工新聞社新媒體研究院院長,賦能媒體融合新征程

2025年4月18日&#xff0c;大灣區經濟網戰略媒體共工新聞社正式對外宣布一項重要人事任命&#xff1a;聘任螞蟻全媒體總編劉鑫煒為新媒體研究院第一任院長。這一舉措&#xff0c;無疑是對劉鑫煒在新媒體領域卓越專業能力與突出行業貢獻的又一次高度認可&#xff0c;也預示著共工…

java基礎從入門到上手(九):Java - List、Set、Map

一、List集合 List 是一種用于存儲有序元素的集合接口&#xff0c;它是 java.util 包中的一部分&#xff0c;并且繼承自 Collection 接口。List 接口提供了多種方法&#xff0c;用于按索引操作元素&#xff0c;允許元素重復&#xff0c;并且保持插入順序。常用的 List 實現類包…

UWP發展歷程

通用Windows平臺(UWP)發展歷程 引言 通用Windows平臺(Universal Windows Platform, UWP)是微軟為實現"一次編寫&#xff0c;處處運行"的愿景而打造的現代應用程序平臺。作為微軟統一Windows生態系統的核心戰略組成部分&#xff0c;UWP代表了從傳統Win32應用向現代應…

git忽略已跟蹤的文件/指定文件

在項目開發中&#xff0c;有時候我們并不需要git跟蹤所有文件&#xff0c;而是需要忽略掉某些指定的文件或文件夾&#xff0c;怎么操作呢&#xff1f;我們分兩種情況討論&#xff1a; 1. 要忽略的文件之前并未被git跟蹤 這種情況常用的方法是在項目的根目錄下創建和編輯.gitig…

AI 組件庫是什么?如何影響UI的開發?

AI組件庫是基于人工智能技術構建的、面向用戶界面&#xff08;UI&#xff09;開發的預制模塊集合。它們結合了傳統UI組件&#xff08;如按鈕、表單、圖表&#xff09;與AI能力&#xff08;如機器學習、自然語言處理、計算機視覺&#xff09;&#xff0c;旨在簡化開發流程并增強…

【Win】 cmd 執行curl命令時,輸出 ‘命令管道位置 1 的 cmdlet Invoke-WebRequest 請為以下參數提供值: Uri: ’ ?

1.原因&#xff1a; 有一個名為 Invoke-WebRequest 的 CmdLet&#xff0c;其別名為 curl。因此&#xff0c;當您執行此命令時&#xff0c;它會嘗試使用 Invoke-WebRequest&#xff0c;而不是使用 curl。 2.解決辦法 在cmd中輸入如下命令刪除這個curl別名&#xff1a; Remov…

UE5 UE循環體里怎么寫延遲

注&#xff1a;需要修改UE循環藍圖節點或者自己新建個藍圖宏庫把UE循環節點的原來代碼粘貼進去修改。 一、For Loop With Delay 二、For Each Loop With Delay 示例使用&#xff1a; 標注參考出處&#xff1a;分享UE5自制Loop with delay宏&#xff0c;在loop循環中添加執行…

IP檢測工具“ipjiance”

目錄 IP質量檢測 應用場景 對網絡安全的貢獻 對網絡管理的幫助 對用戶決策的輔助作用 IP質量檢測 檢測IP的網絡提供商&#xff1a;通過ASN&#xff08;自治系統編號&#xff09;識別IP地址所屬的網絡運營商&#xff0c;例如電信、移動、聯通等。 識別網絡類型&#xff1…

[工具]Java xml 轉 Json

[工具]Java xml 轉 Json 依賴 <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --> <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.37</version> </dependen…

vue3 傳參 傳入變量名

背景&#xff1a; 需求是&#xff1a;在vue框架中&#xff0c;接口傳參我們需要穿“變量名”&#xff0c;而不是字符串 通俗點說法是&#xff1a;在網絡接口請求的時候&#xff0c;要傳屬性名 效果展示&#xff1a; vue2核心代碼&#xff1a; this[_keyParam] vue3核心代碼&…

spring響應式編程系列:總體流程

目錄 示例 程序流程 just subscribe new LambdaMonoSubscriber ???????MonoJust.subscribe ???????new Operators.ScalarSubscription ???????onSubscribe ???????request ???????onNext 時序圖 類圖 數據發布者 MonoJust …

基于slimBOXtv 9.16 V2-晶晨S905L3A/ S905L3AB-Mod ATV-Android9.0-線刷通刷固件包

基于slimBOXtv 9.16 V2-晶晨S905L3A&#xff0f; S905L3AB-Mod ATV-Android9.0-線刷通刷固件包&#xff0c;基于SlimBOXtv 9 修改而來&#xff0c;貼近于原生ATV&#xff0c;僅支持晶晨S905L3A&#xff0f; S905L3AB芯片刷機。 適用型號&#xff1a;M401A、CM311-1a、CM311-1s…

使用droidrun庫實現AI控制安卓手機

使用droidrun庫實現AI控制安卓手機 介紹 DroidRun 是一個框架&#xff0c;通過LLM代理控制 Android 設備。它允許您使用自然語言命令自動化 Android 設備交互。 安裝環境 安裝源碼依賴 git clone https://github.com/droidrun/droidrun.git cd droidrun conda create --nam…

知識庫建設全流程指南(AI時代優化版)

知識庫建設全流程指南&#xff08;AI時代優化版&#xff09; ??一、知識庫建設的戰略定位?? ??核心價值錨點?? ??AI時代基建??&#xff1a;知識庫是GEO優化的核心載體&#xff0c;決定內容被AI引用的概率權重??動態護城河??&#xff1a;結構化知識體系可抵御算…

2025年03月中國電子學會青少年軟件編程(Python)等級考試試卷(五級)真題

青少年軟件編程&#xff08;Python&#xff09;等級考試試卷&#xff08;五級&#xff09; 分數&#xff1a;100 題數&#xff1a;38 答案解析&#xff1a;https://blog.csdn.net/qq_33897084/article/details/147341437 一、單選題(共25題&#xff0c;共50分) 1. 以下哪個選…