Sprawdzam projekt cppcheckiem i dostałem wskazówkę, żeby pętlę zamienić na std::transform.
Napisałem sobie test, żeby zobaczyć jak będzie zachowywał się obiekt po takiej zmianie i widzę, że przy każdym obiekcie wywoływany jest konstruktor przenoszący. Robię coś źle, czy po prostu std::transform w takim prostym przypadku wykorzystuje więcej zasobów od pętli?

Co byście użyli w takiej sytuacji?
https://godbolt.org/z/7fMbPabEo

#cpp
  • 7
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Gerax9: lambda by default zwraca przez wartość, zatem zwracasz w tej lambdzie kopię. dorzuć tam ->decltype(auto) w lambdzie, to będzie referencję zwracać i nie będzie przenoszenia
  • Odpowiedz
@Gerax9: jednakże w korzystając z transforma chcemy tak naprawę tworzyć nowe obiekty(czyli zwracać przez wartość(rvo) i przenosić), a nie zwracać referencje do istniejących, więc zastanów się co tak naprawdę chcesz zrobić. chyba, że zwracasz referencję do membera, to ok
  • Odpowiedz
@noway321: wrzucac, wrzucac co sie da i ile sie da technologii wylistowac.. nawet takie pierdy jak HTML, XML.. wszystko jak leci.. edytory jakich uzywales.. wszystko
  • Odpowiedz
wrzucac co sie da i ile sie da technologii wylistowac.. nawet takie pierdy jak HTML, XML.. wszystko jak leci.. edytory jakich uzywales.. wszystko


@6a6b6c:pierdyliard technologii, których nawet nie znasz ale widziałeś raz na oczy, jak u hindusa, co za bezsens
  • Odpowiedz
Mam vector w którym są sharedpointery

std::vector<shared
ptr<Object>> tab;

i teraz chcę wyszukać obiekt po jednym z jego
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Gerax9: możesz stworzyć też stworzyć (generyczny) adapter, który będzie przyjmował funktor akceptujący T, a który będzie zwracał funktor akceptujący U, gdzie dereferencja U będzie dawać T. wtedy będzie można użyć tego mniej więcej tak

std::find_if(tab.begin(), tab.end(), withDeref([](const Object& obj){return obj.atr == 3;}));
przykładowy jednolinijkowy adapter w c++17(ofc można dorzucić tam perfect forwarding, ale to troche skomplikowane przy capture)

constexpr auto withDeref = [](auto& functor){return [functor](const auto& dereferencable){return
  • Odpowiedz
@Ernest_: ta, jasne, "how to fix it" i jak zastosujesz, zwłaszcza jak robisz jakiś stan współdzielony, to masz teraz w prezencie inny error lub nawet całą ich grupę do poprawienia. ( ͡° ͜ʖ ͡°)

Zresztą, gdyby to było takie fajne, to SO, forum rusta i reddit powinno mieć mało postów proszących o wyjaśnienie tych błędów, a takich wpisów i pytań jest cała masa, nawet teraz, kiedy
  • Odpowiedz
@Gladoo: Rozumiem, ale w normlanym workflowu te pliki nie są generowane.

Odpowiadajac na pytanie czym się różnią te pliki od plików obiektowych to .obj zawierają o wiele więcej informacji. Poza samym kodem w postaci maszynowej są też informacje dla linkera, symbole, relokacje, komentarze, moge byc tez jakieś metadane profilera czy debuggera. Ogarnij sobie https://linux.die.net/man/1/objdump jak jestes na linuxie
  • Odpowiedz
#programowanie #cpp
Dlaczego unique_ptr może być zwrócony przez funkcję przez wartość, skoro standard mówi, że zostaje on zniszczony podczas opuszczania zakresu ważności?
  • 14
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Gladoo: Ogarnij sobie taki przykład: https://godbolt.org/z/crrYbqdxb

Tutaj jako "ładunek" masz int zamiast pamieci na stercie która miałbys w przypadku smart pointera ale ta zasada jest ta sama.

W srodku funkcji stwarzasz Cecylie z ladunkiem 3 i zwracasz ja do Aliny. Najpierw ladunek zostaje przeniesiony a potem pusta Cecylia jest niszczona. Na podobnej zasadzie dziala zwracania z unique_ptr

Patrz tylko na funkcje main() i f()
  • Odpowiedz
Kończy mi się staż i szef powiedział, żebym sobie poprzeglądał otwarte stanowiska w firmie bo chcą mnie zatrzymać na stałe. ( ͡ ͜ʖ ͡)

Wpadł mi w oko zespół piszący CAD-owską aplikację w C++. Aktualnie robię web-dev, ale nie powiem, żebym to jakoś szczególnie kochał.

Jeżeli chodzi o CAD, to w poprzedniej firmie pisałem add-iny do autodeskowych aplikacji w C# i przyznam że bardziej mnie to kręciło niż

Opłaca się wchodzić w C++ w 2023?

  • Tak, C++ jest wieczny. 50.6% (45)
  • Nie, to zabytek. 21.3% (19)
  • To zależy. 28.1% (25)

Oddanych głosów: 89

  • 2
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

#anonimowemirkowyznania
Siema,

Zbliża się koniec roku co za tym idzie gadanie o #zarobki w #praca. Pracuję w #it 8miesiecy jako dev w #cpp #python, na ten moment zarabiam 9k brutto. Jest to spore #korpo i pytanie brzmi jakiej wysokości podwyżkę się starać. Obliczyłem +/- że +14% pójdzie na samo wyrównanie przez inflację, a w przyszłym roku dojdzie
  • 14
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@AnonimoweMirkoWyznania: jak korpo to pewnie bardzo sztywne zasady podwyżek są. Rzuć wysoką kwotą to pewnie dostaniesz maks tego co mogą Ci dać. Ale stawiam, że to i tak Cię nie zadowoli.

Sensowna podwyżka jedynie przez zmianę pracy.
  • Odpowiedz
Mirki,
Dla piszących w #cpp . Czy działa Wam disassembly w #visualstudiocode? Jeśli zrobię breakpoint i dam -> Open Disassembly View, to przechodzi mi do okna z disassembly. Niestety nie działa podświetlenie linii i nie łazi po kodzie jak klikam w kodzie Step Into. Zgodnie z tym LINKIEM powinno działać. Wiem, że w #visualstudio taka funkcja jest.
I teraz nie wiem, czy to dlatego, że
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach