effective C++ 條款 25:考慮寫出一個不拋出異常的swap函數

預設情況下swap動作可由標準程式庫提供的swap演算法完成:namespace std{     template<typename T>     void swap(T& a, T& b)     {         T temp(a);         a = b;         b = temp;     }

effective C++ 條款 55:讓自己熟悉boost

高品質,源碼開放、平台獨立、編譯器獨立的程式庫。 http://boost.org,它和c++標準委員會之間有著獨一無二的密切關係,並對委員會深具影響力。它以公開進行的同僚複審(public peer review)為基礎接納程式庫。boost對付的主題非常繁多,包括:字串與文本處理,容器,函數對象和進階編程,lambda,可以讓我們輕鬆的隨時隨地建立函數對象using namespace boost::lambda;                                       

effective C++ 條款 16:成對使用new和delete時要採用相同形式

當你使用new,有兩件事情發生。第一,記憶體被分配出來(通過名為operator

effective C++ 條款 12:複製對象時勿忘其每一個成分

copy建構函式和copy assignment操作符,我們稱他們為copying函數。這些“編譯器產生版”的行為:將被烤對象的所有成員變數都做一份拷貝。聲明自己的copying函數,void logCall(const std::string funcName); class Customer { public:     Customer(const Customer& rhs);     Customer& operator=(

effective C++ 條款 36:絕不重新定義繼承而來的non-virtual函數

class B { public:     void mf();     ... }; class D : public B {...};D x;如果一下行為:B* pB = &x;pB->mf();異於以下行為:D* pD = &x;pD->mf();你可能相當驚訝。兩者的行為確實應該相同,但是如果mf是個non-virtual函數而D定義有自己的mf版本:class D : public B { public:    

effective C++ 條款 26:儘可能延後變數定義式的出現時間

只要定義一個變數,而其類型帶有一個建構函式或解構函式, 那麼當程式的控制流程到達這個變數定義時,變承受構造成本;當變數離開範圍時,便承受析構成本。 //這個函數過早定義變數“encrypted” std::string encryptPassword(const std::string& password) { using namespace std; string encrypted; if(password.length() <

effective C++ 條款 54:讓自己熟悉包括TR1在內的標準程式庫

c++Standard——定義c++語言及其標準程式庫的規範,TR1詳細敘述了14個新組件,都放在std命名空間內c++98列入的c++標準程式庫有哪些主要成分:stl,覆蓋容器、迭代器、演算法、函數對象、各種容器適配器和函數對象適配器。Iostreams,覆蓋使用者自定緩衝功能,國際化I/o,以及預先定義的對象cin,cout,cerr和clog國際化支援,包括多地區能力。像wchar_t和wstring(由wchar_ts組成的strings)都對促進Unicode有所幫組。數值處理,包括複

effective C++ 條款 13:以對象管理資源

資源是,一旦用了,將來必須還給系統,除了記憶體常見的還有檔案描述符(file description)、互斥鎖、圖形介面中的筆刷、資料庫連接以及網路socket。考慮到異常、函數內多重回傳路徑、程式維護員軟體改動卻沒有理解隨之而來的衝擊,發現資源管理的特殊手段還不很充分夠用。假設一個各式各樣的投資類型繼承的一個root class Investment:class Investment {...};假設通過一個工廠函數供應我們某特定的Investment對象:Investment*

effective C++ 條款 11:在operator= 處理‘自我賦值’

假設建立一個class來儲存一個指標指向一塊兒動態分配的位元影像(bitmap)class Bitmap{...}; class Widget { public: protected: private:     Bitmap* pb; };這個operator=實現代碼錶面看上來合理, 但自我賦值出現時並不安全,也不具備異常安全性。Widget& Widget::operator=(const Widget&

effective C++ 條款 14:資源管理類中小心copying行為

並非所有的資源都是heap-based,對那種資源來講,auto_ptr和shared_ptr這樣的智能指標往往不適合作為資源掌管著。你可能需要自己建立自己的資源管理類。例如,處理類型為Mutex的互斥器對象,有lock和unlock兩函數可用。void lock(Mutex* pm); void unlock(Mutex* pm); class Lock{ public:     explicit Lock(Mutex* pm)        

effective C++ 條款 35:考慮virtual函數以外的其他選擇

假設你整在寫一個視頻遊戲軟體,由於不同的人物可能以不同的方式計算它們的健康指數,將healthValue聲明為virtual似乎再明白不過的做法:class GameCharacter { public:     virtual int healthValue()const;     ... };由於這個設計如此明顯,你可能沒有認真考慮其他替代方案。為了協助你跳脫物件導向設計路上的常軌,讓我們考慮其他一些解法:藉由Non-virtual interface手法實現Template

effective C++ 條款 15:在資源管理類中提供對原始資源的訪問

資源管理類避免直接處理資源,但是許多APIs直接涉及資源,所以應該提供返回原始資源的函數。tr1::shared_ptr和auto_ptr都提供一個get成員函數,用來執行顯式轉換,返回智能指標內部的原始指標(的複件)。std::tr1::shared_ptr<Investment> pInv(createInvestment());int daysHeld(const Investment* pi);  //返回投資的天數int days = daysHeld(pInv);   /

effective C++ 條款 45:運用成員函數模板接受所有相容類型

所謂智能指標是“行為像指標”的對象,並提供指標沒有的機能。真實指標做的很好的一件事是,支援隱式轉換。Derived class指標可以隱式轉換為base class指標。指向non-const的對象的指標可以轉換為指向const對象。下面是發生於三層繼承體系的一些轉換:class Top{...}; class Middle: public Top{...}; class Bottom: public Middle{...}; Top* pt1 = new

C++中解構函式為什麼要是虛函數

////////////////////////////////////////////////////////Example 1 ////////////////////////////////////////////////////// #include <iostream.h> class CFunction { public: CFunction() { data = new char[64]; }; ~CFunction() { delete [] data; };

effective C++ 條款 2:盡量用const和inline而不用#define

effective C++ 條款 2:盡量用const和inline而不用#define盡量用編譯器而不用預先處理#define ASPECT_RATIO 1.653 它會被預先處理程式去掉,於是ASPECT_RATIO不會加入到符號列表中定義指標常量時會有點不同 要寫兩次const:const char * const authorName = "Scott Meyers";最好用const std::string authorName("Scott

c++類中成員的構造順序

先是父類各成員的初始化, 各成員的預設建構函式, 再調用父類的建構函式,然後是各成員的初始化, 各成員的預設建構函式,然後是自己的建構函式。class a{public:    a()    {        cout << "construct a" << endl;    }};class combinebase{public:    combinebase()    {        cout << "construct combinebase"

fzu 1752 A^B mod C fzu 1650 AB mod C

A*B mod C的快速計算方法  2009-07-28 17:11:18|  分類: 經典演算法 |  標籤: |字型大小大中小 訂閱方法一: 大家都能想到,計算A*B的值,然後在計算A*B mod

hrbeu 1318 X^a mod b=c 二次剩餘

 模素數p的原根g的優美體現在每個模p的非零數以g的冪次出現。所以,對任何數1 <= a < p,我們可選擇冪         g,g^2,g^2,```````,g^(p-2),g^(p-1)中恰好一個與a模p同餘。相應的指數被稱為以g為底的a模p的指標。假設p與g已給定,則記指標為I(a)。以下以2模13的所有冪的形式:I          1   2  3    4   5   6   7   8    9  10   11 122^I(mod 13)   2  4  8  3

c/c++標頭檔使用對比

 在VC++4.1以前的版本中,使用的庫稱為運行庫(run-time library),標頭檔名都是“*.h”。從VC++4.2版本開始使用標準C++庫(standard C++ library),標準C++庫是符合ANSI標準的,它使你的程式可以在不同的編譯系統和平台間移植。新的標頭檔名不再有“.h”副檔名,不過標準C++庫仍然保留了18個帶有“.h”副檔名的C標頭檔。  

C++中主函數

很多人甚至市面上的一些書籍,都使用了void main( ) ,其實這是錯誤的。C/C++ 中從來沒有定義過void main( ) 。C++ 之父 Bjarne Stroustrup 在他的首頁上的 FAQ 中明確地寫著 The definition void main( ) { /* ... */ } is not and never has been C++, nor has it even been C. ( void main( ) 從來就不存在於 C++ 或者 C

總頁數: 4314 1 .... 841 842 843 844 845 .... 4314 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.