1. 程式人生 > >再學c++_2014_11_4_基礎(一)

再學c++_2014_11_4_基礎(一)

objdump -h main.0// linux下的指令,檢視.o的內容 1.函式引數帶預設值 int sum(int a, int b=0);          r int sum (int a, int b)            r { retur a+b; }(從右往左入棧,是為了支援可變引數)定義不能給,宣告可以給預設值 2.帶有預設值的函式,預設值相同不能多次宣告, int sum(int a, int b=0);      right int sum(int c=9, int e);         right 3.函式的過載:c:函式名前加下劃線       C++:函式名+引數 相同函式把兩個引數的順序改變一下,看是不是會報錯,是錯誤還是過載? { unsig nedint i=1; char j=-1; char c =i>j? 'a':'b' }(a) 過載 覆蓋 隱藏 形參會不會對實參產生影響也是區分函式是否過載的一種方式,比如用的是指標而非值傳遞,則不是過載 過載必須有個前提,那就是作用域 main {  extern sum(char*,char*s); (2)   ...   呼叫sum則永遠呼叫(2) } 回撥方式 /*****************************c++呼叫c*************************************/ extern"c" { //以c語言的方式變異,能夠找符號表,不用extern則找不到符號表  即extern是c++呼叫c的關鍵字 } /****************************c呼叫c++***************************************/ g++ -shared -fPIC -o libsum.so sum.cpp 把 sum.cpp生成連結庫來呼叫 加一箇中間的動態連結庫,實現c呼叫c++    a.so   b.h sum.c    b.so其中b.so中實現了把c語言用extern"c"呼叫來吧a.so的c++介面轉化成c的形式,其中用到了linux的動態連結的編譯。除了這種方法,就沒有其他的方法了。如下: start: 定義一個temp.cpp ------------------------------ #include "b.h" extern"c" { int my_sum(int a, int b)//這是在將要生成的連結庫中的函式,實際上呼叫的是a.so庫裡的函式sum(a,b) {     return sum(a,b); } } -----------------------//生成了另一個動態連結庫temp.so,到時如果呼叫的時候就可以通過此temp.so作為終中介來呼叫c++庫a.so end; reguster 是用來定義暫存器變數的關鍵字 volatile:a {   m=a;
      example   b=a;//每次賦值都是從a取值,不要求編譯器優化做硬體用的多一點 }//如果沒有volatile 關鍵字,編譯器將會進行優化,那麼每次執行到m=a和b=a的時候都是從m來賦值的,在example處加上m=i; ,則b的值將是i;但是volatile關鍵字卻解決了這個問題,這讓b=a的值是從a裡取來的,即禁止編譯器進行程式碼優化!! 32位就是一個塊(32位系統)cash抓塊 4.行內函數 {  1.提高程式執行效率的一種方式  2.更安全的一種巨集!!!  3.遞迴函式不能用內聯展開 4.直接在呼叫點展開 5.行內函數一旦被展開,就不會產生行內函數的符號表,一般只會寫在標頭檔案裡面,如果沒有展開那另說    {inline int sum() { return a+b; }     }int ret = sum(18,9)=18+9;    } 5.引用和const的概念 {  const in C {      const定義的變數不能用來宣告陣列  {const int len =21; int sum[len]={0};}      1.常變數,但是還是變數 }   const in C++s//真真正正的const {      1.不佔記憶體的常量,只有用到const_cast<>,&等一系列涉及地址記憶體的時候進行轉化時才會給他分配記憶體      2.預編譯時候就會用具體的數字來覆蓋變數名字      3.編譯階段要確定宣告陣列的長度,在分離編譯時,就能      4.const變數可以定義陣列      5.const在當前檔案(*.h)下替換,等到編譯完畢,連結的時候,就沒有了。所以外部(*.cpp)用來給整形int a賦值是不對的,因為引用的是一個不存在的東西,系統會報錯。 { *.h { const int b=9; } .cpp { int a=0; a=const b;   //wrong }  }      6.extern const int a;外部有人引用,a則分配記憶體,把他當做c語言來編譯 } const_cast<TYPE> { const int data=1024; int*p=const_cast<int*>(&data) *p=222; cout<<data<<endl; } 引用: { 1.引用必須是一個有效的記憶體 const int &a = 10 引用的臨時的變數   int &a則錯誤,因為 10只是一個字面常量,沒有記憶體的 2.引用不同變數的時候則是需要加const才能通過
{ double fdata=10.24 const int &a=fdata; //引用不同變數的時候則是需要加const才能通過 }{ typedef struct { int data; int a[0]; }TYPE_INT;//柔性結構體,型別是4但是實際記憶體卻不是,sizeof(p) =TYPE_INT TYPE_INT *p = (TYPE_INT*)malloc(sizeof(TYPE_INT)+sizeof(int)*100) typedef struct { int data; }TYPE_INT;
TYPE_INT sum(TYPE_INT a, TYPE_INT b) { /*未完*/2014_11_4 } } } int a=10; int b=20; int *p=&a; int &c=b;  //物理實現上就是用指標,但是不能解引用,只是別名。比指標安全多了 typedef int a[2] { }p; p[2]? int p[][2]--->p[]   int[2]   (理解intp[][2]) }         
                                                

相關推薦

c++_2014_11_4_基礎

objdump -h main.0// linux下的指令,檢視.o的內容 1.函式引數帶預設值 int sum(int a, int b=0);          r int sum (int a, int b)            r { retur a+b; }(

C程式設計基礎

參考書籍介紹 作業系統之哲學原理() C程式設計(譚浩強) 計算機網路(謝希仁) 微機原理(清華大學出版社) 高階資料結構 C語言基本資料型別、運算子與表示式 基本型別及其所佔位元組 short(短整型) :2個儲存單位 int (整型) :4個儲存單

Java還要基礎認識java

為什麼選擇Java 公司一個熱衷Python的同事突然問我:你給我說說Java到底有什麼好? 幾番辯論之後我意識到似乎一直以來都忽略的這個問題。網上看了蠻多,記錄一下免得被別人再問到表示很尷尬。

C++基礎

C++基礎# include <iostream> # include <stdio.h> class A { public: A() :i(10) { } virtual void f() { std::cout << "A::f() i = &qu

c++演算法模板基礎演算法模板:

1.高精演算法: 加法: while(i<=a加數的位數|| i<=b加數的位數) { c[i]=a[i]+b[i]+x; x=c[i]/10; c[i]%=10; i++; } 注意:加法需要逆序儲存,因為如

C#.網路程式設計 Socket基礎Socket TCP協議 實現端到端伺服器與客戶端簡單字串通訊

簡介:        本章節主要討論了Socket的入門知識,還未針對Socket的難點問題(比如TCP的無訊息邊界問題)展開討論,往後在其他章節中進行研究。 注意點: 伺服器(比如臺式電腦)的IP為1.1.1.2,那麼客戶端(其他裝置,比如手機,Ipad)連線的一定是

[轉]C++ template —— 模板基礎

分配 博客 講解 變參 ice allocator 不可 nts 枚舉值 《C++ Template》對Template各個方面進行了較為深度詳細的解析,故而本系列博客按書本的各章順序編排,並只作為簡單的讀書筆記,詳細講解請購買原版書籍(絕對物超所值)。--------

Linux shell 基礎,自己慢慢步步

Linux shell指令碼基礎學習這裡我們先來第一講,介紹shell的語法基礎,開頭、註釋、變數和 環境變數,向大家做一個基礎的介紹,雖然不涉及具體東西,但是打好基礎是以後學習輕鬆地前提。 1. Linux 指令碼編寫基礎 ◆1.1 語法基本介紹1.1.1 開頭 程式必須

密碼基礎

課程內容 二進位制 八進位制 十進位制 十六進位制 進位制互轉 今天,我們正式開始學習密碼學基礎的相關知識。 大家有沒有認真的查詢”密碼學知識預熱“文件裡的相關概念呢?沒有也沒關係,就是暫時輸在了起跑線上嘛。雖然說密碼學在比賽中以應用為主,課程比重

C#基礎--建構函式

建構函式:      主要是用來建立物件時為物件進行初始化賦值。總與new運算子一起使用在建立物件時。      建構函式的名稱和類名一樣,一個類可以擁有多個建構函式。     建構函式在例項化類時,最先執行。  

C++11 併發程式設計基礎:併發、並行與C++多執行緒

正文 C++11標準在標準庫中為多執行緒提供了元件,這意味著使用C++編寫與平臺無關的多執行緒程式成為可能,而C++程式的可移植性也得到了有力的保證。另外,併發程式設計可提高應用的效能,這對對效能錙銖必較的C++程式設計師來說是值得關注的。 回到頂部 1. 何為併發 併發指的是兩個或多個獨立的活動在同

c++並發編程基礎:並發、並行域多線程

競爭 安全 開發 引用 詳解 輕量 事情 地址空間 var 正文 C++11標準在標準庫中為多線程提供了組件,這意味著使用C++編寫與平臺無關的多線程程序成為可能,而C++程序的可移植性也得到了有力的保證。另外,並發編程可提高應用的性能,這對對性能錙銖必較的C++程序員來

C語言程式設計-基礎知識2

15. 程式設計是指從確定任務到得到結果、寫出文件的全過程16. 程式設計工作過程a) 問題分析b) 設計演算法c) 編寫程式d) 對源程式進行編輯、編譯和連線e) 執行程式,分析結果f) 編寫程式文件17. 程式包括兩方面的資訊a) 對資料的描述。在程式中要指定用到哪些資料

C++學習筆記 補充篇 基礎語法 — 參考慕課網 值得推薦!

C++與C的關係:所有C程式都可以在C++的編譯環境中執行。 c++比c語言之多添加了bool(布林型別) 新的初始初始化方法: 隨用隨定: #include <iostream> #include <stdlib.h&

小白 Python 爬蟲33:爬蟲框架 Scrapy 入門基礎

人生苦短,我用 Python 前文傳送門: 小白學 Python 爬蟲(1):開篇 小白學 Python 爬蟲(2):前置準備(一)基本類庫的安裝 小白學 Python 爬蟲(3):前置準備(二)Linux基礎入門 小白學 Python 爬蟲(4):前置準備(三)Docker基礎入門 小白學 Pyth

python大法之二-一些基礎

計算機編程 python 獨立博客 hello 解釋器 個人獨立博客出處:http://www.xbman.cn/出處:http://www.xbman.cn/article/3Python是一種解釋性計算機編程語言。采用縮進式語法,寫起來的感覺有點像排了版的shell,這裏要註意寫pyt

c# 進程

for 定義 blog 調用 image method 程序 leg pri 1、進程,進程和多線程的概念: 進程:一個程序運行時所有資源的統稱。 線程:每一個響應執行流就是線程。(做不同的事情) 多線程:多個線程同時工作 2、同步和異步的概念: 同步:前面的先執行,後面的

Linux基礎

顯示文件 單用戶 重要 命令 普通 art 免費使用 出現 文件夾 一、了解Unix和Linux 1.Unix和Linux的起源   出現分時操作系統的概念後,貝爾實驗室和通用電氣在CTTS成功研制後決定開發能夠同時支持上百終端的MULTICS,但是失敗了。後來一位參加過M

前端教你UI——人物處理

適應 logs 減少 方法 情況 總結 -a 但是 影響 一、序言 本文作為本系列的第一篇寫UI的文章,開頭還是有必要申明一些東西的,本系列主要是為了作為博主在前端工作之余學習UI的一個記錄,同時為了讓更多的同行學習到一些編程之外的其他東西。所以本文會盡可能詳細的介紹如何

DOM 基礎

引號 nod pro 操作符 結果 所有組 數組 tag 方式 DOM(document object model)由節點構成,元素節點,文本節點,屬性節點是一份DOM的所有組成。 <p id="p">this is a node</p>