Article View: pl.comp.lang.c
Article #309552Re: [C++] Czy to jest lagalne?
From: bartekltg
Date: Fri, 29 Dec 2017 11:10
Date: Fri, 29 Dec 2017 11:10
62 lines
2595 bytes
2595 bytes
On Thursday, December 28, 2017 at 12:11:35 PM UTC+1, Wojciech Muła wrote:
> Normalne kompilatory (GCC 7/clang 5) nie protestują.
> Czy ten kod jest legalny? Chodzi o castowanie w capture().
>
> --start--
> #include <string>
>
> class Item {
>
> protected:
> std::string a;
> };
>
> class Builder: public Item {
>
> public:
> void set() {
> a = "foo";
> }
>
> Item&& capture() {
> return std::move(*this);
> }
> };
>
> int main() {
>
> Builder b;
> b.set();
>
> Item a = b.capture();
> }
> --stop--
Nie wiem ;>
Ale dlaczego chcesz miec metodą capture*), zamiast pisać:
int main() {
Builder b;
b.set();
Item a = move(b);
}
Zrbi dokładnie to samo, wiele więcej nie zajmuje,za to programista
ma jedną warstewkę myślową mniej, bo widzi standardowe zaklęcie
zamiast pamiętać/sprawdzać, co robi capture.
Jakby musiuało być capture, pewnie bym pisał to tak, że
capture zwraca jakiś opiekt zawierający referencje do b,
a operatory przypisania/konstruktor dostając ten obiekt
robiłby move. Ale to trochę przekombinowane:)
*)zwłaszcza, że to obiekt a przechwytuje, nie b;-)
pzdr
bartekltg
Technical Details
Message-ID:
<5edc726f-df6a-4e10-9456-7646574b8051@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer02.am4!peer.am4.highwinds-media.com!peer01.iad!feed-me.highwinds-media.com!news.highwinds-media.com!m31no3500232qtf.0!news-out.google.com!t48ni1225qtc.1!nntp.google.com!m31no3500227qtf.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<f928db02-1940-40f1-95e9-241cc8966ed7@googlegroups.com>Show Full Headers
Complete Article Headers
X-Received: by 10.55.22.206 with SMTP id 75mr25058894qkw.20.1514545848205; Fri, 29 Dec 2017 03:10:48 -0800 (PST) X-Received: by 10.31.192.135 with SMTP id q129mr3161002vkf.0.1514545848086; Fri, 29 Dec 2017 03:10:48 -0800 (PST) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer02.am4!peer.am4.highwinds-media.com!peer01.iad!feed-me.highwinds-media.com!news.highwinds-media.com!m31no3500232qtf.0!news-out.google.com!t48ni1225qtc.1!nntp.google.com!m31no3500227qtf.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.c Date: Fri, 29 Dec 2017 03:10:47 -0800 (PST) In-Reply-To: <f928db02-1940-40f1-95e9-241cc8966ed7@googlegroups.com> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=80.54.0.14; posting-account=CvUQzQoAAABvVQmR58QmR6N4Cev1qhAS NNTP-Posting-Host: 80.54.0.14 References: <f928db02-1940-40f1-95e9-241cc8966ed7@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <5edc726f-df6a-4e10-9456-7646574b8051@googlegroups.com> Subject: Re: [C++] Czy to jest lagalne? From: bartekltg <bartekltg@gmail.com> Injection-Date: Fri, 29 Dec 2017 11:10:48 +0000 X-Received-Body-CRC: 2144221421 X-Received-Bytes: 2632 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit