亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中const常量的用法案例

發布時間:2020-10-12 17:10:45 來源:億速云 閱讀:225 作者:小新 欄目:編程語言

小編給大家分享一下C++中const常量的用法案例,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

先對C語言中的const和C++中的const進行講解,前者const修飾的變量不是真的常量,它只是告訴編譯器該變量不能出現在賦值符號的左邊。后者C++在C的基礎上對const進行了進化處理。

1、C語言中的const:
  • const修飾的變量是只讀的,本質還是變量

  • const修飾的局部變量在棧上分配空間

  • const修飾的全局變量在只讀存儲區分配空間

  • const只在編譯期有用,在運行期無效

  • const不能定義真正意義上的常量

const修飾的變量不是真的常量,它只是告訴編譯器該變量不能出現在賦值符號的左邊。const 局部變量是在棧上分配空間,可以通過指針改變這個空間里面的值。過了編譯期,const變量的常量特性,只讀特性就沒有了,只讀特性只在編譯期有效,運行期根本無效。const修飾的全局變量在只讀存儲區分配空間,因此如果用指針去修改了const修飾的全局變量,程序就會崩潰,因為修改了程序只讀存儲區中內容,大部分程序都會發生崩潰。

2、C++中的const

C++在C的基礎上對const進行了進化處理,具體表現在:

  • const聲明時,在符號表中放入常量

  • 編譯過程中發現常量直接以符號表中的值替換(常量折疊)

  • 編譯過程中也可能為對應的常量分配存儲空間:

    • const用在全局或者使用了static關鍵字說明,存放在只讀數據區

      extern const int i = 10;
      static const int i = 10;
      
      // 或者修飾全局變量
      const int a =10;
      int main()
      {}
    • 局部變量中對const常量使用了&操作符,在棧區分配空間

注意:C++編譯器雖然可能為const常量分配空間,但不會使用其存儲空間中的值

符號表是編譯過程中產生的一種數據結構

#include <iostream>
#include <string>
using namespace std;

const int i = 10;          // 如果通過指針去改變i,就會出現段錯誤:嘗試修改只讀數據區數據
int main()
{
    const int a = 5;
    int *p = (int *)&a;    // &a, 給a標識符分配空間了,并用p指向了該空間,
                           // 可以通過*p訪問這個地址,但是不能通過a來訪問
    *p = 10;               // 不能通過指針去改變a的值
    cout << a << endl;
    cout << *p << endl;
    
    return 0;
}
3、 與宏定義對比

C++ 中的const常量類似于宏定義

const int c = 5;
// 類似于
#define c 5

但是cosnt與宏定義的區別在于:

  • const常量是有編譯器處理

  • 編譯器對cosnt常量進行類型檢查和作用域檢查

  • 宏定義由預處理器處理,只是進行單純的文本替換

#include <stdio.h>

void f()
{
    #define a 3
    const int b = 4;
}

void g()
{
    printf("a = %d\n", a);
    // 在g函數中訪問f函數中的宏定義,完全沒有問題
    // 在預處理的時候就進行了宏替換,對編譯器來說,就是printf("a = %d\n", 3);
    // 宏是沒有作用域的概念
    
    // const 定義的常量,被編譯器處理,是有作用域的,不能訪問b
    printf("b = %d\n", b);
}

int main()
{
    const int A = 1;
    const int B = 2;
    int array[A + B] = {0};    
    /* C編譯
    const修飾得到的只是具有只讀特性的變量,數組的大小是由兩個變量的大小決定的,
    兩個變量相加的結果需要在運行的時候才能直到,因此編譯器編譯的時候不知道這個數組長度,直接報錯
    */
    
    /* C++編譯
    const是定義的真正意義上的常量,直接從符號表中取值,編譯的時候就知道A和B的值,
    可以得到數組的長度,不會報錯
    */
    int i = 0;
    
    for(i=0; i<(A + B); i++)
    {
        printf("array[%d] = %d\n", i, array[i]);
    }
    
    f();
    g();
    
    return 0;
}

看完了這篇文章,相信你對C++中const常量的用法案例有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五原县| 察雅县| 专栏| 澳门| 河北区| 江川县| 太和县| 江陵县| 芦山县| 西畴县| 嘉禾县| 上饶市| 定兴县| 墨竹工卡县| 松潘县| 吉首市| 阜新市| 崇文区| 绵阳市| 延庆县| 公安县| 澎湖县| 郧西县| 塘沽区| 方正县| 郁南县| 柞水县| 吉安市| 高青县| 石泉县| 板桥市| 德清县| 太和县| 漳州市| 射阳县| 沂源县| 泰宁县| 长岛县| 乌拉特后旗| 东海县| 汉川市|