我在我的代碼中使用std(using namespace std
)(我知道它不太好&應該避免)然後我想知道哪些名稱可用用於變量或函數,並已被佔用,所以我搜索了std變量列表&函數,但我沒有找到它。如何檢查std中是否存在變量或函數?(在C++中)
PS。我的代碼實際上是作業,所以沒有擴大的夢想,也因此它是一項功課我期望使用std(:|)(即使我不是我只是好奇的答案)。所以我的問題是什麼是現有的 funcs 現在。
我在我的代碼中使用std(using namespace std
)(我知道它不太好&應該避免)然後我想知道哪些名稱可用用於變量或函數,並已被佔用,所以我搜索了std變量列表&函數,但我沒有找到它。如何檢查std中是否存在變量或函數?(在C++中)
PS。我的代碼實際上是作業,所以沒有擴大的夢想,也因此它是一項功課我期望使用std(:|)(即使我不是我只是好奇的答案)。所以我的問題是什麼是現有的 funcs 現在。
std
內部沒有確切的名稱列表 - 它始終可以擴展,並且完全是爲此目的而創建的。因此,一勞永逸地停止命名空間using
。
換句話說,C++標準規定了什麼名字有在那裏,但絕不會限制設置爲那些規定的總體名稱。實現通常會將很多其他幫助函數或類別放入此名稱空間中。
我的代碼實際上是一個家庭作業,所以沒有擴大的夢想,也因此它是一個家庭作業,我有點期待使用std(:|)。所以我的問題是現在在std中存在的變量和funcs是什麼。 – Bat
實際上真的可以將非標準庫名稱放在'std'中(除了以'_'或'__開頭的那些?) – juanchopanza
@Bat,不需要你這樣做。 – SergeyA
正如其他人建議的,停止using namespace std
- 這是不好的的做法。
我也建議你停止using
任何命名空間。通過這種方式,你的代碼讀得更好,避免了影響事件和命名衝突,最重要的是,你總是負責你的代碼庫:你知道你使用的東西來自哪裏,以及它們更廣泛的範圍/目的可能是什麼。這可以使您的代碼更易於維護:例如,更容易查看哪些頭未使用。什麼樣的功能只是輔助/內部等
這主要是一個品味的問題,但我會進一步建議你自己使用命名空間或詳細的描述性名稱(至少對於那些沒有範圍很小)。所有當代IDE都提供自動完成功能,因此您甚至不必再輸入一遍。在我的代碼我使用的東西,如:
bool has_the_loader_finished;
bool should_the_program_quit;
void helper::setup::setup_animation();
所有的時間。這樣一個。我的代碼中並不需要太多評論,大部分內容都是不言自明的,因此我只爲特殊的事情和b提供意見。我敢肯定,不會有名字衝突和c。我沒有花時間去調試/重構代碼,我已經不記得是什麼東西,如
int i;
bool flag;
void setup();
立場..
當然也有情況using
是直觀的,如:
using std::placeholders
ExampleFunction f = std::bind(&Object::hello, &instance,_1); // instead of std::placeholders::_1
using namespace std::chrono_literals;
auto halfmin = 30s; //instead of std::chrono_literals::30s
using ms = std::chrono::milliseconds; // this is an alias basically
不過,好的做法是永遠是a。限制使用您計劃使用的特定事物,例如:using std::placeholders
而不是using std
b。使用別名或typedefs和c。 儘可能限制using
(和typedefs /別名)的範圍,例如:
int someFunction() {
using namespace std;
// no more than a 20-30 lines of code here
}
或
// someSmallFile.cpp
using namespace std; // this is valid in the body of this file only
最後,從來沒有在頭文件使用using namespace
。這將會把這個命名空間的內部暴露給包含該文件的所有翻譯單元,並且沒有你的客戶必然知道它...
這是一些非常好的建議 – rlam12
在標準命名空間中使用標準東西的目的是讓你沒有擔心它。如果你不像'use namespace std;'那樣做愚蠢的事情,你不必擔心它。 –
你錯在認爲你應該這樣做。 – SergeyA
@SergeyA不,不,我向你保證這不是一個錯誤,即使它是我只是好奇它。 – Bat