Хочу подтянуть знания. Накидайте, плиз сложных вопросов по плюсам по темам конструкторов, копирования, виртуальности, умных указателей и исключений. Ссылки на хорошие quiz тесты приветствуются. Заранее спасибо!
Профессор ДиректИкс
Чтобы подтянуть нужен болт гайка ключ
найди ошибки:
struct Foo { static auto getFoo() -> Foo { return Foo( ); } void print( ) { std::cout << "Foo::print()" <<std::endl; } }; void a( ) { const auto& foo = Foo::getFoo( ); Foo* p_foo = &p_foo; p_foo->print( ); } auto b( ) -> const Foo* { auto& foo = Foo::getFoo( ); return &foo; }
Foo* p_foo = &p_foo;
Это странно само по себе. А так адрес указателя присваивается указателю.
auto& foo = Foo::getFoo();
lvalue-ссылка получает rvalue
Профессор ДиректИкс
> Хочу подтянуть знания.
Так ты их не подтянешь, почитай хорошую книгу по плюсам (не знаю что нынче в моде, не могу посоветовать) попрактикуйся, походи по собеседованиям.
Профессор ДиректИкс
> Накидайте, плиз сложных вопросов по плюсам
Да на здоровье, что в этом коде не так?
https://godbolt.org/z/faq4xoGTv
totoro
> Так ты их не подтянешь, почитай хорошую книгу по плюсам
Знать бы какую, какие-то растянутые примеры в книгах, где утомляешься быстрее, чем доходишь до сути темы
Профессор ДиректИкс
каждое видео +/- часик, на месяц другой хватит посмотреть
https://www.youtube.com/@CppCon/videos
Вот сложные вопросы по плюсам:
1. Как найти интересную работу на С++, если умеешь только проходить собесы и отвечать на хитрые вопросы про реинтерпткаст, сфинае и констексп?
2. Как удержаться от того, чтобы писать это дерьмо (которому ты научился для сдачи собесов), на этой интересной работе, вместо нормального рабочего кода?
3. Когда уже в С++ перестанут добавлять говносахар и расширять стандартную библиотеку, а сосредоточатся на полезном (рефлекшн например)?
4. Является ли существование auto злом, добром, добрым злым костылем, или костыльным злом?
Профессор ДиректИкс
> lvalue-ссылка получает rvalue
https://en.cppreference.com/w/cpp/language/implicit_conversion#Te… terialization
Dmitry_Milk
не константную ссылку так нельзя. Но можно в a() и тогда ссылка будет "удерживать" временный объект пока не выйдет из области видимости, после чего вызовется деструктор.
Профессор ДиректИкс
> Это странно само по себе. А так адрес указателя присваивается указателю.
хотел написать Foo* p_foo = &foo;
jaguard
> 4. Является ли существование auto злом, добром, добрым злым костылем, или костыльным злом?
добром, лямбды/рэнжи без неё были бы той еще болью. Да и подобные циклы:
for(const std::vector<Foo>::iterator it = vec.begin( ); it != vec.end( ); ++it)
забыли уже как писали?
Aroch
> забыли уже как писали?
for (int i = 0, n = vec.size( ); i < n; i++)
А всем прочим стд-контейнерам, в сколько-нибудь оправданных в Ц++ случаях их использования, итерация не нужна.
Aroch
> найди ошибки:
Ехал auto через auto, видит auto auto auto. Оно?
Sbtrn. Devil
> А всем прочим стд-контейнерам, в сколько-нибудь оправданных в Ц++ случаях их использования, итерация не нужна.
теперь повесь фильтрацию, с пропуском первых двух элементов и последних 5, с группировкой по 4 штуки.
MrShoor
> Ехал auto через auto, видит auto auto auto. Оно?
нет.
Aroch
> нет.
Ну как же нет. У тебя написано:
static auto getFoo() -> Foo { return Foo( ); }
А надо:
static Foo getFoo() { return Foo( ); }
У тебя:
const auto& foo = Foo::getFoo();
А надо:
const Foo& foo = Foo::getFoo();
У тебя:
auto b() -> const Foo*
А надо:
const Foo* b()
У тебя:
auto& foo = Foo::getFoo();
А надо:
Foo& foo = Foo::getFoo();
И того твой код без auto выглядит так:
struct Foo { static Foo getFoo() { return Foo( ); } void print( ) { std::cout << "Foo::print()" <<std::endl; } }; void a( ) { const Foo& foo = Foo::getFoo( ); Foo* p_foo = &p_foo; p_foo->print( ); } const Foo* b( ) { Foo& foo = Foo::getFoo( ); return &foo; }
Тут конечно пакован ошибок, зато теперь их нормально видно.
MrShoor
> а надо
смешно. Вот тебе без авто оставил специально для тебя одну ошибку, но по скольку тут уже всё объяснялось выше, то внимательный читатель поймет что к чему, ты пришел когда уже всё разжевано но всё равно уперся в авто https://godbolt.org/z/veqW73GK1
Тема в архиве.