powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / return str.c_str() не пашет
25 сообщений из 57, страница 2 из 3
return str.c_str() не пашет
    #39954757
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПоследнее - очень важно. Кто первый вышел на рынок - тот победитель.

Стратегия "быстро хапнуть бабла и свалить в закат" - вечна.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39954758
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

maytonПоследнее - очень важно. Кто первый вышел на рынок - тот победитель.

Стратегия "быстро хапнуть бабла и свалить в закат" - вечна.

Да.
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39954762
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
petrav
пропущено...

Я рекомендую всячески сопротивляться добавлению в проект каждой новой библиотеки.

Это от разработчика PVS Studio, я согласен абсолютно -- с каждым символом.

Не согласен с точкой зрения. Она - архаична. И ее можно было реплицировать еще в середине 20-го века
когда любой программный продукт был железом+ОС+приложением 3 в одном.

Современный программный продукт - это зачастую на 90% идея, воплощённая в интеграции системных
средств или платформ Amazon/Google/Azure и собственно вашего кода. Которого обычно мало.
Ваш код - это по сути клей который склеивает готовые решения в одно.

Подход когда вы пилите и свой HttpClient и свой (не дай бох) более сложный драйвер
- отбрасывает вас во времени на много спринтов назад и при таком подходе ваши
конкуренты вас обойдут и выдадут работающий прототип.

Последнее - очень важно. Кто первый вышел на рынок - тот победитель.
Сидельцы и народные умельнцы - здесь обычно остаются за бортом. Они - вне рынка ПО.
Они неинтересны потому-что они задержались и поезд ушел.

Поэтому я очень сильно не поддерживаю С++ - ников в их желании иметь свой "свечной заводик"
на любой случай жизни.

Вы просто не прочитали раздел на который я дал ссылку. Или прочитали, но не поняли что там написано.
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39954764
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПоследнее - очень важно. Кто первый вышел на рынок - тот победитель.

Совсем не обязательно. Если рынок продукта небольшой тогда и нет смысла рвать когти и переплачивать за разработку в 24-7 режиме. А если большой то место всем хватит, главное чтобы костюмчик сидел продукт был достойный. И тут наоборот, попытка будет только одна и вывести нужно действительно конкурентноспособный продукт.
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39954774
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я давно слежу за продуктами PVS. Но их создатели изначально находились в невыгодном стартовом
положении. Они анализировали самый тяжелый и самый сложный компиллятор в мире.
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39954778
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Я давно слежу за продуктами PVS. Но их создатели изначально находились в невыгодном стартовом
положении. Они анализировали самый тяжелый и самый сложный компиллятор в мире.

Компилятор? Наверное язык? Но кто-то же должен его анализировать. Продукт очень качественный, мирового уровня и отечественный. Повод для гордости.

mayton

Подход когда вы пилите и свой HttpClient и свой (не дай бох) более сложный драйвер
- отбрасывает вас во времени на много спринтов назад и при таком подходе ваши
конкуренты вас обойдут и выдадут работающий прототип.

Почитайте внимательнее статью. Автор как раз и не советует писать свой HttpClient. А Вы, почему-то, прочитали, что советует...
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39954785
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Кстати, у меня только что слетела возможность редактировать свои посты. Меня что забанили?

Во, теперь вернулась. Спасибо.
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39954788
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
maytonПоследнее - очень важно. Кто первый вышел на рынок - тот победитель.

Стратегия "быстро хапнуть бабла и свалить в закат" - вечна.
эта стратегия всегда ведёт к саморазрушению и деградации
т.е. что в итоге получает человек? бухает и жрёт = забивает на развитие и разлагается
т.о. она то вечна, но вообще-то у неё довольно предсказуемый и глобальный конец (для всего рода, потому что дети, которых не научили добывать/создавать ресурсы - обречены).
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39954794
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OoCc
полудухи что тут возвращает компилятор?!
как str попал в main() ?


Ты меня спрашиваешь? Это твой код.
мой код возвращал str, а твой ничего не возвращает
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39954802
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
mayton
Я давно слежу за продуктами PVS. Но их создатели изначально находились в невыгодном стартовом
положении. Они анализировали самый тяжелый и самый сложный компиллятор в мире.

Компилятор? Наверное язык? Но кто-то же должен его анализировать. Продукт очень качественный, мирового уровня и отечественный. Повод для гордости.

Я думаю что я все таки не ошибся. Очень много вопросов языка С++ крутятся вокруг компиллятора.
А именно его контрактов по отношению к реализации в bare-metal. Я-бы даже сказал что у меня
есть личная претезия именно к компилляторам. Сказать что они сложны - это значит не сказать ничего.
Сказать что до сих пор есть сложные соглашения по поводу типов int/char и по поводу того
в какую разрядность они будут собраны. Замечу что этому вопросу 100 лет в обед. И большая
часть вопросов новичков крутятся вокруг "некой слепоты" касаемой разрядностей и платформ.
Фактически наработка опыта в С++ должна проходить не через язык а через систему. Железо.
ОС. И компилляторы. Вы не можете считаться опытным С++ кодером просто зная С++. Собственно
это знание вам не дает ничего. Вы должны носом пропахать практику и поймать грабли разрядности
чтобы понять что здесь будет padding структуры. А здесь символ будет покрывать диапазон 1 байта.
Просто таковы условия. Такой глубины неопределённости уже давно нет в смежных языках и технологиях.
Тип данных - это главный строительный цемент. И очень странно что этому вопросу уделяют мало внимания
в комитетах. За 40 лет практически не было сколь заметных улучшений строгости базовой спеки.
Более того существуют сильно болшие различия в Microsoft C++/Gnu Compiller Collection которые
тоже не решаются на уровне спеки языка а решаются где-то сбоку. Макросы, директивы компиллятора,
опции командной строки. Такого ужаса не существовало в других компилляторах. Они были более
предсказемы. Ну и тип данных строка о котором я говорю уже давно. Я говорю - комитет - утверди
string как фундаментальную единицу компилляции и выброси все библиотечные строки.

