вот в 33 года припёрло изучать плюсы и перекатываться. Честно вот, объективно на ваш взгляд, гнилая затея?
вам в питон всё-таки
при усердии - нет, но проще не в плюсы
Супер, в группе плюсовиков советуют питон. Хороший каминаут.
если вам в группе плюсовиков посоветуют учить плюсы до питона - ливайте с группы :)
Ну а если мне язык сам не сложно даётся. Нет таких вещей, которые бы мне не были в нём непонятны на этапе изучения.
Как вы определили, что язык вам не сложно даётся?
Учил ассемблер до плюсов, в 15 лет написал свой первый полиморфный пермутирующий вирус. Мне нужен Питон, если я знаю WinAPI хорошо, например?
При чтении книг по плюсам, не приходится перечитывать сотню раз одну и ту же главу, а при чтении приблизительно предугадываю о чём автор будет писать дальше.
Если у вас есть опыт низкоуровнего программирования, вы понимаете зачем читать маны, то за годик времени и желания на изучение плюсов вы можете получить профессию
ну вот это указывать же надо бы :)
void f(int & x); (1) void f(int && x); (2) void g(int && x) { f(x); } //какая перегрузка и почему?
Первая, потому что для второй нужно явно указывать std::move
Детальнее - почему для второй нужен move?
Не знаю, я так запомнил, что для любой это хери про move-семантику не обойтись без костыля std::move
void g() { f(0); } //какая перегрузка и почему?
Это не единственный способ вызвать вторую
Литералы сами по себе являются rvlalue поэтому — вторая.
std::vector<int> get_v(); std::vector<std::vector<int>> get_vv(); std::string get_s(); void foo() { for (auto x : { 1, 2, 3 }) continue; //(1) for (auto x : get_v()) continue; //(2) for (auto x : "Hello, world!") continue; //(3) for (auto x : get_s()) continue; //(4) for (auto x : get_vv()[0]) continue; //(5) } с какими циклами будут проблемы?
ссылка универсальная?
Там норм
Проблем не будет, потому что в первом пробегаемся по initializer_list
В (5) в этом опросе точно не auto&& должно быть?
Во втором: пробегаемся по обычному вектору.
(3) переберёт '\0', (5) UB
Я не об этом. С auto без && там нет проблем, вектор копируется
auto применится к элементу, а не к range-expr (он всегда auto&&)
Я перепутал с биндингами
Ага, get_vv()[0] это lvalue и не случай lifetime extension, время жизни - инициализатор range-expr
кстати про биндинги :) const auto id = [] (auto x) { return x; }; const auto [min, max] = std::minmax(id(1), id(2)); if (min == max) { } else { for (auto x = min + 1; x < max; ++x) do_job(); //как получилось, что это вызывается? }
Так как у x можно взять адресс и он lvalue,хоть и аргумент rvalue
Обсуждают сегодня