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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 74, средняя оценка - 4.89
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
#1

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

08.05.2011, 23:37. Просмотров 10270. Ответов 45
Метки нет (Все метки)

Добрый вечер!
Допустим, что имеется класс
C++
1
2
3
4
5
6
7
class A
{
....
public:
static int array[];
....
};
Как инициализировать массив в stdafx.h, если в нём будет 700 элементов, вводимых не вручную?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2011, 23:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Инициализация статического массива (C++):

Инициализация статического массива - C++
Ребята, помогите пожалуйста. Не получается проинициализировать NULL-ами статиеский массив указателей. Пишет слудеющее (прикрепил скриншот)....

Инициализация статического поля - C++
Добрый день, как объяснить необходимость объявить все статические поля, даже те у которых есть конструктор по умолчанию, вне класса до...

Инициализация статического члена из шаблонного класса - C++
Добрый день. Есть код: template<int test> class Test { template<int a> struct Inner { static bool...

Инициализация константного статического объекта - члена класса - C++
Здравствуйте, у меня возникла проблема с инициализацией статического объекта, который является членом класса. Этот объект должен быть...

Инициализация статического члена std::vector в шаблонном классе - C++
есть класс myclass , владеющий классом struct template<class T> class myclass { struct mystruct {}; public: static...

Обнуление статического массива - C++
Нужна помощь с обнулением массива,который записан в файл и выведен на экран Надо его обнулить и снова записать в файл и на экран вывести ...

45
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
09.05.2011, 23:56  [ТС] #16
Цитата Сообщение от Evg Посмотреть сообщение
Константность - это запрет на запись. К глобальности и универсальности имени вообще никакого отношения не имеет
Да, но меня заинтересовала фраза "статически инициализирована..". Что это значит?
0
Evg
Эксперт CАвтор FAQ
18705 / 6674 / 472
Регистрация: 30.03.2009
Сообщений: 18,685
Записей в блоге: 29
10.05.2011, 08:17 #17
Цитата Сообщение от alexsvk Посмотреть сообщение
Да, но меня заинтересовала фраза "статически инициализирована..". Что это значит?
Это значит НЕ в тексте исполняемой части программы. Другими словами, инициализация прямо в момент объявления (definition) переменной. Статическая в том смысле, что не динамическая

C
1
2
/* Статическая инициализация */
int const a = 5;
C
1
2
3
4
5
6
7
8
/* Динамическая инициализация. const нельзя */
int a;
 
int main (void)
{
  a = 5;
  ...
}
1
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
10.05.2011, 21:44  [ТС] #18
Немного отдалюсь от главной темы.
Что значит описатель volatile, его отличия от const?
0
fasked
Эксперт С++
4963 / 2543 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
10.05.2011, 22:13 #19
Цитата Сообщение от alexsvk Посмотреть сообщение
Что значит описатель volatile, его отличия от const?
Это вообще два разных ключевых слова, о различиях говорить бессмысленно.
По идее ключевое слово volatile должно запрещать оптимизацию переменной. Подразумевается, что переменная может быть изменена внешне, чем-то еще кроме текущего исполняемого кода. Компилятор обязан выполнять все указанные действия над переменной, отмеченной как volatile.
const - это запрет на изменение (запись).
0
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
10.05.2011, 22:15  [ТС] #20
Не достаточно ясное объяснение...
0
Evg
Эксперт CАвтор FAQ
18705 / 6674 / 472
Регистрация: 30.03.2009
Сообщений: 18,685
Записей в блоге: 29
10.05.2011, 22:23 #21
Не помню точную формулировку, но с точки зрения стандарты выглядит что-то типа такого. Все обращения (чтение и запись) к переменной volatile должны быть ровно в том количестве и ровно в том порядке, как это вытекает из исходника. Такое же соотношение должно соблюдаться и между разными обращениями к volatile: т.е. чтения и записи различных volatile объектов или обращений по указателям нельзя переставлять и оптимизировать

Если есть, к примеру, исходник:

C
1
2
3
4
5
6
7
8
9
10
vaoltile int x;
volatile int y;
 
x = 0;
y = 0;
for (i = 0; i < 10; i++)
{
  x++;
  y++;
}
То без модификатора volatile оптимизатор превратил бы этот код в

C
1
2
x = 10;
y = 10;
но с volatile оптимизатор не может сделать вообще ничего. Даже переставить местами обращение к x и y.

volatile обычно используют для адресов, которые являются портами ввода-вывода (т.е. являются не обычной памятью, а связанной с аппаратурой). Чтение из такого адреса может поменять состояние порта ввода-вывода, а потому компилятор не должен ничего оптимизировать с такими обращениями
2
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
12.05.2011, 20:48  [ТС] #22
Evg, значит volatile была создан сугубо радио определённых целей, связанных с аппаратурой?
0
Evg
Эксперт CАвтор FAQ
18705 / 6674 / 472
Регистрация: 30.03.2009
Сообщений: 18,685
Записей в блоге: 29
12.05.2011, 21:48 #23
Цитата Сообщение от alexsvk Посмотреть сообщение
Evg, значит volatile была создан сугубо радио определённых целей, связанных с аппаратурой?
Грубо говоря, да. Си проектировался как замена ассемблера, т.е. язык по сути низкого уровня
0
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
12.05.2011, 21:59  [ТС] #24
C++
1
2
3
4
5
6
7
8
9
*.h
...
const wchar_t lpszClassName[];
...
 
*.cpp
#include *.h
const wchar_t cWnd::lpszClassName [] ="habadubada";
...
Результат:
>c:\users\alexsvk\documents\visual studio 2010\projects\api\schupak\ch1\listing_2\listing_2\cwnd.h(20): warning C4200: nonstandard extension used : zero-sized array in struct/union
1> Cannot generate copy-ctor or copy-assignment operator when UDT contains a zero-sized array
1>c:\users\alexsvk\documents\visual studio 2010\projects\api\schupak\ch1\listing_2\listing_2\cwnd.cpp(3): error C2761: 'const wchar_t cWnd::lpszClassName[]' : member function redeclaration not allowed

т.е. инициализация не static полей вне объявления класса невозможна?
0
Evg
Эксперт CАвтор FAQ
18705 / 6674 / 472
Регистрация: 30.03.2009
Сообщений: 18,685
Записей в блоге: 29
12.05.2011, 23:07 #25
"nonstandard extension used : zero-sized array in struct/union"
0
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
12.05.2011, 23:24  [ТС] #26
Цитата Сообщение от Evg Посмотреть сообщение
"nonstandard extension used : zero-sized array in struct/union"
ага, значит указание размера обязательно по текущему стандарту?

Хм...
C++
1
2
*.h
const wchar_t lpszClassName [10] = L"cWndClass";
1>c:\users\alexsvk\documents\visual studio 2010\projects\api\schupak\ch1\listing_2\listing_2\cwnd.h(20): error C2864: 'cWnd::lpszClassName' : only static const integral data members can be initialized within a class
1>c:\users\alexsvk\documents\visual studio 2010\projects\api\schupak\ch1\listing_2\listing_2\cwnd.cpp(10): error C2439: 'cWnd::lpszClassName' : member could not be initialized
1> c:\users\alexsvk\documents\visual studio 2010\projects\api\schupak\ch1\listing_2\listing_2\cwnd.h(20) : see declaration of 'cWnd::lpszClassName'
1> Hello2.cpp
1>c:\users\alexsvk\documents\visual studio 2010\projects\api\schupak\ch1\listing_2\listing_2\cwnd.h(20): error C2864: 'cWnd::lpszClassName' : only static const integral data members can be initialized within a class
1> Generating Code...
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
0
Evg
Эксперт CАвтор FAQ
18705 / 6674 / 472
Регистрация: 30.03.2009
Сообщений: 18,685
Записей в блоге: 29
13.05.2011, 09:56 #27
В .h надо extern указывать. Без extern у тебя описание (declaration) превратилось в определение (definition). И именно про это место выдавалась ошибка из поста #24 (если внимательно посмотреть на привязку ошибки к исходнику)
0
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
13.05.2011, 11:49  [ТС] #28
Цитата Сообщение от Evg Посмотреть сообщение
В .h надо extern указывать. Без extern у тебя описание (declaration) превратилось в определение (definition). И именно про это место выдавалась ошибка из поста #24 (если внимательно посмотреть на привязку ошибки к исходнику)
Но extern - аналог static. Почему при указании static на сработало?
0
ValeryLaptev
Эксперт С++
1046 / 825 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
13.05.2011, 11:54 #29
extern ни разу не аналог static - кто это вам сказал?
static - это прямое указание размещения переменной в static storage. А extern - это указание о том, что в данной единице трансляции переменная не определена. Это линкер найдет ее в другом модуле и "подклеит".
0
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
13.05.2011, 12:02  [ТС] #30
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
extern ни разу не аналог static - кто это вам сказал?
static - это прямое указание размещения переменной в static storage. А extern - это указание о том, что в данной единице трансляции переменная не определена. Это линкер найдет ее в другом модуле и "подклеит".
Массивы в заголовочных файлах
39 пост
0
13.05.2011, 12:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2011, 12:02
Привет! Вот еще темы с ответами:

Размер статического массива - C++
Можно ли задавть размер статического массива во время работы программы? Если нет, то почему?#include &lt;iostream&gt; using namespace std; ...

Из статического массива в динамический - C++
Здравствуйте . Помогите , пожалуйста , переделать эту программу(сортировку) , чтобы она работала с динамическим массивом . #include...

Очередь на основе статического массива - C++
в очередь с экрана вводятся строки,когда вводится строка end,элементы извлекаются из очереди и записываются в файл. xD.h #include...

Стек на базе статического массива - C++
Здравствуйте помогите, верней напишите за меня пожалуйста стек на базе статического массива. требования для массива: 1)тип элементов -...


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

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

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