2013-03-20 3 views
5

Я знаю, что include относится к классам и используется для некоторых встроенных элементов, таких как пространство имен std ... Когда вы включаете что-то, вы можете создавать объекты и играть с ними, но когда вы «что-то» используете, вы можете использовать какие-то встроенные функции. Но тогда как я должен создать свою собственную «библиотеку», которую я мог бы «использовать»?В чем разница между использованием и включением в C++?

+1

Оба классов и оба для встроенного материала. – chris

ответ

4

Проще говоря #include сообщает компилятору, чтобы просто скопировать и вставить содержимое файла заголовка, которое будет включено в текущую блок переводов. Он оценивается предварительным компилятором.

В то время как using directive направляет компилятор для переноса имен символов из другой области действия в текущую область. Это по сути действует компилятором.

Но как же я должен создать свою собственную «библиотеку», которую я мог бы «использовать»?

Пространства имен - это то, что используется для предотвращения столкновений имен символов. И обычно каждый разработчик библиотеки будет иметь свою функциональность, завернутую в одно или много пространств имен.

2

«включить» в основном делает копию вставить значение файла в местоположение строки «включить». Это используется для того, чтобы ваш исходный код (как правило, файл .c) знал об объявлении другого исходного кода (обычно он находится в файле .h).

«используя» в основном говорит компилятору, что в следующем коде вы используете что-то (как правило, пространства имен), так что вы не должны делать это явно каждый раз:

Вместо:

std::string a; 
std::string b; 
std::string c; 

Вы могли бы написать:

using namespace std; 
string a; 
string b; 
string c; 
+1

Вы могли бы, но не должны. 'using namespace std;' полностью поражает цель пространств имен. Это часто приводит к таинственным проблемам. 'std' есть по какой-то причине. Используй это. –

+0

Да, я знаю это, но все же, какова цель оператора «::» (что это значит?) В этом случае, а также то, что является std, что включает в себя отключение cout, cin и такого рода базовые вещи ? Как я могу поместить некоторые из моих классов в эти пространства имен? – user2030383

+2

@ user2030383: '::' - это оператор разрешения области, который сообщает компилятору, в какой области (* namespace/class/struct/union *) он может найти конкретный символ. Существует много символов, которые являются частью пространства имен 'std',' std' обозначает пространство имен библиотеки * standard *, вам нужно будет увидеть документацию, чтобы точно увидеть, какие все символы определены в ней. Вы не должны помещать свои классы в пространство имен 'std', это неопределенное поведение, если вы это сделаете. Вместо этого вы должны обернуть свои классы в свое собственное пространство имен. –

Смежные вопросы