程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 51CTO專家門診:Boost程序庫的應用探討

51CTO專家門診:Boost程序庫的應用探討

編輯:C++入門知識

Boost被稱為“C++准標准庫”,含有許多高質量的工具,如正則表達式、字符串算法、智能指針、散列容器等,彌補了C++98標准庫的不足,可以構建出工業級強度的構件,代表了目前C++所能達到的最高技術高度。但Boost程序庫內容博大精深,又使用了大量的高級編程技巧,結構精致復雜,令不少程序員望而生畏。

本期門診特邀中央部委下屬軟件公司項目經理羅劍鋒先生,針對Boost程序庫的應用等問題給予解答,歡迎網友積極提問,與專家一起討論,,共同進步!

專家著作:《Boost程序庫完全開發指南》

本期門診鏈接:http://doctor.51cto.com/develop-214.html

本期專家: 

  
 羅劍鋒

Q:CHO堯子
羅老師: 您好

關於C++,我一直使用VS.NET 2005 用C#語言開發程序.最近我想轉做C++程序的開發.在VS.NET 2005新建項目的時候 有一個C++項目.因為VS.NET 這個集成開發環境,是基於.NET Framework的嘛.我想問的是我用VS.NET 2005編譯出來的C++程序是不是還得須要.NET Framework才可以運行呀!還要在網站後台數據庫中,不是用MD5加密的,如何能轉化和破解!

A:羅劍鋒

不用這麼客氣,我算不上是老師。

我沒有使用vs.net,一直使用vs2005裡的vc8,C++不需要.netFramework,它可以直接編譯成原生二進制代碼,無需運行環境,你只要不使用微軟自己的那套托管C++就可以了。

另一個問題md5不太明白,md5已經被攻克,但難度還是挺高的,具體的在網上查資料吧,我對破解沒有研究過,抱歉。

Q:leo0087

羅老師,您好!

我想知道C++與JAVA的區別和優勢在哪裡?

A:羅劍鋒

不用稱呼老師,直接叫我的網名chrono就可以了。

我對java不是特別熟悉,有說錯的地方還請見諒。

java是運行在jvm虛擬機上的,編譯為字節碼,而C++直接編譯成可執行的二進制程序,無需虛擬機。

java有垃圾回收機制,C++必須自己手動管理內存,但可以使用boost::shared_ptr、pool、ptr_container等庫來簡化這一工作。

java語言較C++有所簡化,不支持多重繼承和操作符重載,而C++則較龐大,有很多復雜的語法。但java後來也逐漸吸收了C++的很多特性,比如枚舉、模板等。

最重要的一個區別是java是一個工業標准而不是國際標准,其命運把持在sun/oracle手裡,而C++和C一樣都是國際標准,不受任何公司和個人的控制。

C++的優勢是功能強大,運行速度快,幾乎所有平台都提供C/C++支持,可以編寫實現任意功能的程序。缺點是支持庫缺乏,沒有java那樣大量的應用框架。但一旦掌握了C++,就一定會被它的強大功能和深刻的語言內涵所吸引。

Q:孫空空

chrono 您好

如何安裝C++程序庫Boost,如何編譯和安裝C++程序庫Boost1.40,詳細步驟請指點一二。辛苦了! 如何安裝C++程序庫Boost

A:羅劍鋒

直接解壓縮就可以,無需特別的安裝,需要設定頭文件的搜索路徑。

大多數boost庫無需編譯即可使用,其他庫如date_time、system)編譯可以使用bjam,也可以直接把源碼加入工程編譯,詳細的步驟可參考自帶文檔或者《Boost程序庫完全開發指南》。

Q:bingfeng

我使用BOOST中的path出現了以下問題:

“處未處理的異常:0xC0000005:讀取位置0x00000000時發生訪問沖突”

程序是一個win32控制台程序:

#include<boost/filesystem/path.hpp>
#include<iostream>
usingnamespaceboost::filesystem;
usingnamespacestd;
intmain(void)
{
try
{
boost::filesystem::pathsave_path( "c:\\a\\ ");
}
catch(std::exception&e)
{
  cerr< <e.what()< <endl;
}

return0;
}

異常時停止在boost::filesystem::pathsave_path( "c:\\a\\ ");

boost庫鏈接的是libboost_filesystem-vc80-mt.lib,“運行時庫”是MDd。

請問如何解決,萬分感謝!

A:羅劍鋒

我這裡測試沒有問題,使用的是mt方式,庫用的是嵌入工程編譯,boost1.43:

#define BOOST_SYSTEM_NO_LIB
#define BOOST_FILESYSTEM_NO_LIB
#include <boost/filesystem.hp>

可以試試catch system_error看看具體的錯誤信息,或者調試程序代碼。

Q:zhang45xiang

李老師

您好,關於這期的“Boost程序庫的應用探討” 真的不是很懂,前來捧場的!

關於c 我也讀過一點,但是沒有頭緒,一看到那些代碼就暈! 看來這些語言不好學啊!

A:羅劍鋒

學c暈可以改看python、ruby,比C/C++容易。

Q:rickyand

請問在VC2010中用UNICODE怎麼樣能添加字符串變量啊?我用_T或者L後面跟的不是字符串常量啊?謝謝,這個問題困擾我好久了,為了這個問題我現在還一直使用VC6.0呵呵謝謝昂

A:羅劍鋒

我在開發中很少使用unicode,因為做的都是很底層的東西。個人認為應該使用wchar_t,wstring等C++標准中寬字符類型,例如:

wstring ws = L"unicode";
wcout << ws << endl;

