Форум программистов, компьютерный форум, киберфорум
Обо всем!
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/26: Рейтинг темы: голосов - 26, средняя оценка - 4.50
Мозгоправ
 Аватар для L0M
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2

За что я не люблю С++

07.02.2020, 03:59. Показов 6345. Ответов 95

Студворк — интернет-сервис помощи студентам
Интересно, за что Вы не любите C++?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.02.2020, 03:59
Ответы с готовыми решениями:

За что я не люблю 1С
Когда меня спрашивают, знаю я тот или иной язык, то стараюсь ответить: "Да/нет, я могу/не могу решать задачи с помощью этого языка". ...

Скажите Тане, что я люблю её!
Это не "ещё одна" история любви - это история большой неразделённой любви... Она - богиня. Чувственное, нежное, красивое создание...

Почему я люблю C++
Мне интересно, почему Вы любите C++?

95
фрилансер
 Аватар для Алексей1153
6479 / 5703 / 1132
Регистрация: 11.10.2019
Сообщений: 15,194
07.02.2020, 13:50
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от IGPIGP Посмотреть сообщение
возможность создавать нестатические методы, которые фактически не имеют доступа к членам класса
а вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct A
{
    void func()
    {
        return []
        {
 
            //тут не видно this
 
        }();
    }
};
Добавлено через 1 минуту
может, я и не понял. Ну да ладно
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
07.02.2020, 13:52
Цитата Сообщение от Алексей1153 Посмотреть сообщение
а вот так
не понял. Вы говорите о лямбда? Это функтор. Если вы захватили this то так и будет. Не понял, что вы хотите сказать.
0
фрилансер
 Аватар для Алексей1153
6479 / 5703 / 1132
Регистрация: 11.10.2019
Сообщений: 15,194
07.02.2020, 13:57
IGPIGP, нет, я не захватывал

Цитата Сообщение от Алексей1153 Посмотреть сообщение
//тут не видно this
что я хочу сказать - с такой обёрткой достигается сокрытие this
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
07.02.2020, 13:58
Алексей1153, вы сами задали вопрос:
Цитата Сообщение от Алексей1153 Посмотреть сообщение
только зачем эта функция НЕ статическая
для случая когда отфонарная функция тупо пришивается к thisCall. Я сказал вам что это не про то что я говорил о синтаксисе вызова метода (нормального и имеющего доступ к объкту) как свободной функции но с доп параметром передаваемым дополнительно (ссылка или указатель на экземпляр). И к тому же я показал где говорил о том, что вы говорите спрашивая зачем такая функция:
Цитата Сообщение от IGPIGP Посмотреть сообщение
возможность создавать нестатические методы, которые фактически не имеют доступа к членам класса
0
 Аватар для COKPOWEHEU
4087 / 2685 / 432
Регистрация: 09.09.2017
Сообщений: 11,939
07.02.2020, 13:59
Цитата Сообщение от IGPIGP Посмотреть сообщение
возможность создавать нестатические методы, которые фактически не имеют доступа к членам класса
Так ведь статические методы придуманы именно для этого - чтобы отвязаться от экземпляра класса.
0
фрилансер
 Аватар для Алексей1153
6479 / 5703 / 1132
Регистрация: 11.10.2019
Сообщений: 15,194
07.02.2020, 14:00
ладно, не будем углубляться в то, кто что не так понял
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
07.02.2020, 14:01
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Так ведь статические методы придуманы именно для этого - чтобы отвязаться от экземпляра класса.
Разговор слепо-глухо-непроницательных... Ваша реплика в пользу того о чём я говорил. А не вразрез.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
07.02.2020, 14:15
Цитата Сообщение от IGPIGP Посмотреть сообщение
как свободной функции но с доп параметром передаваемым дополнительно (ссылка или указатель на экземпляр)
И принести еще больше проблем?
C++
1
2
Some obj;
foo(obj);//foo(obj) или obj.foo()?
Очевидно, что стало проще, понятнее, и, что самое главное - читаемость улучшилась.

А может еще быть так:
C++
1
2
3
4
5
6
7
8
9
struct Some
{
    void foo();
};
 
void foo(Some & s);
 
