tag:blogger.com,1999:blog-10303035.post112714250923622039..comments2024-02-04T23:20:04.066+03:00Comments on Алёна C++: Использование const. Часть 1.Alenahttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comBlogger28125tag:blogger.com,1999:blog-10303035.post-44924267037435681442016-12-03T11:41:36.887+03:002016-12-03T11:41:36.887+03:00Спасибо большое! Очень доступно!Спасибо большое! Очень доступно!Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-86774143127103587442016-11-17T13:43:14.012+03:002016-11-17T13:43:14.012+03:00Хочу заметить:
из статьи:
int q=1;
const int *p;
...<i><br />Хочу заметить:<br /><br />из статьи:<br />int q=1;<br />const int *p;<br />p = &q; //на что указывает p можно менять<br />*p = 5; //ошибка, число менять уже нельзя<br /><br />предложение:<br />*p = 5; //ошибка значение переменной q нельзя менять с помощью указателя p<br />int *p2 = &q;<br />*p2 = 5; //ошибки нет значение переменной q можно!!! менять с помощью указателя p2<br /></i><br /><br />предложение получше:<br />*p = 5; //ошибка значение переменной q нельзя менять с помощью указателя p<br /> q = 5; //ошибки нет значение переменной q можно!!! менять с помощью q!!!! ЧУДО.<br />Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-20559487003340765682016-11-11T18:59:53.813+03:002016-11-11T18:59:53.813+03:00Хочу заметить:
из статьи:
int q=1;
const int *p;
...Хочу заметить:<br /><br />из статьи:<br />int q=1;<br />const int *p;<br />p = &q; //на что указывает p можно менять<br />*p = 5; //ошибка, число менять уже нельзя <br /><br />предложение: <br />*p = 5; //ошибка значение переменной q нельзя менять с помощью указателя p<br />int *p2 = &q;<br />*p2 = 5; //ошибки нет значение переменной q можно!!! менять с помощью указателя p2Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-89686106953996945732015-10-14T17:00:35.146+03:002015-10-14T17:00:35.146+03:00Unknown
Я не могу понять.. это указатель на конст...<b>Unknown</b><br /><br /><i>Я не могу понять.. это указатель на константный указатель или константный указатель на указатель?</i><br /><br />Это указатель на константный указатель. По аналогии с int const* p2.<br /><br />Это всегда можно проверить, написать небольшой тест и попробовать изменить p5 и то, куда оно указывает.<br /><br />Зачем - отдельный вопрос, надо по коду смотреть.<br /><br />Alenahttps://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-90905677295576199102015-10-07T23:54:31.642+03:002015-10-07T23:54:31.642+03:00Алена, спасибо большое за статью!
Скажите, а как ...Алена, спасибо большое за статью!<br /><br />Скажите, а как быть с этим вот:<br />int * const * p5<br /><br />Я не могу понять.. это указатель на константный указатель или константный указатель на указатель? По сути должно быть верным второе (константный указатель на указатель, иначе зачем использовать const в данном случае). Но не до конца уверена, что я права.Anonymoushttps://www.blogger.com/profile/05987548671800164487noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-25596835910648154812015-05-11T22:02:15.029+03:002015-05-11T22:02:15.029+03:00Алена я вас люблю!!
Алена я вас люблю!! <br />Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-60807877479994075692015-01-21T01:58:44.827+03:002015-01-21T01:58:44.827+03:00Готов поспорить, что если добавить volatile const ...<i>Готов поспорить, что если добавить volatile const int x = 10;<br />то на экран будет выведено 11. (Не смотря на undefined behavior)</i><br /><br />Ты прав. Сейчас проверил - и правда выводится 11Пётрnoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-34510797809273466942015-01-20T20:31:56.279+03:002015-01-20T20:31:56.279+03:00На экране 10, но непонятно, почему... Что тут прои...<i>На экране 10, но непонятно, почему... Что тут происходит? Куда указывает p?</i><br />Готов поспорить, что если добавить volatile const int x = 10;<br />то на экран будет выведено 11. (Не смотря на undefined behavior)Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-76599532021529626752014-04-08T15:16:45.776+04:002014-04-08T15:16:45.776+04:00g++.exe p.cpp -o p.exe -m32 -std=c++11
const char...g++.exe p.cpp -o p.exe -m32 -std=c++11<br /><br />const char *p1="maus";<br />char const *p2="elefant";<br /><br />p1="rat";//ошибки нет<br />p2="krokodail";//ошибки нет<br /><br />;)Alexandrnoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-24671701287131079422012-02-01T14:17:39.241+04:002012-02-01T14:17:39.241+04:00Интересно, они серьёзно все считают, что const обя...Интересно, они серьёзно все считают, что const обязательно надо использовать?<br />Ребята, не верьте никому, даже мне.<br />(Мюллер)Андрей Ивановhttp://isi.elitno.net/noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-20526393684410971232011-06-02T16:51:06.454+04:002011-06-02T16:51:06.454+04:00Большое спасибо,помогло!Большое спасибо,помогло!Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-71985305890713232922011-03-11T15:14:04.606+03:002011-03-11T15:14:04.606+03:00Алена, вы прсто умничка!Алена, вы прсто умничка!Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-85824895965519358652011-03-10T12:26:05.131+03:002011-03-10T12:26:05.131+03:00Здорово. Всё ясно =)Здорово. Всё ясно =)Lex_87noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-84301948006864652272011-02-05T10:05:19.610+03:002011-02-05T10:05:19.610+03:00nightshad0w
Спасибо за статью.
пожалуйста :-)
А...<b>nightshad0w</b><br /><i>Спасибо за статью.</i><br /><br />пожалуйста :-)<br /> <br /><i>А как использовать мнемоническое правило с чертой по звездочке в случае двойных и более указателей как на элементарные типы, так и на объекты, да еще и в аргументах функций(методов)?</i><br /><br />Вот тут про это много написано:<br />http://www.unixwiz.net/techtips/reading-cdecl.htmlAlenahttps://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-51807212831620848262011-02-04T07:48:28.890+03:002011-02-04T07:48:28.890+03:00Спасибо за статью.
А как использовать мнемоническ...Спасибо за статью. <br />А как использовать мнемоническое правило с чертой по звездочке в случае двойных и более указателей как на элементарные типы, так и на объекты, да еще и в аргументах функций(методов)?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-85379925176720731212010-04-30T08:12:29.436+04:002010-04-30T08:12:29.436+04:00Спасибо за статью, действительно помогла разобратс...Спасибо за статью, действительно помогла разобратся с непонятными моментами.leghttps://www.blogger.com/profile/09697181073880923696noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-52088275215101260252010-04-29T18:26:07.173+04:002010-04-29T18:26:07.173+04:002leg:
видимо здесь происходит не изменение даных а...<b>2leg:</b><br /><i>видимо здесь происходит не изменение даных а присвоение нового адреса указателю</i><br /><br />Да, именно такAlenahttps://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-72752821479325006902010-04-29T12:35:36.817+04:002010-04-29T12:35:36.817+04:002leg:
Возникло недопонимае вопроса
почему
Не дол...<b>2leg:</b><br /><br /><i>Возникло недопонимае вопроса<br />почему</i><br /><br />Не должно быть разницы, minGW меня удивил. Какие-то компиляторы это копиляют, какие-то нет. Такое присваивание - не очень хорошая идея. В случае p1 будет создана новая строка "rat", указателей на первую строку не останется. Причем модифицирование такой строки ведет к undefined behavior.<br />Если вам нужно просто работать со строками, используйте std::string.Alenahttps://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-89992368228433020192010-04-29T11:58:28.080+04:002010-04-29T11:58:28.080+04:00Прошу прощения , теперь разобрался пусть и перечи...Прошу прощения , теперь разобрался пусть и перечитать пришлось несколько раз если я всеже неправ то прошу меня поправить<br />const char *p1="maus";<br />p1="rat";->видимо здесь происходит не изменение даных а присвоение нового адреса указателю,придется еще несколько раз прочитать работу указателей со строкамиleghttps://www.blogger.com/profile/09697181073880923696noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-44457251441452268702010-04-28T10:25:52.658+04:002010-04-28T10:25:52.658+04:00Возникло недопонимае вопроса
почему
const char *p...Возникло недопонимае вопроса<br />почему<br /> const char *p1="maus";<br /> char const *p2="elefant";<br /><br />p1="rat";//ошибка<br />p2="krokodail";//ошибки нет<br /><br />если это важно компилятор minGWleghttps://www.blogger.com/profile/09697181073880923696noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-83555429600784892352010-03-05T17:17:54.412+03:002010-03-05T17:17:54.412+03:00Хм.. вообще логично :)
Благодарю за помощь!
И спас...Хм.. вообще логично :)<br />Благодарю за помощь!<br />И спасибо за статью! Побудила разобраться в тонкостях)Unknownhttps://www.blogger.com/profile/18059960443160210288noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-45193120390094528132010-03-05T12:28:07.323+03:002010-03-05T12:28:07.323+03:002DWord:
На экране 10, но непонятно, почему... Что...<b>2DWord:</b><br /><br /><i>На экране 10, но непонятно, почему... Что тут происходит? Куда указывает p?</i><br /><br />Вы снимаете const с переменной, которая была изначально объявлена как const. По Стандарту это ведет к неопределенному поведению (7.1.5.1).Alenahttps://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-3742764501290787272010-03-04T04:17:42.565+03:002010-03-04T04:17:42.565+03:00Уважаемая Алёна!
Не могли бы вы помочь разобраться...Уважаемая Алёна!<br />Не могли бы вы помочь разобраться с следующей ситуацией?<br /><br /> const int x=10;<br /> int* p=const_cast(&x);<br /> *p=11;<br /> cout << x << endl;<br /><br />На экране 10, но непонятно, почему... Что тут происходит? Куда указывает p?<br />Он точно указывает не на x, т.к. добавив cout << *p << endl; на экране будет как 10, так и 11. Значит p указывает куда-то кроме икса, но куда? Кто выделял память под эту 11?<br />Я предполагаю, что p указывает на временную переменную, созданную во время вычисления выражения с приведением типа, но... не уверен :(<br />Разве временная переменная не должна быть уничтожена после вычисления выражения?Unknownhttps://www.blogger.com/profile/18059960443160210288noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-13753359071888413892009-11-22T11:52:59.515+03:002009-11-22T11:52:59.515+03:00Мне, кажется, имеет смысл еще осветить следующую с...Мне, кажется, имеет смысл еще осветить следующую ситуацию:<br /><a rel="nofollow"><br />class A<br />{<br />private:<br /> std::vector {B*} lData;<br />public:<br /> void addData(B* data);<br /> B* getData(const int i) const;<br />}<br /></a><br /><i>Примечание: Не смог написать треугольные скобочки при инстанциировании шаблона - написал {}</i> <br />Нужно добавить, что класс A устроен так, что элементы lData вообще нет смысла менять или даже удалять из списка. Например, если класс A некая функциональная обертка над B. Но создавать вектор указателей на константы плохо (в какой-то книге об этом говорилось). Тут нужен компромисс :) и поэтому не смотря на то, что addData не меняет передаваемый указатель и объект на который он указывает const ставить не стоит.RShttps://www.blogger.com/profile/04103703781681094663noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-75786813430240229342009-08-18T01:46:20.727+04:002009-08-18T01:46:20.727+04:00Спасибо!Спасибо!Unknownhttps://www.blogger.com/profile/14150091625447788847noreply@blogger.com