Почему обязательно использовать пространство имен std в новых IDE, тогда как программы, написанные на Turbo C++/Borland C++, не требуют пространства имен std?

Почему обязательно использовать namespace std в новых компиляторах, тогда как программы, написанные на Turbo C++/Borland C++, не требуют пространства имен std?

Это работает в старых компиляторах

#include <iostream.h>

int main () {
   cout << "Hello Programmers";

   return 0;
}

но мы должны написать приведенную ниже программу в новых компиляторах вместо приведенной выше, так как приведенные выше программы не работают в новых компиляторах.

#include <iostream>
using namespace std;

int main () {
   cout << "Hello Programmers";

   return 0;
}

person Kundan    schedule 23.08.2019    source источник
comment
stackoverflow.com/ вопросы/1452721/   -  person melpomene    schedule 23.08.2019
comment
Turbo C++ — это древняя история. Его нельзя использовать для написания современного кода C++. Вам нужно переключиться на более современный компилятор C++.   -  person Sam Varshavchik    schedule 23.08.2019
comment
Рассмотрите GCC или clang для linux/bsd/macOS, MinGW для Windows (или, если вы настаиваете, MSVC).   -  person Aconcagua    schedule 23.08.2019


Ответы (3)


Это потому, что turbo-С++ был выпущен еще до того, как был выпущен какой-либо стандарт С++, и они не вводили пространство имен std.

С тех пор он никогда не обновлялся.

Также не обязательно использовать оператор using namespace std;, но скорее не рекомендуется< /а>.

Код должен быть:

#include <iostream>

int main () {
   std::cout << "Hello Programmers";
}

or

#include <iostream>
int main () {
   using std::cout;    
   cout << "Hello Programmers";
}

Также вопросы ИМО о турбо-С++ на этот раз совершенно бесполезны. Он устарел и не имеет ничего общего с современным C++.
Если ваши профессора/преподаватели заставляют вас использовать его1, скажите им, что они делают это неправильно, и не учите C++. в любом случае.


1)Я знаю, что это распространено в индийских школах, но это просто плохая практика и не имеет здравого смысла.
Может быть, они хотят, чтобы вы чему-то научили с нуля, потому что turbo-C++ не поддерживает такие контейнеры, как std::vector или подобные.
Но я по-прежнему считаю, что это неправильный подход, потому что ручное управление памятью — это продвинутая штука, и ее не следует использовать, чтобы сбить с толку новичков. .

person πάντα ῥεῖ    schedule 23.08.2019

Возможно, я лукавлю, но никогда не обязательно использовать using namespace std;. См. здесь, почему это считается плохой практикой.

Ваша первая версия может «работать» в некоторых древних нестандартных совместимых компиляторах.

Что вы должны сделать, это написать

#include <iostream>    
int main () {
   std::cout << "Hello Programmers";    
   return 0;
}

Если вы ленивы, вы можете использовать

#include <iostream>
using std::cout;

int main () {
   cout << "Hello Programmers";
   return 0; 
}

И версия с using namespace std; тоже технически верна, но приведёт к всяким неприятным проблемам в больших проектах.

person 463035818_is_not_a_number    schedule 23.08.2019
comment
'не нужно возвращать 0; from main' — некоторые считают, что не делать этого — плохая практика... - person Aconcagua; 23.08.2019
comment
@Aconcagua Я бы не согласился, но спасибо, что указали на это, я добавлю это обратно, потому что это другая тема. - person 463035818_is_not_a_number; 23.08.2019

Прежде всего, это не вопрос IDE, а вопрос компилятора C++ (реализация языка C++).

Первый TurboC/BorlandC был выпущен несколько десятилетий назад, когда в C++ еще не было пространств имен.

person ern0    schedule 23.08.2019