![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
bsa,
я про классы и прочие сложные типы не говорил -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Я имел в виду, что можно передавать по константной ссылке или указателю.
|
|||
|
||||
| archimed7592 |
|
||||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
MAKCim, я имею немного иное мнение о спектре применения const переменных. Даже примитивных типов. Если я не изменяю в ф-ции переменную, то я объявляю её const. Привычка. Зато через месяц такие исходники читать проще.
zkv, я точно не уверен, ибо Стандарт знаю не на зубок, но из того, что описано в п. 3.2(ODR) следует, что для констант(даже примитивных типов) никаких исключений в этом плане нет. Добавлено через 5 минут и 10 секунд Собственно говоря, студия нарушает стандарт, т.к. такой код:
Выводит на экран следующее:
Т.е. адреса у одной и той же переменной разные, что противоречит 3.2/3:
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||||
|
|||||||
| Random13 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
Но конст переменные - это по сути тот же дэфайн, где-то, кстати читал, что использования конст переменных предпочтительнее дэфайна, по возможности, правда уже не помню почему. Тут я подзабыл, и неправильно немного написал до этого. Вообще получается, что в h файлах глобальные переменные, кроме статических ни объявлять ни определять нельзя. По сути при компиляции тело h файла переписывается в срр файл на месте, где стоит инклюд, и поэтому если мы напишем в h файле, например int a;, и подключим его к main.cpp и a.cpp, то будет ошибка компоновки redifinition. Так как этот файл перепишется 2 раза и будет попытка создания 2-х глобальных переменных с одним именем. Так видимо и происходит при static, просто в этом случае в каждом срр файле создается своя копия переменной, как и в случпе с const, просто видать так как - это const - то компилятор забивает на эту ошибку. То есть глобальную переменную можно определить в срр файле, а в остальных файлах писать extern, можно и в h файле, но при этом подключить его можно только один раз к срр файлу, (понятно можно a.h подключить к b.h, и потом в b.cpp подключить a.h и b.h, так как в этом случае, если стоит #ifndef файл просто не подключится второй раз |
||||
|
|||||
| UnrealMan |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Ты упустил один маленький момент: это не одна и та же переменная
Добавлено через 2 минуты и 42 секунды
Объявлять-таки можно. Это сообщение отредактировал(а) UnrealMan - 8.12.2007, 18:57 |
||||||
|
|||||||
| Random13 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
Всмысле как написать в h файле ? Ну если написать с extern - то да - можно. Это сообщение отредактировал(а) Random13 - 8.12.2007, 20:27 |
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Да какая разница где? Впрочем, по твоим постам видно, что ты не понимаешь, зачем нужны h-файлы. А без extern это будет определение, а не просто объявление. Это сообщение отредактировал(а) UnrealMan - 8.12.2007, 21:07 |
|||
|
||||
| Random13 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
У меня у самого такое ощущение, что, чем больше знаю - тем меньше понимаю...
Это сообщение отредактировал(а) Random13 - 9.12.2007, 13:40 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |