Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
mrKi
2 / 2 / 0
Регистрация: 01.08.2013
Сообщений: 60
#1

namespace - C++

10.09.2013, 22:27. Просмотров 681. Ответов 16
Метки нет (Все метки)

Не могу понять суть пространства имен. Точнее ,в общих чертах , я понял что это,но зачем это нужно?В частности:
1)А зачем они нужны,собственно говоря, если можно а)назвать по другому б)для объединения создать класс ?
2)при описание пространства имен ,например
C++
1
2
3
namespace my{
int i;
}
будет резервироваться память для него?Если да, можно ли сделать чтобы это не происходило?
3) как обратиться к элементу i этого пространства имен
C++
1
2
3
namespace {
int i;
}
4) а если неназванных пространства два?
П.С. заранее спасибо за ответы :-)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2013, 22:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос namespace (C++):

namespace - C++
Сколько читаю форумы и прочее, видел только namespace std. какие еще бывают и зачем они нужны?

Namespace - C++
Мне посоветовали использовать функцию "using namespace std;". За что это строчка отвечает? Может есть еще какие-то функции, которые можно...

namespace - C++
Адекватно-ли использовать в таком случае пространство имен? Лучший-ли это выход из ситуации? #include <iostream> #include <string>...

namespace - C++
Доброго времени и суток !!! Я хотел спросить что такое namespace (вообще что такое пространство имен?) Только модно доходчиво...

using namespace std; - C++
Здравствуйте. Я заметил, что многие программисты стараются избегать этой строчки в своих программах. С чем это связанно? И еще...

using namespace std - C++
Обьясните пожалуйста понятным языком, что такое пространство имен, и зачем нужна эта команда или std::

16
Croessmah
Пришел
Эксперт CЭксперт С++
13753 / 7833 / 892
Регистрация: 27.09.2012
Сообщений: 19,224
Записей в блоге: 3
Завершенные тесты: 1
10.09.2013, 22:30 #2
Цитата Сообщение от mrKi Посмотреть сообщение
1)А зачем они нужны,собственно говоря
using namespace std

Цитата Сообщение от mrKi Посмотреть сообщение
будет резервироваться память для него?
под само пространство? Нет конечно, только под содержимое, если потребуется
1
mrKi
2 / 2 / 0
Регистрация: 01.08.2013
Сообщений: 60
10.09.2013, 22:31  [ТС] #3
Croessmah, то бишь в коде 2го вопроса будет зарезервировано два байта под переменную ?
0
Croessmah
Пришел
Эксперт CЭксперт С++
13753 / 7833 / 892
Регистрация: 27.09.2012
Сообщений: 19,224
Записей в блоге: 3
Завершенные тесты: 1
10.09.2013, 22:35 #4
Цитата Сообщение от mrKi Посмотреть сообщение
для объединения создать класс ?
пространства имен расширяемы

Добавлено через 49 секунд
Цитата Сообщение от mrKi Посмотреть сообщение
вопроса будет зарезервировано два байта под переменную ?
Если потребуется, то да (и почему именно два? Зависит от компилятора)

Добавлено через 1 минуту
Цитата Сообщение от mrKi Посмотреть сообщение
а если неназванных пространства два?
будет одно

Добавлено через 54 секунды
Цитата Сообщение от mrKi Посмотреть сообщение
как обратиться к элементу i этого пространства имен
без имени пространства имен - просто:
C++
1
i = 10 ;
1
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
10.09.2013, 22:36 #5
Цитата Сообщение от mrKi Посмотреть сообщение
А зачем они нужны,собственно говоря,
что бы не засорять глобальное пространство различными переменными, функциями, классами (да вообще все что угодно) то их берут и кидают в пространство имен
0
mrKi
2 / 2 / 0
Регистрация: 01.08.2013
Сообщений: 60
10.09.2013, 22:45  [ТС] #6
Croessmah, что означает "если потребуется"? При описание такого пространства,но без использования каких-либо переменных/объектов из него память резервируется?

Добавлено через 1 минуту
Croessmah, выходит если не указать название создаваемого пространства (просто написав namespace{} ) все что размещено в нем будет находиться в глобальном пространстве?
0
Croessmah
Пришел
Эксперт CЭксперт С++
13753 / 7833 / 892
Регистрация: 27.09.2012
Сообщений: 19,224
Записей в блоге: 3
Завершенные тесты: 1
10.09.2013, 22:51 #7
Цитата Сообщение от mrKi Посмотреть сообщение
Croessmah, что означает "если потребуется"?
Ну если данная переменная не используется или можно обойтись без нее, то компилятор может просто её выкинуть

