C++標準庫頭文件正確用法
C++程序員都知道,寫代碼前總要先包含各種頭文件。但很多人對頭文件的使用規(guī)則并不完全了解,有時候程序能跑,有時候又莫名其妙地報錯。這篇文章就來說說C++標準庫頭文件的正確用法。
基本包含規(guī)則
包含標準頭文件最直接的方式就是用#include指令:
#include <iostream> // 包含I/O相關(guān)功能 #include <vector> // 包含vector容器 #include <string> // 包含字符串類
這些標準頭文件有幾個特點:可以按任意順序包含,可以重復(fù)包含(不會出錯),兩個或多個頭文件定義相同的宏或類型也沒問題。但有兩點需要注意:不要在聲明中間包含頭文件,包含頭文件前不要定義與關(guān)鍵字同名的宏。
C++庫頭文件會自動包含它需要的其他頭文件。比如你包含了<vector>,它可能會自動包含一些內(nèi)部需要的頭文件。不過最好還是顯式包含你用到的所有頭文件,這樣代碼更清晰,也避免依賴關(guān)系改變導(dǎo)致的問題。

C++頭文件依賴可視化工具:https://github.com/goldsborough/ig
命名空間的處理
C++標準庫的所有名字都定義在std命名空間中,除了operator delete和operator new。所以你需要寫std::cin而不是直接寫cin:
#include <iostream>
int main() {
std::cout << "Hello World" << std::endl;
return 0;
}宏名稱不受命名空間限制,所以像__STD_COMPLEX這樣的宏直接使用即可。
C頭文件 vs C++頭文件
這里容易搞混的是C標準頭文件的處理。C++標準要求C標準頭文件把所有外部名稱先聲明在std命名空間中,然后再用using聲明提升到全局命名空間。但實際情況因編譯環(huán)境而異。
想要最大的可移植性,記住兩個規(guī)則:
如果你想確保某個傳統(tǒng)上在<stdlib.h>中聲明的外部名稱在std命名空間中,就包含<cstdlib>:
#include <cstdlib>
int main() {
std::abort(); // 確保在std命名空間中
return 0;
}如果你想確保在全局命名空間中,就直接包含<stdlib.h>:
#include <stdlib.h>
int main() {
abort(); // 直接使用,無需std::前綴
return 0;
}C++參考文檔:https://cppreference.com
簡化命名空間使用
如果覺得每次都寫std::太麻煩,可以用using namespace std;:
#include <iostream>
#include <vector>
using namespace std;
int main() {
cout << "現(xiàn)在可以直接使用cout了" << endl;
vector<int> nums = {1, 2, 3, 4, 5};
return 0;
}這樣做會把所有庫名稱引入當(dāng)前命名空間。如果在所有include指令后立即寫這個聲明,名稱就被提升到全局命名空間,后續(xù)代碼就可以忽略命名空間問題了。
實際編程建議
在實際編程中,頭文件的選擇很重要。如果你的項目比較小,用using namespace std;沒什么問題。但在大型項目中,最好避免污染全局命名空間,明確指定std::前綴或者只引入需要的特定名稱:
#include <iostream>
#include <string>
using std::cout;
using std::endl;
using std::string;
int main() {
string message = "這樣更清晰";
cout << message << endl;
return 0;
}記住一點:除非特別說明,不要在std命名空間或其嵌套命名空間中定義自己的名稱。這可能導(dǎo)致未定義行為。
Microsoft C++文檔:https://docs.microsoft.com/cpp
到此這篇關(guān)于C++標準庫頭文件使用指南的文章就介紹到這了,更多相關(guān)C++標準庫頭文件使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言詳細分析貪心策略中最小生成樹的Prime算法設(shè)計與實現(xiàn)
最小生成樹的問題還是比較熱門的,最經(jīng)典的莫過于Prime算法和Kruskal算法了,這篇博文我會詳細講解Prime算法的設(shè)計思想與具體代碼的實現(xiàn),不要求數(shù)據(jù)結(jié)構(gòu)學(xué)的有多好,只要跟著我的思路來,一步一步的分析,調(diào)試,終能成就自己,那就讓我們開始吧2022-05-05
C++入門教程之內(nèi)聯(lián)函數(shù)與extern?"C"詳解
C++中的內(nèi)聯(lián)函數(shù)與靜態(tài)函數(shù)靜態(tài)函數(shù)靜態(tài)函數(shù)的定義靜態(tài)函數(shù)又稱為內(nèi)部函數(shù),下面這篇文章主要給大家介紹了關(guān)于C++入門教程之內(nèi)聯(lián)函數(shù)與extern?"C"的相關(guān)資料,需要的朋友可以參考下2023-01-01
c++?創(chuàng)建型設(shè)計模式工廠方法Factory?Method示例詳解
這篇文章主要為大家介紹了c++?創(chuàng)建型設(shè)計模式工廠方法Factory?Method示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09
C++11/14 線程的創(chuàng)建與分離的實現(xiàn)
這篇文章主要介紹了C++11/14 線程的創(chuàng)建與分離的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01