//...
foo(obj);//Ошибка? O_o
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
07.02.2020, 14:30
Цитата Сообщение от Croessmah Посмотреть сообщение
И принести еще больше проблем?
Такое обсуждение уже было и я там говорил что данный вопрос - фантомная боль, так как может выбросить на свалку кучу готового кода. Хотя если аккуратно то можно и зайца научить курить.
Перегрузки делаются менглированием (декорированием имён). То есть внутренне имена различаются. Кто мешает выбрать символ для явного декорирования. Например символ '$'. Это может поубивать весь код гле методы кто-то начал с такого символа. Это риск, конечно. Но есть ряд символов, которые точно никто не использует для имён. Например двойной (~~) . Думаю, если поискать можно что-то придумать. И тогда:
C++
1
2
obj->foo(/*some params*/);
~~foo(&obj, /*some params*/);
аналогичны.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
07.02.2020, 14:35
Цитата Сообщение от IGPIGP Посмотреть сообщение
аналогичны
Вы же предлагаете идентичный синтаксис вызова. Этот синтаксис уже отличается от синтаксиса вызова функции. То есть один синтаксис p->foo(); поменяли на ~~foo(p);. Получились те же яйки, только снизу. Не говоря уже, что ~~ - это двойное отрицание. Но это не имеет значения, можно любую фиговину придумать. Главное - что синтаксис уже будет не идентичный, а значит затея провалилась. Идентичный синтаксис принесет больше проблем, чем решит.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
07.02.2020, 14:38
Цитата Сообщение от IGPIGP Посмотреть сообщение
Кто мешает выбрать символ для явного декорирования.
А зачем? С++ разрешает писать в стиле Си и не пользоваться функциями внутри классов, а классы использовать чисто для группирования данных.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
07.02.2020, 15:06
Цитата Сообщение от Croessmah Посмотреть сообщение
Главное - что синтаксис уже будет не идентичный
Он и без декорирования не идентичен. Контекст в котором я говорю прозрачен но не прост. Тут легко "не понимать".
Цитата Сообщение от Azazel-San Посмотреть сообщение
С++ разрешает писать в стиле Си
Это не про вызовы методов класса. А метод класса вызывается с параметром "указатель на объект". Я предлагаю вариант синтаксиса в котором этот указатель передаётся явно, как параметр. Это даёт возможность создать указатель на метод так же как и указатель на свободную функцию. Сейчас указатель на метод - раздвижной костыль. Биндить не нужно при передаче. Мне кажется, могло бы получиться хорошо)
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
07.02.2020, 15:15
Цитата Сообщение от IGPIGP Посмотреть сообщение
Это даёт возможность создать указатель на метод так же как и указатель на свободную функцию.
Тогда придётся везде писать

