Название: const_cast (случай) Отправлено: Igors от Август 02, 2011, 16:45 Мелочь конечно, но для меня оказалось неожиданностью
Код Увы, после этого обе строки (temp и src) становятся "xbc" :) пришлось сделать Код
Название: Re: const_cast (случай) Отправлено: Пантер от Август 02, 2011, 16:49 Странно.
Цитировать string ( const string& str ); Content is initialized to a copy of the string object str. Название: Re: const_cast (случай) Отправлено: Igors от Август 02, 2011, 16:52 Странно. Шерит, собака. (gcc 4.2)Цитировать string ( const string& str ); Content is initialized to a copy of the string object str. Название: Re: const_cast (случай) Отправлено: Пантер от Август 02, 2011, 16:53 Пруф дай, а то что-то в http://www.cplusplus.com/ нету.
Название: Re: const_cast (случай) Отправлено: Igors от Август 02, 2011, 17:16 Пруф дай, а то что-то в http://www.cplusplus.com/ нету. Там говорится, но так "вскольз" что обратить внимание трудно. Легко проверить такКод
Edit: печатаем адреса, а не сами строки Название: Re: const_cast (случай) Отправлено: zenden от Август 02, 2011, 19:13 Используете грязные хаки, а потом удивляетесь ))
Каждый вправе реализовывать стандарт по-своему Название: Re: const_cast (случай) Отправлено: Igors от Август 02, 2011, 19:16 Используете грязные хаки, а потом удивляетесь )) Ну привет, разве const_cast грязный хак? :) Да и как перевести std::string в upper case (при отсутствии дуста)?Название: Re: const_cast (случай) Отправлено: LisandreL от Август 02, 2011, 21:46 разве const_cast грязный хак? Ну разве мы можем не верить Алёне (http://alenacpp.blogspot.com/2005/10/mutable-constcast.html)? ;DЦитировать Если mutable вполне законное средство убрать константность, у него есть классические применения, то const_cast - это всегда некий хак. Ну, а если серьёзно, то вы нарушаете инкапсуляцию объекта, поэтому да, это грязный хак.Название: Re: const_cast (случай) Отправлено: Anchorite от Август 03, 2011, 08:27 ... Да и как перевести std::string в upper case (при отсутствии дуста)? Учим матчасть :) Код: #include <iostream> Название: Re: const_cast (случай) Отправлено: Igors от Август 03, 2011, 11:14 Учим матчасть :) Какой Вы быстрый :) Но в оригинале Utils::UpCase так сделано только для Вындоуз платформы, а на Mac вызывается нативная UppercaseText. Разбираться почему мне не хотелось, думал проскочить по-быстрому - ведь я сделал копию.Код: transform(str.begin(), str.end(), str.begin(), ::toupper); Ну, а если серьёзно, то вы нарушаете инкапсуляцию объекта, поэтому да, это грязный хак. Конечно нарушаю - и понес заслуженное наказание. Но для меня новостью оказалось что некоторые STL контейнеры также могут шерить данные. Название: Re: const_cast (случай) Отправлено: LisandreL от Август 03, 2011, 14:51 Но для меня новостью оказалось что некоторые STL контейнеры также могут шерить данные. В C++03 std::string - корова (copy-on-write), причём без требования атомарности, так что в многопоточном приложении возможна «гибель человеческих жертв». Из интересующих нас компиляторов - реализовано в gcc, не реализовано в MSVC ( по крайней мере в 2008- ). |