Добавлено через 1 минуту
Цитата Сообщение от mrKi Посмотреть сообщение
выходит если не указать название создаваемого пространства (просто написав namespace{} ) все что размещено в нем будет находиться в глобальном пространстве?
угу, почти. И доступно только для данного модуля. Замена Си'шного static
1
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
10.09.2013, 22:53 #8
Цитата Сообщение от mrKi Посмотреть сообщение
Croessmah, что означает "если потребуется"? При описание такого пространства,но без использования каких-либо переменных/объектов из него память резервируется?
Нет. Неймспейс — это исключительно статическое понятие. От них ничего не остаётся к моменту исполнения программы. Будет ли выделена память или нет, зависит от того, используется ли данная переменная или нет, так как это влияет на решение компилятора насчёт того, нужна ли под эту переменная память или можно её выкинуть.

Цитата Сообщение от mrKi Посмотреть сообщение
Добавлено через 1 минуту
Croessmah, выходит если не указать название создаваемого пространства (просто написав namespace{} ) все что размещено в нем будет находиться в глобальном пространстве?
Нет, тогда всё внутри будет размещено в анонимном (и не глобальном) пространстве имён. Извне этого пространства до внутренних никак не достучаться.
0
mrKi
2 / 2 / 0
Регистрация: 01.08.2013
Сообщений: 60
10.09.2013, 22:56  [ТС] #9
OhMyGodSoLong,
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Извне этого пространства до внутренних никак не достучаться.
То есть получить доступ к переменной размещенной внутри безымянного пространства я не смогу,я правильно понял?
0
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
10.09.2013, 22:57 #10
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Извне этого пространства до внутренних никак не достучаться.
почему? вот пример, доказывающий обратное:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
 
namespace
{
    int zzz;
}
 
int main()
{
    zzz = 123;
    cout << zzz;
 
    return 0;
}
0
Croessmah
Пришел
Эксперт CЭксперт С++
13753 / 7833 / 892
Регистрация: 27.09.2012
Сообщений: 19,224
Записей в блоге: 3
Завершенные тесты: 1
10.09.2013, 22:58 #11
Цитата Сообщение от ___ Посмотреть сообщение
почему? вот пример, доказывающий обратное:
Из другой единицы трансляции нельзя

Добавлено через 23 секунды
Цитата Сообщение от mrKi Посмотреть сообщение
внутри безымянного пространства я не смогу,я правильно понял?
из других модулей не сможете
0
Croessmah
Пришел
Эксперт CЭксперт С++
13753 / 7833 / 892
Регистрация: 27.09.2012
Сообщений: 19,224
Записей в блоге: 3
Завершенные тесты: 1
10.09.2013, 23:02 #12
namespace
0
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
10.09.2013, 23:03 #13
Цитата Сообщение от Croessmah Посмотреть сообщение
Из другой единицы трансляции нельзя
я перенес вот это
C++
1
2
3
4
namespace
{
    int zzz;
}
в заголовочный файл. программа скомпилировалась и отработала без единой ошибки
0
Croessmah
Пришел
Эксперт CЭксперт С++
13753 / 7833 / 892
Регистрация: 27.09.2012
Сообщений: 19,224
Записей в блоге: 3
Завершенные тесты: 1
10.09.2013, 23:05 #14
Цитата Сообщение от ___ Посмотреть сообщение
в заголовочный файл. программа скомпилировалась и отработала без единой ошибки
матчасть!
0
mrKi
2 / 2 / 0
Регистрация: 01.08.2013
Сообщений: 60
10.09.2013, 23:38  [ТС] #15
еще такой вопрос, если компилятор оставляет только используемые переменые, то что он будет делать с теми переменными, импользование которых зависит от пользователя( пример: если пользователь введ 1,тогда переменна б =10,а если не 1 то ничего не делать.).
)

С телефона пишу, извините ,если что.
0
10.09.2013, 23:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2013, 23:38
Привет! Вот еще темы с ответами:

подскажите с using namespace - C++
все что ниже написано - это части класса myclass struct marked_area { long double L; int t; int num; // кол-во...

std:: vs namespace - C++
Тема не для холивара, объясните пожалуйста чем лучше std:: а не using namespace std ? Без namespace std, возникает такая ошибка, но...

namespace std - C++
Добрый день. Вычитал что могу использовать любой namespace. Но в другом месте написано что если не использовать std, то не сможет...

вопрос по using namespace - C++
добрый вечер) писала программу, сортирующую слова по частоте их встречаемости //Объявите класс с именем text. Объявите функцию...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru