久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C 之C 與C的區(qū)別一

 拾叁億人 2023-04-05 發(fā)布于云南

C++與C區(qū)別概述

C++ 是在 C 語言的基礎(chǔ)上發(fā)展而來的一門編程語言,,它在語法,、數(shù)據(jù)類型、函數(shù),、運算符等方面都比 C 語言更為豐富和靈活,,同時也具有更好的支持面向?qū)ο缶幊蹋∣OP)的能力,因此被廣泛應(yīng)用于各種系統(tǒng)和應(yīng)用程序的開發(fā)中,。以下是 C++ 與 C 語言的一些主要區(qū)別:

  • 支持面向?qū)ο缶幊蹋篊++ 支持面向?qū)ο缶幊痰奶匦?,例如封裝、繼承,、多態(tài)等,,而 C 語言并不支持。
  • 操作符重載:C++ 允許用戶對運算符進行重載,,即可以自定義運算符的含義和操作對象,,而在 C 語言中則不支持此功能。
  • 異常處理:C++ 支持異常處理機制,,可以捕獲和處理程序運行時遇到的異常,,而 C 語言則需要通過錯誤碼等方式進行錯誤處理。
  • 標(biāo)準(zhǔn)庫:C++ 標(biāo)準(zhǔn)庫中包含了大量的庫函數(shù)和容器,,例如 string,、vector、map 等,,而 C 語言的標(biāo)準(zhǔn)庫則比較簡單,,只包含了常用的庫函數(shù)。
  • 命名空間:C++ 中支持命名空間的概念,,可以幫助避免命名沖突的問題,,而 C 語言中則不支持。
  • 自動類型推斷:C++11 引入了自動類型推斷關(guān)鍵字 auto 和 decltype,,可以根據(jù)賦值語句的類型推斷出變量的類型,,而在 C 語言中則需要手動聲明變量類型,。

以上只是 C 和 C++ 之間的一些簡單區(qū)別,實際上它們在很多方面有著類似的語法和特性,。對于學(xué)習(xí)者來說,,如果已經(jīng)掌握了 C 語言,那么學(xué)習(xí) C++ 就會比較容易,,因為 C++ 的語法和特性可以看作是 C 語言的擴展和補充。接下來我們詳細了解一些基礎(chǔ)階段必須要掌握的C++與C的區(qū)別,。

C++與C的區(qū)別詳解

文件區(qū)別

C 和 C++ 的文件有以下幾點不同:

  • 頭文件擴展名不同:C 的頭文件擴展名是 .h,,而 C++ 的頭文件擴展名是 .h 或 .hpp。
  • 標(biāo)準(zhǔn) I/O 庫的不同:C 使用的標(biāo)準(zhǔn) I/O 庫是 stdio.h,,而 C++ 使用的是 iostreamC++標(biāo)準(zhǔn)庫中所有頭文件都是無h后綴包含:#include <iostream>
  • C++中包含C語言的頭文件有以下兩種方案直接包含:#include <stdio.h>無h后綴包含:#include <cstdio>

命名空間

在 C++ 中,,命名空間是用于防止命名沖突的重要機制,可以將全局作用域分為若干個小的作用域,,不同的空間可以分別存放變量,、函數(shù)等名稱相同但含義不同的實體。C++ 中的命名空間是一個重要的語言特性,,可以防止不同作用域內(nèi)同名實體的沖突,。對于大型程序的開發(fā)來說,合理使用命名空間可以提高代碼的可讀性和可維護性,。命名空間主要是掌握以下內(nèi)容

  • 如何創(chuàng)建正常包含方式創(chuàng)還能先聲明后實現(xiàn)的寫法
  • 如何訪問數(shù)據(jù)運算符: 作用域分辨符 ::空間名::成員省略前綴的方式:using namespace 空間名;
  • 命名空間嵌套問題:剝洋蔥即可
  • 命名空間作用提高標(biāo)識符的使用率避免命名污染

命名空間| 創(chuàng)建

命名空間創(chuàng)建語法如下:

文章圖片1

如下測試代碼:

#include <iostream>//直接實現(xiàn)namespace MM{ int age; int num; void print() { }}//先聲明后實現(xiàn)namespace Boy { void print(); struct Info ;}struct Boy::Info { int data;};void Boy::print() {}int main() { return 0;}

命名空間| 訪問

命名空間中的數(shù)據(jù)通過空間名和作用域分辨符::完成,,作用域分辨符::還可以表示全局變量。如下測試代碼:

#include <iostream>//直接實現(xiàn)namespace MM{  int age;  int num;  void print()   {  }}int g_num = 99;int main() {  int g_num = 88;  //默認(rèn)就近原則  int x = g_num;    //使用全局  int y = ::g_num;  //1.空間名限定訪問  MM::age = 123;  MM::print();  //2.省略前綴訪問  //using namespace語句具有作用域  using namespace MM;  age = 123;  print();  return 0;}

using namespace 語句具有作用域,,從使用處到第一次包含{}結(jié)束,。

命名空間| 嵌套

命名空間嵌套使用剝洋蔥的方式訪問即可。如下測試代碼:

#include <iostream>namespace Cool{ int a = 1; namespace Mo { int b = 2; namespace Ying { int c = 3; } }}int main() { Cool::a=11; Cool::Mo::b = 22; Cool::Mo::Ying::c = 33; { using namespace Cool; a = 111; Mo::b = 222; Mo::Ying::c = 333; using namespace Mo; b = 2222; Ying::c = 3333; using namespace Ying; c = 33333; } { using namespace Cool::Mo::Ying; c = 444; } return 0;}

命名空間| C++內(nèi)置空間名std

在 C++ 中,,std 是一個常用的內(nèi)置命名空間,,包含了大量的常用庫函數(shù)和數(shù)據(jù)類型,例如 std::cout,、std::string,、std::vector 等。這些函數(shù)和數(shù)據(jù)類型都位于 std 命名空間中,,使用時需要通過 std:: 前綴進行引用,。或者在寫C++程序的時候,,在頭文件下面 直接使用:using namespace std; 有意思的是采用無后綴的包含C語言頭文件后,,C語言所有函數(shù)也可以采用std::使用。

如下測試代碼:

#include <cstdio>int main() {  std::puts('coolmoying');  std::printf('coolmoying');  return 0;}

C++標(biāo)準(zhǔn)輸入輸出

在 C++ 中,,標(biāo)準(zhǔn)輸入輸出通常使用 std::cinstd::cout 實現(xiàn),。這些對象是 C++ 標(biāo)準(zhǔn)庫 <iostream> 中的對象,用于在標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出流之間進行輸入輸出數(shù)據(jù)交互。目前學(xué)會如何使用即可,無需追究那么多為什么,IO流操作中會介紹成員函數(shù)的使用方式,,以及其他IO對象,。

標(biāo)準(zhǔn)輸入輸出| 輸出到屏幕

基本輸出:cout加上 << 完成,需要掌握以下內(nèi)容

  • 支持C語言轉(zhuǎn)義字符
  • 輸出單個數(shù)據(jù)
  • 輸出多個數(shù)據(jù)
  • 換行: endl

如下測試代碼:

#include <iostream>int main() { //C++也支持轉(zhuǎn)義字符 std::cout << '字符串\n'; std::cout << 1; std::cout << 1.1f; std::cout << 1.1; std::cout << '\n'; std::cout << '字符串\n' << 1 << '\n' << 1.1 << '\n'; int a = 1; float b = 1.1f; char name[20] = { '張三' }; //輸出多個數(shù)據(jù),無需格式控制字符 std::cout << a << '\t' << b << '\t' << name << '\n'; std::cout << 'C++換行' << std::endl; //一般寫在頭文件下面 using namespace std; cout << '使用了using namespace std,無需std前綴' << endl; return 0;}

標(biāo)準(zhǔn)輸入輸出| 從鍵盤輸入

基本輸入: cin加上 >>完成,通常不需要任何格式控制字符,,如下測試代碼:

#include <iostream>int main() {  int a;  float b;  char name[20] = { '' };  std::cout << '請輸入三個數(shù)據(jù):';  std::cin >> a;  std::cin >> b;  std::cin >> name;  std::cout << a << '\t' << b << '\t' << name << std::endl;  //默認(rèn)用空格或者換行作為數(shù)據(jù)間隔  std::cout << '請輸入三個數(shù)據(jù):';  std::cin >> a >> b >> name;  std::cout << a << '\t' << b << '\t' << name << std::endl;  return 0;}

C++新的基礎(chǔ)類型

C++新基礎(chǔ)類型|nullptr_t類型

nullptr_t 是 C++11 中引入的一個新的關(guān)鍵字,,用于表示一個空指針常量的類型,是一種特殊的數(shù)據(jù)類型,。當(dāng)需要傳遞一個空指針常量給一個函數(shù)或作為一個函數(shù)返回值時,,就可以使用 nullptr_t 來明確聲明空指針常量的類型。C++空指針引入nullptr替換C語言中NULL,,可以方便地編寫出更加清晰,、簡潔和易于閱讀的代碼,避免出現(xiàn)空指針引用的錯誤,,提高程序的可讀性和安全性,。如下測試代碼:

#include <iostream>void func(std::nullptr_t ptr) { std::cout << 'coolmoying' << std::endl;}int main() { func(nullptr); //使用nullptr替換NULL int* p = nullptr; return 0;}

C++新基礎(chǔ)類型|bool類型

在 C++ 中,bool 類型表示布爾值,,僅包含兩個值:truefalse,。bool 類型是 C++ 的基本數(shù)據(jù)類型之一,用于存儲布爾值,。C++ 的布爾類型提供了 bool 關(guān)鍵字來定義變量,,bool 類型的變量可以作為條件表達式傳遞給 if 語句、while 循環(huán)等語句中,,需要注意的是,,C++ 中的 true 和 false 是關(guān)鍵字,不是任何標(biāo)識符的名稱,。bool 類型賦值給其他類型時,,false 轉(zhuǎn)換為整型值 0,true 轉(zhuǎn)換為整型值 1,。其他類型的值賦值給 bool 時,,非零值為 true,零值為 false,。

如下測試代碼:

#include <iostream>#include <iomanip>int main() {    bool close = true;    std::cout << 'bool類輸出只有0和1:' << close << std::endl;    std::cout << '非零表示成立:' << close << std::endl;    std::cout <<std::boolalpha<< '打印true或false:' << close << std::endl;    close = -1;    return 0;}

程序運行結(jié)果如下:

文章圖片2

C++新基礎(chǔ)類型|不一樣const類型

C++const比C語言const的要求更嚴(yán)格,。當(dāng)然const類型變量不能被修改并且創(chuàng)建的時候必須做初始化,這些依舊和C語言一樣,,主要區(qū)別在于字符串操作上,。如下測試代碼:

#include <iostream>void printStr(char* pstr){ std::cout << '只能傳入變量,不能傳入常量' << std::endl;}void printStrConst(const char* pstr){ std::cout << '只能傳入變量,不能傳入常量' << std::endl;}int main(){ //錯誤使用 //char* pstr='coolmoying'; //C++必須const修飾 const char* pstr = 'coolmoying'; //錯誤調(diào)用 //printStr('coolmoying'); //printStr(pstr); char str[] = { 'coolmoying' }; printStr(str); printStrConst(pstr); printStrConst(str); return 0;}

C++const比C語言更為強大,C++const可以修飾類中函數(shù) ,具體后續(xù)講解

C++新基礎(chǔ)類型|引用類型

左值引用

在 C++ 中,引用是一種特殊的類型,,用于給一個已經(jīng)存在的變量取一個別名,。引用可以簡單理解為起別名的變量,,一旦引用被定義,它將一直引用同一個變量,。使用引用可以在函數(shù)中方便地傳遞變量,、減少內(nèi)存開銷等?;菊Z法:type &name = variable; 如下測試代碼:

#include <iostream>int main(){    int num = 1;    //number就是num,同一段內(nèi)存不同名字    int& number = num;    number = 123;    std::cout << num << std::endl;    std::cout << number << std::endl;    return 0;}

常引用

在 C++ 中,,常量引用是一個指向常量的引用。使用常量引用可以在不復(fù)制變量的情況下訪問常量,,并防止其修改,。常量引用提供了一種方法來以只讀方式引用已經(jīng)存在的常量數(shù)據(jù)。這可以避免對變量的誤修改,,并且在函數(shù)參數(shù)傳遞和函數(shù)返回值中使用常量引用可以減少內(nèi)存開銷。常量引用通常在函數(shù)傳參和函數(shù)返回值中使用,?;菊Z法:const type &name = variable; 如下測試代碼:

#include <iostream>void print(const int& num) { std::cout << '傳普通變量或常量' << std::endl;}void printData(int& num){ std::cout << '只傳普通變量' << std::endl;}int main(){ const int num = 10; //錯誤用法 //int& number = num; const int& number = num; //錯誤代碼,常量不可修改 //number = 123; int data = 123; const int& xData = data; //const修飾的引用,,不能修改 //xData = 123; //函數(shù)傳參即可傳入常量和變量 print(1); print(number); print(data); //只可傳入常量 printData(data); //錯誤調(diào)用 //printData(number); //printData(1); return 0;}

右值引用

在 C++ 中,,右值引用是 C++11 新增的特性,屬于引用類型,。與左值引用不同,,右值引用是一個指向臨時對象(右值)的引用。右值是指無法被賦值或訪問地址的臨時對象,,右值引用可以為這些臨時對象提供一個有效的引用,,從而允許使用更有效的 C++ 編程技術(shù)來處理它們?;菊Z法:type &&name = variable; 如下測試代碼:

#include <iostream>void print(int&& right) {}int main(){    int&& rigthvalue = 123;     int age = 0;    //錯誤調(diào)用    //print(age);    print(123);    return 0;}

std::move函數(shù)

在 C++11 中,,std::move 是一個重載函數(shù),用來支持右值引用語法的實現(xiàn),。std::move 接受一個對象,,并將其轉(zhuǎn)換成右值引用類型。通過調(diào)用 std::move 函數(shù),,我們可以顯式地將一個具有名稱的對象轉(zhuǎn)換為右值引用,,并從該對象到達一個新的右值引用對象。這樣做的主要目的是為了可以在不拷貝數(shù)據(jù)的情況下將數(shù)據(jù)傳遞給新的對象,。也就是說,,std::move 可以將一個左值轉(zhuǎn)換為右值,讓程序能夠更加高效地利用資源,。在開發(fā)中,,std::move 主要用于資源管理,、移動語義和環(huán)境的構(gòu)建。如下測試代碼:

#include <iostream>void print(int&& right) {}int main(){ int&& rigthvalue = 123; int age = 0; //錯誤調(diào)用 //print(age); print(std::move(age)); print(123); return 0;}

引用折疊

在 C++11 引入的右值引用的特性中,,引用折疊是一個非常重要的概念,。引用折疊指的是在特定情況下,通過遵守一些簡單的規(guī)則,,可以使用兩個引用聲明名稱新的別名,,并將其和現(xiàn)有的引用類型組合成一個新類型。引用折疊規(guī)則如下:

  • 當(dāng)左值引用(Lvalue reference)和左值引用組成一個新類型,,結(jié)果仍然是左值引用,。
  • 當(dāng)右值引用(Rvalue reference)和左值引用組成一個新類型,結(jié)果仍然是右值引用,。
  • 當(dāng)右值引用和右值引用組成一個新類型,,結(jié)果是右值引用。

引用折疊的一個重要的應(yīng)用場景是在使用模板時,,可以統(tǒng)一地處理左值引用和右值引用,。如下測試代碼:

#include <iostream>int main(){    typedef int&& Type;    int num = 0;    //等效 int& a=num;    Type& a = num;       //等效 int&& b=123;    Type&& b = 123;    return 0;}

