Re[6]: Что такое константный объект?
От: serjjj Россия  
Дата: 26.02.14 06:52
Оценка:
Как же тогда понимать "const == thread safe"?
Re[7]: Что такое константный объект?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 26.02.14 07:02
Оценка:
Здравствуйте, serjjj, Вы писали:

S>Как же тогда понимать "const == thread safe"?


Понимать что чушь написана.
Re[8]: Что такое константный объект?
От: serjjj Россия  
Дата: 26.02.14 07:20
Оценка:
Ну ХЗ. Герб Саттер вроде как эксперт по C++, написал разные книги по теме, приложил свою руку к стандарту...
Re: Что такое константный объект?
От: tstalker Украина  
Дата: 26.02.14 07:56
Оценка: -1
Здравствуйте, serjjj, Вы писали:

S>Есть константные объекты, есть константные методы. С простыми случаями (типа int size() const) все понятно. А вот как быть с таким:

S>
S>const QObjectList & QObject::children() const
S>
где

S>
S>typedef QList<QObject*> QObjectList;
S>


S>Т.е. можно из константного объекта получить список не константных детей со всеми вытекающими последствиями. Разве в этом случае не нарушиться константность?


Прочёл весь тред — по существу вопроса не ответил никто.
ТС рассуждает о константном объекте.
Где в приведенном коде вообще объект?
Его нет.
Так как можно ответить на вопрос ТС?
Прошу привести более подробный фрагмент кода.
Re[2]: Что такое константный объект?
От: serjjj Россия  
Дата: 26.02.14 10:23
Оценка:
void f(const QObject *obj)
{
    obj->children().first()->setParent(0); // тут нарушается константность obj?
}

int main(int argc, char *argv[])
{
    QObject *p = new QObject();
    new QObject(p);
    f(p);    
    return 0;
}
Re[4]: Что такое константный объект?
От: Abyx Россия  
Дата: 27.02.14 11:46
Оценка:
Здравствуйте, gandjustas, Вы писали:

S>>Я не понял: "const == thread safe" вместо или в дополнение к "const == logically const"?


G>const != thread safe

ты видео саттеровское смотрел?
если да — то объясни чем плохо const == thread safe
In Zen We Trust
Re[5]: Что такое константный объект?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 27.02.14 19:45
Оценка:
Здравствуйте, Abyx, Вы писали:

A>Здравствуйте, gandjustas, Вы писали:


S>>>Я не понял: "const == thread safe" вместо или в дополнение к "const == logically const"?


G>>const != thread safe

A>ты видео саттеровское смотрел?
Конечно

A>если да — то объясни чем плохо const == thread safe

1) Тем что есть const_cast, то есть для вызывающего нет гарантий что объект не изменится
2) Тем что const аргумент не говорит вызывающему, что объект не может поменяться в другом потоке

Как обычно ссылаясь на Саттера вы потеряли контекст. Он говорил об STL. То есть все, что объявлено const в STL является thread safe. То есть можно вызывать из любых потоков, даже если есть другие потоки, которые меняют состояние объекта.

То есть сам по себе модификатор const не дает гарантий. А вот семантика const, начиная с C++11, такова, что должна гарантировать thread-safety.
Естественно эта забота ложится на программиста. Естественно есть тысячи библиотек, которые такое поведение не обеспечивают. На самом деле гарантированно обеспечивает только одна — STL. остальные могут это делать только случайно.

Почитайте его пост на эту тему:
http://herbsutter.com/2013/05/24/gotw-6a-const-correctness-part-1-3/

Почитайте обсуждение на SO: http://stackoverflow.com/questions/14127379/does-const-mean-thread-safe-in-c11
Re[6]: Что такое константный объект?
От: serjjj Россия  
Дата: 03.03.14 21:22
Оценка:
Каковы будут Ваши рекомендации? Не обращать внимание и не использовать этот механизм?
Re[7]: Что такое константный объект?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 05.03.14 13:04
Оценка:
Здравствуйте, serjjj, Вы писали:

S>Каковы будут Ваши рекомендации? Не обращать внимание и не использовать этот механизм?


Использовать и понимать суть.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.