LINUX.ORG.RU
ФорумTalks

Если вы пишете на c++98/99, то какие ограничения не позволяют вам перейти на c++11/14/17?

 ,


0

5

Я могу придумать только одно и одно с большой натяжкой:

На какой-то embedded железке нельзя обновить ос и компилятор. Ну или начальство не разрешает... что странно.

Какие есть ещё? И да, разумеется разработка под Linux.

★★★★★
Ответ на: комментарий от BlackJack

С какой радости указатель на функцию стал виртуальной функцией ?

Ты не заметил, что там таблица указателей? Видимо, да, не заметил.

tailgunner ★★★★★
()
Ответ на: комментарий от cvs-255

А по скорости C уделывает обоих

qsort хоть с std::sort побенчмаркай. Подумай почему получил такие результаты.

vertexua ★★★★★
()
Ответ на: комментарий от eao197

Во-вторых, «заметно» — это чем-то кроме авторитетного мнения подтверждается? Замерами, скажем.

Я думаю что он говорит правду, сомнений нет. ТОТ КОД, который они написали на С++ мог вполне работать медленнее. Написать медленный алгоритмически код вполне не сложно.

Например, в узком месте взял где-то в С, выделил массив через malloc, а в С++ выделил через std::vector без reserve(). Заполнил один циклом по индексам, второй через push_back. Пошел на ЛОР рассказал какой С++ плохой.

vertexua ★★★★★
()
Ответ на: комментарий от cvs-255

я активно использовал абстрактные классы

This. Смотря для чего, но всякие virtual вещи - в С++ это не очень любят в высокопроизводительном коде. Обычно можно обойтись без, причем вполне с ООП, вполне в С++ стиле. Например вместо того чтобы в один класс передать другой в виде интерфейса, тип второго используют как параметр шаблона первого

Вот плохой код для производительности

class Dep: public DepInterface {...} 

class MyClass {
   MyClass(std::unique_ptr<DepInterface> dep) ...
};

Вот хороший

template<class DepT>
class MyClass {
   MyClass(std::unique_ptr<DepT> dep) ...
};

Во втором случае если ты вызовешь потом метод dep миллиард раз, то будет значительно быстрее.

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от cvs-255

Выделить память миллион раз - тоже стандартнейшая вещь. Просто лучше так не делать без надобности.

vertexua ★★★★★
()
Ответ на: комментарий от cvs-255

В том то и дело что абстрактный класс - не тот же алгоритм по сравнению с тем что дает С. В С можно посмотреть тот же алгоритм в GObject. И конечно же померять производительность.

vertexua ★★★★★
()
Ответ на: комментарий от trex6

Не отсутствие, а наличие чисто виртуальных. Даёт.

next_time ★★★★★
()
Ответ на: комментарий от i-rinat

Никогда не видел, что ли?

Видел (и использовал) конечно (хотя я предпочитаю передать указатели на функции через void * , а потом просто приводить к типу ), но никогда не встречал такой терминологии в данном контексте.Я даже специально глянул стандарты языка С, на случай если я что то подзабыл.

BlackJack
()
Ответ на: комментарий от BlackJack

(хотя я предпочитаю передать указатели на функции через void * , а потом просто приводить к типу )

Какие примерно размеры у проектов (на Си), с которыми ты работаешь? Мне сложно представить, что кто-то добровольно отказывается от проверки типов компилятором, когда есть простая возможность организовать такую проверку.

i-rinat ★★★★★
()
Ответ на: комментарий от vertexua

При DepT == DepInterface, это эквивалентный код; в противном случае «хороший для производительности» код не обеспечивает поведения кода, «плохого для производительности».

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Я имел ввиду случай DepT=Dep. Поведение другое. Но это скорее всего то поведение, которое подходит большинству. И в тестах все еще можно все подменить например.

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Я имел ввиду случай DepT=Dep

Это размен между статическим полиморфизмом и динамическим. Понятно, что статический дает более быстрый код, но динамический дает возможности, которых нет у статического. И если устраивает статика, то DepInterface просто не нужен (это же не Rust).

tailgunner ★★★★★
()
Ответ на: комментарий от i-rinat

Какие примерно размеры у проектов (на Си), с которыми ты работаешь?

В основном проекты 15-20 мегабайт чисто текста (хедеров и реализаций).

BlackJack
()
Ответ на: комментарий от tailgunner

И если устраивает статика, то DepInterface просто не нужен

Он дает гарантии по наличию конкретных сигнатур. Понятно что без каких-сто сферхновых фич С++ нельзя сказать что DepT должен быть потомком DepInterface, но на практике можно это потребовать хотя бы в комментариях (плюс так проще обьяснить, какие у тебя требования к DepT)

vertexua ★★★★★
()
Ответ на: комментарий от BlackJack

В основном проекты 15-20 мегабайт чисто текста (хедеров и реализаций).

На Си? И при этом кастуешь указатели на функции в void* и обратно? Сказки какие.

i-rinat ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.