Soumettre la recherche
Mettre en ligne
左と右の話
•
Télécharger en tant que PPTX, PDF
•
17 j'aime
•
6,865 vues
C
Cryolite
Suivre
左辺値と右辺値の話
Lire moins
Lire la suite
Ingénierie
Signaler
Partager
Signaler
Partager
1 sur 34
Télécharger maintenant
Recommandé
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#
Yoshifumi Kawai
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Genya Murakami
Recommandé
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#
Yoshifumi Kawai
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Genya Murakami
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
Kuniyasu Suzaki
PFIセミナー 2013/02/28 「プログラミング言語の今」
PFIセミナー 2013/02/28 「プログラミング言語の今」
Preferred Networks
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのか
Yoshifumi Kawai
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
disc99_
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Yoshifumi Kawai
.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理
KageShiron
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
gree_tech
UniRx完全に理解した
UniRx完全に理解した
torisoup
実践!Elasticsearch + Sudachi を用いた全文検索エンジン
実践!Elasticsearch + Sudachi を用いた全文検索エンジン
S. T.
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
torisoup
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
torisoup
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
家に帰るまでが遠足です
家に帰るまでが遠足です
Cryolite
コルーチンの使い方
コルーチンの使い方
Naohiro Yoshikawa
Contenu connexe
Tendances
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
Kuniyasu Suzaki
PFIセミナー 2013/02/28 「プログラミング言語の今」
PFIセミナー 2013/02/28 「プログラミング言語の今」
Preferred Networks
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのか
Yoshifumi Kawai
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
disc99_
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Yoshifumi Kawai
.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理
KageShiron
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
gree_tech
UniRx完全に理解した
UniRx完全に理解した
torisoup
実践!Elasticsearch + Sudachi を用いた全文検索エンジン
実践!Elasticsearch + Sudachi を用いた全文検索エンジン
S. T.
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
torisoup
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
torisoup
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
Tendances
(20)
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
PFIセミナー 2013/02/28 「プログラミング言語の今」
PFIセミナー 2013/02/28 「プログラミング言語の今」
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのか
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
UniRx完全に理解した
UniRx完全に理解した
実践!Elasticsearch + Sudachi を用いた全文検索エンジン
実践!Elasticsearch + Sudachi を用いた全文検索エンジン
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
C++ マルチスレッド 入門
C++ マルチスレッド 入門
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
En vedette
家に帰るまでが遠足です
家に帰るまでが遠足です
Cryolite
コルーチンの使い方
コルーチンの使い方
Naohiro Yoshikawa
Allocators@C++11
Allocators@C++11
Cryolite
Lambda in template_final
Lambda in template_final
Cryolite
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
digitalghost
C++が仲間になりたそうにこちらを見ている
C++が仲間になりたそうにこちらを見ている
fjnl
Boost container feature
Boost container feature
Akira Takahashi
コルーチンを使おう
コルーチンを使おう
amusementcreators
Multi paradigm design
Multi paradigm design
Akira Takahashi
Unity入門講座その3
Unity入門講座その3
spi8823
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみた
Mitsuru Kariya
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin
Ryota Murohoshi
Unity入門講座その1
Unity入門講座その1
spi8823
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
個人開発でゲーム一本完成させるまでの苦難の道のり 〜企画編〜
個人開発でゲーム一本完成させるまでの苦難の道のり 〜企画編〜
narumi_
【 #Unity会 】このUnityがすごい2015年版
【 #Unity会 】このUnityがすごい2015年版
ui nyan
En vedette
(16)
家に帰るまでが遠足です
家に帰るまでが遠足です
コルーチンの使い方
コルーチンの使い方
Allocators@C++11
Allocators@C++11
Lambda in template_final
Lambda in template_final
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
C++が仲間になりたそうにこちらを見ている
C++が仲間になりたそうにこちらを見ている
Boost container feature
Boost container feature
コルーチンを使おう
コルーチンを使おう
Multi paradigm design
Multi paradigm design
Unity入門講座その3
Unity入門講座その3
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみた
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin
Unity入門講座その1
Unity入門講座その1
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
個人開発でゲーム一本完成させるまでの苦難の道のり 〜企画編〜
個人開発でゲーム一本完成させるまでの苦難の道のり 〜企画編〜
【 #Unity会 】このUnityがすごい2015年版
【 #Unity会 】このUnityがすごい2015年版
左と右の話
1.
2014/9/20 Cryolite Boost.勉強会#16
大阪 1 左と右の話
2.
2 左と右の区別は大事です ※画像はイメージです
3.
3 左辺値・右辺値とは何か? i
= 42; 左辺値右辺値 式の値を格納した場所 Cf. “Location value” 式の値
4.
i int &f();
f() 全て規格に 4 左辺値・右辺値とは 全ての式がおのおの持つ属性 左辺値となる式 右辺値となる式 42, i + j int g(); g() MyClass(arg) 書いてある
5.
5 代入演算子における 左辺値・右辺値の例
i = 42; 変数“i” からなる式 “i” の値を格納した場所(左辺値)
6.
6 代入演算子における 左辺値・右辺値の例
i = 42; リテラル“42” からなる式 “42” の値(右辺値)
7.
7 代入演算子における 左辺値・右辺値の例
i = 42; “i” という式の値を格納した場所 (左辺値)に, “42” という式の値 (右辺値)を代入する
8.
8 代入演算子における 左辺値・右辺値の例
i = 42; “i = 42” という式の値を 格納した場所(左辺値)
9.
9 代入演算子の右辺に 左辺値が来たらどうなるの?
j = i “j” という式の値を格納した場所 (左辺値)に, “i” という式の値を 格納した場所(左辺値)を代入する?
10.
10 代入演算子の右辺に 左辺値が来たらどうなるの?
j = i “j” という式の値を格納した場所 (左辺値)に, “i” という式の値を 格納した場所(左辺値)を代入する?
11.
11 代入演算子は 右辺に右辺値が欲しい!
= 右辺には右辺値が欲しい 左辺には左辺値が欲しい
12.
12 代入演算子は 右辺に右辺値が欲しい!
左辺に期待通り左辺値が来た!問題無し! j =
13.
13 代入演算子は 右辺に右辺値が欲しい!
右辺に右辺値が欲しいのに左辺値が来た! 欲しいのと違う! j = i
14.
14 代入演算子は 右辺に右辺値が欲しい!
右辺に右辺値が欲しいのに左辺値が来た! 欲しいのと違う! j = i 左辺値を右辺値として解釈しなおそう! j = i
15.
左辺値から 右辺値への変換 lvalue-to-rvalue
15 代入演算子は 右辺に右辺値が欲しい! 右辺に右辺値が欲しいのに左辺値が来た! 欲しいのと違う! j = i 左辺値を右辺値として解釈しなおそう! j = i conversion
16.
値が格納された場所(左辺値) から値(右辺値)を取り出す 左辺値から
右辺値への変換 lvalue-to-rvalue 16 代入演算子は 右辺に右辺値が欲しい! 右辺に右辺値が欲しいのに左辺値が来た! 欲しいのと違う! j = i 左辺値を右辺値として解釈しなおそう! j = i conversion
17.
“j” という式の値を格納した場所 (左辺値)に,
“i” という式の値 (右辺値)を代入する 左辺値から 右辺値への変換 lvalue-to-rvalue 17 代入演算子は 右辺に右辺値が欲しい! j = i j = i conversion
18.
他の組み込み演算子, statement 等は左右どちらが欲しい?
R + R -R &L L = R int i = R; 全て規格に int &ri = L; 書いてある if (R) {… 18
19.
ある式が,出現する文脈で左辺値・右辺値の 19 式の左辺値・右辺値に
関する2つの視点 式自身が左辺値なのか右辺値なのか i 42 どちらであることを要求されるのか 左辺値が欲しい= 右辺値が欲しい
20.
20 式の左辺値・右辺値に関する 2つの視点とL-to-R
変換 ある式が左辺値 である 右辺値 である 出現して いる文脈 で 左辺値である ことが要求さ れている そのま まで O.K. コンパ イルエ ラー 右辺値である ことが要求さ れている L-to-R 変換が 起きる そのま まで O.K.
21.
21 式の左辺値・右辺値に関する 2つの視点とL-to-R
変換 ある式が左辺値 である 右辺値 である 出現して いる文脈 で 左辺値である ことが要求さ れている そのま まで O.K. コンパ イルエ ラー 右辺値である ことが要求さ れている L-to-R 変換が 起きる そのま まで O.K. &42 42=0
22.
22 全ては規格のシナリオ通りに •
式自身が左辺値か右辺値か ⇒全て規格に書いてある • 個々の文脈で式に左辺値・ 右辺値のどちらが要求されるか ⇒全て規格に書いてある • いつ左辺値から右辺値への 変換が起きるか ⇒全て上2つから判断できる
23.
左辺値から右辺値への変換が 起きる場所は全て規格に書いてある 23
24.
全てのコーナーケースは 左辺値から右辺値への変換に通ず 24
25.
全てのコーナーケースは 左辺値から右辺値への変換に通ず 25
26.
例:オブジェクトが未構築な 領域にどんな操作が許されるか? 26
オブジェクトに対して左辺値から 右辺値への変換が起きたらアウト void *p = std::malloc(sizeof(int int &ri = *p; セーフ &ri; ri + 1; アウト int *pi = new (p) int(42);
27.
27 例:未初期化な変数に どんな操作が許されるか?
変数に対して左辺値から右辺値への 変換が起きないようにすればセーフ void f(int &); void g(int); int i; f(i); セーフ g(i);アウト
28.
28 例:型の完全な定義が いつ必要になるか?
左辺値から右辺値への変換が起きた オブジェクトの型は完全でなければならない class X; void f(X &x) { セーフ &x; static_cast<X>(x); } アウト
29.
29 例:変数の定義がいつ必要に なる(odr-usedされる)か?
変数がコード中に出現すればodr-used ただし,変数がconstant expression であり 即座にL-to-R 変換が起きる場合は対象外 Template<typename T> struct X { static constexpr int i = 42; }; int j = i + 1; int *p = &i; アウト セーフ
30.
xvalue, prvalue, glvalue
の話はどこに行った? 現在のC++ の左辺値・右辺値の 区別は実は3種類 • lvalue • xvalue • prvalue
31.
xvalue, prvalue, glvalue
の話はどこに行った? “Location” の 意味を持つか 寿命が短い lvaue Yes No xvalue Yes Yes prvalue No Yes
32.
xvalue, prvalue, glvalue
の話はどこに行った? “Location” の 意味を持つか 寿命が短い lvaue Yes No xvalue Yes Yes prvalue No Yes 今日の発表の 左と右の境界
33.
xvalue, prvalue, glvalue
の話はどこに行った? “Location” の 意味を持つか 寿命が短い lvaue Yes No xvalue Yes Yes prvalue No Yes move semantics, 右辺値参照で 重要な左と右の境界
34.
まとめ: • 左辺値とは何か,右辺値とは何か
• 左辺値から右辺値への変換とは何か,それは いつ起きるのか • 左辺値から右辺値への変換がいつ起きるのか は様々なコーナーケースでの判断に重要 • 左辺値と右辺値の区別はmove semantics, 右辺値参照の話でも重要だが,本発表での左 辺値と右辺値の区別の場合と境界線が異なる 34
Télécharger maintenant