程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++基礎知識 >> C++在C的基礎上改進了哪些細節

C++在C的基礎上改進了哪些細節

編輯:C++基礎知識
C++ 是在C語言的基礎上改進的,C語言的很多語法在 C++ 中依然廣泛使用,例如:
  • C++ 仍然使用 char、short、int、long、float、double 等基本數據類型;
  • C++ 仍然使用 if...else、while、for、switch、break 等分支或循環結構;
  • C++ 仍然使用 +、-、*、/、%、++、--、<<、>> 等運算符;
  • C++ 仍然使用 typedef、#define、enum、struct 等;
  • C++ 仍然使用C語言中經典的指針(Pointer),並且使用范圍有增無減,甚至不可或缺。

下面我們再來談一下C++改進了哪些細節。

變量定義位置

ANSI C 規定,所有局部變量都必須定義在函數開頭,在定義好變量之前不能有其他的執行語句。C99 標准取消這這條限制,但是 VC/VS 對 C99 的支持很不積極,仍然要求變量定義在函數開頭。請看下面的代碼:
#include <stdio.h>
int main(){
    int a;
    scanf("%d", &a);
    int b;
    scanf("%d", &b);
    int c = a + b;
    printf("%d\n", c);

    return 0;
}
將代碼保存到源文件main.c,那麼它可以在 GCC、Xcode 下編譯通過,但在 VC/VS 下會報錯。GCC、Xcode 對 C99 的支持非常好,可以在函數的任意位置定義變量;但 VC/VS 對 C99 的支持寥寥無幾,必須在函數開頭定義好所有變量。

將上面的代碼再保存到源文件main.cpp,那麼它在 GCC、Xcode、VC/VS 下都可以編譯通過。這是因為 C++ 取消了原來的限制,變量只要在使用之前定義好即可,不強制必須在函數開頭定義所有變量。
注意源文件的後綴,.c是C語言代碼,.cpp是C++代碼,它們的編譯方式不同。
取消限制帶來的另外一個好處是,可以在 for 循環的控制語句中定義變量,請看下面的例子:
#include <iostream>
using namespace std;

int sum(int n){
    int total = 0;
    //在for循環的條件語句內部定義變量i
    for(int i=1; i<=n ;i++){
        total += i;
    }
    return total;
}

int main(){
    cout<<"Input a interge: ";
    int n;
    cin>>n;
    cout<<"Total: "<<sum(n)<<endl;
    return 0;
}
運行結果:
Input a interge: 10
Total: 55

在 for 內部定義循環控制變量 i,會讓代碼看起來更加緊湊,並使得 i 的作用域被限制在整個 for 循環語句內部(包括循環條件和循環體),減小了命名沖突的概率。在以後的編碼過程中,我推薦這種寫法。

布爾類型(bool)

在C語言中,關系運算和邏輯運算的結果有兩種,真和假:0 表示假,非 0 表示真。例如:
#include <stdio.h>
int main(){
    int a, b, flag;
    scanf("%d %d", &a, &b);
    flag = a > b;  //flag保存關系運算結果
    printf("flag = %d\n", flag);
    
    return 0;
}
運行結果:
10 20↙
flag = 0

C語言並沒有徹底從語法上支持“真”和“假”,只是用 1 和 0 來代表。這點在 C++ 中得到了改善,C++ 新增了bool類型,它一般占用 1 個字節長度。bool 類型只有兩個取值,true 和 false:true 表示“真”,false 表示“假”。請看下面的例子:
#include <iostream>
using namespace std;

int main(){
    int a, b;
    bool flag;  //布爾變量
    cin>>a>>b;
    flag = a > b;
    cout<<"flag = "<<flag<<endl;

    return 0;
}
10 20↙
flag = 0

遺憾的是,在 C++ 中使用 cout 輸出 bool 變量的值時還是用數字 1 和 0 表示,而不是 true 或 false。Java、PHP、JavaScript 等也都支持布爾類型,但輸出結果為 true 或 false,我武斷地認為這樣更科學。

你也可以顯式地對 bool 變量賦值,例如:
#include <iostream>
using namespace std;

int main(){
    bool flag = true;
    if(flag){
        cout<<"true"<<endl;
    }else{
        cout<<"false"<<endl;
    }

    flag = false;
    if(flag){
        cout<<"true"<<endl;
    }else{
        cout<<"false"<<endl;
    }

    return 0;
}
運行結果:
true
false
注意,true 和 false 是 C++ 中的關鍵字。
在以後的編碼中,我推薦使用 bool 變量來表示邏輯運算、關系運算以及開關變量的值。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved