Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 14.07.2011, 21:16   #31
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
ни в коем случае, от того что прочли один раз стандарт вы им не станете.
лишь тогда когда научитесь применять знания, взятые из стандарта, для дела, тогда уже можно говорить о профессионализме.что за бред?
отстутствия static является показателем тогоо будет this или нет, но отнюдь не const.
Код:
class a
{
void f();
};
тут const нету, но this будет передам тем не менее.
Вот как раз бред у вас. А знаете, почему бред? Потому что вы не читали стандарт, а начинаете фантазировать! Квалификатор const у функции-члена класса как раз относится к неявному параметру this! Это бы вам следовало знать! Если он отсутствует, то это означает, что через указатель this вы можете менять данные объекта.

Вот в этом и проблема, что такие невежы, как вы, лезете с апломбом давать советы другим программистам, а сами не знаете элементарных вещей! То есть такие как вы плодят безграмотность!
Об этом и идет речь!
Со мной можно встретиться на 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 вы можете менять данные объекта.
а может не надо переделывать мои слова?
я сказал про наличие this, но про то можно ли менять данные через него или нет.
Цитата:
отстутствия static является показателем тогоо будет this или нет, но отнюдь не const.
Цитата:
Квалификатор const всегда относится к объектам. К какому объекту в данном случае относится этот квалификатор?
к this.

повторю еще раз, читайте внимательно что люди пишут.
я говорил про одно, вы перепрыгнули на другое, и при этом говорите что я несу бред.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 14.07.2011 в 21:23.
Пепел Феникса вне форума
Старый 14.07.2011, 21:24   #34
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а может не надо переделывать мои слова?
я сказал про наличие this, но про то можно ли менять данные через него или нет.к this.
Браво! Начинает радовать, что до вас что-то начинает доходить! Итак, когда объявляется функция-член класса

void f() const;

то значит этот const относится к указателю this. Так с чем вы были не согласны?

А так как указатель this обьъявлен именно в этой функции как константный, то через него нельзя менячть объект. Только и всего. Это совершенно не означает, что сам объект класса константный. Это всего лишь означает, что вы обращаетесь к данным объекта через констатный указатель. Поэтому и менять объект в этой функции нельзя.

Учите, молодой человек, стандарт!
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума
Старый 14.07.2011, 21:28   #35
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Так с чем вы были не согласны?
да Вы так сказали, как будто, именно от const зависит передается ли this или нет.
может неверно понял(сейчас скачет погода, не очень хорошо себя чувствую), тогда приношу извинения.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 14.07.2011, 21:45   #36
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 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
pproger вне форума
Старый 15.07.2011, 18:12   #37
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
2Сыроежка
дабы закончить флуд, яви пример, который человек (например я), обучавшийся по классической литературе (страуструп, вандервуд, джосаттис, саттер) не сможет понять/увидеть в нем ошибку, которую сможет понять/увидеть человек, читавший стандарт. если не сможешь, то просто промолчи, и так уже порядком нафлудили
Флуд как раз имеет место с вашей стороны. Я говорил вполне о конкретных вещах. Что касается вашего требования предоставить вам какой-то код, то, как я понимаю, я вам ничего не должен. Тем не менее я вам отвечу на ваш вопрос. Дело в том, что все ваши классические книги писались в разное время и отражают разные этапы развития стандарта. Почитайте книгу о развитии С++ Страустропа. Там он описывает, как на разных этаках развития С++ принимались или отвергались те, или иные идеи, и как они со временем уточнялись.

Более того, как известно, язык наш - враг наш. Расскажите какую-нибудь историю своему знакомому, попросите ее пересказать другому вашем знакомому, а потом послушайте тот пересказ, который получился в итоге у последнего рассказчика, и вы увидите, насколько ваша исходная история отличается от сейчас услышанной! Точно также и с книгами. Книги на самом деле не так легко писать. В голове кажется, что все ясно, а начинаешь писать, и получается очень корявый текст, который лишь запутывает идею.
Поэтому вместо того, чтобы пользоваться "сарафанным радио", всегда лучше читать первоисточник. А свое невежество демонстрировать, как это демонстрируете вы, да тем более являсь модератором, негоже.

Я могу привести кучу ошиьок у известных авторов, являющмхся авторитетами для многих. Так, например, недавно вышла книга, которая называется примерно так, как "Справочник по STL и алгоритмам". Так там уже на первых страницах приводится совершенно безграмотный код для алгоритма std::find.

Код:
template <typename InputIterator,
              typename T>
InputIterator find( InputIterator first,
                         InputIterator last,
                         const T &value )
{
   for ( ; ( first != last ) && ( *first != value ) ; ++first );

   return ( first );
}
Ну, и как, видите ошибку? А теперь представьте положение человека, который никогда не читал стандарт, а лишь читал подобные книги, сможет ли он осознать, что алгоритм написан не правильно?!

Проблема еще в том, что в книгах обычно затрагиваются лишь отдельные вопросы, те вопросы, которые автор книги посчитает на свое усмотрение важными. Поэтому читатель книги получает не полные, отрывочные знания. Причем книги пишут литературным языком, и очень часто избегают строгих определений, которые присутствуют в стандарте.

Я не могу назвать профессиональным программистом того, кто не знает стандарт языка. Это всего лишь самоуверенный сноб, который что-то там из себя мнит. В результате такой сноб задает совершенно, как бы помягче сказать, несостоятельные вопросы, аналогичные вашему вопросу.
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума
Старый 15.07.2011, 18:13   #38
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
Флуд как раз имеет место с вашей стороны.
Сыроежка, негоже говорить такое модератору.
_-Re@l-_ вне форума
Старый 15.07.2011, 18:27   #39
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Тут есть некоторая натяжка, впрочем, для упрощения понимания прокатит.
Указатель this в отличие от остальных аргументов передается не через стек, а через регистр ECX.
Мы уже разобрались, что ваше утверждение ни по одному пункту неверное.

Но тем не менее за кулисами остался вопрос, а почему ваш компилятор передает указатель 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
По умолчанию

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
Сыроежка, негоже говорить такое модератору.
Я все-таки наедюсь, что здесь существует демократия, а не феодализм, а модератор - это не майор Евсюков, который считает, что если ему дали пистолет, то он может отстреливать всех подряд, кто ему не нравится.
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прокоментируйте строчку... 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