vc6已經太老了,不支持很多現代C++特性,而vc2010還不太穩定,可以試用vc8即vs2005。

Q:BZoooooo

關於C++的問題才接觸哈,現在正在學JAVA,這個慢慢來哈,來這學習樓主大大!

A:羅劍鋒

java語言本身較小,但外圍的庫和框架太多,c++則正好反了過來。

我個人還是喜歡c++,自由,不受sun/oracle的限制。

另外objective-c裡也可以使用c++,結合boost開發mac/iphone程序功能非常強大。

Q:Bill_Hoo

Chrono晚上好:

我現在是大二下期,因為自己特別喜歡C++語言,也喜歡軟件工程,已經決定用C++在軟件工程的路上踏實地走下去。

以下請教幾個問題:

1. 對於我的情況來說,boost庫在什麼階段接觸比較合適?換句話說,現階段有必要接觸boost麼?

2. boost庫與C++ STL是怎樣的關系呢?


3. 我本人對C++語言很著迷,雖然選定了語言,但是還沒有選定用這門語言從事哪個方向的開發,看老師從事c++十余年,希望得到方向上的一些建議。

4. 在已經熟悉C++主要語法和特性之後,進階階段需要學習些什麼?看些什麼書?


5. 也聽說過一個好的軟件工程師要對系統底層的知識有所把握,這種把握到底指什麼?希望有所針對。

最後感謝Chrono的無私幫助,謝謝^ ^

A:羅劍鋒

1. 學習boost首先要熟悉C++,特別是一些高級特性,比如名字空間、模板、異常,然後要熟悉STL和標准庫,它的現代C++編程風格影響了現今的所有C++程序員。

如果對stl有基本的了解,就可以看boost了。其實boost並不是太難,而且很多組件的用法相當簡單,能夠立即應用於實際工作,建議看《boost程序庫完全開發指南》,我個人認為它是面向初中級程序員的。

2. 在《boost程序庫完全開發指南》有詳細解答,簡單的說,boost是一個更好的STL,是STL的後繼者。

3. c++偏重於底層,缺少直接面向應用的開發框架,但它可以做任何事情,范圍很廣,覺得目前在ios系統上結合objective-c++做iphone應用很有錢途,笑。


4.《boost程序庫完全開發指南》附錄有推薦書目可參考,這裡列兩個最重要的《設計模式》gof,那些傻瓜、大話書不要看),《effective c++》。

5.系統底層跟具體的方向有關,比如windows、嵌入式系統、unix,看你是哪個平台下了。又或者是對C++的內部模型有深入了解,比如內存管理機制、對象模型等等。但這個見仁見智,不一定非要深入了解,隨著實踐的需要必然會有所了解,超前了解不一定有好處個人愚見)。

Q:zhang_san_san

您好,羅老師:

對於Boost,我知之甚少。我想了解的是它在嵌入式領域的應用。嵌入式系統一般不都是用C語言,或直接用匯編編寫,對於C++,還有標識模板庫STL)有沒有用到?

A:羅劍鋒

uclinux/ucos等os功能較弱,有的對C++支持不夠好,甚至根本不支持,這個時候就不能用stl和boost了。但有的嵌入式系統用的是 linux,可以支持c++,這樣就可以用stl和boost了,不過還要具體看系統手冊中關於C++編譯的說明,明確哪些支持哪些不支持。

Q:superpopb2b

既然是C++標准庫,有沒有集成到現在的主流C++編譯器的庫中,比如G++或者是VC++?還需不需要額外安裝呢?

此外,它什麼時候可以繼承到庫中呢?

A:羅劍鋒

boost是"准標准庫",實際上它還是一個第三方庫,因此沒有集成,以後也不會被集成。不過boost安裝很方便,集成與否意義不大。

Q:wawehi

不知道問啥問題, 我手上正好有你的這本boost指南(正版的), 支持你, 這本有點類似於手冊, 對boost不懂的可以拿出來翻翻, 希望能再出一本使用boost開發游戲服務器的指南, 各方面詳細說一些,然後將您的編程經驗傳承下來啊~~~~~~~~

支持你!!!

A:羅劍鋒

感謝支持。boost和stl一樣,提供的都是底層庫,開發服務器得用其他的架構吧,我不是這個領域的不好說,希望以後能與你合作。

Q:yf213
Chrono,您好!

剛剛接觸boost庫,對於boost自帶的庫應用起來沒有什麼問題,但是對於mpi庫,編譯生成了lib以後,總是出現鏈接出錯,找不到mpi中的相關的符號!參照網上一些網友給出的安裝和編譯指導也沒能解決。這個問題讓我很困擾,希望能得到您的幫助!

謝謝!

A:羅劍鋒

我沒有專門研究過mpi庫,剛才看了一下,因為我的主要工作平台是win,所以不能編譯mpich、openmpi等外部庫,也就不能試驗boost.mpi了,抱歉了。

建議可以采用嵌入工程編譯的方式,而不是動態鏈接,這樣可能會減少一些麻煩,比如:
#define BOOST_MPI_NO_LIB
#include <libs/mpi/src/xxxx.cpp>

------------------------------------------
下期201期)門診:萬兆銅纜的應用與測試
 
① 預告: 當前,萬兆銅纜已成為智能建築與數據中心被廣泛關注和應用的布線系統。而在網絡系統工程和布線的規劃、設計、施工,直至現場驗收的整個生命周期中,布線測 試技術都至關重要。對於企業用戶和測試單位來說,在驗收、檢測、維護、故障診斷等過程中,難免遇到各種各樣的棘手問題。

② 鏈接:http://doctor.51cto.com/develop-215.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved