C與C++的一些不同之處

來源:互聯網
上載者:User
以前也沒多注意C和C++有什麼差別,感覺C++沒有類,模板和引用,那麼C++就是C
近幾天特別注意了這方面的問題,發現以前想的還是有問題的。
去掉了類,模板和引用的C++和C還是有一定的差別的。
下面列了幾點還多多指教

函數原型
在C++中函數原型是必須的,而C中是可選的
在C中圓括弧意味著前向原型聲明,但在C++中就意味著函數沒有原型
例如
int test();
int main()
{
    int test(4,5);
}
int test(int a,int b)
{
}
在C的舊風格中可以接受的,但是在C++中就會產生一個錯誤
C++允許聲明函數名相同的多個函數,只要他們具有不同的參數表

char常量
char常量在C中被認為int類型的,C++中則被看成是char類型的
例如
char ch=‘A’;
在C中,常量‘A’的字元編碼儲存為一個int值,相同的數值也被儲存在變數ch中,但是在ch中只佔據記憶體中的一個位元組,
在C++中,‘A’和ch都是使用一個位元組

const修飾符
C中全域的const具有外部連結,C++中他具有內部連結
C++中的const double PI=3.14159;
相當於C中的static const double PI=3.14159;
前提兩者都在所有函數的外部
C++的意圖是使得在標頭檔中使用const更加的簡單
C++中可以使用extern使一個const值具有外部連結
兩種語言都可以建立具有內部和外部連結的常量,不同的只是在於預設使用哪種連結
C++中可以使用const value初始化const,但是在C中就不可以
例如
const int a=1;
const int b=2;
const int c =a*b; /*C++合法,C非法*/

結構和聯合
聲明一個帶標記的結構和聯合之後,在C++中就可以使用該標記作為類型名了
struct point
{
    int x;
    int y;
};
struct point m;         /*C合法,C++合法*/
point n;                /*C不合法,C++合法*/

在C++中結構名可能與變數名相衝突。
#include <stdio.h>

float point = 10.001;

int main()
{
    struct point {int x;int y;};
    struct point m = { 2, 4};

    printf("%f/n",point);       /*C可以,C++不可以*/
    return 0;
}
C++把printf()中的point解釋為結構類型而不是外部變數。
struct box
{
    struct point {int x;int y;} upperleft;
    struct point lowerright;
};
c中可以使用任一結構,c++中使用嵌套結構要求一個特殊的符號::。
strcut box ad;      /*C合法,C++合法*/
strcut point dot;   /*C合法,C++非法*/
box::point dot;     /*C++*/

枚舉
對於枚舉,c++比c更嚴格
使用枚舉enum變數可以做的唯一有用的是為他賦予一個enum變數後和其他的之進行比較;不經過顯式的類型轉換就不可以把int值賦給enum變數,而且也不能遞增一
個enum變數。
enum sample {sage,thyme,salt,pepper};
enum sample season;
season =sage;           /*c,c++*/
season =2;              /*c warnning,c++ error*/
season =(enum sample) 3;    /*C,C++*/
season++;                   /*C可以,C++ error*/
C++允許聲明是不用關鍵字enum
sample season;  /*C非法,C++合法*/
如果一個變數和enum類型有相同名字就會有衝突。

指向void的指標
C,C++可以把任意類型的指標賦值給指向void的指標,
C++中除非使用了顯式的類型轉換,否則不能將指向void的指標賦值給其他類型的指標。
int arg[5]={1,2,3,4,5};
int *pi;
void *pv;
pv = arg;       /*C,C++*/
pi = pv;        /*C合法,C++非法*/
pi = (int*)pv;  /*C,C++*/
C++中可以把衍生類別對象的地址賦值給其他類型的指標,C中不存在。

bool類型
C++中布爾類型是bool,true,false是關鍵字;
C中包含了stdbool.h在可以使用true和false。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.