堕天使の煉獄
2016-02
06
04:12:43
三歩ぐらいさがる?
ちょっぴり風邪ひきっぽい感じで、即ごろ寝。わりとすぐに復調して一息。
最近、寝込むと長引くこと増えたので……。んでもなにげにちょいちょい思い出したらやるようにしてるラジオ体操が効いてるのかもな。
なんでも腕を回す動作が多いのだけど、それが脇のリンパ腺を刺激して病気への抵抗力を上げる効果もあるそうで。それ以前に慢性的な運動不足なので、そっちのがいろいろ影響ありそうだけどw
そんなかんじで、再びにこにこPG。
ちょっと煮詰まってモチベーション下がってた所なのだけど、ぷち寝込んでる間にぼーっと考えてるうちに、ちょっとまた全体的に見直さないとなーと言う感じに。
以前から気にはなっていたのだけども、「noexcept」をどうするか……と。
基本的には、例外処理をしない。というオプション指定みたいなものなんですけど。
ゲームPGにおいてはほとんど例外って使わないので、なんかもうnoexceptだらけになってまうがなってかんじで。
効果的には、例外を行わないということを明示的に指定することで、noexcept関数は最適化に有利らしい。
んでも付けるべきか、付けるのが適正か、という判断に標準関数を内部で使っているか。というのも関わってくるんですよね。エラーは例外でやってねっていうかんじの標準関数とかあるので。
noexceptは波及するので、noexceptしてる関数の中から呼んでる関数の中で例外吐く標準関数なんかあったりすると、めんどくさい事になる。
残念なC++使い、銀天すばる
ttp://twilog.org/SubaruG/date-140223
noexcept使うべき所って、自分で書くムーブコンストラクタにはnoexcept。ってのぐらいしかないっぽいんですが。
moveの際に標準のコンテナとかはnoexcept指定あるかないかで処理が変わったりするものがあるので、default指定でない自前で書くmoveにはnoexcept指定を付けましょう。
ってことらしいです。
が、そこ以外、noexcept書く必要あるのかなーと。
恩恵が、ひょっとしたら最適化で有利になるかもよ? なだけなわけですし。
そもそもゲームPG限定ならそもそも例外を吐かない、吐かせないかんじのコーディングなるので、もうすべてをnoexceptとかしたいところなんですけどね。
んで例外をはく標準関数なんかが問題になっちゃうと。
vectorの[]でのアクセスの範囲チェックなんかは事前に範囲チェックのassertとか入れとけばいいとしても、計算結果がint型の範疇を超えたらout_of_range吐くよとか0除算チェックみたいなのが厄介なんですよね。
例外吐かれてもこまるし、チェックしないわけにもいかないけど、事前チェックも難しい。そういうケースの時にどうするのか。
真面目にやるならそこだけ例外で処理するよりほかないのかなーとか、滅多にでやしないということで、無視するのも一つの手だし。
noexceptの解説文のなかで、noexcept関数の内部でtry-catchを書いて外に例外を出さないなんて記述するのは本末転倒。的な事も書かれているのもあったのだけど。そもそもnoexceptは例外がでないもしくは関数の外まで例外を出すのをやめて、関数の中だけで終わらせて他に影響を与えないことを保証する=最適化のヒント。みたいなのじゃないのかな。
そうなると、どうしても例外に頼らなければならない場合なんかにはnoexceptして内部でtry~cathで例外処理を関数内のみで完結させるという意思表示という役目も持つわけで。
そういう意味では本末転倒ではなく本来の使い方に適っている気もするぽ。
うーん。なんかまだまだ理解がたりないのかな。
そんな感じで意外にnoexcept付けるべきかどうなのか、また逆に例外を使わなければいけないケースについてとか、迷うところがあって。
うーむ。
意外にめんどくさいnoexcept。
それと、波及するってので似てるのが、const指定ですね。
もうすっかりconst教の信者で、息を吐くようにconst指定を書くようになって長いのですが。noexcept教というのも今後は出てくるのかなぁ。
ソースコード乗っけてるサイトとかで、noexceptがだーっと並んでるソースとか見ると、まだまだ違和感かんじちゃったりして。
うーん。constとおなじでやり始めちゃえば慣れるもんなんだけど、はたしてconstほど徹底して付けるべき物なのだろうか? というところでも、未だに踏ん切りついてなかったりして。
constも値を書き換えない保証ということで、これも最適化のヒントとなるわけで。
そういう意味ではやはりnoexcept指定はキチンとやるべきなのか……?
んでもconstと同様に、使っちゃいけない、使うべきではないケースもあるわけで。
その辺の見極めは実際に使って経験積んでみないと判らない所だったりするのはconstもおんなじか。
なんか標準関数の挙動とかにもある程度精通してないといけないといけなくなってきて、ハードルあがってるかんじ。
なにげにSTLのvectorのソースなんか覗いてみたらば、がっつりnoexcept指定してありますね。
うーん。
noexcept付けるのはこれからはスタンダードなのか……。でもこういうケースだと
virtual void moge() const noexcept override { ... }
とかオプションが三つも……じゃまくせぇw
ちなみに
virtual void moge() const override noexcept {}
だとエラーらしいです。
記述の順番もあるみたい。(コンパイラにも寄るらしいけどまだvc++2015では試してない)
どんどんごてごてとオプションが増えていくのも邪魔くさいなあという感じもあったりするんですよね……。
あとはconstexprにできるクラスはconstexprクラスにするべきだなというのもあったりして。
c++14以降の対応とか、過渡期にある現在はいろいろとコーディングスタイルも移り変わっていくので、ちょいちょい組み直しとか増えちゃうけど、無視してるとあっという間においてかれちゃってstaticおじさんみたいになっちゃうからなぁ……。
とはいえSFINAEとかはやり始めると、きりがない感じで。可読性も落ちるし。
プリミティブな改変も少なそうなクラスにはごりごりやっちゃってもイイかもだけど、汎用的には使わない方が吉な感じだしなぁ。
SFINAEに関しては、おとなしくconceptがやってくるまで待ってた方が吉だというのもありますが。
上記のURLの記事の
と
基本的にはクラスの性質付けてきに使うの限定とかにした方がいいのかなーとか。
で、そうなるとタグつけとかで、明示的に振り分けちゃった方がわかりやすいというのも、たしかにそうだなーとか。
結局、汎用性って無駄に終わることおおいんですよね。
この辺の自分なりの明確なルールとか早い目に構築できてないと、1から組み直し~とかいうことに~。
んでも最近思うのが、ネット上にいまだ散見するc++03以前のレガシーコードと、c++11以降のコードがあまりにも様相が違いすぎてて、これから0からc++学習するってひとは大変だろうなーとかおもたり。
大昔のcからc++に移行出来なかった人みたいな感じでc++03からc++1xに移行出来なかった人とかもでてくるんだろうなぁ。
オブジェクト指向なんて助長で無駄なだけですよっみたいな感じで、c++1xなんて、言語マニアの趣味的改変で実務じゃ役に立ちませんよっ、とか言っちゃったりとかするひとでてきそうw
んでも確かに、設計的な美しさを追求した余り、ちょっと残念な見栄えのstd::chronoとか揶揄されてるのとかもあるしなぁ。
ラムダ式もそんなに美しいとはおもえないし。
趣味的マニア的部分が増えたのは事実のようにも思えるw
でももともと今時c++なんてそれ自体がマニアックな部類の言語だしなぁ。
そっちの方向に先鋭化したというべきなのか……
切れすぎるカミソリ=c++ってかんじ?w
以下追記
記事書き終わった後にもうちょっと調べてたら出てきたサイト
Item 14: 例外を投げない場合はnoexceptで関数を宣言しよう
ttp://code-mynote.blogspot.jp/2015_12_01_archive.html
Wnoexceptオプション
ttp://d.hatena.ne.jp/yohhoy/20150926/p1
どうもconst教と同じくnoexceptは布教を進めている模様。
せっせと追加するしかないか……。
最近、寝込むと長引くこと増えたので……。んでもなにげにちょいちょい思い出したらやるようにしてるラジオ体操が効いてるのかもな。
なんでも腕を回す動作が多いのだけど、それが脇のリンパ腺を刺激して病気への抵抗力を上げる効果もあるそうで。それ以前に慢性的な運動不足なので、そっちのがいろいろ影響ありそうだけどw
そんなかんじで、再びにこにこPG。
ちょっと煮詰まってモチベーション下がってた所なのだけど、ぷち寝込んでる間にぼーっと考えてるうちに、ちょっとまた全体的に見直さないとなーと言う感じに。
以前から気にはなっていたのだけども、「noexcept」をどうするか……と。
基本的には、例外処理をしない。というオプション指定みたいなものなんですけど。
ゲームPGにおいてはほとんど例外って使わないので、なんかもうnoexceptだらけになってまうがなってかんじで。
効果的には、例外を行わないということを明示的に指定することで、noexcept関数は最適化に有利らしい。
んでも付けるべきか、付けるのが適正か、という判断に標準関数を内部で使っているか。というのも関わってくるんですよね。エラーは例外でやってねっていうかんじの標準関数とかあるので。
noexceptは波及するので、noexceptしてる関数の中から呼んでる関数の中で例外吐く標準関数なんかあったりすると、めんどくさい事になる。
残念なC++使い、銀天すばる
ttp://twilog.org/SubaruG/date-140223
SFINAEとかテンプレートとかnoexceptとかconstexprとか そういうのは,「使う必要を説明できる場合にのみ使う」ということを心がけたほうがいいと思うのです
noexcept使うべき所って、自分で書くムーブコンストラクタにはnoexcept。ってのぐらいしかないっぽいんですが。
moveの際に標準のコンテナとかはnoexcept指定あるかないかで処理が変わったりするものがあるので、default指定でない自前で書くmoveにはnoexcept指定を付けましょう。
ってことらしいです。
が、そこ以外、noexcept書く必要あるのかなーと。
恩恵が、ひょっとしたら最適化で有利になるかもよ? なだけなわけですし。
そもそもゲームPG限定ならそもそも例外を吐かない、吐かせないかんじのコーディングなるので、もうすべてをnoexceptとかしたいところなんですけどね。
んで例外をはく標準関数なんかが問題になっちゃうと。
vectorの[]でのアクセスの範囲チェックなんかは事前に範囲チェックのassertとか入れとけばいいとしても、計算結果がint型の範疇を超えたらout_of_range吐くよとか0除算チェックみたいなのが厄介なんですよね。
例外吐かれてもこまるし、チェックしないわけにもいかないけど、事前チェックも難しい。そういうケースの時にどうするのか。
真面目にやるならそこだけ例外で処理するよりほかないのかなーとか、滅多にでやしないということで、無視するのも一つの手だし。
noexceptの解説文のなかで、noexcept関数の内部でtry-catchを書いて外に例外を出さないなんて記述するのは本末転倒。的な事も書かれているのもあったのだけど。そもそもnoexceptは例外がでないもしくは関数の外まで例外を出すのをやめて、関数の中だけで終わらせて他に影響を与えないことを保証する=最適化のヒント。みたいなのじゃないのかな。
そうなると、どうしても例外に頼らなければならない場合なんかにはnoexceptして内部でtry~cathで例外処理を関数内のみで完結させるという意思表示という役目も持つわけで。
そういう意味では本末転倒ではなく本来の使い方に適っている気もするぽ。
うーん。なんかまだまだ理解がたりないのかな。
そんな感じで意外にnoexcept付けるべきかどうなのか、また逆に例外を使わなければいけないケースについてとか、迷うところがあって。
うーむ。
意外にめんどくさいnoexcept。
それと、波及するってので似てるのが、const指定ですね。
もうすっかりconst教の信者で、息を吐くようにconst指定を書くようになって長いのですが。noexcept教というのも今後は出てくるのかなぁ。
ソースコード乗っけてるサイトとかで、noexceptがだーっと並んでるソースとか見ると、まだまだ違和感かんじちゃったりして。
うーん。constとおなじでやり始めちゃえば慣れるもんなんだけど、はたしてconstほど徹底して付けるべき物なのだろうか? というところでも、未だに踏ん切りついてなかったりして。
constも値を書き換えない保証ということで、これも最適化のヒントとなるわけで。
そういう意味ではやはりnoexcept指定はキチンとやるべきなのか……?
んでもconstと同様に、使っちゃいけない、使うべきではないケースもあるわけで。
その辺の見極めは実際に使って経験積んでみないと判らない所だったりするのはconstもおんなじか。
なんか標準関数の挙動とかにもある程度精通してないといけないといけなくなってきて、ハードルあがってるかんじ。
なにげにSTLのvectorのソースなんか覗いてみたらば、がっつりnoexcept指定してありますね。
うーん。
noexcept付けるのはこれからはスタンダードなのか……。でもこういうケースだと
virtual void moge() const noexcept override { ... }
とかオプションが三つも……じゃまくせぇw
ちなみに
virtual void moge() const override noexcept {}
だとエラーらしいです。
記述の順番もあるみたい。(コンパイラにも寄るらしいけどまだvc++2015では試してない)
どんどんごてごてとオプションが増えていくのも邪魔くさいなあという感じもあったりするんですよね……。
あとはconstexprにできるクラスはconstexprクラスにするべきだなというのもあったりして。
c++14以降の対応とか、過渡期にある現在はいろいろとコーディングスタイルも移り変わっていくので、ちょいちょい組み直しとか増えちゃうけど、無視してるとあっという間においてかれちゃってstaticおじさんみたいになっちゃうからなぁ……。
とはいえSFINAEとかはやり始めると、きりがない感じで。可読性も落ちるし。
プリミティブな改変も少なそうなクラスにはごりごりやっちゃってもイイかもだけど、汎用的には使わない方が吉な感じだしなぁ。
SFINAEに関しては、おとなしくconceptがやってくるまで待ってた方が吉だというのもありますが。
上記のURLの記事の
SFINAEで「条件に該当しないケースをはじく」のは,やろうと思えば際限なくやれるけど,型変換コンストラクタとかそういう限られたケースのみにした方がいい
と
引数が〜の場合にはこういう処理を,〜の場合にはこういう処理を,っていう切り分けをするより,多少冗長でも別関数に分けたりコンストラクタならタグをつけたりした方がいい
基本的にはクラスの性質付けてきに使うの限定とかにした方がいいのかなーとか。
で、そうなるとタグつけとかで、明示的に振り分けちゃった方がわかりやすいというのも、たしかにそうだなーとか。
結局、汎用性って無駄に終わることおおいんですよね。
この辺の自分なりの明確なルールとか早い目に構築できてないと、1から組み直し~とかいうことに~。
んでも最近思うのが、ネット上にいまだ散見するc++03以前のレガシーコードと、c++11以降のコードがあまりにも様相が違いすぎてて、これから0からc++学習するってひとは大変だろうなーとかおもたり。
大昔のcからc++に移行出来なかった人みたいな感じでc++03からc++1xに移行出来なかった人とかもでてくるんだろうなぁ。
オブジェクト指向なんて助長で無駄なだけですよっみたいな感じで、c++1xなんて、言語マニアの趣味的改変で実務じゃ役に立ちませんよっ、とか言っちゃったりとかするひとでてきそうw
んでも確かに、設計的な美しさを追求した余り、ちょっと残念な見栄えのstd::chronoとか揶揄されてるのとかもあるしなぁ。
ラムダ式もそんなに美しいとはおもえないし。
趣味的マニア的部分が増えたのは事実のようにも思えるw
でももともと今時c++なんてそれ自体がマニアックな部類の言語だしなぁ。
そっちの方向に先鋭化したというべきなのか……
切れすぎるカミソリ=c++ってかんじ?w
以下追記
記事書き終わった後にもうちょっと調べてたら出てきたサイト
Item 14: 例外を投げない場合はnoexceptで関数を宣言しよう
ttp://code-mynote.blogspot.jp/2015_12_01_archive.html
例外を投げないのにnoexceptをつけない関数は悪いインターフェースデザイン。
constと同じように例外を投げない関数には常にnoexceptを指定すべき。
Wnoexceptオプション
ttp://d.hatena.ne.jp/yohhoy/20150926/p1
C++, gcc
gcc(g++)では、C++関数へのnoexcept修飾子付け忘れを警告するオプションが提供される。Clangでは未実装。
どうもconst教と同じくnoexceptは布教を進めている模様。
せっせと追加するしかないか……。
Sun
Mon
Tue
Wed
Thu
Fri
Sat
01
02
03
04
05
06
■
■
三歩ぐらいさがる?
07
08
■
■
いつまでたっても
09
10
11
[建国記念の日]
12
13
14
15
16
17
18
19
■
■
ちょっぴり風邪気味
20
21
■
■
最近なんかタイトルつけるのがタルイw
22
23
24
25
■
■
ぶつり。
26
27
28
29
total:2080320 t:2690 y:180
■記事タイトル■
■年度別リスト■
2024年
2024年12月(0)2024年11月(0)
2024年10月(1)
2024年09月(2)
2024年08月(1)
2024年07月(1)
2024年06月(5)
2024年05月(2)
2024年04月(1)
2024年03月(6)
2024年02月(4)
2024年01月(3)
2023年
2023年12月(3)2023年11月(1)
2023年10月(2)
2023年09月(3)
2023年08月(3)
2023年07月(3)
2023年06月(7)
2023年05月(8)
2023年04月(2)
2023年03月(1)
2023年02月(2)
2023年01月(3)
2022年
2022年12月(4)2022年11月(3)
2022年10月(1)
2022年09月(3)
2022年08月(3)
2022年07月(2)
2022年06月(1)
2022年05月(3)
2022年04月(2)
2022年03月(2)
2022年02月(1)
2022年01月(6)
2021年
2021年12月(8)2021年11月(3)
2021年10月(4)
2021年09月(6)
2021年08月(2)
2021年07月(1)
2021年06月(3)
2021年05月(2)
2021年04月(2)
2021年03月(3)
2021年02月(1)
2021年01月(4)
2020年
2020年12月(3)2020年11月(7)
2020年10月(2)
2020年09月(3)
2020年08月(1)
2020年07月(3)
2020年06月(7)
2020年05月(5)
2020年04月(8)
2020年03月(4)
2020年02月(2)
2020年01月(4)
2019年
2019年12月(1)2019年11月(1)
2019年10月(2)
2019年09月(1)
2019年08月(3)
2019年07月(2)
2019年06月(2)
2019年05月(2)
2019年04月(4)
2019年03月(1)
2019年02月(7)
2019年01月(1)
2018年
2018年12月(1)2018年11月(1)
2018年10月(5)
2018年09月(1)
2018年08月(5)
2018年07月(1)
2018年06月(1)
2018年05月(1)
2018年04月(2)
2018年03月(2)
2018年02月(1)
2018年01月(1)
2017年
2017年12月(2)2017年11月(1)
2017年10月(2)
2017年09月(5)
2017年08月(8)
2017年07月(2)
2017年06月(1)
2017年05月(1)
2017年04月(3)
2017年03月(5)
2017年02月(7)
2017年01月(8)
2016年
2016年12月(7)2016年11月(2)
2016年10月(3)
2016年09月(7)
2016年08月(8)
2016年07月(10)
2016年06月(17)
2016年05月(6)
2016年04月(8)
2016年03月(10)
2016年02月(5)
2016年01月(10)
2015年
2015年12月(7)2015年11月(7)
2015年10月(13)
2015年09月(7)
2015年08月(7)
2015年07月(5)
2015年06月(4)
2015年05月(5)
2015年04月(2)
2015年03月(4)
2015年02月(1)
2015年01月(7)
2014年
2014年12月(12)2014年11月(8)
2014年10月(4)
2014年09月(6)
2014年08月(7)
2014年07月(4)
2014年06月(2)
2014年05月(5)
2014年04月(4)
2014年03月(8)
2014年02月(4)
2014年01月(8)
2013年
2013年12月(15)2013年11月(8)
2013年10月(3)
2013年09月(3)
2013年08月(8)
2013年07月(0)
2013年06月(0)
2013年05月(0)
2013年04月(0)
2013年03月(0)
2013年02月(0)
2013年01月(0)
■レス履歴■
■ファイル抽出■
■ワード検索■
堕天使の煉獄
https://rengoku.sakura.ne.jp
管理人
織田霧さくら(oda-x)
E-mail (■を@に)
oda-x■rengoku.sakura.ne.jp