|
|
|
Объявление переменных
|
|||
|---|---|---|---|
|
#18+
Помогите разобраться, что означает такое объявление 1) const volatile double dDouble1 2) extern const volatile double dDouble2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2005, 11:56 |
|
||
|
Объявление переменных
|
|||
|---|---|---|---|
|
#18+
Влад123Помогите разобраться, что означает такое объявление 1) const volatile double dDouble1; Переменная dDouble1 с типом double, которая не может меняться программой в течении своей жизни, но которая может меняться извне программы (volatile). Возможность изменения переменной извне программы является только рекомендацией компилятору по генерации кода таким образом, чтобы он не использовал значение переменной, закэшированной в регистрах процессора или в прочей процессорной памяти. Влад123 2) extern const volatile double dDouble2; Ссылка на такую же по характеристикам (повторяться не буду) переменную, как и описанная в п.1, но с именем dDouble2, в словаре глобальных имен. В отличие от выражения [src c] const volatile double dDouble1; [/src]которое является и объявлением, и определением может помещать имя dDouble1 в словарь глобальных имен данное выражение Является только объявлением Не помещает имя dDouble2 в словарь глобальных имен, а требует наличия там уже помещенного туда имени dDouble2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2005, 12:26 |
|
||
|
Объявление переменных
|
|||
|---|---|---|---|
|
#18+
1) const volatile double dDouble1 Попробуем разобрать. Скажу сразу, что эта строчка наверное не должна компилиться. const - константная т.е. значение этой переменной изменить нельзя. Поэтому чтобы необходимо переменной присвоить какое-либо начальное значение. volatile - "изменчивая". Т.е. значение этой переменной может изменяться "не описанным в языке способом"(с) Страуструп. Например операционной системой. Т.е. эта переменная не может изменяться средствами С++, однако ее значение можно изменить извне, с помощью ассемблера, или как-то еще нестандартно. 2) extern const volatile double dDouble2 Добавляется новое ключевое слово. Для понимания необходимо усвоить разницу между обьявлением и определением. При обьявлении обьекта, последний не инициализируется. Упрощенно: компилятору дается инструкция: где-то есть такой-то обьект такого-то типа. При определении под обьект выделяется память и обьект инициализируется. Обьявлений может быть много, определение - только одно. Естественно типы в обьявлениях и определении обьекта должны совпадать. extern - означает что dDouble2 - только обьявление переменной. А определение в другом месте. Поэтому присваивать начальное значение переменной здесь не следует(а если присвоить - то инструкция extern будет проигнорирована). Необходимо в другом месте программы определиь переменную с начальным значением ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2005, 12:34 |
|
||
|
Объявление переменных
|
|||
|---|---|---|---|
|
#18+
prof791) const volatile double dDouble1 Попробуем разобрать. Скажу сразу, что эта строчка наверное не должна компилиться. Должна. prof79 const - константная т.е. значение этой переменной изменить нельзя. Поэтому чтобы необходимо переменной присвоить какое-либо начальное значение. volatile - "изменчивая". Т.е. значение этой переменной может изменяться "не описанным в языке способом"(с) Страуструп. Например операционной системой. Т.е. эта переменная не может изменяться средствами С++, однако ее значение можно изменить извне, с помощью ассемблера, или как-то еще нестандартно. Ну сам же все знаешь. Почему же не должна компилиться ? Должна, const не дает переменной меняться в программе на C++. А volatile говорит, что она менятеся еще где-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2005, 22:36 |
|
||
|
Объявление переменных
|
|||
|---|---|---|---|
|
#18+
MasterZiv prof791) const volatile double dDouble1 Попробуем разобрать. Скажу сразу, что эта строчка наверное не должна компилиться. Должна. Начальное значение не присваивается. Попробывал на VC 7.1 - не компилит. Говорит "error C2734: 'dDouble1' : const object must be initialized if not extern" Как на эту тонкость смотрит стандарт не знаю. Поэтому написал "наверное". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2005, 13:28 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33002400&tid=2033497]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
176ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 499ms |

| 0 / 0 |
