Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 2 использования const 
:(
    Опции темы
 
используете ли вы конструкциb из первого поста?
да, обе [ 10 ]  [24.39%]
да, обе, но нередко забываю [ 4 ]  [9.76%]
только 1 [ 4 ]  [9.76%]
только 1, но нередко забываю [ 2 ]  [4.88%]
только 2 [ 3 ]  [7.32%]
только 2, но нередко забываю [ 1 ]  [2.44%]
нет, но думаю, что надо бы [ 1 ]  [2.44%]
нет, и не собираюсь [ 14 ]  [34.15%]
имхо, это извращения [ 2 ]  [4.88%]
Всего проголосовавших: 41
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
Alek86
Дата 22.4.2009, 11:45 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



опрос чисто познавательный - типо как распространено подобное использование конста

1.
Код

{
 const int i = GetValue();
 // теперь i уже случайно не изменишь
}


2.
Код

void Function(const int  i) {
 // i внутри функции константна, случайно не изменишь
}


для не знающих - обычно их юзают фанаты конста и любители отдавать компилятору побольше мартышкиного труда smile



--------------------
user posted image    user posted image
PM MAIL   Вверх
zim22
Дата 22.4.2009, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(Alek86 @  22.4.2009,  11:45 Найти цитируемый пост)
void Function(const int  i) {

я предпочитаю передавать параметры по константной ссылке.
Код

void Function(const int  &i) {



--------------------
PM MAIL   Вверх
Alek86
Дата 22.4.2009, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



zim22, для большинства целых чисел это лишние затраты
они сами прекрасно в 4 байта влазят (то есть происходит копирование), а так ты копируешь указатель на них, да еще и юзаешь свой i через указатель


--------------------
user posted image    user posted image
PM MAIL   Вверх
zim22
Дата 22.4.2009, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(Alek86 @  22.4.2009,  11:57 Найти цитируемый пост)
для большинства целых чисел это лишние затраты

буду знать.
но объекты классов удобней передавать через константную ссылку.
пример: 
Код

void f(const string &s);
f("hello"); 


Это сообщение отредактировал(а) zim22 - 22.4.2009, 12:04


--------------------
PM MAIL   Вверх
Lazin
Дата 22.4.2009, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



ни то ни другое
PM MAIL Skype GTalk   Вверх
maxim1000
Дата 22.4.2009, 12:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Цитата(Alek86 @  22.4.2009,  11:45 Найти цитируемый пост)
const int i = GetValue();

пользуюсь, именно для того, чтобы дать понять, что эта переменная не задумывалась для изменения


Цитата(Alek86 @  22.4.2009,  11:45 Найти цитируемый пост)
void Function(const int  i)

не пользуюсь
в данном случае const - деталь реализации: она никак не влияет на вызывающую сторону, а имеет отношение только к внутренностям, так что нечего её в интерфейс вытаскивать...


--------------------
qqq
PM WWW   Вверх
SABROG
Дата 22.4.2009, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 4
Всего: 91



У меня часто бывает такое, что придумываешь тщательно интерфейс, прописываешь const  и т.д., а потом решаешь что-то добавить или изменить в коде и приходится делать рефакторинг. Поэтому я лишний раз теперь и функции как const не объявляю, если четко не уверен, будет ли она меняться.

Другое дело, что потом лень всё это прописывать ;)

Это сообщение отредактировал(а) SABROG - 22.4.2009, 12:51


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
vinter
Дата 22.4.2009, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата

 нет, и не собираюсь



--------------------
Мой блог
PM MAIL WWW   Вверх
mes
Дата 22.4.2009, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



да, если этого требует логика программы.

например этот код не представляю без конст:
Код

int arr[] = ..
const int size =sizeof(arr)/s..



Цитата(Alek86 @  22.4.2009,  10:57 Найти цитируемый пост)
а так ты копируешь указатель на них, да еще и юзаешь свой i через указатель 

Правда ?  smile

Добавлено через 1 минуту и 45 секунд
P.S. так как не встречался с необходимостью 2го случая, голосую только за первый, но предполагаю что и для второго может быть ситуация. 



--------------------
PM MAIL WWW   Вверх
mrbrooks
Дата 22.4.2009, 13:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



оно как то не кошерно. 
особенно это  smile 
Цитата
    
void Function(const int  &i) { }

PM MAIL   Вверх
Alek86
Дата 22.4.2009, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(mes @  22.4.2009,  13:24 Найти цитируемый пост)
Правда ?

правда
без оптимизации по крайней мере
потому в бусте и есть функционал а-ля boost::call_traits<T>::param_type


--------------------
user posted image    user posted image
PM MAIL   Вверх
MTWizard
Дата 23.4.2009, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 8.10.2007
Где: Київ

Репутация: 3
Всего: 4



Юзаю обе конструкции.
Причём, для тех кто не знает про вторую:

В объявлении функции можно писать
Код
void foo(int i);

а потом в реализации
Код
void foo(const int i) {...}

Так что ничего лишнего в интерфейс не выносится
PM MAIL   Вверх
Alek86
Дата 23.4.2009, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



оффтоп
жаль тот, кто за извращения проголосовал, не высказался...


ЗЫ. этот оффтоп, чтоб голосование на первой странице еще подержать smile


--------------------
user posted image    user posted image
PM MAIL   Вверх
zim22
Дата 23.4.2009, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(MTWizard @  23.4.2009,  10:49 Найти цитируемый пост)
Так что ничего лишнего в интерфейс не выносится

со ссылками такой фокус не прокатит.
Код

void foo(int &i);
void foo(const int &i) {}

error LNK2019: unresolved external symbol "void __cdecl foo(int &)"


--------------------
PM MAIL   Вверх
Cтpaнник
Дата 23.4.2009, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 12.10.2008
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: нет



Пользую обе конструкции. Вторую, правда, с int - не в пример реже.
С моей точки зрения, это есть (даже в тривиальных случаях) документирование намерений разработчика об использовании переменных - если переменная по дизайну не должна меняться, то она должна быть константной. В случае, если изменяется дизайн и в соответствии с новым дизайном переменную требуется изменять - квалификатор const можно столь явно же и убрать.

Можно считать этот подход паранойей. smile

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0902 ]   [ Использовано запросов: 24 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.