SlideShare une entreprise Scribd logo
1  sur  12
わんくま同盟 横浜勉強会 #06
C++11 : 右辺値参照 ておいしいの?
わんくま同盟
episthmh epi@c3-net.ne.jp
わんくま同盟 横浜勉強会 #06
C++ は むずかしいややこしい
class Foo;
void f(Foo x); ← 値 (C)
void f(Foo* x); ← ポインタ (C)
void f(Foo& x); ← 参照 (C++)
...こんだけでも十分ややこしいのに
void f(Foo&& x); ← 右辺値参照(C++11 NEW)
わんくま同盟 横浜勉強会 #06
そもそも「右辺値(R-value)」てナニよ?
z = f( x+1 ) + 2 * y;
すっごくテキトーに言えば
「その場限りに作られた値」
→ 代入や関数に渡されたら用済みとなる
= 廃棄される MOTTAINAI!
わんくま同盟 横浜勉強会 #06
move semantics
y = x; は、
フツーなら “x を y に copy” だけど
x が右辺値なら
右辺を copy の後 廃棄するんだから
意味的には move だよね。
copy+廃棄 コスト > move コスト なら
move の方がお得よね♪
わんくま同盟 横浜勉強会 #06
copy より move がお得な典型例
template<typename T>
class novice_vector {
private:
T* data_; // Tの列
size_t size_; // 要素数
size_t capacity_; // 容量
…
};
あいうえお
よくある
コンテナ/コレクション
わんくま同盟 横浜勉強会 #06
copy ctor
novice_vector(const novice_vector& other)
: size_(other.size_), capacity_(other.capacity_) {
// 領域を確保して
data_ = new T[capacity_];
// 引数からcopyする
for ( size_t i = 0; i < size_; ++i ) {
data_[i] = other.data_[i];
}
}
わんくま同盟 横浜勉強会 #06
copy operator ‘=‘
novice_vector& operator=(const novice_vector& other) {
// 現data_を廃棄し
delete[] data_;
// 新たに領域を確保して
data_ = new T[other.cpacity_];
// 右辺からcopyする
for ( size_t i = 0; i < other.size_; ++i ) {
data_[i] = other.data_[i];
}
size_ = other.size_;
capacity_ = other_.capacity_;
return *this;
}
わんくま同盟 横浜勉強会 #06
novice_vector<T> のcopy
あいうえお ABCD
あいうえお
????
左辺 右辺
ABCD
ABCD
廃棄
生成
わんくま同盟 横浜勉強会 #06
novice_vector<T> のcopy
ABCD ABCD
ABCD
左辺 右辺
ABCD
2 廃棄
1 生成
1 コピー
廃棄
コピー
わんくま同盟 横浜勉強会 #06
move ctor
novice_vector(novice_vector&& other)
// 右辺のナカミをもらって
: size_(other.size_), capacity_(other.capacity_) {
data_ = other.data_;
// 右辺側は空にする
other.data_ = nullptr;
other.size_ = 0;
other.capacity_ = 0;
}
わんくま同盟 横浜勉強会 #06
move operator ‘=‘
novice_vector& operator=(novice_vector&& other) {
// 右辺のナカミをもらって
size_ = other.size_;
capacity_ = other.capacity_;
data_ = other.data_;
// 右辺側は空にする
other.data_ = nullptr;
other.size_ = 0;
other.capacity_ = 0;
return *this;
}
わんくま同盟 横浜勉強会 #06
novice_vector<T> のmove
あいうえお ABCD
あいうえお
左辺 右辺値
ABCD
ABCD
nullptr
1 廃棄
0 生成
0 コピー
廃棄

Contenu connexe

Tendances

ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体digitalghost
 
Scala 初心者が Hom 函手を Scala で考えてみた
Scala 初心者が Hom 函手を Scala で考えてみたScala 初心者が Hom 函手を Scala で考えてみた
Scala 初心者が Hom 函手を Scala で考えてみたKazuyuki TAKASE
 
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたScala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたKazuyuki TAKASE
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit ScalaKota Mizushima
 
Implicit Implicit Scala
Implicit Implicit ScalaImplicit Implicit Scala
Implicit Implicit ScalaKota Mizushima
 
kagamicomput201807
kagamicomput201807kagamicomput201807
kagamicomput201807swkagami
 
Introduction to lambda calculation
Introduction to lambda calculationIntroduction to lambda calculation
Introduction to lambda calculationrelipmoc101
 
Introduction to Categorical Programming
Introduction to Categorical ProgrammingIntroduction to Categorical Programming
Introduction to Categorical ProgrammingMasahiro Sakai
 
こわくない型クラス
こわくない型クラスこわくない型クラス
こわくない型クラスKota Mizushima
 
やさしく知りたいC言語
やさしく知りたいC言語やさしく知りたいC言語
やさしく知りたいC言語uru nru
 
SICP
SICPSICP
SICPS W
 
Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Masahiro Sakai
 
C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編道化師 堂華
 

Tendances (20)

C言語講習会1
C言語講習会1C言語講習会1
C言語講習会1
 
ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体
 
Scala 初心者が Hom 函手を Scala で考えてみた
Scala 初心者が Hom 函手を Scala で考えてみたScala 初心者が Hom 函手を Scala で考えてみた
Scala 初心者が Hom 函手を Scala で考えてみた
 
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたScala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみた
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit Scala
 
Implicit Implicit Scala
Implicit Implicit ScalaImplicit Implicit Scala
Implicit Implicit Scala
 
kagamicomput201807
kagamicomput201807kagamicomput201807
kagamicomput201807
 
Web05
Web05Web05
Web05
 
C言語講習会2
C言語講習会2C言語講習会2
C言語講習会2
 
Introduction to lambda calculation
Introduction to lambda calculationIntroduction to lambda calculation
Introduction to lambda calculation
 
Introduction to Categorical Programming
Introduction to Categorical ProgrammingIntroduction to Categorical Programming
Introduction to Categorical Programming
 
5 Info Theory
5 Info Theory5 Info Theory
5 Info Theory
 
Startprintf_2013May18
Startprintf_2013May18Startprintf_2013May18
Startprintf_2013May18
 
こわくない型クラス
こわくない型クラスこわくない型クラス
こわくない型クラス
 
やさしく知りたいC言語
やさしく知りたいC言語やさしく知りたいC言語
やさしく知りたいC言語
 
#6:実数と繰り返し
#6:実数と繰り返し#6:実数と繰り返し
#6:実数と繰り返し
 
SICP
SICPSICP
SICP
 
Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)Introduction to Categorical Programming (Revised)
Introduction to Categorical Programming (Revised)
 
Ilerpg Study 002
Ilerpg Study 002Ilerpg Study 002
Ilerpg Study 002
 
C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編
 

En vedette

ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11えぴ 福田
 
Episteme variadic template
Episteme variadic templateEpisteme variadic template
Episteme variadic templateえぴ 福田
 
.NETラボ 2013-12-21 LT
.NETラボ 2013-12-21 LT.NETラボ 2013-12-21 LT
.NETラボ 2013-12-21 LTえぴ 福田
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかYuki Miyatake
 

En vedette (9)

T77 episteme
T77 epistemeT77 episteme
T77 episteme
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11
 
T69 episteme
T69 epistemeT69 episteme
T69 episteme
 
T45 episteme
T45 epistemeT45 episteme
T45 episteme
 
Episteme unique_ptr
Episteme unique_ptrEpisteme unique_ptr
Episteme unique_ptr
 
Episteme variadic template
Episteme variadic templateEpisteme variadic template
Episteme variadic template
 
.NETラボ 2013-12-21 LT
.NETラボ 2013-12-21 LT.NETラボ 2013-12-21 LT
.NETラボ 2013-12-21 LT
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
 

Dernier

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 

Dernier (12)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 

Yokohama6 epi