Time of Update: 2018-12-04
http://blog.csdn.net/tianmo2010/article/details/8706495類型轉換機制:可以分為隱式類型轉換和顯示類型轉換,顯示類型轉換也稱為強制類型轉換(cast),有四種名字命名的強制類型轉換操作符:static_cast、dynamic_cast、const_cast、reinterpret_cast。隱式的類型轉換比較常見,在混合的類型運算式中經常發生。最簡單的為整型提升,對於所有比int小的整型,包括char、signed
Time of Update: 2018-12-04
本文來自http://blog.csdn.net/zxcred C++程式的複雜性很大一部分在於他的記憶體管理,沒有C#那樣的記憶體回收機制,記憶體管理對初學者來說很困難。經常會出現記憶體泄露的情況。那麼我們寫程式如何避免記憶體泄露呢?首先我們需要知道程式有沒有記憶體泄露,然後定位到底是哪行代碼出現記憶體泄露了,這樣才能將其修複。 本文描述了如何檢測記憶體泄露。最主要的是純C,C++的程式如何檢測記憶體泄露。 現在有很多專業的偵查工具,比如比較有名的BoundsCheck,
Time of Update: 2018-12-04
多線程對共同資源的訪問,往往會造成資料的混亂和不可預料的結果,因此一般需要加鎖訪問進行互斥訪問。所謂“互斥訪問”是指,一段代碼或者公開變數,在一個時刻只允許一個線程去訪問,其他的線程需要等待,直到改線程處理完畢並通知下一個等待的線程去處理。1、可以用“Lock”來提供代碼的互斥訪問:lock (一個類的樣本、靜態變數的類名){ // 代碼}2、可以用“Monitor”來提供變數的互斥訪問:int money;Monitor.Enter(money);//
Time of Update: 2018-12-04
昨天晚上看到劉江的blog又補充了好幾大段,今天早上又看到雲風的人肉trackback,果然還是這種話題引人關注。 雲風先是提了一下所謂C++帶來的思想包袱(文言文曰“心智包袱”)問題,然後重重地引用了Linus的話:“關鍵是設計”,其實他是在暗示:好的設計C同樣能做出來,不勞C++大駕;而C++一旦出面,就要讓人背上額外的思想包袱。 我明確地表個態,在系統級程式設計中,事實就是這樣的。
Time of Update: 2018-12-04
class customer{public: customer() { } ~customer() { }public: int c_id; char name[10]; char address[20]; int age; std::string sztest; };void init_DBT(DBT * key, DBT * data){ memset(key, 0, sizeof(DBT)); memset(data, 0, sizeof(DBT));}void CTestDBDlg:
Time of Update: 2018-12-04
淺談C/C++記憶體流失及其偵查工具2006.05.25轉載自:http://www.uml.org.cn/c%2B%2B/200605254.htm 對於一個c/c++程式員來說,記憶體流失是一個常見的也是令人頭疼的問題。已經有許多技術被研究出來以應對這個問題,比如Smart Pointer,Garbage Collection等。Smart Pointer技術比較成熟,STL中已經包含支援Smart
Time of Update: 2018-12-04
本文使用了Boost中有關Python的部分,並著重介紹如何用C++寫的函數或是類,並讓Python能調用。先看我們設計好的C++函數和類。#include <string>#include <windows.h>//定義一個函數void msgbox(const std::string& str){ MessageBox(0,str.c_str(),"msgbox",MB_OK);}//定義一個C++類class Hello{public: std:
Time of Update: 2018-12-04
1. 預設建構函式,賦值函數,預設複製建構函式ClassA a;預設建構函式a=b;賦值ClassA(const ClassA&
Time of Update: 2018-12-04
Dear all: result love(boy, girl) { if ( boy.有房() and boy.有車() ) { boy.set(nothing); return girl.嫁給(boy); } if ( girl.願意等() ) { while( ! (boy.賺錢 > 100,000 and girl.感情 > 8 ) ) { for ( day=1; day <=365; day++) {- if (
Time of Update: 2018-12-04
一 1c++物件建構函數: 建立一個對象分成兩個步驟,首先取得對象所需的記憶體,然後在該記憶體上執行建構函式。在建構函式構建該對象的時候,建構函式也分成兩步:先執行初始化(通過初始化列表),再執行建構函式的函數體。。。。。這意味著,如果在建構函式函數體內為成員變數執行賦值操作,顯然屬於浪費,初始化成員變數通過建構函式的初始化列表賦予成員變數,而不是在建構函式體內進行這些初始化,因為進入建構函式體時,這些成員變數已經初始化一次了 class Aclass {
Time of Update: 2018-12-04
1 標頭檔預定義 # ifndef __MY_TYPE_H__ #define __MY_TYPE_H__ ...........//omit #endif 前兩行是用來防止標頭檔被多次引用時重複定義而報錯。預定義的那個字元是一個唯一的標誌,它的命名規則為:寫成兩個底線加檔案名稱(檔案名稱的“ . ”用一個底線替換)加兩個底線的格式。這種宏定義是經常要用到的來控制碼是否被編譯的方法。2 volatile和idata關鍵字 volatile uint8
Time of Update: 2018-12-04
(隔段時間不看就會在實際使用中忘記掉---c語言數組、異或指標的使用),轉載一下,忘時供查詢 C語言處理數組的方式是它廣受歡迎的原因之一。C語言對數組的處理是非常有效,其原因有以下三點: 第一,除少數翻譯器出于謹慎會作一些繁瑣的規定外,C語言的數組下標是在一個很低的層次上處理的。但這個優點也有一個反作用,即在程式運行時你無法知道一個數組到底有多大,或者一個數組下標是否有效。ANSI/ISOC標準沒有對使用越界下標的行為作出定義,因此,一個越界下標有可能導致這樣幾種後果: (1)
Time of Update: 2018-12-04
//十進位轉二進位 Console.WriteLine(Convert.ToString(69, 2)); //十進位轉八進位 Console.WriteLine(Convert.ToString(69, 8)); //十進位轉十六進位 Console.WriteLine(Convert.ToString(69, 16)); //二進位轉十進位 Console.WriteLine(Convert.ToInt32(”100111101″, 2)); //八進位轉十進位
Time of Update: 2018-12-04
上文提到從v$Session查看串連數,發現使用串連池後莫名增加了MIN個串連(MIN為串連池的最小串連數)。但是實際上,v$session中看見的串連數是邏輯串連數,並非ORACLE的物理串連。ORACLE的會話與串連甚至可以不相關,允許存在沒有物理串連的會話。 因此,僅僅從v$session視圖看串連數是不準確的,至於從什麼地方可以看見用戶端與ORACLE的確切串連數。目前還沒找到。PRO*C的串連池特性,也只有通過效能測試來確定其有效性了。
Time of Update: 2018-12-04
1 字串分割string url = "[url]http://asdfsfd[/url][*]asdf[*]asdfsdf[*]";string[] sss = GetString(url,"[*]");foreach(string str in sss){Response.Write(str.ToString() +" ");}private string[] GetString(string str,string cutStr){char[] cutChar =
Time of Update: 2018-12-04
一、什麼是對齊,以及為什麼要對齊: 1. 現代電腦中記憶體空間都是按照byte劃分的,從理論上講似乎對任何類型的變數的訪問可以從任何地址開始,但實際情況是在訪問特定變數的時候經常在特定的記憶體位址訪問,這就需要各類型資料按照一定的規則在空間上排列,而不是順序的一個接一個的排放,這就是對齊。 2. 對齊的作用和原因:各個硬體平台對儲存空間的處理上有很大的不同。一些平台對某些特定類型的資料只能從某些特定地址開始存取。其他平台可能沒有這種情況,
Time of Update: 2018-12-04
《Qt5 compile with vs2008》.pro+++++++++++++++++++++++++++++++++++++++++++++#-------------------------------------------------## Project created by QtCreator 2012-03-15T09:57:33##-------------------------------------------------QT += declarative
Time of Update: 2018-12-04
特註:運行該程式需要設定VC6.0環境Project->Setting->C/C++->Category->Code Generation->Using Run-time library->Debug MultiThreaded#include <iostream>#include <list>#include <windows.h>#include <process.h>using namespace std;
Time of Update: 2018-12-04
4. 磁碟檔案的開啟和關閉 開啟 ofstream outfile; if(outfile.open("f1.data",ios::app)==0) // 開啟 cout<<"開啟失敗!"; …………………… outfile.close(); //關閉 5. 檔案寫入#include <fstream&
Time of Update: 2018-12-04
(點擊此處,接上篇)有時候,即使編譯器完全心甘情願地 inline 一個函數,它們還是會為這個 inline function 產生函數本體。例如,如果你的程式要持有一個 inline function 的地址,編譯器通常必然為它產生一個 outlined 函數本體。它們怎麼能拿得出一個指向根本不存在的函數的指標呢?再加上編譯器一般不會對通過函數指標的調用進行 inlining(內聯化)的事實,這就意味著,對一個 inline function