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

C++頭文件依賴可視化工具:https://github.com/goldsborough/ig
命名空間的處理
C++標(biāo)準(zhǔn)庫的所有名字都定義在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標(biāo)準(zhǔn)頭文件的處理。C++標(biāo)準(zhǔn)要求C標(biāo)準(zhǔn)頭文件把所有外部名稱先聲明在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++標(biāo)準(zhǔn)庫頭文件使用指南的文章就介紹到這了,更多相關(guān)C++標(biāo)準(zhǔn)庫頭文件使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++控制臺強(qiáng)化如何實現(xiàn)一定界面效果(簡潔版)
這篇文章主要介紹了C++控制臺強(qiáng)化如何實現(xiàn)一定界面效果(簡潔版),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
C++實現(xiàn)查找中位數(shù)的O(N)算法和Kmin算法
這篇文章主要介紹了C++實現(xiàn)查找中位數(shù)的O(N)算法和Kmin算法,對于C++程序算法設(shè)計有一定的借鑒價值,需要的朋友可以參考下2014-09-09
詳解C語言整數(shù)和浮點數(shù)在內(nèi)存中的存儲
這篇文章主要介紹了C語言整數(shù)和浮點數(shù)在內(nèi)存中是如何存儲的,文中有詳細(xì)的代碼示例供大家參考,對大家了解學(xué)習(xí)C語言整數(shù)和浮點數(shù)在內(nèi)存中的存儲有一定的幫助,需要的朋友可以參考下2024-03-03
C語言數(shù)據(jù)結(jié)構(gòu)之雙鏈表&循環(huán)鏈表&靜態(tài)鏈表詳解
這篇文章主要為大家詳細(xì)介紹了C語言數(shù)據(jù)結(jié)構(gòu)中雙鏈表&循環(huán)鏈表&靜態(tài)鏈表的原理與使用,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-09-09
C++ new/delete相關(guān)知識點詳細(xì)解析
C語言用一堆標(biāo)準(zhǔn)庫函數(shù)malloc和free在自由存儲區(qū)中分配存儲空間,而C++則用new和delete表達(dá)式實現(xiàn)相同的功能2013-09-09
用C++實現(xiàn)strcpy(),返回一個char*類型的深入分析
本篇文章是對用C++實現(xiàn)strcpy(),返回一個char*類型進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C語言鏈表實現(xiàn)學(xué)生信息管理系統(tǒng)程序設(shè)計
這篇文章主要為大家詳細(xì)介紹了C語言鏈表實現(xiàn)學(xué)生信息管理系統(tǒng)程序設(shè)計,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-07-07

