Aktywne Wpisy
arinkao +177
Moja mama nigdy nie robiła pierogów. Bo wiecie, to strasznie trudne, potwornie męczące i niewiarygodnie czasochłonne.
Jadłam do jakiegoś czasu wyłącznie sklepowe, często sklepowo-domowe czyli z lokalnego sklepiku które ulepiła jakaś tam pani Zosia i są na pewno domowe. Albo zamawiała u jakiejś baby od której kupowała cała okolica bo ona je lepi i tak sobie dorabia do renciny.
Efekt? Nie byłam fanką pierogów, ot kluska, już wolałam dobry makaron z sosem.
Jadłam do jakiegoś czasu wyłącznie sklepowe, często sklepowo-domowe czyli z lokalnego sklepiku które ulepiła jakaś tam pani Zosia i są na pewno domowe. Albo zamawiała u jakiejś baby od której kupowała cała okolica bo ona je lepi i tak sobie dorabia do renciny.
Efekt? Nie byłam fanką pierogów, ot kluska, już wolałam dobry makaron z sosem.
Syn_octave666 +15
Kupiliśmy sobie z mężem książkę, przyda się bo dzidzi już w drodze (ʘ‿ʘ)
#ksiazki #niewiemjaktootagowac #dzieci #logikarozowychpaskow #rozowepaski
#ksiazki #niewiemjaktootagowac #dzieci #logikarozowychpaskow #rozowepaski
void funkcja(std::string str)
{
std::string s = std::move(str);
}
zamiast
void funkcja(const std::string& str)
{
std::string s = str;
}
i analogicznie w konstruktorze?
Konstruktor(std::string str) : s(std::move(str){}
Mam wrażenie, że nikt tak nie robi, a nie widzę wad tego podejścia.
#cpp
std::string:
Dostaje l-value to masz copy+move.
Dostajesz r-value to masz constructor+move.
A wersji z const std::string&
Dostaje l-value to masz referencja+kopia.
Dostajesz r-value to masz constructor+kopia(!!!).
Wersja z overloadami
Dostaje l-value to masz referencja+kopia.
Dostajesz r-value to masz constructor+move.
const &
zamiast kopiowania, ale to jest raczej zalecenie. Jeżeli funkcja ma wziąć wartość parametru na własność w jakiś sposób (np zmienia jego wartość) to kopia może być ok. Przekazywanie przez kopię ogranicza pole manewru użytkownikowi funkcji - cokolwiek nie zrobi i tak finalnie będzie stworzona kopia przy wywołaniu.Jak funkcja
Wydajność?
No to czemu nie piszesz w pythonie? Wtedy będzie mniej znaków.
@Gerax9: optymalizuję kod jeżeli jest to potrzebne. Wyleczyłem się z optymalizacji każdej linijki kodu. BTW: nie wiem czy wiesz ale przy krótkich stringach (do 22 znaków) oba podejścia są równoważne.
@Gerax9: Bo kodzę w C++.
Ale to nie jest jakaś specjalnie trudna optymalizacja, tylko po prostu zasada pisania kodu.
Właściwie to 15 znaków + '\0', a przynajmniej tak jest na systemach 64 bitowych, bo wtedy zamiast dwóch wskaźników masz te 16 bajtów.
@Gerax9: + capacity = 3 słowa.
const char*
stworzysz temporary stringa, którego będziesz kopiował, w podejściu z wartością zmovujesz ten, który powstał przy konwersji.teoretycznie fajnie by było mieć obie sygnatury. w praktyce idzie się skichać przy 2^n overloadach dla n parametrów.
po to powstał perfect forwarding, żeby miec jeden generyczny overload, ale wtedy witajcie szablony i ich mankamenty.
@MamCieNaHita No tak czyli value + move jest lepsze, bo też nie ma dodatkowej kopii przy r-value/const char*.
@Gerax9: Nie mogę bo nie sprawdzałem dokładnie jaki to rozmiar. Ale masz rację, w plikach nagłówkowych jest zahardkodowane 15 znaków + '\0' .