Time of Update: 2017-01-19
不知你在寫code時是否遇到這樣的問題?int i = 3; int x = (++i) + (++i) + (++i); 問x值為多少?進行各種理論分析,並在編譯器上實踐,然而可能發現最終的結果是不正確的,也是不穩定的,不同的編譯器可能會產生不同的結果。這讓人很頭疼。結果到底是啥呢?對於此題的答案,一句話,Theresult is undefined!
Time of Update: 2017-01-19
一、建立網頁 <html> <head> <meta http-equiv="Content-Language" content="zh-cn"> <script language="javascript" type="text/javascript">
Time of Update: 2017-01-19
從C/C++到Java,再從Java回到C/C++,今天終於有機會瞭解了串連Java、C/C++的橋樑——JNI。哈哈!分享一下!一、簡介JNI是Java native interface的簡寫,可以譯作Java原生介面。Java可以通過JNI調用C/C++的庫,這對於那些對效能要求比較高的Java程式或者Java無法處理的任務無疑是一個很好的方式。二、目的:Java代碼中調用C/C++代碼三、實現:假設我們的Java程式為J2C.java, C程式為J2C.c,
Time of Update: 2017-01-19
優先隊列(priority_queue)和一般隊列(queue)的函數介面一致,不同的是,優先隊列每次出列的是整個隊列中最小(或者最大)的元素。本文簡要介紹一種基於數組二元堆積實現的優先隊列,定義的資料結構和實現的函數介面說明如下:一、索引值對結構體:KeyValue複製代碼 代碼如下:// =============KeyValue Struct==================================typedef struct key_value_struct KeyValue;
Time of Update: 2017-01-19
PrecedenceOperatorDescriptionExampleAssociativity1()[]->.::++--Grouping operatorArray accessMember access from a pointerMember access from an objectScoping operatorPost-incrementPost-decrement(a + b) / 4;array[4] = 2;ptr->age = 34;obj.age = 34;
Time of Update: 2017-01-19
由於#define 定義的宏常量是全域的,不能達到目的,於是想當然地覺得應該用 const 修飾資料成員來實現。const 資料成員的確是存在的,但其含義卻不是我們所期望的。const 資料成員只在某個物件存留期內是常量,而對於整個類而言卻是可變的,因為類可以建立多個對象,不同的對象其 const 資料成員的值可以不同。 不能在類聲明中初始化 const 資料成員。以下用法是錯誤的,因為類的對象未被建立時,編譯器不知道 SIZE 的值是什麼。 複製代碼 代碼如下:class A {
Time of Update: 2017-01-19
在gcc中,可以使用attribute關鍵字,聲明constructor和destructor,代碼如下:複製代碼 代碼如下:#include <stdio.h>__attribute((constructor)) void before_main(){ printf("%s/n",__FUNCTION__);}__attribute((destructor)) void
Time of Update: 2017-01-19
複製代碼 代碼如下:class a{public: static FunctionA() { menber = 1; }private: int menber;}編譯上述代碼,出錯。原因很簡單大家都知道,靜態成員函數不能訪問非靜態成員,這是因為靜態函數屬於類而不是屬於整個對象,靜態函數中的
Time of Update: 2017-01-19
定義一個空的C++類,例如class Empty{}一個空的class在C++編譯器處理過後就不再為空白,編譯器會自動地為我們聲明一些member function,一般編譯過去就相當於複製代碼 代碼如下:class Empty{public:Empty(); // 預設建構函式Empty( const Empty& ); // 拷貝建構函式~Empty(); // 解構函式Empty& operator=( const Empty& ); // 賦值運算子Empty* operator&();
Time of Update: 2017-01-19
首先我們需要知道程式有沒有記憶體泄露,然後定位到底是哪行代碼出現記憶體泄露了,這樣才能將其修複。最簡單的方法當然是藉助於專業的偵查工具,比較有名如BoundsCheck,功能非常強大,相信做C++開發的人都離不開它。此外就是不使用任何工具,而是自己來實現對記憶體泄露的監控,分如下兩種情況:一. 在 MFC 中檢測記憶體流失假如是用MFC的程式的話,很簡單。預設的就有記憶體泄露檢測的功能。我們用VS2005產生了一個MFC的對話方塊的程式,發現他可以自動的檢測記憶體泄露.不用我們做任何特殊的操作.
Time of Update: 2017-01-19
const關鍵字:用const修飾的定義對象稱為常對象;用const修飾的聲明成員函數稱為常成員函數;用const修飾的聲明資料成員稱為常資料成員。變數或對象被
Time of Update: 2017-01-19
在使用STL容器(比如map、list、vector等)的時候,是用放一個對象還是放一個對象指標,即是用vector<int>還是vector<int*>,這裡的vector可以換成其他的容器,int可以換成其他基本類型,也可以自訂的資料結構或類。首先,要說明的是,這兩種方式,怎麼用都可以實現功能,把一組整型數放到容器裡。先看看兩種方式在使用的時候的區別。1.vector<int>複製代碼 代碼如下:vector<int> vecTemp;for
Time of Update: 2017-01-19
1.添加標頭檔複製代碼 代碼如下:#include <utils/Log.h> //或者 #include <cutils/Log.h> 這個時候可以使用ALOGE/ALOGI/ALOGW 等方法列印出log 不過有些地方不能這麼使用,因為依賴libutils libctuils庫在mk檔案見添加如下依賴編譯即可複製代碼 代碼如下:#LOCAL_MODULE := ... ...
Time of Update: 2017-01-19
具體歸納如下:(1)reinterpret_cast該函數將一個類型的指標轉換為另一個類型的指標.這種轉換不用修改指標變數值存放格式(不改變指標變數值),只需在編譯時間重新解釋指標的類型就可做到.reinterpret_cast 可以將指標值轉換為一個整型數,但不能用於非指標類型的轉換.例://基本類型指標的類型轉換double d=9.2;double* pd = &d;int *pi = reinterpret_cast<int*>(pd); //相當於int
Time of Update: 2017-01-19
1. 考題一:程式碼如下:複製代碼 代碼如下:void Exchg1(int x, int y) { int tmp; tmp=x; x=y; y=tmp; printf(“x=%d,y=%d/n”,x,y)}void main(){ int a=4,b=6; Exchg1 (a,b) ; printf(“a=%d,b=%d/n”,a,b)}輸出的結果:x=____, y=____a=__
Time of Update: 2017-01-19
1.引言C++語言的建立初衷是“a better C”,但是這並不意味著C++中類似C語言的全域變數和函數所採用的編譯和串連方式與C語言完全相同。作為一種欲與C相容的語言,C++保留了一部分過程 式語言的特點(被世人稱為“不徹底地物件導向”),因而它可以定義不屬於任何類的全域變數和函數。但是,C++畢竟是一種物件導向的程式設計語言,為了支 持函數的重載,C++對全域函數的處理方式與C有明顯的不同。 2.從標準標頭檔說起某企業曾經給出如下的一道面試題:為什麼標準標頭檔都有類似以下的結構?
Time of Update: 2017-01-19
例如,在下面的來源程式中“""”之內的“你”、“好”、“,”、“C”、“!”、“\n”就屬於程式要處理的字元。複製代碼 代碼如下:#include <stdio.h>int main(void){ printf("你好,C!\n"); return 0;} 該來源程式中的其他字元則屬於書寫來源程式的字元,
Time of Update: 2017-01-19
一、基本知識指標和引用的聲明方式:聲明指標: char* pc;聲明引用: char c = 'A' char& rc =
Time of Update: 2017-01-19
1、printf格式輸出函數 如果格式控制說明項數多於輸出表列個數,則會輸出錯誤資料;如果輸出表列個數多于格式控制說明數,則多出數不被輸出。%md,m指的是輸出欄位的寬度。如果輸出欄位位元小於m,則左端以空格補齊,若大於m,則按照實際位元輸出。%-md,基本同上,只不過不同之處在於,空格在右端補齊printf參數可以是常量,變數或運算式,VC++ 6.0中採用從右向左順序求值,從左向右輸出如複製代碼 代碼如下:int x = 5; printf("%4d%4d%4d", x, ++x,
Time of Update: 2017-01-19
複製代碼 代碼如下:#include <iostream>using namespace std;int hello1();int hello2();int main() { int a, b; cout<<"a="<<hello1()<<" b="<<hello2()<<endl; return 0;}int