Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 382 383 [384] 385 386 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#5746
,
|
|
|
|
Они гораздо логичнее и современнее ![]() Да? Так вроде же туда не так давно - при выходе VS2010 - впилили всякие штуки, чтобы можно было гуйню делать не менее красивую, чем на дотнете... Хотя хз, я не считаю нужным следить за судьбой MFC - он слишком ущербен ![]() Я только бегло смотрел код. Как минимум для строковых литералов в коде Вполне может быть, что для взаимодействия с каким-то API.Вот я и говорю - не при чём он, нафиг не сдался ![]() Цитата KILLER @ Да дело не char*, std::string - он по своей сути ущербен. Чем он лучше вектора? И зачем он есть, мне лично не понятно. Он лучше как минимум trait'ами на символы А вообще, vector - массив, а basic_string - строка. Прочувствуйте разницу А вот char* - это не сроки, это просто указатель на кусок памяти |
|
Сообщ.
#5747
,
|
|
|
|
Цитата MyNameIsIgor @ Они гораздо логичнее и современнее А ну да, я забыл. В чем они логичнее? Цитата MyNameIsIgor @ Да? Так вроде же туда не так давно - при выходе VS2010 - впилили всякие штуки, чтобы можно было гуйню делать не менее красивую, чем на дотнете... Хотя хз, я не считаю нужным следить за судьбой MFC - он слишком ущербен Ты так и не пояснил чем он ущербен? или это с твоей колокольни? Цитата MyNameIsIgor @ Вот я и говорю - не при чём он, нафиг не сдался Так и я говорю, речь не о нем, а вы мне все о WinAPI. Я уже жалею что я его в качестве примера привел... Цитата MyNameIsIgor @ Он лучше как минимум trait'ами на символы А вообще, vector - массив, а basic_string - строка. Прочувствуйте разницу А вот char* - это не сроки, это просто указатель на кусок памяти basic_string - ущербная строка. Все что я могу о ней сказать. |
|
Сообщ.
#5748
,
|
|
|
|
Цитата KILLER @ Господа ценители std::string, попробуйте оформить классно с помощью std::string класса, вот такой SQL запрос: ![]() ![]() #include <string> #include <sstream> std::string MakeSQL(long date_from, long date_to, const std::string& comment) { std::ostringstream os; os << "SELECT DISTINCT table1.code\n" "FROM table1 \n" "JOIN table2 .set = table1.primary_key \n" "WHERE \n" "table1.date between " << date_from << " and " << date_to << " AND \n" "table2.text like '" << comment << "'"; return os.str(); } Не? Добавлено Цитата KILLER @ А ну да, я забыл. В чем они логичнее? Да в чём не возьмись ![]() Цитата KILLER @ Ты так и не пояснил чем он ущербен? или это с твоей колокольни? Пояснял, повторяться не стану. Цитата KILLER @ Так и я говорю, речь не о нем, а вы мне все о WinAPI. Я уже жалею что я его в качестве примера привел... Вот правильно делаете ![]() Цитата KILLER @ basic_string - ущербная строка. Все что я могу о ней сказать. Как, однако, мало вы о ней знаете |
|
Сообщ.
#5749
,
|
|
|
|
Цитата MyNameIsIgor @ Не? не Цитата KILLER @ Мне очень интересно, как вы сейчас будете извращаться через ostring_stream класс, но хотелось бы увидеть реализацию с помощью std::string могучего класса. Я хочу посмотреть на убожество в виде str += tmp_str; а также переводы long'ов в строку с помощью itoa |
|
Сообщ.
#5750
,
|
|
|
|
Цитата KILLER @ Я хочу посмотреть на убожество в виде str += tmp_str; а также переводы long'ов в строку с помощью itoa Вам к korvin'у Это он любит "С++ без шаблонов" А у меня есть язык и я его использую. В basic_string нет того, что есть у stream'ов, именно потому, что есть stream'ы. И есть вы их не используете - это ваши интимные сложности, с ними не ко мне |
|
Сообщ.
#5751
,
|
|
|
|
Цитата MyNameIsIgor @ Да в чём не возьмись ну например. Цитата MyNameIsIgor @ Пояснял, повторяться не стану. ты привел два фактора, первый - монструозность, второй - устарело. С первым я не согласен, второй никак не влияет на ущербность. Цитата MyNameIsIgor @ Вот правильно делаете Конечно, я ведь уже язык сломал открыто намекать что WinApi - тут никселу ни к городу... Я его привел в качестве примера, а вы тут раздули... Цитата MyNameIsIgor @ Как, однако, мало вы о ней знаете А в там есть что знать? Что там есть такого что я не знаю? Добавлено Цитата MyNameIsIgor @ Вам к korvin'у Это он любит "С++ без шаблонов" А у меня есть язык и я его использую. В basic_string нет того, что есть у stream'ов, именно потому, что есть stream'ы. И есть вы их не используете - это ваши интимные сложности, с ними не ко мне Дело не в стримах, дело в том, что чуть что мне нужно заводить левую временную переменную, и от этого никуда не дется, хоть на С++ написано, хоть на С. А зачем мне такое упало? Добавлено А вообще, все это было к тому, что в делфях ущербные строки... В своем глазу бревно вытащите |
|
Сообщ.
#5752
,
|
|
|
|
Цитата KILLER @ ну например. Ну, вот и выбирайте ![]() Цитата KILLER @ ты привел два фактора, первый - монструозность, второй - устарело. С первым я не согласен, второй никак не влияет на ущербность. Я думаю, что влияет. Устаревшее барахло надо выкидывать. Цитата KILLER @ А в там есть что знать? Что, что та месть такого что я не знаю? Да, по ходу дела, всё... Начиная от фундамента - что есть строка и зачем она есть. Цитата KILLER @ Дело не в стримах, дело в том, что чуть что мне нужно заводить левую временную переменную, и от этого никуда не дется, хоть на С++ написано, хоть на С. А зачем мне такое упало? Эту? ![]() ![]() std::ostringstream os; Вах, какое горе, целая переменная |
|
Сообщ.
#5753
,
|
|
|
|
Цитата MyNameIsIgor @ Ну, вот и выбирайте так неизчего выбирать пока, вы так и не назвали ключевые моменты ущербности MFC, по сему я воспринимаю это как пустой троллинг, не более. Цитата MyNameIsIgor @ Я думаю, что влияет. Устаревшее барахло надо выкидывать. Как чётко подмечено, интересно что все это барахло в С++ делает? Цитата MyNameIsIgor @ Да, по ходу дела, всё... Начиная от фундамента - что есть строка и зачем она есть. Да вроде как примерно догадываюсь что такое строка и зачем она есть... Но вот только не могу понять, накой мне костыли писать? Цитата MyNameIsIgor @ Эту? Цитата MyNameIsIgor @ Вах, какое горе, целая переменная Нет, не эту, а костыль из временного массива или вектора... А то, был пример того, что дает std::string. |
|
Сообщ.
#5754
,
|
|
|
|
Ага. Могу. Значит Вижула->create project->MFC Application->DialogBased(остальные ещё больше)->finish
и там какая то жуткая мешанина из кривого подобия ООП и макросов. Ах да, вот что мне сказал на это дело линкер: ![]() ![]() 1>Linking... 1>Embedding manifest... 1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0 1>Copyright (C) Microsoft Corporation. All rights reserved. 1>LINK : fatal error LNK1000: Internal error during IncrBuildImage 1> Version 9.00.21022.08 1> ExceptionCode = C0000005 1> ExceptionFlags = 00000000 1> ExceptionAddress = 0144FCF7 (013D0000) "C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\link.exe" 1> NumberParameters = 00000002 1> ExceptionInformation[ 0] = 00000000 1> ExceptionInformation[ 1] = 00E5D670 1>CONTEXT: 1> Eax = 400BC1DC Esp = 002BF02C 1> Ebx = 40008168 Ebp = 002BF054 1> Ecx = 00E5D670 Esi = 400BC064 1> Edx = 002BF044 Edi = 013DD6C0 1> Eip = 0144FCF7 EFlags = 00010246 1> SegCs = 0000001B SegDs = 00000023 1> SegSs = 00000023 SegEs = 00000023 1> SegFs = 0000003B SegGs = 00000000 1> Dr0 = 00000000 Dr3 = 00000000 1> Dr1 = 00000000 Dr6 = 00000000 1> Dr2 = 00000000 Dr7 = 00000000 |
|
Сообщ.
#5755
,
|
|
|
|
Цитата Повстанець @ Ага. Могу. Значит Вижула->create project->MFC Application->DialogBased(остальные ещё больше)->finish И в чем тут убогость, я не понимаю? На каждом шаге, тебе предлагается выбрать стиль для диалога, изменить названия генерируемых классов и т.д. Или ты хотел как в билдере, хуяк и у тебя project1, Form1. Все рады и довольны, нажимай F5 и улыбайся, фсё, теперь ты тру программер, так чтоле? Цитата Повстанець @ и там какая то жуткая мешанина из кривого подобия ООП и макросов. Где? Месадж мапы? да ты просто не понимаешь нафиг они там нужны, поэтому оно тебе кривым и кажеца. Цитата Повстанець @ Ах да, вот что мне сказал на это дело линкер: хз Поставь лицензионную версию студии, у меня таких трабл небыло отродясь Еще аргументы будут? Добавлено Повстанець, да и вообще это наезды не на MFC, а на Microsoft VS2008 в частности(касательно ошибки твоей), как я понял, тут это не актуально как бэ... |
|
Сообщ.
#5756
,
|
|
|
|
Цитата KILLER @ А ты не смешивай массивы символов со строками, и не будет лишнего кода.Я как раз таки этого всячески стараюсь избегать. std::string - это говно поделие, которое мало где прикрутишь, а также приходица постоянно писать лишнего кода, при его использовании... Повторяю ещё раз: в C не было строк, и строковые литералы - единственное, что хоть как-то на строки смахивает - тоже являются массивами символов, константными. Если ты имеешь желаение в legacy API, основанном на C-style, использовать std::basic_string<>, который именно что строки, не удивительно, что ты сталкиваешься с проблемами. Только это не проблемы std::basic_string<>, это проблемы твоего желания применить абстракцию в неприменимом для неё контенсте. Раз тебе мало куда удаётся прикрутить std::basic_string<>, значит тебе просто не нужна абстракция строки. Вот std::vector<> - это массив во всей красе, и при этом Плюсовый, а не legacy. К нему есть претензии? И к слову, на <vector>, <algorithm> и <functional> большая часть функционала std::basic_string<> реализуется запросто. Фактически из кардинальных отличий только одно: использование итераторов вместо индексов и длин. Цитата KILLER @ Та тем, что это строка, а не массив! Ты их синопсисы не сравнивал, что ли? Векторый интерфейс ориентирован на удобную работу с массивом, строковый - на удобные строковые операции. И требования в ним разные по этой причине. Строковый класс может оптимизировать свою реализацию так, что бы строковые операции были максимально эффективными, вектор - на максимальную совместимость с абстракцией "массив".Да дело не char*, std::string - он по своей сути ущербен. Чем он лучше вектора? И зачем он есть, мне лично не понятно. Цитата KILLER @ А почему, собственно-то? KILLER, вот ты прикидываешься что ли, что якобы не понимаешь, что массив, строка и поток - это три разных сущности? По-твоему Стандартный класс должен быть настолько жирен, чтобы вмещать всё что душе угодно? А почему дата у тебя типа long, а не struct tm? С какой стати не учитываются пользовательскые предпочтения по форматированию даты? Давай в этот класс ещё и <locale> запихаем.Мне очень интересно, как вы сейчас будете извращаться через ostring_stream класс, но хотелось бы увидеть реализацию с помощью std::string могучего класса. KILLER, подтяни свои скиллы в декомпозиции. Раз уж тебе потребовалась абстракция, которая ещё и дуде игрец, так напиши да пользуйся. STL вот она вся в твоём распоряжении. |
|
Сообщ.
#5757
,
|
|
|
|
Цитата KILLER @ ИМХО, достойно башорга Конечно, речь ведь идет все о тех же С-строках. Вот тебе кусок кода: void func(char* dst, const char* src) { strcpy_safe(dst, src); //! моя функция, ее реализация неважна, работает с голыми указателями на char } На глаз скажешь это я на С++ или на чистом С написал? std::string схавает? Ну ты же там ясно написал, что функция принимает char*. Еще бы int вписал и возмущался, почему "21342" не принимает. Скрытый текст Мне одному кажется, что KILLER тупо троллит? |
|
Сообщ.
#5758
,
|
|
|
|
Цитата OpenGL @ Скрытый текст Мне одному кажется, что KILLER тупо троллит? Скрытый текст Нет Кстати, лучше бы он в "другую сторону" троллил, а то разбежались не только Delphi'цы, но и даже сторонник |
|
Сообщ.
#5759
,
|
|
|
|
Я седня не смогу писать целый день, ибо на работе срочная таска. Посему я замолкаю...
|
|
Сообщ.
#5760
,
|
|
|
|
Какой тип в С++ имеет константа вида "some text" ?
Какой конструктор будет вызван, если написать: ![]() ![]() std::string s = "some text"; Уж не ![]() ![]() string ( const char * s ); ли ? |