2016-11-02 54 views
1

這是一個簡單的程序,我的問題是要知道爲什麼強制使用名稱空間std?爲什麼不使用這個程序不遵守?爲什麼在C++語言中使用命名空間標準是必須的?

#include <iostream> 

using namespace std; 

int main(){ 

    int a , b , c , d; 

    cout << "Enter First Value" <<endl; 
    cin >> a; 

    cout << "Enter Second Value" <<endl; 
    cin >> b; 

    cout << "Enter 1 to add values" << endl << "Enter 2 to subtract values" <<endl <<"Enter 3 to multiply values" <<endl ; 
    cin >> c; 

    if (c == 1){  
     d = a + b; 
     cout << "After Adding your answer is " << d << endl; 
    } 

    else if (c == 2){ 
     d = a - b; 
     cout << "After Subtracting your answer is " << d << endl; 
    } 

    else if (c == 3){ 
     d = a * b; 
     cout << "After Multiplication your answer is " << d << endl; 
    } 
    else{ 
     cout << "You Enter Invalid operation to perform"; 
    } 

    system("pause"); //buitin function to stop the comand screen. 

    return 0; 
} 
+6

它實際上是強制性的對面。爲了簡潔起見,它主要用於C++書籍。但在現實世界中,拉動整個'命名空間std'會導致嚴重的頭痛。 – 101010

+0

*爲什麼使用namespace std強制使用*它不是。 – Borgleader

+0

不好的做法,使用它:http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice –

回答

8

你不應該(但可以)使用

using namespace std; 

您可以在每個對象之前使用std::從該命名空間來代替,例如:

std::cout << "Enter First Value" << std::endl; 
std::cin >> a; 
10

爲什麼是強制性的,以使用命名空間標準?

不是。

其實I would recommend against it

但是,如果你不寫using namespace std,那麼你需要完全符合條件,標準庫中使用的名稱。這意味着代替stringstd::string而不是cout,等等。

如果您的書尚未告訴您,那麼您需要a better book

+6

請注意,您可以在函數內部放置'using namespace std;',在某些情況下這可能更容易接受。 – Asu

0

沒有名稱空間,您應該關心您的自定義名稱是否與包含的名稱衝突。你的代碼中的using namespace部分是一個語法甜味劑:你不必爲所有事件放置std::作用域。您的代碼可能更具可讀性,但您的無範圍名稱的範圍會縮小。考慮下面的例子:

#include <cstdio> 
#include <iostream> 

int main() 
{ 
    char endl[] = "xy"; 
    std::cout << "[" << std::endl << "]"; 
    std::cout << "[" << endl << "]"; 
    return 0; 
} 

如果你想使用的名稱endl用於自定義的,你不能有using namespace指令,否則會變得模糊。

+0

這實際上比語法甜味劑稍微多一點;它開闢了可能不存在的潛在含糊之處。 –

+0

_「如果您想使用名稱endl用於自定義目的...」_不是真的;你會寫':: endl'(或者,最好是'myownnamespace :: endl'(或者完全避免這個名字!))。 –

1

一概而論,using namespace因爲它不受控制進口一切從名字空間到你不推薦。

對於非常小的工具或本地範圍,這可能沒有問題,但不應在任何情況下在您提供的頭文件中作爲接口。

可能是好的一個方便的事情是將一些經常使用的標識符導入到您的(cpp文件全局 - 不是標頭)命名空間通過。

using std::cout; 
using std::cin; 
using std::endl; 

還要注意「輕種族在軌道」的鏈接

相關問題