что такое mutable?
От: vvaizh http://izh-test.sourceforge.net/
Дата: 09.04.03 14:06
Оценка:
Просветите неуча..
в первый раз вижу в исходниках..
что такое не знаю..
и вообще кроме как gcc что-нибудь это понимает?
а может это и не ключевое слово вообще, а в какой нибудь либе определяется?
man не помогает..
http://izh-test.sourceforge.net/russian/introduction.html
Re: что такое mutable?
От: Bell Россия  
Дата: 09.04.03 14:08
Оценка: 20 (2) +3
Здравствуйте, vvaizh, Вы писали:

V>Просветите неуча..

V>в первый раз вижу в исходниках..
V>что такое не знаю..
V>и вообще кроме как gcc что-нибудь это понимает?
V>а может это и не ключевое слово вообще, а в какой нибудь либе определяется?
V>man не помогает..


struct A
{
   int n1;
   mutable int n2;
};

...

const A a;
a.n1 = 2;//ошибка
a.n2 = 2;// все ок
Любите книгу — источник знаний (с) М.Горький
Re: что такое mutable?
От: Аноним  
Дата: 09.04.03 14:09
Оценка: 6 (1) +2
это ключевое слово. давно понимаемое компиляторами. означает что член, объявленный с наличием mutable можно будет менять для константного полного объекта.
class A{
public:
   mutable int i;
};

void g()
{
   const A a;
   a.i = 10;//без mutable ты бы так не мог
}
Re: что такое mutable?
От: Amor Россия  
Дата: 09.04.03 14:15
Оценка: -2
Здравствуйте, vvaizh, Вы писали:

V>Просветите неуча..

V>в первый раз вижу в исходниках..
V>что такое не знаю..
V>и вообще кроме как gcc что-нибудь это понимает?
V>а может это и не ключевое слово вообще, а в какой нибудь либе определяется?
V>man не помогает..

mutable — значит "не const ни при каких обстоятельствах"
Т.е. если есть такое объявление:

class CSomeResource
{
   bool m_bLock;
public:
   Lock(){ m_bLock = true; }
   Unlock(){ m_bLock = false; }
   void Read( LPCTSTR szBuffer, DWORD dwSize );
};


И такой вызов:
void SomeFuct( const CSomeResource& res )
{
   res.Lock();
   res.Read( pBuffer, 128 );
   res.Unlock();
}


То такой код компилироваться не будет. Т.к. функция Lock и Unlock изменяют объект this, а он передан в функцию SomeFunct как const.
А если определить переменную m_bLock как mutable, то все будет ништяк.
class CSomeResource
{
mutable bool m_bLock;
public:
Lock(){ m_bLock = true; }
Unlock(){ m_bLock = false; }
void Read( LPCTSTR szBuffer, DWORD dwSize );
};

Компилятор в этом случае похоже не следит за изменениями в переменной m_bLock, если весь объект this константный.

Заранее прошу прощения, если в чем-то здесь ошибся, но вроде как правильно.
Re[2]: что такое mutable?
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 09.04.03 14:16
Оценка:
Здравствуйте, Bell, Вы писали:

struct A
{
  int n1;
  mutable int n2;
};
...
const A a;
a.n1 = 2;//ошибка
a.n2 = 2;// все ок

Интересно. До сих пор я, по-простоте душевной, думал, что mutable связана с константными методами.

struct T
{
 mutable  int x;
 void f() const {x=1;}
};
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[3]: что такое mutable?
От: Lorenzo_LAMAS  
Дата: 09.04.03 14:17
Оценка: +1
Теперь знаешь, что это не только для константных методов.
Of course, the code must be complete enough to compile and link.
Re[2]: что такое mutable?
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 09.04.03 14:20
Оценка: +2
Здравствуйте, Amor, Вы писали:

A>То такой код компилироваться не будет. Т.к. функция Lock и Unlock изменяют объект this, а он передан в функцию SomeFunct как const.


Он не будет компилироваться (не должен, по крайней мере) потому что Lock, Unlock не константные методы.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[3]: что такое mutable?
От: Amor Россия  
Дата: 09.04.03 14:26
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Здравствуйте, Amor, Вы писали:


A>То такой код компилироваться не будет. Т.к. функция Lock и Unlock изменяют объект this, а он передан в функцию SomeFunct как const.


КД>Он не будет компилироваться (не должен, по крайней мере) потому что Lock, Unlock не константные методы.


Т.е. не получится вызвать неконстантную функцию, но которая не изменяет объект? Т.е. это будет компилироваться?
class A
{
   int a;
public:
   int meth(){ return a; }
}

void some( const A& a )
{
   int b = a.meth();
}


помоему это не так.
Re[4]: что такое mutable?
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 09.04.03 14:30
Оценка:
Здравствуйте, Amor, Вы писали:

КД>Он не будет компилироваться (не должен, по крайней мере) потому что Lock, Unlock не константные методы.


A>Т.е. не получится вызвать неконстантную функцию, но которая не изменяет объект? Т.е. это будет компилироваться?

A>помоему это не так.

Это ты компилятору скажи. BCB3 выдал warning.

PS. какой-то песец с раскраской сообщений
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[3]: что такое mutable?
От: Михаил Можаев Россия www.mozhay.chat.ru
Дата: 09.04.03 14:35
Оценка: 1 (1)
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Интересно. До сих пор я, по-простоте душевной, думал, что mutable связана с константными методами.


C++ Standard, 7.1.1/9

The mutable specifier on a class data member nullifies a const specifier applied to the containing class object and permits modification of the mutable class member even though the rest of the object is const. (7.1.5.1).



И так просто, вдобавок:

C++ Standard, 7.1.1/8

The mutable specifier can be applied only to names of class data members (9.2) and cannot be applied to names declared const or static, and cannot be applied to reference members. [Example:

class X {
mutable const int* p; // OK
mutable int* const q; // ill-formed
};
—end example]

... << RSDN@Home 1.0 beta 6a >>
Re[5]: что такое mutable?
От: Дмитрий Наумов  
Дата: 09.04.03 14:35
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Это ты компилятору скажи. BCB3 выдал warning.


BCB3 совсем не авторитет, а даже наоборот...
... << RSDN@Home 1.0 beta 6a >>
Re[5]: что такое mutable?
От: Amor Россия  
Дата: 09.04.03 14:36
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Здравствуйте, Amor, Вы писали:


КД>Он не будет компилироваться (не должен, по крайней мере) потому что Lock, Unlock не константные методы.


A>Т.е. не получится вызвать неконстантную функцию, но которая не изменяет объект? Т.е. это будет компилироваться?

A>помоему это не так.

КД>Это ты компилятору скажи. BCB3 выдал warning.


КД>PS. какой-то песец с раскраской сообщений


стопудодво, ты прав!
Re[4]: что такое mutable?
От: centurn Россия  
Дата: 09.04.03 14:37
Оценка:
Здравствуйте, Amor, Вы писали:


КД>Он не будет компилироваться (не должен, по крайней мере) потому что Lock, Unlock не константные методы.


A>Т.е. не получится вызвать неконстантную функцию, но которая не изменяет объект? Т.е. это будет компилироваться?


...

A>помоему это не так.


Это не будет компилироваться, т.к. ты, не объявив метод константным, как бы сказал, что он может менять объект. А раз так, то его (метод) уже нельзя вызвать для константного объекта. И что там внутри делается, компилятора тогда уже не интересует... Я и не представляю, как можно было иначе организивать.
Re[5]: что такое mutable?
От: Bell Россия  
Дата: 09.04.03 14:39
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:
...

КД>Это ты компилятору скажи. BCB3 выдал warning.


Что-то больно мягко Comeau и VC6 послали...

КД>PS. какой-то песец с раскраской сообщений


Ну, аж в глазках рябит
Любите книгу — источник знаний (с) М.Горький
Re[6]: что такое mutable?
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 09.04.03 14:43
Оценка:
Здравствуйте, Дмитрий Наумов, Вы писали:

ДН>Здравствуйте, Коваленко Дмитрий, Вы писали:


КД>Это ты компилятору скажи. BCB3 выдал warning.


ДН>BCB3 совсем не авторитет, а даже наоборот...


Да ладно
Хоть он и 98 года, но mutable понимает
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[7]: что такое mutable?
От: Анoним  
Дата: 09.04.03 14:53
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Это ты компилятору скажи. BCB3 выдал warning.


ДН>BCB3 совсем не авторитет, а даже наоборот...


КД>Да ладно

КД>Хоть он и 98 года, но mutable понимает

В этом вопросе — точно не авторитет. Билдер очень попустительски относится к изменению констант. И у него плохо обстоят дела с константностью в шаблонах.
Re[4]: что такое mutable?
От: Анoним  
Дата: 09.04.03 14:55
Оценка:
Здравствуйте, Михаил Можаев, Вы писали:

ММ>
ММ>class X {
ММ>mutable const int* p; // OK
ММ>mutable int* const q; // ill-formed
ММ>};
—end example][/q]


В связи с этим хотелось бы особо отметить важный момент: в отличие от const, mutable не является частью типа, и положение слова mutable — перед объявлением (т. е. нельзя написать: const int* mutable p;).
Re[8]: что такое mutable?
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 09.04.03 15:16
Оценка:
Здравствуйте, Анoним, Вы писали:

КД>Хоть он и 98 года, но mutable понимает

А>В этом вопросе — точно не авторитет. Билдер очень попустительски относится к изменению констант. И у него плохо обстоят дела с константностью в шаблонах.
В смысле? Просветите на примере
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[9]: что такое mutable?
От: Анoним  
Дата: 09.04.03 15:19
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Хоть он и 98 года, но mutable понимает

А>В этом вопросе — точно не авторитет. Билдер очень попустительски относится к изменению констант. И у него плохо обстоят дела с константностью в шаблонах.
КД>В смысле? Просветите на примере

Увы, с примером будет туго. Я на нем уже больше года не пишу — сменил место работы. Но проблему помню.
Re[10]: что такое mutable?
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 09.04.03 15:26
Оценка:
Здравствуйте, Анoним, Вы писали:

А>Здравствуйте, Коваленко Дмитрий, Вы писали:


КД>Хоть он и 98 года, но mutable понимает

А>В этом вопросе — точно не авторитет. Билдер очень попустительски относится к изменению констант. И у него плохо обстоят дела с константностью в шаблонах.
КД>В смысле? Просветите на примере

А>Увы, с примером будет туго. Я на нем уже больше года не пишу — сменил место работы. Но проблему помню.


Ну тогда бы и не мутил воду . У BCB3 есть гораздо более страшные глюки, чем хреновое состояние дел с константностью в шаблонах .
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[11]: что такое mutable?
От: Анoним  
Дата: 09.04.03 15:30
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Ну тогда бы и не мутил воду . У BCB3 есть гораздо более страшные глюки, чем хреновое состояние дел с константностью в шаблонах .


Гм, а что ее мутить? Она и без меня несвежа-с. Даже в пятой версии.
Re[12]: что такое mutable?
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 09.04.03 15:34
Оценка: :)
Здравствуйте, Анoним, Вы писали:

А>Здравствуйте, Коваленко Дмитрий, Вы писали:


КД>Ну тогда бы и не мутил воду . У BCB3 есть гораздо более страшные глюки, чем хреновое состояние дел с константностью в шаблонах .


А>Гм, а что ее мутить? Она и без меня несвежа-с. Даже в пятой версии.


Так, Аноним, срочно регистрируйся и пойдем в средства разработки.
Будем знаниями о багах BCB обмениваться
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[13]: что такое mutable?
От: Анoним  
Дата: 09.04.03 15:39
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Так, Аноним, срочно регистрируйся и пойдем в средства разработки.

КД>Будем знаниями о багах BCB обмениваться

Нетушки. Я же сказал — я уже год с лишком не пишу на нем. Остались только впечатления и обрывочные воспоминания.
Re[13]: что такое mutable?
От: Анoним  
Дата: 09.04.03 15:39
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Так, Аноним, срочно регистрируйся.


Фигушки.
Re: что такое mutable?
От: Saddam Россия http://saddam.narod.ru
Дата: 10.04.03 05:32
Оценка:
Здравствуйте, vvaizh, Вы писали:

V>Просветите неуча..

V>в первый раз вижу в исходниках..
V>что такое не знаю..
V>и вообще кроме как gcc что-нибудь это понимает?
V>а может это и не ключевое слово вообще, а в какой нибудь либе определяется?
V>man не помогает..
Насколько я понимаю mutable — сделано для того, чтобы менять СНАРУЖИ класса, то, что внутри поменять нельзя. Например, readoonly порт под досом — яркий пример mutable для твоего класса.
- Вы знаете — жаль, просто по-человечески жаль Памелу Андерсон, которая никогда не сможет сыграть на баяне...
Re[14]: что такое mutable?
От: Анoним  
Дата: 10.04.03 06:46
Оценка:
Здравствуйте, Анoним, Вы писали:

А>Фигушки.


Frostbitter, с чем вы несогласны опять? Или это у вас несогласительная болезнь?
Re[12]: что такое mutable?
От: WolfHound  
Дата: 10.04.03 07:04
Оценка:
Здравствуйте, Анoним, Вы писали:

А>Гм, а что ее мутить? Она и без меня несвежа-с. Даже в пятой версии.

И в шестой тоже. Короче дурной компилятор... А какие у него глюки с шаблонами....
... << RSDN@Home 1.0 beta 5 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[15]: что такое mutable?
От: Frostbitten Россия  
Дата: 10.04.03 07:05
Оценка:
Здравствуйте, Анoним, Вы писали:

А>Frostbitter, с чем вы несогласны опять? Или это у вас несогласительная болезнь?


А прикольненький у вас ник. Все подумали (и я, и, очевидно, Коваленко Дмитрий тоже), что вы <Аноним>, а вы оказывается Аноним. И класно вы меня занулили, прям ковбой!
Re[13]: что такое mutable?
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 10.04.03 07:29
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, Анoним, Вы писали:


А>Гм, а что ее мутить? Она и без меня несвежа-с. Даже в пятой версии.

WH>И в шестой тоже. Короче дурной компилятор... А какие у него глюки с шаблонами....

Ну все, запозорили, блин.

Для того что бы хоть как-то показать обратное, могу сказать что моя игрушка компилируется на Free Borland C++ Compiler. ~50% функционального кода — построена на шаблонах. В том числе — полностью весь механизм управления временными файлами (типа — кэш, менеджер страниц, менеджер блоков в файле и т.д.). Шаблоны очень даже не тривиальные. Скажем в некоторых местах — просто бешенные . И все работает как швецарские часы

Проблемы, конечно, были. Именно необъяснимые глюки компилятора. Но думаю, что поставить на колени можно любой компилятор C++. Вопрос только времени и практики.

Вы мне еще скажите что у VC реализован нормальный компилятор
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[14]: что такое mutable?
От: Анoним  
Дата: 10.04.03 07:38
Оценка: +2
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Вы мне еще скажите что у VC реализован нормальный компилятор


Речь шла не о сравнении. Речь шла о том, что BC++ содержит гадости и не является авторитетом.
Гадости VC++ и BC++ трудно сравнивать в ключе лучше/хуже-больше/меньше. Они просто разные.
Жаль, что нужно тратить время, чтобы "ставить их на колени". Причем на каждый компилятор.
Re[15]: что такое mutable?
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 10.04.03 07:47
Оценка:
Здравствуйте, Анoним, Вы писали:

А>Жаль, что нужно тратить время, чтобы "ставить их на колени". Причем на каждый компилятор.


Ну для этого особых усилий не требуется — достаточно участвовать в проекте в котором сложность не является пустым звуком

PS. Сейчас прийдет злобный топотун
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[14]: что такое mutable?
От: m.a.g. Мальта http://dottedmag.net/
Дата: 10.04.03 09:27
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Вы мне еще скажите что у VC реализован нормальный компилятор


7.1 компилер видел? Бегом смотреть!
Re[2]: что такое mutable?
От: Denn  
Дата: 10.04.03 12:51
Оценка:
Здравствуйте, Amor, Вы писали:

A>mutable — значит "не const ни при каких обстоятельствах"


А что же тогда значит volatile???
Re[3]: что такое mutable?
От: Amor Россия  
Дата: 10.04.03 12:55
Оценка:
Здравствуйте, Denn, Вы писали:

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


A>mutable — значит "не const ни при каких обстоятельствах"


D> А что же тогда значит volatile???


Из Страуструпа:

Volatile — это подсказка компилятору, что объект может изменять свое значение не описанным в языке образом, так что агрессивной оптимизации следует избегать

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