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

Инициализация статического массива - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Функция, возвращающая текущую дату http://www.cyberforum.ru/cpp-beginners/thread291447.html
никак толком не могу разобратса с библиотекой time.h можите сказать точную функцию которая возвратит текущую дату и какие аргументы она принемает , и не в формате строки... а то что то у меня не...
C++ Сосчитать количество единиц Сосчитать количество единиц в двоичной записи числа i. http://www.cyberforum.ru/cpp-beginners/thread291435.html
Умножение матрицы S+1 раз C++
Всем привет! помогите пожалуйста решить задачку на С++: 1. умножение матрицы самой на себя s+1 раз 2.умножение матрицы на вектор произвольный ( можно взять Е-единич.) 3.(умножение...
C++ Определить количество повторений
Определить количество повторений каждой из цифр 1,2...9 в числе N в степени N, N<=1000
C++ У покупателя есть n монет достоинством H(1)...H(n) http://www.cyberforum.ru/cpp-beginners/thread291426.html
У покупателя есть n монет достоинством H(1)...H(n). У продавца есть m монет достоинством B(1)...B(l). Может ли купить покупатель вещь стоимостью S так, чтобы у продавца нашлась точная сдача (если она...
C++ Константа. Надо найти константу(количество строк) в будущей матрице, если известно сколько элементов будет и количество столбцов. И тогда как записать константу выражением, или оператором? ОЧЕНЬ нужно. А то... подробнее

Показать сообщение отдельно
ValeryLaptev
Эксперт С++
1045 / 824 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
13.05.2011, 18:34
Цитата Сообщение от Evg Посмотреть сообщение
Там речь шла о static-членах класса. Обычная переменная с модификатором static - это совсем другое. У разработчиков языков программирования есть некое маниакальное желание использовать одно и то же ключевое слово для обозначения разных конструкций. Т.е. в твоём случае и в случае по ссылке слово static применяется в разных контекстах и имеет разный смысл. По поводу твоего static'а почитай тут Отличие static от объявление переменных ДО функции main
Пожелание у меня к вам - не надо говорить об эквивалентности того и сего в абсолюте. Лучше говорить об эквивалентности с точки зрения размещения в памяти. Но неэквивалентности с точки зрения области видимости. Так будет правильней.
На РСДН вас за подобные вольности съели бы с потрохами...

Добавлено через 8 минут
Цитата Сообщение от alexsvk Посмотреть сообщение
Значит, у переменной с модификатором extern уникальное имя в тех модулях, где она используется? И как компоновщик собирает проект с переменными-extern?

На счёт класса, здесь используется static. Интерес же был на счёт использования const БЕЗ static.
1. Любая переменная должна быть определена единственный раз в соответствующей области видимости. Когда ты в каком-то файле объявляешь глобальную переменную, то она попадает в глобальное неименованное пространство имен. Например,
C++
1
int a;
2. Чтобы эту глобальную переменную можно было использовать в другом модуле файле, надо в этом другом модуле файле прописать
C++
1
extern int a;
. Это - НЕ определение, это - объявление.
Вот можно почитать из моей книжки:
Межмодульные переменные и функции
Начнем с простых переменных. Допустим, у нас есть два модуля A.cpp и B.cpp. В модуле A определена целая переменная i вне всех классов и функций

int i = 2;

Такая переменная называется глобальной. В файле A она видна от точки определения и до конца файла. Однако в модуле B эта переменная не видна. И если вдруг нам потребуется в модуле B присвоить ей другое значение, у нас возникнут некоторые проблемы. Просто написать

i = 1;

нельзя – компилятор при обработке модуля B «не видит» модуль A и ничего не знает об определенной там переменной, поэтому получим сообщение о неопределенной переменной. Написать

int i = 1;

тоже нельзя — это является определением (повторным). Компилятор-то «возражать» не будет — он транслирует модули по-отдельности, а вот линкер будет «воротить нос» и сообщит, что одна и та же переменная определена дважды. Для таких случаев в С++ включено специальное ключевое слово extern. В модуле B надо объявить переменную следующим образом:

extern int i;

После этого можно использовать переменную i в файле B любым разрешенным способом. Например, присвоить новое значение

i = 1;

Однако попытка совместить объявление с присвоением значения

extern int i = 1;

является ошибкой — такая запись является определением, и мы опять получим сообщение от линкера о повторном определении.

ПРИМЕЧАНИЕ
Хотя это ключевое слово в стандарте определено как один из четырех классов хранения, проще понимать его как обозначение «внешнего» имени для данного модуля. Имя называется внешним по отношению к модулю, если объект с этим именем не определен в данном модуле.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.