c與c 的區別(一)

2021-07-30 23:27:31 字數 2648 閱讀 6424

最近在學習c++,很多人都說c++是c的擴充,但是我認為這兩種語言雖說前面的語法是差不多的,但是後期的程式設計包括思想都是不同的。我覺得以這本書為我的學習書目,總結一些c和c++不同的地方,當然也有一些是以前我沒有注意到的地方,不代表c中沒有這種特性。

1.main()函式的返回型別必須為int,即整數型別。int型別是一種內建型別,即語言自身定義的型別。

2.在大多數系統中,main的返回值被用來指示狀態。返回值0表示成功,非0的返回值含義由系統定義,通常指出錯誤型別。

3.c++中使用iostream庫,包含istream和ostream兩個基礎庫,分別表示輸入流和輸出流。

4.定義了4個io物件,cin和cout稱為標準輸入輸出。用cerr來輸出警告和錯誤訊息,也稱為標準錯誤。clog用來輸出程式執行時的一般性資訊。

5.endl是乙個被稱為操縱符的特殊值,目的是結束當前行,並將與裝置關聯的緩衝區的內容刷到裝置中。

6.命名空間可以幫助我們避免名字定義衝突,以及使用庫中相同名字導致的衝突。標準庫定義的所有名字都在命名空間std中。我們可以通過作用域運算子::來使用名字,例如:std::cout,或者我們也可以using宣告來宣告命名的空間。形式如下:

using namespace::name;

一旦有了這種宣告我們就可以直接訪問名字了。

#include using std::cin;

int main()

而且標頭檔案中不應該包含using宣告,因為標頭檔案的內容會拷貝到引用它的檔案中,會導致名字衝突。

但是,這樣還是有些麻煩,我們還可以使用using namespace std;這種方式,可以避免我們乙個乙個區宣告命名空間的名字。同樣對於一些比較長的命名空間我們也可以使用別名簡化它。比如:namespace prime = cplusplus_prime,這樣就可以用prime代替cplusplus_prime。

7.讀取數量不定的輸入資料

#include using namespace std;

int main()

cout << "sum is:" << sum << endl;

return 0;

}

8.檔案結束標誌,在windows中,輸入檔案結束符的方法是敲ctrl+z,然後按enter鍵或return鍵。在unix中,檔案結束符輸入用ctrl+d。

9.定義了新的型別long long 是長整形,最小為64位.

10.把乙個非布林型別的值賦給布林型別時,初始值為0則結果為false,否則結構為true。

把乙個布林型別的值賦給非布林型別時,初始值為false則結果為0,初始值為true則結果為1.

11.初始化不是賦值,初始化的含義是建立變數時賦予其乙個初始化,而賦值的含義是把物件的當前值擦除,而以乙個新值來代替。

12,.在c++中乙個變數的初始化有以下幾種方法

int n = 0;

int n = ;

int n(0);

int n;

其中在c++11標準中,用花括號的初始化得到的全面的應用。

如果沒有進行初始化,那麼變數會被預設初始化,預設初始化的值會根據變數的位置而決定,定義於任何函式體之外的變數被初始化為0。

注意:為了防止無法預料到的錯誤,建議初始化每乙個內建型別的變數。

13.c++是一種靜態型別語言,其含義是在編譯階段檢測型別。

14.定義引用時,程式把引用和它的初始化值繫結在一起,而不是將初始值拷貝給引用。因為無法重新繫結另外乙個物件,因此引用必須被初始。引用只能繫結在物件上,而不能繫結某個具體的值。所有引用的型別都要和繫結的型別相匹配,但是有兩個例外:

1.在初始化常量引用時,允許用任意表示式作為初始值,只要改表示式的結果能轉換成引用型別即可。

int  i = 42;

const int &r1 = i; //正確

const int &r2 = 42; //正確

const int &r3 = r1 * 2; //正確

int &r4 = r1 * 2; //錯誤:r4是乙個普通的非常量引用

2.在類的繼承中,我們可以將基類的引用繫結到派生類物件上。

15.面對一條比較複雜的指標或引用的宣告語句時,從右向左閱讀有助於弄清楚它的真實含義。

16.c++11標準規定,允許將變數宣告為constexpr型別以便讓編譯器來驗證變數的值是否是乙個常量表示式。宣告為constexpr的變數一定是乙個常量,而且必須用常量表示式初始化。

17.在c語言中常用關鍵字typedef表示型別同名。在c++11標準中,規定了一種新的方法,使用別名宣告來定義型別的別名:

using si = int ;               //si是int的同義詞

18.c++11新標準引入了auto型別說明符,用它能讓編譯器去替我們分析表示式所屬的型別。

auto item = val1 + val2; //item初始化為val1和val2相加的結果,從val1和val2的型別推斷出item的型別。

19.c++11新標準規定,可以為資料成員提供乙個類內初始值。建立物件時,類內初始值將用於初始化資料成員。沒有初始值得成員將被預設初始化。(預設初始化:函式內變數的值跟變數的位置有關,函式外變數的值為0)

C與C 的區別(一)

c語言 c89 不支援帶有預設值的函式 c c 99 支援帶有預設值的函式 要從右到左,給形參,預設值。那麼什麼是帶預設值的函式呢?int sum int a 10,int b 20 intmain 這就是傳說中的帶預設值的函式,它的實參不是通過函式呼叫傳遞的而是通過在定義或聲 明函式時在函式體內給...

C 與C 的一些區別

最近在學習c 總結了一些c 與c 的區別 1.c 不支援多重繼承。2.c 檔案是.h,cpp,而c 檔案是.cs。3.c 宣告類時,括號後沒有 4.與c c 不同,c 在類的外部不能宣告全域性變數,也沒有全域性函式。6.c 中的var相當於c 中的auto。7.c 中不管巢狀級別如何,都不能在第乙個...

C 與C的區別

l c如果不寫返回值,預設是int,而c 中不能不寫返回值 可用void表示無返回值 如func1 l int func1 在c中表示可帶任意引數的函式,這是c的漏洞,使得它避開了引數型別檢查 而c 中表示不帶引數的函式。2 標頭檔案的區別 l c 的標頭檔案去掉了c中的.h,以c字首開始。比如,變...