|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
14.07.2011, 21:16 | #31 | |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Цитата:
Вот в этом и проблема, что такие невежы, как вы, лезете с апломбом давать советы другим программистам, а сами не знаете элементарных вещей! То есть такие как вы плодят безграмотность! Об этом и идет речь!
Со мной можно встретиться на www.clipper.borda.ru
Последний раз редактировалось Сыроежка; 14.07.2011 в 21:20. |
|
14.07.2011, 21:18 | #32 | |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Цитата:
Задам вам очень простой вопрос. Квалификатор const всегда относится к объектам. К какому объекту в данном случае относится этот квалификатор?
Со мной можно встретиться на www.clipper.borda.ru
|
|
14.07.2011, 21:19 | #33 | |||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
я сказал про наличие this, но про то можно ли менять данные через него или нет. Цитата:
Цитата:
повторю еще раз, читайте внимательно что люди пишут. я говорил про одно, вы перепрыгнули на другое, и при этом говорите что я несу бред. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 14.07.2011 в 21:23. |
|||
14.07.2011, 21:24 | #34 | |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Цитата:
void f() const; то значит этот const относится к указателю this. Так с чем вы были не согласны? А так как указатель this обьъявлен именно в этой функции как константный, то через него нельзя менячть объект. Только и всего. Это совершенно не означает, что сам объект класса константный. Это всего лишь означает, что вы обращаетесь к данным объекта через констатный указатель. Поэтому и менять объект в этой функции нельзя. Учите, молодой человек, стандарт!
Со мной можно встретиться на www.clipper.borda.ru
|
|
14.07.2011, 21:28 | #35 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
может неверно понял(сейчас скачет погода, не очень хорошо себя чувствую), тогда приношу извинения. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
14.07.2011, 21:45 | #36 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2Сыроежка
дабы закончить флуд, яви пример, который человек (например я), обучавшийся по классической литературе (страуструп, вандервуд, джосаттис, саттер) не сможет понять/увидеть в нем ошибку, которую сможет понять/увидеть человек, читавший стандарт. если не сможешь, то просто промолчи, и так уже порядком нафлудили
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
15.07.2011, 18:12 | #37 | |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Цитата:
Более того, как известно, язык наш - враг наш. Расскажите какую-нибудь историю своему знакомому, попросите ее пересказать другому вашем знакомому, а потом послушайте тот пересказ, который получился в итоге у последнего рассказчика, и вы увидите, насколько ваша исходная история отличается от сейчас услышанной! Точно также и с книгами. Книги на самом деле не так легко писать. В голове кажется, что все ясно, а начинаешь писать, и получается очень корявый текст, который лишь запутывает идею. Поэтому вместо того, чтобы пользоваться "сарафанным радио", всегда лучше читать первоисточник. А свое невежество демонстрировать, как это демонстрируете вы, да тем более являсь модератором, негоже. Я могу привести кучу ошиьок у известных авторов, являющмхся авторитетами для многих. Так, например, недавно вышла книга, которая называется примерно так, как "Справочник по STL и алгоритмам". Так там уже на первых страницах приводится совершенно безграмотный код для алгоритма std::find. Код:
Проблема еще в том, что в книгах обычно затрагиваются лишь отдельные вопросы, те вопросы, которые автор книги посчитает на свое усмотрение важными. Поэтому читатель книги получает не полные, отрывочные знания. Причем книги пишут литературным языком, и очень часто избегают строгих определений, которые присутствуют в стандарте. Я не могу назвать профессиональным программистом того, кто не знает стандарт языка. Это всего лишь самоуверенный сноб, который что-то там из себя мнит. В результате такой сноб задает совершенно, как бы помягче сказать, несостоятельные вопросы, аналогичные вашему вопросу.
Со мной можно встретиться на www.clipper.borda.ru
|
|
15.07.2011, 18:13 | #38 | |
C++, Java
Старожил
Регистрация: 10.04.2010
Сообщений: 2,665
|
Цитата:
|
|
15.07.2011, 18:27 | #39 | |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Цитата:
Но тем не менее за кулисами остался вопрос, а почему ваш компилятор передает указатель this через ECX, что вы неоправданно сделали из этого обобщения. Как я уже указал выше, к языку С++ это никакого отношения не имеет, и никаким соглашением о передачи параметров не соответсвует. Но тогда что это такое? Дело в том, что каждый производитель компилятора стремится, чтобы его компилятор был более привлекателен для пользователей по сравнению с компиляторами конкурентов. А потому производители компиляторов улучшают свойства своих компиляторов, стараясь предоставить более оптимизированный объектный код. Поэтому они вводят различные опции компиляции или собственные спецификаторы, которые способствуют возможности генерировать более оптимальный и быстродействующий код. А как можно повысить быстродействие объектного кода? Один из способов - это, например, часть параметров передавать не через стек, а через регистры, так как, как известно, работать с регистрами более эффективно, чем с памятью. В связи с этим некоторые разработчики компиляторв, как, например, Borland Builder C++, или Microsoft C++ ввели у себя такой спецификатор, как _fastcall, который ставится перед именем функции. Когда компилятор встречает такой спецификатор, то для него это означает, что некоторые аргументы функции ему разрешается передать через регистры. В Borlan Builder C++ спецификатор _fastcall означает, что компилятор может первые три параметра функции, если они умещаются в регистре, передать через регистры EAX, EDX, ECX. Причем именно в таком порядке использования регистров. Остальные же аргументы передаются через стек. Microsoft C++ для этих целей использует два регистра ECX и EDX, а остальные параметры передает через стек. Очевидно, что для функций-членов класса, так как указатель this помещается по размеру в регистр, то для оптимизации кода Microsoft помещает его в регистр ECX согласно спецификации, задаваемой идентификатором _fastcall, даже если пользователь не задал самостоятельно этот спецификатор. Именно это и явилось причиной того, что, просматривая объектный код, вы увидели, что указатель this передается через регистр ECX. То есть, подводя итоги, это никак не связано ни с С++, ни с какими-то пресловутыми соглашениями о связях. Это всего лишь собственные нововведения каждого отдельного разработчика компилятора, направленные на то, чтобы сделать свой компилятор наиболее эффективным. Как известно, для Intek пратформ наиболее эффектиынм компилятором, то есть генерирующим наиболее быстродействующий и эффективный код, является компилятор фирмы Intel. Но у него есть другие слабые стороны. А именно у него нет тех программных систем, которые предоставляют Microsoft в виде библиотеки MFC, либо Borland в виде библиотеки VCL.
Со мной можно встретиться на www.clipper.borda.ru
|
|
15.07.2011, 18:29 | #40 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Я все-таки наедюсь, что здесь существует демократия, а не феодализм, а модератор - это не майор Евсюков, который считает, что если ему дали пистолет, то он может отстреливать всех подряд, кто ему не нравится.
Со мной можно встретиться на www.clipper.borda.ru
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
прокоментируйте строчку... | Natashka Milashka | Общие вопросы Delphi | 4 | 20.05.2011 07:54 |
Прокоментируйте код | Romario92 | Общие вопросы C/C++ | 13 | 30.10.2010 22:49 |
Обьясните что делают и означают пару строк в программном коде! | FreeZeT | Общие вопросы C/C++ | 2 | 15.06.2010 03:20 |
Расшифровать подробно пару строк программы | prikolist | Общие вопросы C/C++ | 4 | 25.03.2009 22:50 |
Необходимо расшифровать пару строк программы | prikolist | Общие вопросы C/C++ | 12 | 19.03.2009 22:08 |