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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что дает const в описании функции (для многопоточ) 
V
    Опции темы
neosapient
Дата 8.11.2007, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот увидел в чужем коде класс с методом
Код

class SomeClass 
{
...
void Metod(int in) const;
...
};
...

void Metod(int in) const
{
...
}

Что дает для метода/функции эта приставка "const", и как соотноситься она с многопоточностью?
PM MAIL   Вверх
bsa
Дата 8.11.2007, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



это означает, что данный метод не меняет поля класса.
PM   Вверх
Daevaorn
Дата 8.11.2007, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



Цитата(neosapient @  8.11.2007,  17:15 Найти цитируемый пост)
Что дает для метода/функции эта приставка "const",

const говорит о том что внутри метода поля объекта не будут изменяться.
PM MAIL WWW   Вверх
Alek86
Дата 8.11.2007, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



то есть в двух потоках их можно использовать, если в классе не объявлены mutable переменные и они (функции) не используют глобальные переменные


короче говоря, гарантий с ними никаких. если это был "хитрый" вопрос препода, то можешь его немного обломать


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


Архимед
****


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

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



Цитата(Alek86 @  8.11.2007,  16:22 Найти цитируемый пост)
короче говоря, гарантий с ними никаких.

Гарантии есть, если константная ф-ция детерминирована smile.


--------------------
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
PM Jabber   Вверх
neosapient
Дата 8.11.2007, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



пожалуйста, говорите более простым языком
----------
про mutable  точно не скажу
но есть класс диспетчер (в единственном экземпляре), который хранит указатели на список.
есть метод добавления и удаления элементов из списка и переход по списку. 

вот я встретил этот параметр и подумал - может каким то из моих функций присвоить "const "
посмотрите пример 
Там метод Add вызывается из одного потока, а методы GetNext и DeleteThisAndGetNext вызываются в двух потоках паралельно

Это сообщение отредактировал(а) neosapient - 8.11.2007, 16:46

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  ListDisp.rar 3,54 Kb
PM MAIL   Вверх
archimed7592
Дата 8.11.2007, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Цитата(neosapient @  8.11.2007,  16:41 Найти цитируемый пост)
пожалуйста, говорите более простым языком

Детерминированная ф-ция - это та, результат работы которой зависит только от аргументов, ей переданных. Т.е. результат такой ф-ции не должен зависеть ни от ввода с клавиатуры, ни от глобальных переменных, ни от результата другой недетерминированной ф-ции.


--------------------
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
PM Jabber   Вверх
neosapient
Дата 8.11.2007, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(archimed7592 @  8.11.2007,  16:46 Найти цитируемый пост)
Детерминированная ф-ция - это та, результат работы которой зависит только от аргументов, ей переданных. Т.е. результат такой ф-ции не должен зависеть ни от ввода с клавиатуры, ни от глобальных переменных, ни от результата другой недетерминированной ф-ции. 

понял
----
Могут ли теряться данные в том написании класса?
ListDisp.rar http://forum.vingrad.ru/act-Attach/type/post/id-1310183.html

Это сообщение отредактировал(а) neosapient - 8.11.2007, 16:51
PM MAIL   Вверх
Dims
Дата 9.11.2007, 03:25 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



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

Поскольку перед всеми другими указателями можно ставить const, то и перед этим должно быть можно. Но как, если он нигде не упоминается в записи? Вот и придумали, что словечко const надо ставить перед телом функции, если это определение и перед точкой с запятой, если это описание.

На многопоточность это никак не влияет. Эта фича работает на уровне компилятора, который выдаёт ошибки, если ты пытаешься изменить значение по адресу, который объявлен const. Ограничение легко обойти, как намеренно, так и случайно. 
PM MAIL   Вверх
neosapient
Дата 9.11.2007, 10:29 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо, вопрос исчерпан
PM MAIL   Вверх
JackYF
Дата 9.11.2007, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(Dims @  9.11.2007,  03:25 Найти цитируемый пост)
Вот и придумали, что словечко const надо ставить перед телом функции, если это определение и перед точкой с запятой, если это описание.

Неверно. В обоих случаях const ставится после определения параметров функции.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
archimed7592
Дата 9.11.2007, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Кто-нибудь когда-нибудь встречал что-нибудь вроде этого? smile
Код

struct A
{
    void foo() volatile;
    void foo() const volatile;
};




--------------------
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
PM Jabber   Вверх
Dims
Дата 9.11.2007, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(JackYF @  9.11.2007,  13:24 Найти цитируемый пост)
Неверно. В обоих случаях const ставится после определения параметров функции. 

Девятый вагон -- это тот который после восьмого, а не тот, который перед десятым smile

PM MAIL   Вверх
JackYF
Дата 9.11.2007, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(Dims @  9.11.2007,  23:02 Найти цитируемый пост)
Девятый вагон -- это тот который после восьмого, а не тот, который перед десятым

Тьфу, да. Просто, имхо, как-то ты коряво написал, хотя, действительно, правильно smile Приношу свои извинения.

Цитата(archimed7592 @  9.11.2007,  13:38 Найти цитируемый пост)
void foo() volatile;
    void foo() const volatile;

нет :(



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Alek86
Дата 10.11.2007, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



извиняюсь за продолжение темы.

Цитата(archimed7592 @  8.11.2007,  16:34 Найти цитируемый пост)
Гарантии есть, если константная ф-ция детерминирована


если спрашивалось что-то типа, могу ли я ее безбоязненно использовать в многих потоках, если вижу, что она const, то гарантий нету. статическая мьютэбл, вроде, возможна.


--------------------
user posted image    user posted image
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0831 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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