Size: a a a

2020 May 09

DF

Dollar Føølish in pro.cxx
Ооо спасибо
источник

DF

Dollar Føølish in pro.cxx
Не подумал
источник

ПК

Побитый Кирпич... in pro.cxx
Denis Chernikov
Когда нам на самом деле не требуется виртуальный деструктор. Мы используем наследника напрямую, и никогда не подразумеваем его под ссылкой на родителя
Скорее всего тут нет отношения "является", наследование используется тупо для переиспользования кода - bad design
источник

AD

Andrey Davydov in pro.cxx
Vladimir
Это вариант но не хорошо так делать в std::string нету виртуального деструкора и код базе есть места где используется указатель на std::string так что хочется по дальше от греха
Ну что за фанатичный догматизм? Ничего страшного не случится, даже если my_string будет удален через указатель на std::string, что, правда, сложно себе представить потому что, во-первых, работать со строчкой как с полиморфным классом странно само по себе, а во-вторых, в вашем коде раньше не использовался std::string, а значит еще нет мест ожидающих указателей на него.
Бонусом предложенного решения, является то, что можно полностью сохранить старый интерфейс и не нужно "выносить ограниченный функционал в статические методы".
источник

AM

Alex Master in pro.cxx
Danya
Я думаю, они не final, потому что могут поломать существующий код
да, так и есть. final появился слишком поздно (c++11 вроде), а легаси было уже слишком много
источник

RR

Roman Rubanenko in pro.cxx
Andrey Davydov
Ну что за фанатичный догматизм? Ничего страшного не случится, даже если my_string будет удален через указатель на std::string, что, правда, сложно себе представить потому что, во-первых, работать со строчкой как с полиморфным классом странно само по себе, а во-вторых, в вашем коде раньше не использовался std::string, а значит еще нет мест ожидающих указателей на него.
Бонусом предложенного решения, является то, что можно полностью сохранить старый интерфейс и не нужно "выносить ограниченный функционал в статические методы".
я, если честно, тоже наблюдаю и не совсем понимаю проблемы.
как я понял, на std::string уже перешли и задача только в том, чтобы сделать алиас и не сломать ничего. даже в чате уже предложили несколько простых решений.  если есть хоть какое-то подобие тестов, то в корректности можно убедиться очень быстро и навсегда забыть про это, поскольку переиспользовать это уже никто не будет
источник

AI

Alex Ixux in pro.cxx
Если кто может, объяснить мне один вопрос напишите плюс, я спрошу его в личных чтоб, не засорять чат
источник

D

Danya in pro.cxx
Denis Chernikov
А какая острая нужда в этом запрете?
Кажется могут быть какие-то оптимизации ещё
Например в этом Котлине классы по умолчанию не наследуемые
источник

D

Danya in pro.cxx
Но основная цель — сказать на этапе компиляции "мол, чувак, ты делаешь что-то не так"
источник

DC

Denis Chernikov in pro.cxx
Danya
Но основная цель — сказать на этапе компиляции "мол, чувак, ты делаешь что-то не так"
Цель ясна, её причины — не очень... Но меня устраивают ответы выше, спасибо 😊
источник

D

Danya in pro.cxx
Простите?
источник

D

Danya in pro.cxx
Значит никогда меня не простят
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Andrey Davydov
Ну что за фанатичный догматизм? Ничего страшного не случится, даже если my_string будет удален через указатель на std::string, что, правда, сложно себе представить потому что, во-первых, работать со строчкой как с полиморфным классом странно само по себе, а во-вторых, в вашем коде раньше не использовался std::string, а значит еще нет мест ожидающих указателей на него.
Бонусом предложенного решения, является то, что можно полностью сохранить старый интерфейс и не нужно "выносить ограниченный функционал в статические методы".
> ничего страшного не случится
Это уб
источник

AD

Andrey Davydov in pro.cxx
Artöm Bakri Al-Sarmini
> ничего страшного не случится
Это уб
Маленький безобидный UB :) Из той же категории, что не использованный по месту std::launder как по мне — т.е. не важно на практике.
источник

AN

Alexander N in pro.cxx
Побитый Кирпич
Скорее всего тут нет отношения "является", наследование используется тупо для переиспользования кода - bad design
Почему же не является?
источник

M

Max in pro.cxx
Alexander N
Почему же не является?
Очевидно, потому что ты не можешь использовать его вместо родителя.
источник

IL

Ignat Loskutov in pro.cxx
а почему не можешь?
источник

M

Max in pro.cxx
Ignat Loskutov
а почему не можешь?
По исходным данным вопроса.
источник

VK

Valentin Kornienko in pro.cxx
https://pastebin.com/WWTFCwH9
Вопрос. Один и тот-же код. Собираю GCC 8.3.1 и MSVC2019. GCC сборка проходит нормально, MSVC- вываливаюсь с ошибками:
D:\1-Controllers\1-Diploma\Firmware\Firmware\src\logger\logger_service.hpp(36): error C2131: expression did not evaluate to a constant
 D:\1-Controllers\1-Diploma\Firmware\Firmware\src\logger\logger_service.hpp(36): note: failure was caused by a read of a variable outside its lifetime
 D:\1-Controllers\1-Diploma\Firmware\Firmware\src\logger\logger_service.hpp(36): note: see usage of '_toLog'
 D:\1-Controllers\1-Diploma\Firmware\Firmware\src\graphics\gs_platform_layer.cpp(201): note: see reference to function template instantiation 'void Logger::logDebugEndl<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>(TToLog &&)' being compiled
         with
         [
             TToLog=std::basic_string<char,std::char_traits<char>,std::allocator<char>>
         ]
D:\1-Controllers\1-Diploma\Firmware\Firmware\src\logger\logger_service.hpp(37): error C2131: expression did not evaluate to a constant
 D:\1-Controllers\1-Diploma\Firmware\Firmware\src\logger\logger_service.hpp(36): note: failure was caused by a read of a variable outside its lifetime
 D:\1-Controllers\1-Diploma\Firmware\Firmware\src\logger\logger_service.hpp(36): note: see usage of '_toLog'
D:\1-Controllers\1-Diploma\Firmware\Firmware\src\logger\logger_service.hpp(39): error C2079: 'str' uses undefined class 'std::array<char,320>'
D:\1-Controllers\1-Diploma\Firmware\Firmware\src\logger\logger_service.hpp(40): error C2661: 'std::to_chars': no overloaded function takes 2 arguments
D:\1-Controllers\1-Diploma\Firmware\Firmware\src\logger\logger_service.hpp(40): error C2119: '<structured binding>': the type for 'auto' cannot be deduced from an empty initializer
D:\1-Controllers\1-Diploma\Firmware\Firmware\src\logger\logger_service.hpp(40): error C3617: initializers of structured bindings must be of array or non-union class type; type 'int' is not permitted
источник

VK

Valentin Kornienko in pro.cxx
Что можно посмотреть?
Очень странно, что не может вычислить 36 строку на компайл-тайме
источник