Roman Odaisky:
RO>Поэтому в C++0x есть третий тип ссылок — rvalue references, которые действуют, как достандартные неконстантные ссылки.
Что интересно, даже в текущей версии черновика (документ N3000) rvalue references довольно плохо проработаны. И это при том, что формулировки связанных с ними правил были впервые предложены в 2005 году — см. N1770 (сами rvalue references были предложены в 2004 году — см. N1690).
И лишь в прошлом месяце появился документ N3010, решающий ряд фундаментальных проблем, связанных с введением в язык rvalue-ссылок.
Здравствуйте, wander, Вы писали:
W>Здравствуйте, MikelSV, Вы писали:
Это *опа.
Класс HLString сделан специально для сбора строки.
В нем специално сделан operator+.
Для пвозможности просто написать: "text"+val+"text"+val...
Предлагаете "text"+=val+="text"+=val... ? эт бред.
W>Drawn(MString().add("Unknown command '").add(comm).add("'\r\n\r\n"));
А, ну да. ну это просто бесит. почему не в 3 строки?? это конечно логично, но тупо.
HLString сделан для ускорения. И легко зкменяется на MString()+"text"+val+"text"+val...
Но я борюсь за каждую операцию с памятью. ^_^
W>my_string & res = my_string("bla-bla") + other_string("bla-bla"); // бамс, ошибка!
Да, снова этот глюк.
В моем случае все сводится к MString;
По странному стечению обстоятельств студия его решает.
HLString::operator MString();
Код писался так, чтобы он работал.
Я не понимаю одну вещь: если программа будет вылетать, я буду ее исправлять. Но этот бред с попытками запретить мне что-то делать.
Это называется "делай как сказали и не дергайся". Это уже напоминает школу и особо долбанутых учителей.
Теперь как аргумент против гцц я могу добавить что он логичен на столько же сколько и туп.
Большинство своих ошибок я исправил, так как в принципе понял логику гцц, я потихоньку отступал, но здесь гцц чуть ли не вытер ноги о мою логику.
Пессимистическая программка. Она убивает мою в будущее и закрывает возможности для творчества.
mutable не внушают.
Как хорошо, что еще до стандартизации работы с памятью не добрались, хоть там можно почувствовать себя свободным и творить все, что вздумается.
MSV>>Варианты для гцц также мучил в студии. Все нормально понимаются. Жесткое следование стандартам — зло.
W>Зло — это нарушение стандартов студией. Если бы язык был в ней правильно реализован с самого начала, то всего этого бардака не было бы. W>Ведь все это сделано не просто так, а потому что иначе — нелогично. Пример с оператором+ ясно это показывает.
Римское правило. Тот, кто говорит, что Это не может быть сделано, никогда не должен мешать тому, кто Это делает.
Осень, ну вы поняли.
Зачем еще один код? А человек?
Хаос вокруг, и логика придумана для ориентирования в этом хаосе.
Гцц же оторвался от реальности и сделал свою логику.
Но хаос то никуда не исчез, а логикой пользоваться уже не получается.
С этого то все конфликты.
Я буду любить то, что не заставляет меня страдать.
А что меня любит и не будет пытаться это делать.
Римское правило. Тот, кто говорит, что Это не может быть сделано, никогда не должен мешать тому, кто Это делает.
Осень, ну вы поняли.
Зачем еще один код? А человек?
Здравствуйте, dsorokin, Вы писали:
D>2MikelSV
D>Слова
MSV>> В данном случае единственный вариант реализации operator+ может быть: MSV>> HLString& operator+(const MString& string){...}
D>и
MSV>> Теперь как аргумент против гцц я могу добавить что он логичен на столько же сколько и туп.
D>как-то не вяжутся друг с другом. Странно, что оператор сложения работает и не валит программу.
А почему он должен валить то?
D>Ради любопытства хочу спросить, а сколько килобайт у вас такого кода?
1,95 МБ. хмм, многовато.
1,57 МБ без автонагенерированного.
только .cpp и .h.
Это нечто вроде стандартной библиотеки. На основе нее пишутся программы. Весь код, который можно использовать повторно сваливается сюда.
Римское правило. Тот, кто говорит, что Это не может быть сделано, никогда не должен мешать тому, кто Это делает.
Осень, ну вы поняли.
Зачем еще один код? А человек?
Здравствуйте, MikelSV, Вы писали:
MSV>Здравствуйте, wander, Вы писали:
W>>Здравствуйте, MikelSV, Вы писали:
MSV>Это *опа.
MSV>Класс HLString сделан специально для сбора строки. MSV>В нем специално сделан operator+. MSV>Для пвозможности просто написать: "text"+val+"text"+val... MSV>Предлагаете "text"+=val+="text"+=val... ? эт бред.
Я не предлагаю ничего. Я просто объяснил семантику, которую будут ожидать те, кто когда либо будут читать ваш код. Если вы продолжите писать в таком непонятном стиле, то вы столкнетесь серьезными трудностями.
W>>Drawn(MString().add("Unknown command '").add(comm).add("'\r\n\r\n")); MSV>А, ну да. ну это просто бесит. почему не в 3 строки?? это конечно логично, но тупо.
А никто не запрещает поменять add на operator+ в принципе. Вот вы почему так реагируете? Когда я писал про опреатор+, я хотел показать вам, как будет себя вести человек, который вынужден будет смотреть ваш код. Это не очевидно, что оператор+ работает c модификацией аргумента. Вы понимаете сколько граблей расставляете?
MSV>HLString сделан для ускорения. И легко зкменяется на MString()+"text"+val+"text"+val... MSV>Но я борюсь за каждую операцию с памятью. ^_^
W>>my_string & res = my_string("bla-bla") + other_string("bla-bla"); // бамс, ошибка! MSV>Да, снова этот глюк. MSV>В моем случае все сводится к MString; MSV>По странному стечению обстоятельств студия его решает.
Одно хочу сказать, большинство компиляторов себя так не ведут. Значит студия в меньшинстве. А значит вам придется мирится с этим, если вы хотите писать сопровождаемые программы, которые собирались бы везде, где нужно. Это то, что, возможно, дается не всем, но стремиться к этому нужно. Иначе грош цена вам как специалисту.
MSV>Я не понимаю одну вещь: если программа будет вылетать, я буду ее исправлять. Но этот бред с попытками запретить мне что-то делать. MSV>Это называется "делай как сказали и не дергайся". Это уже напоминает школу и особо долбанутых учителей.
Это называется делай так, чтобы другие тебя поняли. Вы программист. Значит рано или поздно вам придется работать в команде и считаться с опытом других.
MSV>Теперь как аргумент против гцц я могу добавить что он логичен на столько же сколько и туп.
Вам не нравится, что для того, чтобы сделать как "хочется" в С++ нужно предварительно потратить некоторые усилия (сюда относятся все паттерны, которые приходится реализовывать руками, тогда как в других языка они встроены либо во фреймворк, либо в сам язык)? Тогда возможно С++ — это язык не для вас. И ГЦЦ тут не при чем.
MSV>Большинство своих ошибок я исправил, так как в принципе понял логику гцц, я потихоньку отступал, но здесь гцц чуть ли не вытер ноги о мою логику.
Это получилось, потому что логики нет. В программировании логика одна — математическая.
MSV>Пессимистическая программка. Она убивает мою в будущее и закрывает возможности для творчества.
Вы сами убиваете свое будущее. Не знаю, мягче не скажешь. Возможности для творчества есть всегда, нужно только осмотреться.
MSV>mutable не внушают.
mutable — стандартное решение этой задачи. Оно будет работать везде. И ваш код поймут все. И вы соберете эту программу на любой платформе, где есть стандартный С++. Если это не внушает, то тогда я уже не знаю что вам нужно.
MSV>Как хорошо, что еще до стандартизации работы с памятью не добрались, хоть там можно почувствовать себя свободным и творить все, что вздумается.
Стандартизация до работы с памятью добралась и диктуется условиями конкретной операционной системы. Если вы заканчивали техническую специальность, то возможно помните предмет "Операционные системы", где все стандарты по организации памяти были рассмотрены.
MSV>(печально) Программирование — творчество, стандарты — зло.
Программирование — творчество, я тоже так считаю. Но мы работает не в сферическом вакууме. Мы работает в реальном мире и вынуждены считаться с его законами, с физическими и социальными. О тех и других я упоминал выше.
Здравствуйте, MikelSV, Вы писали:
D>> Странно, что оператор сложения работает и не валит программу. MSV> А почему он должен валить то?
Он не должен возвращать ссылку. Это — антипаттерн. Поведение отличное от того, что ожидается от оператора сложения. Ошибка дизайна. Более того, мина замедленного действия.
D>> а сколько килобайт у вас такого кода? MSV> 1,57 МБ без автонагенерированного.
Для Си++ это не так много. Но в этом есть хорошая новость. Значит, подвести под стандарты — вполне реальная задача
Здравствуйте, wander, Вы писали:
W>Здравствуйте, MikelSV, Вы писали:
MSV>>Здравствуйте, wander, Вы писали:
W>>>Здравствуйте, MikelSV, Вы писали:
MSV>>Это *опа.
MSV>>Класс HLString сделан специально для сбора строки. MSV>>В нем специално сделан operator+. MSV>>Для пвозможности просто написать: "text"+val+"text"+val... MSV>>Предлагаете "text"+=val+="text"+=val... ? эт бред. W>Я не предлагаю ничего. Я просто объяснил семантику, которую будут ожидать те, кто когда либо будут читать ваш код. Если вы продолжите писать в таком непонятном стиле, то вы столкнетесь серьезными трудностями.
W>>>Drawn(MString().add("Unknown command '").add(comm).add("'\r\n\r\n")); MSV>>А, ну да. ну это просто бесит. почему не в 3 строки?? это конечно логично, но тупо. W>А никто не запрещает поменять add на operator+ в принципе. Вот вы почему так реагируете? Когда я писал про опреатор+, я хотел показать вам, как будет себя вести человек, который вынужден будет смотреть ваш код. Это не очевидно, что оператор+ работает c модификацией аргумента. Вы понимаете сколько граблей расставляете?
Реагирую по тому, что это дело жестко пересекается с моим мнением и я не могу ничего сделать для нужного для меня решения. [психология, собственно]
Drawn((HLString()+"Uncnown command '"+comm+"'\r\n\r\n"));
Хм, по идее логика скажет, что тут сложение строк и передача в функцию.
При просмотре это не вызовет никаких вопросов.
Если человек начнет писать он должен будет взглянуть на код этого класса или в описание. Либо при первых ошибках.
Помнится для кпк я делал #define HLString MString. вообще решает все проблемы.
Для нормального программиста, который рискнет заниматься моим кодом, это не будет самым сложным.
Нет здесь проблем с пониманием другими. Если появятся, будем искать решение.
MSV>>Теперь как аргумент против гцц я могу добавить что он логичен на столько же сколько и туп. W>Вам не нравится, что для того, чтобы сделать как "хочется" в С++ нужно предварительно потратить некоторые усилия (сюда относятся все паттерны, которые приходится реализовывать руками, тогда как в других языка они встроены либо во фреймворк, либо в сам язык)? Тогда возможно С++ — это язык не для вас. И ГЦЦ тут не при чем.
(только смех) Я люблю долго и упорно писать и отлаживать свой бред, главное не биться о стену. И к счастью обычно у меня больше одного варианта решения.
W>Это получилось, потому что логики нет. В программировании логика одна — математическая.
Хохохо, дожили.
Недавно доказывал, что в программировании почти не использую математику.
Для меня логика, она и в Африке логика, и к математике никак не привязана.
Я бы сказал, что в программировании логика объектная.
а если вы в объектах пользуетесь математикой, то это ваши личные проблемы.
MSV>>mutable не внушают. W>mutable — стандартное решение этой задачи. Оно будет работать везде. И ваш код поймут все. И вы соберете эту программу на любой платформе, где есть стандартный С++. Если это не внушает, то тогда я уже не знаю что вам нужно.
Я не пойму свой код, этого достаточно. отказаться от того, чем пользовался и тут же взять аналог, явно не лучше. это даже не называется, а обзывается, нехорошими словами.
MSV>>Как хорошо, что еще до стандартизации работы с памятью не добрались, хоть там можно почувствовать себя свободным и творить все, что вздумается. W>Стандартизация до работы с памятью добралась и диктуется условиями конкретной операционной системы. Если вы заканчивали техническую специальность, то возможно помните предмет "Операционные системы", где все стандарты по организации памяти были рассмотрены.
Те стандарты меня особо не интересуют, пока меня кормя^W снабжают кусками памяти и не говорят, как я с ними должен работать.
MSV>>(печально) Программирование — творчество, стандарты — зло. W>Программирование — творчество, я тоже так считаю. Но мы работает не в сферическом вакууме. Мы работает в реальном мире и вынуждены считаться с его законами, с физическими и социальными. О тех и других я упоминал выше.
У меня еще осталось желание не соблюдать стандарты. Скоро это кончено пройдет, но скоро это не сейчас.
D>Он не должен возвращать ссылку. Это — антипаттерн. Поведение отличное от того, что ожидается от оператора сложения. Ошибка дизайна. Более того, мина замедленного действия.
Я кажется не помню, что такое паттерн, и не знаю, кто ожидает. Я ожидаю другого, того, чему меня научил с++.
Вот пока она не взорвалась я хочу успеть на ней посидеть.
D>Для Си++ это не так много. Но в этом есть хорошая новость. Значит, подвести под стандарты — вполне реальная задача
Оно полностью под стандартами студии и где-то на 60-70% под гцц. недостающий процент работа с окнами.
Римское правило. Тот, кто говорит, что Это не может быть сделано, никогда не должен мешать тому, кто Это делает.
Осень, ну вы поняли.
Зачем еще один код? А человек?
Здравствуйте, MikelSV, Вы писали:
MSV>Для нормального программиста, который рискнет заниматься моим кодом, это не будет самым сложным. MSV>Нет здесь проблем с пониманием другими. Если появятся, будем искать решение.
Если у каждого своя логика — то ничего не получится.
MSV>(только смех) Я люблю долго и упорно писать и отлаживать свой бред, главное не биться о стену. И к счастью обычно у меня больше одного варианта решения.
W>>Это получилось, потому что логики нет. В программировании логика одна — математическая. MSV>Хохохо, дожили. MSV>Недавно доказывал, что в программировании почти не использую математику. MSV>Для меня логика, она и в Африке логика, и к математике никак не привязана. MSV>Я бы сказал, что в программировании логика объектная.
Ну давайте каждый напридумывает себе кучу терминов и мы вообще перестанем друг друга понимать.
К слово сказать, мат.логика это не тоже самое что математика. В частности логика булева, без которой невозможно написать ни одну программу является разделом мат. логики. Хоть бы в википедию заглянули. Детский сад, ей богу.
MSV>Я не пойму свой код, этого достаточно. отказаться от того, чем пользовался и тут же взять аналог, явно не лучше. это даже не называется, а обзывается, нехорошими словами.
Здравствуйте, MikelSV, Вы писали:
A>>Это неправильно. В C строго говоря нельзя конвертировать указатели на функции в указатели другого типа (см. стандарт, лень искать ссылку). A>>В C++ указатели на разные функции (методы) могут иметь разный размер в разных случаях под одним компилятором на той же OS.
MSV>Это какие же случаи?? MSV>Мне нужен лишь указатель на функцию, 4 байта для 32бит. Просто дайте мне его получить.
Вотще надеяться, что С++ существует только под 32- и 64-битные flat модели памяти.
Вот ещё совсем недавно, в эпоху ДОС, помимо flat (tiny) модели было несколько смешанных моделей — например, данные в одном сегменте, а код в нескольких; или наоборот.
Как следствие, размеры указателей на данные и на код были 16 и 32 (на самом деле 20) битов.
Или возьмём любую гарвардскую архитектуру (микроконтроллеры).
Или, аналогично с ДОС, сегментную модель.
А "дайте мне указатель" — так ты уже определись сперва: тебе нужен указатель или его числовое значение?
В первом случае используй правильный тип void(*)(), во втором — reinterpret_cast<intptr_t> (intptr_t — платформенно-зависимый целочисленный тип, способный вместить в себя void* и void(*)()).
long в качестве intptr_t подойдёт заведомо только на 32-битных платформах.
W>>То есть вы отказываетесь учиться?
Я вообще не люблю учиться. Читать эту кучу литературы.
К>Скорее, "я хочу писать говнокод и навязывать его моим коллегам — а кривые кирпичи и гнутый компилятор мне мешают это делать".
Я вижу в коде бред, идеи, сложность... а вы г^W. наверное каждый видит то, что ищет.
Римское правило. Тот, кто говорит, что Это не может быть сделано, никогда не должен мешать тому, кто Это делает.
Осень, ну вы поняли.
Зачем еще один код? А человек?
Здравствуйте, MikelSV, Вы писали:
MSV>Я вообще не люблю учиться. Читать эту кучу литературы.
В таком случае быть специалистом Вам не светит. В этой куче литературы расписана уйма граблей, чтобы не наступать на них по ндцать раз.
А оператор + с модификацией аргументов есть однозначный говнокод.