每次在用
using namespace std;
都不知道意義為何, 最近重新開始看C++, 來看看幾乎每個程式開頭都會使用的程式碼
C++ Standard Template Library (STL)
命名空間
在大型協作的程式碼中, 為了避免混淆的同名問題(例如在a.cpp有Basic的class, b.cpp也有叫Basic的class), 這時候使用namespace就可以避免這個問題的發生
可以看一下下面的例子
namespace first_space{
void func(){
cout << "Inside first_space" << endl;
}
}
// 第二個命名空間
namespace second_space{
void func(){
cout << "Inside second_space" << endl;
}
}
int main ()
{
// 調用第一個命名空間中的函數
first_space::func();
// 調用第二個命名空間中的函數
second_space::func();
return 0;
}
可以看到在不同的namespace下有同樣的func, 有不同的意義, 所以這時候我們會在func外面包上一層namespace, 等於限制其使用範圍, 避免compiler混淆, 使用方式是在前面加上namespace前綴以及::
這點跟class實體定義function的時候很像
所以using namespace std
的std就是一種命名空間, 用來定義STL裡面的函示與變數以及類別, 如果不使用using namespace std
, 就必須在每個function前面加上std::
, 像是
#include <iostream>
int main()
{
std::cout << "Hello World!\n";
}
我們會在C++程式開頭看到, 總是會使用基本函式庫, 透過using namespace可以節省每次key 前綴的功夫, 所以我們應該濫用using namespace嗎?
using namespace 使用時機
其實這樣反而會違背了設計namespace的初衷, 因為使用namespace就是為了防止衝突用的, 如果一昧的為了方便使用namespace, 就會導致命名又發生衝突, 所以一般來說如果連std裡面的函式都不常使用到, 建議還是加上前綴的方式使用該命名空間的物件是比較符合namespace的設計
如果只使用到該namespace某些function, 甚至可以直接using該function, 而不是把整個命名空間都using
using std::count;
count << "Hello, World!" << endl;
使用namespace當作別名縮短
假設某個命名空間很長, 我們可以透過 namespace 別名 = 空間名
例如下面的方式, 就可以縮短命名空間, 有點類似於python的import pandas as pd
namespace my_interface_space
{
namespace abc = a_big_namespace;
struct MyClass
{
void fn(abc::testType tt) {
abc::test(tt);
}
};
}
namespcae a = my_interface_space;
如果喜歡文章, 不妨按下喜歡訂閱支持
如果真的想支持我進行創作與實踐計畫, 也可以進行打賞
BTC (BTC) : 1LFRBqvWR9GGizBzoFddkb5xRpAzKRVoDC
BTC (BSC) : 0xe1cda3eb778d1751af17feac796a4bbe4dbca815
BTC (ERC20) : 0xe1cda3eb778d1751af17feac796a4bbe4dbca815
USDT (TRC20) : TT7wgKuYoHwfRy3vCr38Qy3gnS3JJ1aKvn
如果想使用幣安, 可以使用我的推薦連結可以節省手續費10%
或使用推薦碼 : A5YRMD2T