Сравнение #include и использование пространства имен std в C ++ с импортом в Python

Я прочитал на многих страницах в Интернете информацию о заявлении #include и using namespace std фразы using namespace std в C ++, и мне нужно некоторое разъяснение. Поскольку я уже знаю Python, я буду использовать его в качестве аналогии. Прежде всего, в C ++

 #include library 

и в Python

 import library 

одинаковы. Затем в C ++

 #include library using namespace std; 

и в Python

 from library import * 

одинаковы.

Например, если мы сравним первую аналогию, мы знаем, что в C ++

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

аналогичен приведенному ниже коду в Python (аналогично использованию std и #include):

 import math def main(): print math.sqrt(12) 

Если бы мы сравнили вторую аналогию, мы имеем это в C ++

 include <iostream> using namespace std; int main() { cout << "hello world" << endl; } 

и в Python

 from math import * def main(): print sqrt(12) 

похожи.

Можете ли вы исправить меня, если я ошибаюсь?

One Solution collect form web for “Сравнение #include и использование пространства имен std в C ++ с импортом в Python”

#include – это «скопировать-вставить этот файл». Например, вы можете #include файл в себя и получить эту смехотворность . Вы также можете иметь фрагмент кода в файле и #include его везде, где хотите.

Не делайте этого:

 //forloop.txt for(int i=0;i<SIZE;i++){ ARRAY[i] = VALUE; } //prime.txt 2147483647 //main.cpp #include<iostream> using std::cout; using std::string; int main(){ int prime = #include "prime.txt" ; int arr[10]; #define ARRAY arr #define SIZE 10 #define VALUE prime #include "forloop.txt" #undef VALUE #undef SIZE #undef ARRAY for(int i=10;i-- > 0;){ cout<<arr[i]<<'\n'; } } 

Директива по using строго не нужна. В C ++ есть идея «пространств имен», которая предотвращает, например, вашу max функцию, которая будет считаться отличной от math функции в cmath . Это выглядит примерно так:

 namespace std{ int max(int i, int j){ if (i<j) return j; return i; } //some variable declaration and initialization ostream cout(MAKE_BUFFER(stdout)); //std::ostream, if used outside } int max = 5; int main(){ std::cout<<std::max(3,::max)<<'\n'; //::max refers to global name "max" } 

using namespace std; практически означает «Если вы не можете найти имя по всему миру, попробуйте вставить std:: впереди и посмотреть, есть ли это имя». Люди говорят, что плохо использовать практику using namespace std частично потому, что если вы #include "Fh" включаете #include "Fh" , а Fh using namespace std , то ваш код также использует пространство имен std (из-за copy-paste #include ).


Python не является компилируемым языком. Когда вы говорите об import X , вы даете команду интерпретатору сделать что-то (запустите некоторый код и сделайте некоторое имя). #include больше напоминает рассказ компилятора, что делать, чтобы продолжить компиляцию на этом этапе.

import в средствах типа Python, «прикрепить имена в этом модуле». Таким образом, import blah as x означает: «Каждая переменная (включая функции) в blah может быть доступна как x.THING ». Он также вызывает материал инициализации модуля, что имеет смысл, поскольку переменные необходимо инициализировать, прежде чем вы сможете их использовать.


Java также является скомпилированным языком. В Java оператор import не играет с файлами, он играет с классами. Каждый кусок кода в Java должен принадлежать классу.

Но в отличие от двух других языков import не является строго необходимым. import фактически ближе к использованию C ++. import просто добавляет имена для классов, которые вы уже можете использовать, кроме только текущего класса.

Вот какой код использует импорт.

 import java.util.Scanner; public class Example{ public static void main(String blargs[]){ Scanner cin = new Scanner(System.in); System.out.println("Type in your name and press Enter: "); System.out.println("Hello "+cin.next()); } } 

Вот такая же программа, без импорта.

 public class Example{ public static void main(String blargs[]){ java.util.Scanner cin = new java.util.Scanner(System.in); System.out.println("Type in your name and press Enter: "); System.out.println("Hello "+cin.next()); } } 

Вот одна и та же программа, использующая все длинные имена ( import java.lang.*; Неявно в каждом исходном файле Java).

 public class Example{ public static void main(java.lang.String blargs[]){ java.util.Scanner cin = new java.util.Scanner(java.lang.System.in); java.lang.System.out.println("Type in your name and press Enter: "); java.lang.System.out.println("Hello "+cin.next()); } } 

Вот такая же программа, используя все импорт.

 import java.util.Scanner; import static java.util.System.out; import static java.util.System.in; public class Example{ public static void main(String blargs[]){ Scanner cin = new Scanner(in); out.println("Type in your name and press Enter: "); out.println("Hello "+cin.next()); } } 
  • структура проекта для переноса многих классов c ++ в cython на один общий объект
  • Использовать код Python в C / C ++
  • Как перечислять перечисляемые члены с помощью SWIG
  • как я могу отправлять сырые пакеты через Wi-Fi без сети?
  • Массив фиксированного размера SWIG Python, переданный по ссылке
  • Импорт нечетких копий при вложении python в c
  • Эффективнее использовать if-return-return или if-else-return?
  • Доступ к данным сенсора mac
  • Импортировать функцию C ++ в программу Python
  • Преобразование C ++ из массива NumPy в Mat (OpenCV)
  • Какова внутренняя точность numpy.float128?
  • Python - лучший язык программирования в мире.