LINUXTALKS.CO

Глупых и умных вопросов про C++ тред

 , , , ,

L


0

1

Development (сегодня 0)

#define intentions Что-то в LT/Dev совсем тухловато, попробую наполнить.. На старом ЛОРе это был мой любимый раздел..

int main () {

Пишите сюда любые вопросы, набросы и запросы о C++, а я постараюсь ответить.

1. Каверзность и провокационность приветствуется.

2. Учебные задачи снабжайте Вашими собственными попытками решения

3. Не забывайте про https://godbolt.org/ и аналоги

О себе: имею профессиональный и академический интерес в системном (low-level, zero-cost, hpc..) программировании; есть некоторый опыт преподавания. C++ язык далеко не самый ладный, но ничего лучше для этой области я пока не встречал. Мой профит от этой темы предельно прост: охота побоЛТать.

return 0;}

// Терзают сомнения в успехе этого топика, но не могу противостоять Fais ce que dois, advienne, que pourr (c)

// Перехват инициативы по ответам на вопросы, естественно, также не возбраняется..

имею профессиональный и академический

Я когда-то был бестолковым миддлом, но уже лет 10 профессионально не писал на плюсах. Сейчас хочу вернуться в профессию, но… гхм.

Поэтому если тебе для создания диалога в стиле греческих философов потребуется практик с полным отсутствием теоретической подготовки и который давно ничего не писал, но потихоньку пытается вспомнить где какая кнопка – кастуй.

О! И нефиг в меня бросаться французскими поговорками. Я не знаю французского. Мог бы, вежливости ради, сразу и перевести, чай не sapienti sat цитируешь.

Usruser    
★★★★★
Linux / Firefox

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

Вот если бы по более конкретной предметной области какой - скажем stm32.

JamesHolden    
★★★★★★★
Android / Chrome

Usruser

Мог бы, вежливости ради, сразу и перевести

«Делай, что должен — и будь, что будет». Девиз рыцарей Кадош.

Поэтому если тебе для создания диалога в стиле греческих философов потребуется ... кастуй.

Кастую

Я когда-то был бестолковым миддлом, но уже лет 10 профессионально не писал на плюсах.
Сейчас хочу вернуться в профессию, но… гхм.

Почему перестал писать? Зачем хочешь вернуться?


ox55ff

Контравариантность и ковариантность в c++. Есть ли жизнь?

Стакан наполовину полон.

0. Поддержки (ко-,контр-)вариантности в самом языке нет. Потому что система типов.. оставляет желать лучшего. Либо, вариантность просто было нельзя нормально сделать, учитывая другие фишки языка (например, множественное наследование, тем более ромб?). Я не знаю точных причин

1. Встроенная ковариантность есть для указателей (в том числе «умных») и ссылок.

2. Шаблонные контейнеры из STL не вариантны вообще, даже для тех случаев, где это можно было сделать.

3. Контрвариантности (по аргументам) для функций нет, но если пользоваться враппером std::function, то будет работать. Его специально ввели, чтобы обмазать всякими удобностями, при этом не меняя core language.

4. Композиция вариантности не работает вообще. Потому что опять же пункт 0. То есть, два ковариантных шаблонных типа скорее всего потеряют это свойство, если их друг в друга вложить.

5. Для своего класса вариантность можно впилить с помощью std::is_convertible

Хороший вопрос, спасибо! Если я где напутал, поправляйте, дополняйте.


JamesHolden

Про микроконтроллеры я ничего не знаю... А вот про CPU и GPU можно что-нибудь обсудить. Ну и про суперкомпьютерные кластеры.

ThePlayerZero    
★★
Linux / Chrome
Ответ на: комментарий от ThePlayerZero

Почему перестал писать? Зачем хочешь вернуться?

Долгая и тяжёлая болезнь не позволяла мне работать. А вернуться хочу потому что ничего более интересного чем писать на плюсах мне делать не приходилось.

Usruser    
★★★★★
Linux / Firefox
Ответ на: комментарий от ThePlayerZero

Ладно, глупый нубский вопрос по C фактически.

Есть такая штука bumblebee daemon. У нее в исходниках какого-то рожна несколько глобальных для всего проекта переменных объявлены в .h файлах, причем без extern.

Эти .h файлы инклудятся в несколько модулей сразу, и при линковке возникает ошибка multiple definition.

Это понятно и ожидаемо, а вопрос вот в чем - это 10 лет компилировалось и работало! Сегодня я заметил что перестало. Как???

JamesHolden    
★★★★★★★
Последнее исправление: JamesHolden (всего исправлений: 1)

Android / Chrome

Usruser

А вернуться хочу потому что ничего более интересного чем писать на плюсах мне делать не приходилось.

Это очень хорошая причина, экзистенциальная! 👍
У тебя всё получится

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

  1. Освежить знание самого языка, узнать про стандарты C++11 и новее, которые ты наверное пропустил. Лекции можно смотреть за едой, в метро и т.д.
  2. Порешать весёлые задачки прямо на обучающей платформе, с автоматической проверкой ответа. Снова почувствуешь себя на уроке информатики 🙂
    И мозги размять будет полезно
  3. Про бесплатность я не буду подробно пояснять, но это тоже важный момент. Платные курсы могут быть полезны в других ситуациях, но не в твоей.

Если будут проблемы с поиском, то хорошие бесплатные курсы есть, например, на stepik.org

Немного порыскал, можно вот этот https://stepik.org/course/3206/promo


JamesHolden

Эти .h файлы инклудятся в несколько модулей сразу, и при линковке возникает ошибка multiple definition.

а вопрос вот в чем - это 10 лет компилировалось и работало! Сегодня я заметил что перестало. Как???

Опции -fcommon, -fno-common

Начиная с GCC 10 они включили -fno-common по умолчанию, поэтому поведение изменилось.

https://gcc.gnu.org/gcc-10/changes.html

ThePlayerZero    
★★
Linux / Chrome
Ответ на: комментарий от ThePlayerZero

узнать про стандарты C++11 и новее, которые ты наверное пропустил.

Да, когда я профессионально писал, 11-й стандарт только начал широко использоваться на практике и я имею о нём смутное представление. Язык сильно изменился с тех времён.

Пока читаю https://www.learncpp.com/ Написано без «зауми» и без молодёжного сленга, но весьма подробно.

Usruser    
★★★★★
Linux / Firefox