![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Вот увидел в чужем коде класс с методом
Что дает для метода/функции эта приставка "const", и как соотноситься она с многопоточностью? |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
это означает, что данный метод не меняет поля класса.
|
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
то есть в двух потоках их можно использовать, если в классе не объявлены mutable переменные и они (функции) не используют глобальные переменные
короче говоря, гарантий с ними никаких. если это был "хитрый" вопрос препода, то можешь его немного обломать |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Гарантии есть, если константная ф-ция детерминирована ![]() -------------------- 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 |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
пожалуйста, говорите более простым языком
---------- про mutable точно не скажу но есть класс диспетчер (в единственном экземпляре), который хранит указатели на список. есть метод добавления и удаления элементов из списка и переход по списку. вот я встретил этот параметр и подумал - может каким то из моих функций присвоить "const " посмотрите пример Там метод Add вызывается из одного потока, а методы GetNext и DeleteThisAndGetNext вызываются в двух потоках паралельно Это сообщение отредактировал(а) neosapient - 8.11.2007, 16:46 Присоединённый файл ( Кол-во скачиваний: 7 ) ![]() |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Детерминированная ф-ция - это та, результат работы которой зависит только от аргументов, ей переданных. Т.е. результат такой ф-ции не должен зависеть ни от ввода с клавиатуры, ни от глобальных переменных, ни от результата другой недетерминированной ф-ции. -------------------- 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 |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
понял ---- Могут ли теряться данные в том написании класса? ListDisp.rar http://forum.vingrad.ru/act-Attach/type/post/id-1310183.html Это сообщение отредактировал(а) neosapient - 8.11.2007, 16:51 |
|||
|
||||
Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 1 Всего: 11 |
Надо помнить, что функция-член класса -- это обычная глобальная функция, которой в первом параметре передаётся указатель на объект класса и кладётся в переменную this. Просто синтаксис для функций-членов -- сокращённый.
Поскольку перед всеми другими указателями можно ставить const, то и перед этим должно быть можно. Но как, если он нигде не упоминается в записи? Вот и придумали, что словечко const надо ставить перед телом функции, если это определение и перед точкой с запятой, если это описание. На многопоточность это никак не влияет. Эта фича работает на уровне компилятора, который выдаёт ошибки, если ты пытаешься изменить значение по адресу, который объявлен const. Ограничение легко обойти, как намеренно, так и случайно. |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: нет Всего: 4 |
Спасибо, вопрос исчерпан
|
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Кто-нибудь когда-нибудь встречал что-нибудь вроде этого?
![]()
-------------------- 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 |
|||
|
||||
Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 1 Всего: 11 |
||||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
извиняюсь за продолжение темы.
если спрашивалось что-то типа, могу ли я ее безбоязненно использовать в многих потоках, если вижу, что она const, то гарантий нету. статическая мьютэбл, вроде, возможна. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |