二、C到C++的升級

来源:https://www.cnblogs.com/chenke1731/archive/2018/09/10/9623654.html
-Advertisement-
Play Games

C++ 的加強主要表現在:類型的加強、面向對象支持 1、C++改進 C++更強調語言的實用性,所有的變數都可以再需要使用的時候再定義,C語言中的變數都必須在作用域開始的位置定義 C++ int c = 0; for (int i = 1; i register 關鍵字請求編譯器將局部變數存儲與寄存器 ...


C++ 的加強主要表現在:類型的加強、面向對象支持

1、C++改進

C++更強調語言的實用性,所有的變數都可以再需要使用的時候再定義,C語言中的變數都必須在作用域開始的位置定義

int c = 0;
for (int i = 1; i < 3; i++)
{
    for (int j = 1; j < 3; j++)
    {
        c += i * j;
    }
}

register 關鍵字請求編譯器將局部變數存儲與寄存器中

  • 在C++中依然支持register關鍵字

  • C++ 編譯器有自己的優化方式

    • C語言中無法獲取register變數的地址

    • C++中可以取得register變數的地址

      C++編譯器發現程式中需要取register變數的地址時,register對變數的聲明變得無效

早期的C語言編譯器不會對代碼進行優化,因此register變數是一個很好的補充

2、同名變數的處理

在C語言中,重覆定義多個同名的全局變數是合法的。C語言中多個同名的全局變數最終會被鏈接到全局數據區的同一個地址空間上。

在C++中,不允許定義多個同名的全局變數。

3、struct關鍵字的加強

C語言中的struct定義了一組變數的集合

C語言中的struct定義的標識符並不是一種新的類型

C++中的struct用於定義一個全新的類型

// C語言
typedef struct _tag_student Student;    
// 將struct _tag_student類型起了一個別名Student
struct _tag_student{
    const char * name;
    int age;
}

// C++
// struct定義一個全新的類型
struct Student
{
    const char * name;
    int age;
};

4、小思考

int f()int f(void)的區別:有沒有區別,要看用什麼編譯器

  • 如果用C語言編譯器,前面的函數類型是返回值為int,接收參數是任意個數參數,後面的函數表示返回值為int,不接收任何參數
  • 在C++中,這兩種寫法沒有區別

5、預設類型

C++中所有的標識符都必須顯示地聲明類型

C語言中地預設類型在C++中是不合法的

f(i)
{
    printf("i = %d\n", i);
}
g()
{
    return 5;
}

在C語言中:

  • int f()表示返回值為 int, 接收任意參數的函數
  • f(void)表示返回值為int的無參函數

在C++中:

  • int f()int f(void)具有相同的意義,表示返回值為int的無參函數

C++中無預設類型,如果沒有參數,就是不接受任何參數,int f(void)只是為了相容C語言

C++ 不接受無返回值類型的函數,不允許預設類型

#include <stdio.h>

// c++中,定義了一個新的類型Student
struct Student
{
    const char* name;
    int age;
};

// C++中有問題,不合法
f(i)
{
    printf("i = %d\n", i);
}

// C++不合法
g()
{
    return 5;
}

int main(int argc, char *argv[])
{
    Student s1 = {"Delphi", 30};
    Student s2 = {"Tang", 30};
    
    f(10);
    
    printf("g() = %d\n", g(1,2,3,4,5));
    
    return 0;
}

6、總結

C++更強調實用性,可以在任意的地方聲明變數

C++中的register只是一個相容C的作用

C++編譯器能夠更好地進行優化

C++中地任意標識符都必須顯示地指明類型


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • c/c++ 數組 知識點 1,數組的聲明和初始化,對應代碼里的test1和test2 2,char數組,對應代碼里的test3 3,數組不可以拷貝和複製,對應代碼里的test4 4,指針數組, 數組的指針, 數組的引用,指針數組的引用,對應代碼里的test5 5,數組的範圍for用法,對應代碼里的t ...
  • 觀察者模式 一、什麼是觀察者模式?   觀察者模式(別名 發佈 訂閱)是軟體設計模式的一種。 觀察者模式屬於行為型模式 。(行為型模型 特別關註對象之間的通信)   觀察者模式(Observer)完美的將觀察者和被觀察的對象分離開。 觀察者設計模式定義了對象間 ...
  • 本文內容為我在網上搜集Spring AOP資料的彙總、摘抄。 AOP是一種編程思想,其對不同對象進行了橫向的抽象,將不同對象的、和主流程無關的公共邏輯抽象出來以方便維護。AOP的實現基礎為AOP動態代理,動態代理又可以由JDK動態代理和CGLIB實現。Spring中AOP的編程模型是定義組件、定義... ...
  • 在網上搜索了很多資料都不行,要麼就是不能發送數據,要麼就不能接收數據,使用如下的方法可以接收數據,一個一個位元組接收; 有部分限制是需要明確知道要接收多少個位元組,否則容易出現接收異常。。 var testbutton = doc.getElementById('testsocket'); testbu ...
  • 封裝類的由來: 為了將基本類型以對象行使存在,java對八個基本類型提供了引用類型,這八個引用類型稱為基本類型的“包裝類”。 八個基本類型對應的封裝類: int --> Integer char --> Character byte --> Byte float --> Float double - ...
  • 複雜鏈表的複製: 1.在舊鏈表中每個結點的後面複製出一個結點,隔代 2.把舊鏈表的隨機指向部分,複製到新添加的結點上 3.把新結點從舊鏈表中拆分出來成新鏈表 1. linklist=head while linklist!=null node=new Node() node->next=linkli... ...
  • 基本數據類型 一、整數(整形) 值域 1、 byte [-128,127] 2、short [-32768,32767] 3、int [-2147483648,2147483647] 4、long [-922372036854775808,9223372036854775807] 二、浮點數(浮點型 ...
  • 題目:2-62進位轉換 題目介紹:輸入一個n1 進位的整數(包括負數),將其轉換成n2 進位,其中n1 、n2 的範圍是 [ 2,62 ] 。每個數字的範圍是0-9、a-z、A-Z。不用考慮非法輸入。 輸入: n1 n2 n1 進位整數 輸出: n2 進位整數 例: 輸入: 8 16 -135246 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...