C++
1
Some::~~foo(&obj, /*some params*/);
что неудобно. Смысл метода класса в том, что мы не только указываем объект, который нужно обработать, но и пространство имён его класса. Для твоего варианта с "переопределяемыми функциями" будет куча проблем для иерархических объектов.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
07.02.2020, 15:21
Цитата Сообщение от Croessmah Посмотреть сообщение
~~ - это двойное отрицание
Это не важно. Важно то, что невозможно сегдня объявить функцию с таким именем. Значит не будет конфликта с существующим кодом относительно деклараций. Ну а при вызове ни кто не мешает скомпилировать двойное отрицание на вызове если не найден вариант для декорированного метода. Если найдено и то и другое (мало вероятно, но пусть) - ошибка неоднозначности при компиляции. Пусть проггер думает как ему быть (пара скобок поможет отцу русской демократии).
0
07.02.2020, 15:22

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Тут легко "не понимать".
Я прекрасно понимаю чего Вы хотите. Только почему-то Вы чуть глубже не заглядываете. :)

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
07.02.2020, 15:31
Цитата Сообщение от TRam_ Посмотреть сообщение
Тогда придётся везде писать
Зачем? В принципе, такое возможно если есть необходимость, но не обязательно.
Цитата Сообщение от TRam_ Посмотреть сообщение
Смысл метода класса в том, что мы не только указываем объект, который нужно обработать, но и пространство имён его класса.
Если учесть что компилятор понимает, что obj - имя объекта, то по нему легко вывести пространство имён где определён класс. А если есть неоднозначность, то возможно и придётся указывать пространство имён. Это не только имён классов касается, а и пространств имён как таковых. В них могут даже имена классов совпадать.
Цитата Сообщение от TRam_ Посмотреть сообщение
Для твоего варианта с "переопределяемыми функциями" будет куча проблем для иерархических объектов.
Когда есть легитимный вызов
C++
1
ptrObjOfBaseClass->foo(/*...*/);
не должно быть принципиальных проблем с интерпретацией
C++
1
~~foo(ptrObjOfBaseClass, /*...*/);
Хотя без проблем ни чего не бывает. Я не настолько крут (я вообще не крут, если честно ), чтобы выкатить на блюдечке готовое решение для такого узла проблем. Так что мнение соответствует формулировке темы - "нравится/не нравится". Но неравнодушные есть и дискуссия идёт. Хотя, мнения пока на стороне "спи моя красавица", но по крайней мере, это интересно.
0
Мозгоправ
 Аватар для L0M
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
07.02.2020, 17:42  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
За медленный компилятор и нестрогую типизацию.
Ну, "медленный компилятор" - вопрос спорный и субъективный. Чем проще язык, тем быстрее компилятор. С++ - сложный язык. И какие-то сравнения с другими языками здесь проводить некорректно. Ну и, конечно, особенности реализации конкретного компилятора. Хотя и здесь сравнивать сложно: различия могут быть очень весомыми, начиная от количества и качества реализации фичей последних стандартов (да и вообще соответствия Стандарту С++NN как таковому), и заканчивая оптимизацией при компиляции и сборке исполняемого модуля.

А вот с " нестрогой типизацией" в С++ я чего-то не понял. Что вы имеете ввиду? Если можно, с примером кода.
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
07.02.2020, 18:13
Цитата Сообщение от L0M Посмотреть сообщение
А вот с " нестрогой типизацией" в С++ я чего-то не понял. Что вы имеете ввиду? Если можно, с примером кода.
Так говорят вот об таком примерно

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
using namespace std;
 
typedef int stariy_rzhaviy_gayka;
typedef int noviy_blestyzschiy_gayka;
 
void chinim_stanok(noviy_blestyzschiy_gayka ng)
{
    cout << "Horosho pocninenniy stanok! " << ng << endl;
}
 
int main()
{
    stariy_rzhaviy_gayka gayka = 25;
    noviy_blestyzschiy_gayka gayka2 = 25;
 
    chinim_stanok(gayka);
    return 0;
}
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
07.02.2020, 18:24
Цитата Сообщение от ТабуретY Посмотреть сообщение
ак говорят вот об таком примерно
Тут два синонима одного типа. Они взаимозаменяемы потому, что они - одно и то же. Это int. В отношении типов всё строго.
В С++ типизация слаба, потому что не может себя победить. имхо. А компиляторы медленные потому что проекты большие, а системы построения выбирались в си-шные времена. Тогда и пректы еще не выросли и мозги тоже. имхо.
0
Мозгоправ
 Аватар для L0M
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
07.02.2020, 18:37  [ТС]
Цитата Сообщение от ТабуретY Посмотреть сообщение
Так говорят вот об таком примерно
А что вы хотели? typedef (так же, как и using в аналогичном контексте) не создаёт новый тип. Создаётся только псевдоним (alias) для типа. Продолжая вашу аналогию: у вас есть гайки; вы решили называть их "фигульки" и "пимпочки" - вам так удобнее; но от того, как вы их называете, гайками они быть не перестали.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.02.2020, 18:37
Помогаю со студенческими работами здесь

Я вас всех люблю
;D;D

Люблю Visual Basic!
Ребят ) сколько себя знаю все хаят Basic. А я вот его люблю. Не знаю почему ) он лёгкий простой и пишеться легко. А в основном прикладные...

Я люблю свою работу!
http://vab.com.ua/jlove/

Люблю природы пышной увяданье
1.

Почему я не люблю Дональда Кнута
Преамбула. Написать сей гнусный пасквиль меня побудили две причины: постоянное слежение за форумом (задаваемыми большинством новичков...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru