爲什麼使用向量類我應該編寫名稱空間說明符std::vector
但std::find
函數我可以省略std::
?有什麼不同?兩者都是在std
命名空間中定義的,對嗎?C++:類和函數的名稱空間說明符
回答
爲什麼使用Vector類我應該寫名字空間說明符的std ::向量但對於標準::發現功能我可以省略std ::?
一般情況下,這是不正確的。
有什麼區別。兩者都是在std命名空間中定義的,對嗎?
是的,並且在原則上沒有什麼區別。每款C++ 11標準的17.6.1.1/2:
所有圖書館的實體,除了宏,新的運營商和operator delete的命名空間
std
或命名空間的嵌套命名std
內內定義。 [...]
但是,你必須記住,異常是由Argument-Dependent Lookup規則允許:感謝這個查詢技術,它是沒有必要明確指定一個函數的命名空間,因爲名稱將在您提供給該函數的參數的命名空間中查找。
因此,如果功能發生在相同的命名空間的任何參數來定義,它將由編譯器發現,儘管它的名字不與空間限定它屬於:
namespace N
{
struct X { };
void foo(X) { }
}
int main()
{
N::X x;
foo(x); // OK
}
因此,如果您正在調用std::find()
一些論點是在std
命名空間中定義的類型的情況下,你會不會需要調用資格find()
與std::
。例如:
#include <vector>
#include <algorithm>
#include <iostream>
int main()
{
std::vector<int> v { 1, 2, 3 };
auto i = find(v.begin(), v.end(), 2); // ADL applies if the result of
// v.begin() and v.end() is an
// iterator whose type is defined
// in the std namespace!
std::cout << *i;
}
顯然,這不能適用於接受沒有參數的函數。在這種情況下,名稱空間限定始終是必要的,當然,除非調用的一點是,命名空間中(雖然你不能任何添加到std
命名空間,從std
命名一些模板可以專門)。
然後afther你不需要使用所有的時間STD字 但在實際所有的對象都是這樣的std ::法院給std :: cin
STD是C++
soorry,我的英語需要校正的基本LIBRAIRIE之一;)
這取決於您如何撥打std::find
...例如,如果你從std容器傳遞了一些迭代器,這個函數將被ADL找到,否則你必須添加std::
來調用它。
由於某些原因,STL選擇在全局名稱空間中公開許多算法(in)。這就是爲什麼你可以寫查找(...)或變換(...)。載體未曝光,因此您必須執行std::vector<>()
。或者您可以在文件頂部使用std::vector;
這是不正確的。從C++標準(17.6.1.1/2)開始:「*除宏,運算符new和運算符delete之外的所有庫實體都在命名空間std中定義或名稱空間中嵌套命名空間std * – 2013-02-23 21:19:51
- 1. 函數名稱的全局名稱空間說明符用typedef正確解析?
- 2. C++類的聲明和命名空間
- 3. 沒有在名稱空間外聲明的類體的C++類
- 4. 函數查找和名稱空間
- 5. XSLT函數和名稱空間
- 6. C++/CLI - 名稱空間和類的模糊符號
- 7. MSXML C++聲明默認名稱空間
- 8. 在xaml中聲明類名稱空間
- 9. phpdoc數據類型和名稱空間
- 10. 如何在C中實現在C++名稱空間中聲明的函數?
- 11. C++名稱空間別名和前向聲明
- 12. C# - 名稱空間中的類型聲明
- 13. c#將名稱空間的聲明添加到所有類
- 14. Javascript名稱空間聲明
- 15. 一個類中的C#名稱空間
- 16. 命名空間和類名稱準則
- 17. 使用函數原型的Javascript名稱空間聲明
- 18. 什麼是嵌套名稱說明符?
- 19. 訪問說明符和虛函數
- 20. C++線程函數說明
- 21. 獲取函數的名稱空間
- 22. 名稱空間中的函數
- 23. 參考和類的名稱空間
- 24. C++重構爲所有類和函數添加一個名稱空間?
- 25. 是否在名稱空間std下聲明瞭C++標準庫中的每個類,對象和函數?
- 26. 目標C中名稱空間C++類的前向聲明Objective C
- 27. 在C++中預期的嵌套名稱說明符錯誤
- 28. 將模塊函數聲明覆制到全局名稱空間
- 29. 使用其他名稱空間內的名稱空間的函數
- 30. 私有類函數與未命名名稱空間中的函數
這裏的內容是什麼?示例源代碼? – Cornstalks 2013-02-23 21:07:19