我是編程初學者,我經常看到很多程序使用前綴std
,如果他們使用的任何std
功能,如std::cout
,std::cin
等我想知道它是什麼目的?這只是一種好的編程方式,還是更多的呢?它對編譯器有什麼區別,或者它是可讀性還是什麼?謝謝。什麼是指定「STD」前綴的需要?
2
A
回答
10
的STL的類型和功能在名爲std
的命名空間中定義。該std::
前綴用於使用的類型,而完全包括std
命名空間。
選項1(使用前綴)
#include <iostream>
void Example() {
std::cout << "Hello World" << std::endl;
}
選項#2(使用的命名空間)
#include <iostream>
using namespace std;
void Example() {
cout << "Hello World" << endl;
}
選項#3(使用單獨的類型)
#include <iostream>
using std::cout;
using std::endl;
void Example() {
cout << "Hello World" << endl;
}
注:有一種包括整個C++命名空間(選項#2)以外的不具有前綴每種類型/方法其他含義std::
文件(特別是如果一個報頭內完成)。許多C++程序員避免這種做法,更喜歡#1或#3。
0
12
C++有命名空間的概念。
namespace foo {
int bar();
}
namespace baz {
int bar();
}
這兩個函數可以在沒有衝突的情況下共存,因爲它們位於不同的名稱空間中。
大部分的標準庫函數和類生活在「STD」命名空間。要訪問例如COUT,你需要做以下操作之一,按優先順序:
std::cout << 1;
using std::cout; cout << 1;
using namespace std; cout << 1;
你應該避免using
理由證明上述foo和巴茲命名空間。如果您有任何using namespace foo; using namespace baz;
試圖調用bar()
將是不明確的。使用命名空間前綴是明確和詳細的,有良好的習慣。
1
這是一個C++特徵稱爲名稱空間:
namespace foo {
void a();
}
// ...
foo::a();
// or:
using namespace foo;
a(); // only works if there is only one definition of `a` in both `foo` and global scope!
的優點是,可以存在名爲a
多種功能 - 只要它們是不同的命名空間中的,它們可以被明確地使用(即foo::a()
,another_namespace::a()
)。整個C++標準庫位於std
用於這一目的。
使用using namespace std;
避免前綴,如果你能忍受的缺點(名稱衝突,不太清楚其中的功能所屬的...)。
2
沒有人在他們的答案,一個using namespace foo
語句可以在函數體內放提到的,從而減少了在其他範圍內的命名空間的污染。
例如:
// This scope not affected by using namespace statement below.
void printRecord(...)
{
using namespace std;
// Frequent use of std::cout, io manipulators, etc...
// Constantly prefixing with std:: would be tedious here.
}
class Foo
{
// This scope not affected by using namespace statement above.
};
int main()
{
// This scope not affected either.
}
你甚至可以把一個using namespace foo
聲明局部範圍(對花括號)內。
相關問題
- 1. 爲什麼for_each沒有std ::前綴
- 2. 沒有定義前綴的XML文檔的前綴是什麼?
- 3. 爲什麼需要std :: minmax_element?
- 4. 什麼是註冊前綴?
- 5. 什麼是表格前綴?
- 6. 什麼是http標題,什麼時候需要指定它們
- 7. 爲什麼TypeScript需要「this」。 「內部」模塊的前綴?
- 8. 爲什麼Spring Security的RoleVoter需要一個前綴?
- 9. 爲什麼我需要前綴「批:」在我的春天豆
- 10. 爲什麼我需要XMLSchema中的前綴xsi:schemaLocation?
- 11. 爲什麼我們需要綁定std :: cin和std :: cout?
- 12. Swift:Xib文件需要前綴?
- 13. 爲什麼VARCHAR需要長度指定?
- 14. 指定MySQL的表前綴
- 15. 爲什麼Ionic在URL中需要「/ tab /」前綴?
- 16. 爲什麼當我們需要添加android:前綴風格?
- 17. XML名稱空間,它們爲什麼需要前綴?
- 18. 爲什麼Android文檔說意圖額外需要包前綴
- 19. 爲什麼我需要用out或ref前綴參數?
- 20. 爲什麼我在這裏需要一個「bean:」前綴?
- 21. 爲什麼android需要showAsAction =「always」以別名爲前綴?
- 22. 我們什麼時候需要用「靜態」前綴代表?
- 23. 在WCF app.config中,爲什麼基址需要前綴http://或net.tcp?
- 24. 爲什麼我需要用x:前綴XML元素?
- 25. 什麼CSS3功能仍然需要供應商前綴?
- 26. 爲什麼需要數字後綴?
- 27. 爲什麼前綴返回沒有特定前綴的文檔?
- 28. $(前綴)/ etc/gitconfig上的$(前綴)是什麼?
- 29. Python字典鍵/帶前綴的值 - 前綴是什麼?
- 30. 爲什麼std :: search需要轉發iters
因爲你的程序將無法不把它編譯? – 2011-03-09 00:03:54
另見:http://stackoverflow.com/questions/2218140/what-requires-me-to-declare-using-namespace-std – 2011-03-09 00:05:20