2016-11-02 4 views
1

Это простая программа, и мой вопрос заключается в том, чтобы узнать, почему она обязательна для использования с использованием пространства имен std? почему программа не выполняется без использования этого?Почему это обязательное использование с использованием пространства имен 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

* Почему это обязательное использование с использованием пространства имен 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

почему обязательно использовать с использованием пространства имен std?

Это не так.

Фактически, I would recommend against it.

Однако, если вы не пишете using namespace std, вам необходимо полностью квалифицировать имена, которые вы используете в стандартной библиотеке. Это означает, что std::string вместо string, std::cout вместо cout и т. Д.

Если ваша книга еще не сообщила об этом, тогда вам понадобится a better book.

+6

Обратите внимание, что вы можете поместить 'using namespace std;' внутри функции, что может быть более приемлемым в некоторых случаях. – Asu

0

Без пространств имен вам следует заботиться о том, конфликтует ли ваше пользовательское имя с включенными. Часть вашего кода - это синтаксический подсластитель: вам не нужно размещать области 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 file global - not header) через.

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

отметить также «легковесность Гонки в Orbit» 's ссылку