引用折疊的規(guī)則在 C++ 模板編程中特別有用,因為我們可以將一個泛型實參視為一個“引用”,,從而同時處理左值和右值引用,。例如,在泛型算法 std::move() 中使用了引用折疊的技巧,,可以將一個任意類型對象轉(zhuǎn)換為右值引用,,以便能夠使用右值語義來操作對象。目前簡單了解一下,。

C++新基礎(chǔ)類型|自動推斷類型

在 C++11 中,,引入了自動類型推斷(type inference)的特性,該特性允許編譯器在某些情況下自動推斷變量的類型,,從而避免了使用顯式類型聲明和指定的麻煩和冗長,。這可以讓我們更加方便快捷地定義變量和編寫代碼。C++ 中實現(xiàn)自動類型推斷主要有兩種語法:

  • auto 關(guān)鍵字:使用 auto 關(guān)鍵字來推斷變量的類型,,編譯器會自動根據(jù)初始化表達式的類型推斷出變量的類型,。
  • decltype 關(guān)鍵字:使用 decltype 關(guān)鍵字來推斷變量的類型,可以獲取表達式的類型(包括變量類型,、函數(shù)返回值類型等),。

在使用自動類型推斷時,需要注意以下幾點:

  • 自動類型推斷只適用于變量的定義,,不能用于函數(shù)的返回類型或參數(shù)類型,;
  • 在定義變量時,使用自動類型推斷可以簡化代碼,,但可能會降低代碼可讀性,;
  • 自動類型推斷可以降低編譯時的編譯時長,,因為編譯器無需寫出完整的類型聲明來進行類型檢查。

總之,,自動類型推斷是 C++11 中一個重要的特性,,它可以讓我們更方便地定義變量,避免了繁瑣的類型聲明,,同時也可以提高代碼的可讀性和效率,,并減少代碼中的出錯率。但是,,在使用自動類型推斷時,,我們也需要遵循一些規(guī)則,保證代碼的正確性和可讀性,。如下測試代碼:

#include <iostream>struct MM { int age; char name[20];};int main(){ int num = 111; auto p1 = # decltype(&num) p2 = # MM mm = { 18,'baby' }; auto pMM = &mm; //錯誤用法 // auto必須通過初始來推斷 //auto pstr; return 0;}

C++函數(shù)思想

C++函數(shù)思想|函數(shù)內(nèi)聯(lián)

在 C++ 編程中,,函數(shù)內(nèi)聯(lián)是一種編譯器對于函數(shù)的特殊處理方式。函數(shù)內(nèi)聯(lián)可以在編譯期間將函數(shù)的定義嵌入到函數(shù)調(diào)用點處,,從而消除了函數(shù)調(diào)用的開銷,,提高了程序的運行效率。使用函數(shù)內(nèi)聯(lián)的主要好處是可以減少函數(shù)調(diào)用帶來的開銷,,避免函數(shù)調(diào)用堆棧的推入和彈出,這對于一些短小精悍的函數(shù)特別有效,。

C++ 中使用 inline 關(guān)鍵字來指定一個函數(shù)為內(nèi)聯(lián)函數(shù),。一般情況下,將函數(shù)定義與函數(shù)聲明放在頭文件中并使用 inline 關(guān)鍵字來修飾,,可以讓編譯器自動對該函數(shù)進行內(nèi)聯(lián)優(yōu)化,。需要注意的是,在進行內(nèi)聯(lián)優(yōu)化時,,并不是所有的函數(shù)都適合進行內(nèi)聯(lián),。如果一個函數(shù)的計算量比較大,或者參數(shù)較多,,內(nèi)聯(lián)將會使代碼量變大,、可維護性降低、編譯器時間增加,,反而會導(dǎo)致程序效率降低,。在進行函數(shù)內(nèi)聯(lián)時,我們需要根據(jù)具體情況進行判斷,,謹(jǐn)慎地選擇需要進行內(nèi)聯(lián)優(yōu)化的函數(shù),。如下測試代碼:

#include <iostream>inline int Max(int a, int b) {    return a > b ? a : b;}int main(){    std::cout << Max(1, 2) << std::endl;    return 0;}

C++函數(shù)思想|函數(shù)重載

在 C++ 中,函數(shù)重載(Function Overloading)是一種允許在同一作用域內(nèi)聲明多個具有相同名稱但參數(shù)不同的函數(shù)的機制,。通過函數(shù)重載,,我們可以用一個函數(shù)名稱實現(xiàn)多種不同的功能,,這使得代碼更加靈活和易于維護。

函數(shù)重載的規(guī)則和注意事項如下:

  • 函數(shù)名必須相同,,但函數(shù)的參數(shù)列表必須不同,。參數(shù)列表的不同包括參數(shù)的個數(shù)、類型和順序,。
  • 返回值類型不能作為函數(shù)重載的區(qū)分標(biāo)志,,因此不能通過返回值類型的不同來區(qū)別不同的函數(shù)。
  • 靜態(tài)函數(shù)和非靜態(tài)函數(shù)之間可以進行重載,。
  • 當(dāng)實參與形參的數(shù)量或類型不匹配時,,編譯器會自動查找最佳匹配的函數(shù)。如果找不到匹配的函數(shù),,則編譯時將出現(xiàn)錯誤,。

如下測試代碼:

#include <iostream>//數(shù)目不同void print(int a) { std::cout << 'int' << std::endl;}void print(int a, int b) { std::cout << 'int,int' << std::endl;}//類型不同void print(char a,int b){ std::cout << 'char,int' << std::endl;}//順序不同void print(int a, char b) { std::cout << 'int,char' << std::endl;}int main(){ print(1); print(1, 2); print('A', 1); print(1, 'A'); return 0;}

函數(shù)重載是一個非常有用的特性,可以優(yōu)化代碼的可讀性和效率,。通過函數(shù)重載,,我們可以使用同一函數(shù)名實現(xiàn)不同功能的函數(shù),而無需使用不同的函數(shù)名稱,。在實際編程中,,我們可以根據(jù)具體情況選擇是否使用函數(shù)重載來強化代碼的可重用性和擴展性。

C++函數(shù)思想|函數(shù)缺省

在 C++ 中,,函數(shù)參數(shù)的缺?。―efault Arguments)是一種在函數(shù)參數(shù)列表中為參數(shù)提供默認(rèn)值的機制。當(dāng)調(diào)用帶有缺省參數(shù)的函數(shù)時,,如果沒有為該參數(shù)傳遞值,,則該參數(shù)將采用默認(rèn)值。缺省必須從右往左缺省,。通過使用函數(shù)缺省,,我們可以簡化函數(shù)接口,避免代碼的冗余以及提高代碼的靈活性,。測試代碼如下:

#include <iostream>int Sum(int a, int b = 0, int c = 0, int d=0){    return a + b + c + d;}//錯誤寫法//int Sum(int a=0, int b = 0, int c = 0, int d)//int Sum(int a, int b = 0, int c , int d=0)int main(){    //a=1,b=0,c=0,d=0    std::cout << Sum(1) << std::endl;    //a=1,b=2,c=0,d=0    std::cout << Sum(1, 2) << std::endl;    //a=1,b=2,c=3,d=0    std::cout << Sum(1, 2, 3) << std::endl;    //a=1,b=2,c=3,d=4    std::cout << Sum(1, 2, 3, 4) << std::endl;    return 0;}

函數(shù)缺省是 C++ 中重要的一個特性,,它可以為參數(shù)列表中的參數(shù)提供默認(rèn)值,使得使用函數(shù)變得更加便捷,、自然和安全,。在實際開發(fā)中,我們可以利用函數(shù)缺省來減少代碼重復(fù),、提高代碼的可維護性以及增強代碼的靈活性,。

相關(guān)

如果閣下正好在學(xué)習(xí)C/C++,看文章比較無聊,,不妨關(guān)注下關(guān)注下小編的視頻教程,,通俗易懂,,深入淺出,一個視頻只講一個知識點,。視頻不深奧,,不需要鉆研,在公交,、在地鐵,、在廁所都可以觀看,隨時隨地漲姿勢,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多
    喜歡該文的人也喜歡 更多
    熱門閱讀 換一換