Вобщем нечего гордиться. Нет предмета гордости.
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39954807
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Макросы, директивы компиллятора, опции командной строки. Такого ужаса не существовало в других компилляторах. Они были более предсказуемы. Ну и тип данных строка о котором я говорю уже давно.

Да... так и есть. Но, во-первых, у нас выбора нет. Хотя можно найти другую работу. Никто не спорит, что тут у нас в C++ помимо красоты языка, ещё и куча кривизны и костылей.

Но статья, которую я процитировал, в общем, универсальна. И касается всех языков программирования. А автор советует не разрабатывать HttpClient.

Я точно так же видел как отваливается половина сложнейшего приложения на .NET. После обновления Студии. Что-то связанное с удалённым созданием объектов на сервере логики. Хотя использование этого компонента .NET было правильным. В смысле, что мы его и использовали правильно, и правильным было то, что мы его использовали.
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39954809
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
полудух,

Все компиляторы оптимизируют это устраняя копирование возвращаемого значения, и по факту функция работает с тем экземпляром куда результат присваивается в вызывающем коде (RVO).
А начиная с С++17 это обязательное поведение.

Так что можете спокойно возвращать строку.

а когда я делаю str.c_str() снаружи, таки копирования не происходит?
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39954811
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
а когда я делаю str.c_str() снаружи, таки копирования не происходит?

А если сделать str.c_str() снаружи, а потом str.c_str() сделать внутри? Вот как думаешь, что случится?
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39954816
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"внутрей" к тому времени уже не будет
оттуда return был
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39954818
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
"внутрей" к тому времени уже не будет
оттуда return был

При большом желании можно и в "нутря" вернуться == std::longjmp.

Московский утверждает, что та переменная типа std::string на самом деле будет создана на стеке функции main() и никакого копирования строки не будет. А раз она создана там, то там и создана. И дальше можно делать хоть в c_str() - да хоть куда.
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39954824
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
полудух
"внутрей" к тому времени уже не будет
оттуда return был

При большом желании можно и в "нутря" вернуться == std::longjmp.

Московский утверждает, что та переменная типа std::string на самом деле будет создана на стеке функции main() и никакого копирования строки не будет. А раз она создана там, то там и создана. И дальше можно делать хоть в c_str() - да хоть куда.

спасибо, кэп, я спрашивал про другое - делает ли c_str() копирование, когда преобразует string в char*?
технически ведь он ничего не преобразует, там внутрях тот же char*...
он его мувает наружу, или указатель вертает, или как?
в коде вроде указатель:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
      // String operations:
      /**
       *  @brief  Return const pointer to null-terminated contents.
       *
       *  This is a handle to internal data.  Do not modify or dire things may
       *  happen.
      */
      const _CharT*
      c_str() const _GLIBCXX_NOEXCEPT
      { return _M_data(); }


Return const pointer to null-terminated contents.
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39954825
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух

спасибо, кэп, я спрашивал про другое - делает ли c_str() копирование, когда преобразует string в char*?
технически ведь он ничего не преобразует, там внутрях тот же char*...
он его мувает наружу, или указатель вертает, или как?

Короче, дело так обстоит. Код, конечно, прототипный и заведомо неверный. Но концептуально правильный.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
struct string
{
    string(): str() {}
    ~string() { delete str; }

    char const *c_str() const { return str; }

    char *str;
}


Никакого копирования не происходит. c_str() это доступ к внутреннему буферу.
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39954827
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,

Точно также как и std::vector::data() и std::array::data() -- просто возвращают указатели на внутренние буферы, больше ничего не происходит.
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39954835
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ясно, спасибо
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39954853
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
petrav
пропущено...

Компилятор? Наверное язык? Но кто-то же должен его анализировать. Продукт очень качественный, мирового уровня и отечественный. Повод для гордости.

Вобщем нечего гордиться. Нет предмета гордости.

Да вот ещё... Вы интересно повернули вопрос о предмете гордости. ООО «Системы программной верификации» российская компания? PVS Studio российская разработка? Я думаю это качественный продукт и повод для гордости, если они из РФ.

А далее Вы приводите разгромную критику языка C++ и компиляторов С++. А ещё далее Вы делаете вывод, что гордится нечем, нет предмета гордости. Ну понятно.

Один вопрос, язык С++ и компиляторы проектировала и разрабатывала тоже ООО «Системы программной верификации» из РФ ?!
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39954984
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я не про PVS.
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39955436
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PVS-Studio, кстати, даже Джон Кармак (id Software) активно юзает (4:10)
я почитал блог PVS , действительно хорошая штука
YouTube Video
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39955443
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В идеале компиллятор должен и выполнять эти функции. А мы должны просто читать внимательно WARNINGs а не игнорить.
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39955524
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
похоже такой крутой разбор текста не может сделать таже команда, которая разрабатывает логику компилятора
т.е. тупо с ассемблером работает
нужна отдельная команда
...
Рейтинг: 0 / 0
return str.c_str() не пашет
    #39955535
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
В идеале компиллятор должен и выполнять эти функции.

Вообще-то не должен.
Задача компилятора генерировать код.

Функция анализа кода это задача IDE.
Не говоря уже о том что очень много ложных срабатываний для работы с которыми нужна интерактивность. Т.е. компилятор тут никаким боком.
...
Рейтинг: 0 / 0
25 сообщений из 57, страница 2 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / return str.c_str() не пашет
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]