トップページ⇒tech
1002コメント346KB

C++相談室 part124 [無断転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 7fc9-G+K4)2016/04/03(日) 00:22:24.07ID:ZT/2NYWz0
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part123
http://echo.2ch.net/test/read.cgi/tech/1456040187/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.97【環境依存OK】
http://peace.2ch.net/test/read.cgi/tech/1439849418/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 http://ideone.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0685デフォルトの名無しさん (ワッチョイ cb3c-EA1W)2016/05/12(木) 15:55:07.83ID:MyP06V7u0
d->v->data()[1].score = 1;
d->v->at(1).score =1; // ただし境界チェックが入る
(d->v->begin() + 1)->score = 1;
0686デフォルトの名無しさん (ワッチョイ ef9f-Wsqh)2016/05/12(木) 16:02:27.95ID:LsrVgu920
>>685
ありがとうございました。そういうやり方があったんですね。
0687デフォルトの名無しさん (ワッチョイ 377b-nbuf)2016/05/12(木) 16:02:54.52ID:e6oRkxgP0
そんなことよりなんでtest::vがポインターなんだよ
newしてないし、[1]にはアクセスできないし、それ動かないよ
いずれにせよ初心者歓迎スレ案件だな
0688デフォルトの名無しさん (ワッチョイ ef9f-Wsqh)2016/05/12(木) 16:15:54.25ID:LsrVgu920
あ、質問スレ他にあったんだ。ここだと思った。
0689デフォルトの名無しさん (ワッチョイ 237b-/3cR)2016/05/12(木) 17:49:55.66ID:e7uDPICZ0
これってよく言われる前置か後置かの問題じゃないでしょ。

変数更新タイミングを使用直前にするか更新可能な一番早いタイミングで行いかの違いで、アルゴリズムの変更を伴う可能性が高い。
その場合後者の方がいいが、コピーして前置でも結果は同じ。

前置か後置かで前置がいいと言われているのは、あくまで単に+1したいってとき。所謂forの3つめ
0690デフォルトの名無しさん (ワッチョイ 6fcc-/3cR)2016/05/12(木) 18:41:37.34ID:V7G0arWW0
>>684
いちいちポインタに直すメリットは?
0691デフォルトの名無しさん (スプー Sd1f-/3cR)2016/05/12(木) 19:09:46.88ID:V8j8LQpxd
メリットデメリットなんて問題にしてないから
0692デフォルトの名無しさん (ワッチョイ 033c-hNIp)2016/05/12(木) 19:23:08.71ID:wtk4J6jy0
ポインタの方がカッコイイじゃないですか。
頭良さそうで。
0693デフォルトの名無しさん (ワッチョイ dbb1-yliF)2016/05/12(木) 20:19:14.11ID:u4rYymiL0
(d->v)とか最高に頭悪そうだな
流れは違うが前置と後置がわかってない、以前に憶える気がない
0694684 (ワッチョイ cbcf-Wsqh)2016/05/12(木) 20:25:17.26ID:6ncal6FL0
>>687
>そんなことよりなんでtest::vがポインターなんだよ
要素数100万くらいのvectorが10個くらいあって、
必要なvectorにいちいちポインタを書き換えてる、じゃダメ?
入門書以外で他人のコード読むことないからぐちゃぐちゃやってる。
0695デフォルトの名無しさん (ワッチョイ 377b-nbuf)2016/05/12(木) 20:36:16.87ID:e6oRkxgP0
>>694
ごめん。何言いたいのか分からない
1M要素くらいの配列が10個くらいあるからってなんだって言うんだろう?
0696デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX)2016/05/12(木) 21:04:50.54ID:DRM/51U40
>>694
生のポインタなんて使わずにstd::shared_ptrを使え。

class test{
public:
std::shared_ptr<std::vector<data>> v;
};

d->v = std::make_shared<std::vector<data>>(1000000);
0697デフォルトの名無しさん (ワッチョイ b79d-hNIp)2016/05/12(木) 21:12:08.75ID:k4tl7img0
>>695
俺も>>694が何言いたいのかわからんが、
>>684の質問からして初心者だろうから、あんまり突ついてもって思う。
少しレベル上がると、今のコード見て恥ずかしい・頭悪いやり方してたんだ
って思うんじゃないか。
0698デフォルトの名無しさん (ワッチョイ 7f13-Q4kq)2016/05/12(木) 21:15:46.74ID:R6+MliT10
>>661
後置インクリメント,前置デクリメントは68系の慣習
0699デフォルトの名無しさん (ワッチョイ 9f8b-EA1W)2016/05/12(木) 21:35:16.27ID:xhYAhim/0
Z-80のpopとpushもそう
0700デフォルトの名無しさん (ワッチョイ 9f8b-EA1W)2016/05/12(木) 21:36:56.40ID:xhYAhim/0
ていうか今日日のコンパイラが
インクリメント前のcの値を使わないケースでも
c++を++cと違うコードに落とすとはにわかには信じ難い
この世には知らないほうが幸せなことがあるのかもしれない…
0701デフォルトの名無しさん (ワッチョイ 2310-0YMq)2016/05/12(木) 22:01:48.84ID:2OPIh6as0
>>684
d->v->operator[](1).score = 1;
0702デフォルトの名無しさん (ワッチョイ 937b-qps8)2016/05/13(金) 08:07:22.18ID:ApLv0E8+0
return c++;
とかで外で値を受け取らないケースで最適化が上手く動くもしくは動かないケースとかなら
あるかもとは思うけど、そんなどうでもいいケース考えてどうすんの?って話ではある。
0703デフォルトの名無しさん (ワッチョイ 37bf-/3cR)2016/05/13(金) 08:44:07.94ID:Ja7udZmR0
・クラス化されたiteratorを使う時には、言語レベルでの手順差が明らかにあるから、とりあえず全て前置使っとけば問題ないでしょ
ていう方法論の話と、
・整数プリミティブ型の場合は後置の方が速い事がある
って言う実測論に近い話をごっちゃにしてはいけないと思うの。
0704デフォルトの名無しさん (スプー Sd1f-/3cR)2016/05/13(金) 11:31:14.81ID:G/A+aqfad
「言語レベル」の手順差?
0705デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX)2016/05/13(金) 13:01:39.98ID:ZUyuraMo0
>>700
人間としては同じ意味のコードでも、言語の意味論上は別な意味として解釈しなければならないのだから
最適化前のコードは異なって当然。
んでもって、違うコードを初期地点として独立に最適化を掛ける訳だから
最適化後のコードは異なる可能性がある(偶然一致する可能性もある)。
そういうお話
0706デフォルトの名無しさん (ワッチョイ a763-/3cR)2016/05/13(金) 20:48:02.35ID:EayoOtAj0
>そういうお話
という幻覚を見てしまったようです。
統合失調症ID:rpWGZ4yl0、ID:DRM/51U40と
その他の健常者との噛み合わない会話
0707662 (ワッチョイ 9fa6-Wsqh)2016/05/13(金) 20:56:04.60ID:y6JoVpFh0
鼻ほじりながら書いたら>>664-666あたりで予想通りのレスが返ってきて、それで終わるのかと思いきや
意外と後を引いててワロタw
0708デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX)2016/05/13(金) 21:28:43.56ID:ZUyuraMo0
>>706
残念、糖質じゃなくてアスペでした
0709デフォルトの名無しさん (ワッチョイ 2730-o0Hb)2016/05/13(金) 21:41:15.90ID:na9JUjrP0
キチガイの一言で解決しろや
0710デフォルトの名無しさん (ワッチョイ 9302-Wsqh)2016/05/13(金) 23:27:56.30ID:akm6bXau0
いいからアセンブラのコード見ろよ
0711デフォルトの名無しさん (ワッチョイ 937b-UkU1)2016/05/14(土) 01:22:12.62ID:guvuQQ9l0
前値を後値に変更して効率的になる場所なんて限られてるからどうしてもその場所のパフォーマンスを上げたいって時の知識として知っててもいいかなぐらいの事だよ
常に後値で書かれたらデメリットが大きすぎる
0712デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX)2016/05/14(土) 08:57:39.96ID:BsF9lC3v0
アセンブリも読めないc++erなんて滅びればいい
0713デフォルトの名無しさん (ワッチョイ a763-/3cR)2016/05/14(土) 09:11:42.00ID:EHXndh+50
アセンブリが読めてもパイプラインの正しい知識の無い人に言われても…
0714デフォルトの名無しさん (ワッチョイ 9302-Wsqh)2016/05/14(土) 10:34:04.60ID:5qwu2L7o0
デジタル回路の正しい知識も必要
0715デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX)2016/05/14(土) 10:37:31.14ID:BsF9lC3v0
そうだね。
1段NOTゲートと3段NOTゲートの違いくらい説明できなきゃね。
0716デフォルトの名無しさん (ワッチョイ 9302-Wsqh)2016/05/14(土) 11:45:07.22ID:50Ljn6jM0
半導体の物性を理解していない人にC++を使って欲しくない
0717デフォルトの名無しさん (ワッチョイ a763-/3cR)2016/05/14(土) 11:53:10.78ID:EHXndh+50
むしろC++を語るのに半導体物性とかアセンブリ言語とかどうでもいい
0718デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX)2016/05/14(土) 12:13:40.02ID:BsF9lC3v0
基礎は大事だろ。

何処まで掘り下げるかって問題はあるけど
0719デフォルトの名無しさん (ワッチョイ 233c-/3cR)2016/05/14(土) 12:43:01.47ID:eiJc4QAX0
なにが悲しくてアセンブリを理解しなきゃならんのだ。
そんなのは言語開発者とコンパイラの仕事だ。
0720デフォルトの名無しさん (ワッチョイ 4b42-Wsqh)2016/05/14(土) 12:53:34.15ID:jHuAeQfl0
ビジネスアプリケーション専門の人ならそうかもしれないが
ハードウェア資源を有効利用しようとした途端アセンブラレベルの知識は必要になるだろ

理解する必要はないが、理解している奴の仕事を代わって引き受けられないな
0721デフォルトの名無しさん (ワッチョイ 3775-yliF)2016/05/14(土) 12:56:54.42ID:4NwAroGq0
なぜか事務処理系の案件もやったことがあるが
ちょっとしたバカの壁を透過するのにアセンブラ使ったぞ
0722デフォルトの名無しさん (JP 0H6f-mfIb)2016/05/14(土) 13:35:56.95ID:fLeelvLJH
なにが悲しくてC++を理解しなきゃならんのだ。
そんなのは組込み・基盤システム開発者の仕事だ。
0723デフォルトの名無しさん (スプー Sd1f-/3cR)2016/05/14(土) 13:59:43.12ID:K+XlGAeBd
まじかよアセンブラer最低だな
0724デフォルトの名無しさん (ワッチョイ 937b-qps8)2016/05/14(土) 14:38:23.70ID:UFikrM320
なにが悲しくてc++を理解しなきゃならんのだ。
そんなのはc++エバンジェリストの仕事だ。
0725デフォルトの名無しさん (ワッチョイ 6fcc-/3cR)2016/05/14(土) 14:42:24.09ID:QuevABMG0
アセンブリの基礎を判ってないとregisterの使い道すらわからんだろ
0726デフォルトの名無しさん (ワッチョイ 6fcc-/3cR)2016/05/14(土) 14:45:28.79ID:QuevABMG0
アセンブラ理解出来てない奴は最適化失敗するときのステートメントの修正方法すら判断つかんだろ
0727デフォルトの名無しさん (ワッチョイ 937b-UkU1)2016/05/14(土) 14:46:17.04ID:guvuQQ9l0
C++使ってるのは移植性のためでもあるからレジスタ直接触ることなんてほぼないわ
0728デフォルトの名無しさん (ワッチョイ 233c-/3cR)2016/05/14(土) 14:52:23.85ID:eiJc4QAX0
アセンブリだのレジスタだの、そういう低レベルな処理をプログラマが考える必要を無くしていくのがコンパイラとその設計者の仕事でしょうが。
0729デフォルトの名無しさん (スプー Sd1f-/3cR)2016/05/14(土) 15:12:38.19ID:K+XlGAeBd
まじかよアセンブラer大海を知らずだな
0730デフォルトの名無しさん (ワッチョイ 4b42-Wsqh)2016/05/14(土) 15:34:48.60ID:jHuAeQfl0
移植のこと効力するなら、それこそソースレベルで分けていけばいい話だと思うけどね
0731デフォルトの名無しさん (ワッチョイ 4b42-Wsqh)2016/05/14(土) 15:35:45.78ID:jHuAeQfl0
× 移植のこと効力するなら
○ 移植のことを考慮するなら
0732デフォルトの名無しさん (ワッチョイ 9f8b-EA1W)2016/05/14(土) 15:41:24.26ID:XQsBVmZY0
>>727
リーナスに殺されるぞ…
0733デフォルトの名無しさん (ワッチョイ 9f8b-EA1W)2016/05/14(土) 15:45:05.04ID:XQsBVmZY0
漏れの無い抽象化は言うほど簡単ではない
C++ぐらいではまだまだ低水準レイヤーの話を切り離すわけにはいかない
そもそもこの言語の最初の開発動機がSimulaの高速化であって
抽象化された高水準レイヤーとCPUアーキテクチャとメモリが透けて見える低水準レイヤーの
境にあるんである
0734デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX)2016/05/14(土) 16:37:14.60ID:BsF9lC3v0
今はグラフ彩色アルゴリズムで準最適なレジスタ割り当てが出来るってばっちゃが言ってた
register使ったこと殆ど無いわ
crubyのC拡張書くのに使った事はあるけど
0735デフォルトの名無しさん (ワッチョイ 937b-UkU1)2016/05/14(土) 16:57:46.20ID:guvuQQ9l0
registerってキーワードの事言ってるの?
0736デフォルトの名無しさん (ワッチョイ a763-/3cR)2016/05/14(土) 17:15:25.88ID:EHXndh+50
>>725から733まではCPUレジスターの話だったけど
突然>>734がstorage class specifierの話をし出した
0737デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX)2016/05/14(土) 17:18:52.05ID:BsF9lC3v0
> アセンブリの基礎を判ってないとregisterの使い道すらわからんだろ
この文を適切に補完すると
(それはCの一要素でありながら) (ry
ってなるだろうからキーワードの方だと思ったけど

違った?
0738デフォルトの名無しさん (ワッチョイ a763-/3cR)2016/05/14(土) 17:27:09.65ID:EHXndh+50
一見その様な日本語にも見えるが、
規格では「殆どの処理系で無視されるのでdeprecated」になっていて
次期改訂のドラフト4582からも削除されてしまったキーワードについて
使い道を主張するとは考えにくい
0739デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX)2016/05/14(土) 17:31:14.33ID:BsF9lC3v0
にほんごむずい
0740デフォルトの名無しさん (ワッチョイ 4b42-Wsqh)2016/05/14(土) 18:05:33.36ID:jHuAeQfl0
register キーワードはアセンブリというより、コンパイラの知識じゃないのかな
今のコンパイラは賢いから最適化して割り当てるので、
変に使うとかえって効率を落としかねないから使うなって教わった
0741デフォルトの名無しさん (ワッチョイ 6f3c-/3cR)2016/05/14(土) 18:06:21.55ID:W/mpGy/20
>>738
>>725 がそう言うことを熟知していると仮定するのもどうかと思うが
0742デフォルトの名無しさん (ワッチョイ 937b-UkU1)2016/05/14(土) 18:35:40.54ID:guvuQQ9l0
registerキーワードが無意味なのは常識だと思ってた
0743デフォルトの名無しさん (ワッチョイ 9302-Wsqh)2016/05/14(土) 18:36:20.83ID:50Ljn6jM0
無意味にスタックに積んでからすぐ取り出して使うゴミみたいなコンパイラならそれを止められるから意味ある
0744デフォルトの名無しさん (ワッチョイ b79d-hNIp)2016/05/14(土) 20:30:12.22ID:stGv22ss0
組み込みの開発ってやったことないんだけど、ベンダーが提供するコンパイラ
しか使えない場合が結構あるんでしょ? そうなるとそれがゴミみたいな代物
なら >>743 だと思う。
0745デフォルトの名無しさん (ワッチョイ 937b-UkU1)2016/05/14(土) 21:33:09.63ID:guvuQQ9l0
大抵gccベースだけどな
0746デフォルトの名無しさん (ワッチョイ 3764-yliF)2016/05/15(日) 06:32:49.04ID:U+van56a0
>>740
教わった、のはいいが
ちゃんと自分で再検証したか?
0747デフォルトの名無しさん (ワッチョイ 27a8-Wsqh)2016/05/15(日) 09:35:30.57ID:IffsDtB30
>>740
言語仕様上の制約として register キーワード付きの変数はアドレスを取ることが出来なくなる。
(まともなコンパイラならアドレスを取ろうとするとエラーを通知する。)
当然だがアドレスが存在しなければならない変数はレジスタに載せられないので、
その逆にアドレスを取らなくていい変数であることを確約することで結果的にレジスタに載りやすくなる可能性はある。

gcc などは register キーワードの有無は変数をレジスタに載せるかどうかの決定を左右しないが、
レジスタに載せることが可能な変数の選択肢が多ければ結果的に最適化しやすくなるかもしれない。

まあ、よほど速度に厳しい箇所をチューニングするのでもなければ付けなくていいと思うけどね。
0748デフォルトの名無しさん (ワッチョイ 937b-UkU1)2016/05/15(日) 09:45:04.30ID:WYUaDR6g0
ここはC++のスレでregisterはC++17で削除される。clangなんかだと使ってるだけで警告もでる。
よって単にregisterは使ってはいけない。それ以上でも以下でもない。
0749デフォルトの名無しさん (ワッチョイ 9f8b-EA1W)2016/05/15(日) 10:12:20.69ID:SQ5j33E00
ポインタになら現行でもrestrictを付けることでaliasが無いものとコンパイラに通知され、
>>747の懸念は半分無用となるが(注:アドレスをとってもエラーにはならない)
参照にもつけられるようになるんだっけ;
0750749 (ワッチョイ 9f8b-EA1W)2016/05/15(日) 10:18:51.93ID:SQ5j33E00
訂正
×:アドレスをとってもエラーにはならない
○:Aliasを作ってアクセスしてもエラーにはならない

ていうかaliasが存在しないことの保証とか、コンパイラは宇宙の果てまでは追いきらん
0751デフォルトの名無しさん (ワッチョイ a763-/3cR)2016/05/15(日) 10:42:40.03ID:TLapgfGj0
>言語仕様上の制約として register キーワード付きの変数はアドレスを取ることが出来なくなる

大昔に聞いたような記憶がよみがえった
26年前の別の言語の仕様でな
0752デフォルトの名無しさん (ワッチョイ a763-/3cR)2016/05/15(日) 10:46:36.48ID:TLapgfGj0
>ポインタになら現行でもrestrictを付けることで

大昔に聞いたような記憶がよみがえった
16年前の別の言語でな
0753デフォルトの名無しさん (ワッチョイ 37bf-/3cR)2016/05/15(日) 12:42:51.94ID:heRU3dbC0
>>751
C89?
0754デフォルトの名無しさん (ワッチョイ 37bf-/3cR)2016/05/15(日) 12:43:35.52ID:heRU3dbC0
>>752
C99?
0755751 (オッペケ Sr2f-/3cR)2016/05/15(日) 12:59:06.40ID:Ep7D2rxvr
>>753
C89は知らんけどC90では禁止されていたような
調べたらC11でも禁止されたままだった
>>754
イエス、マダーム
0756デフォルトの名無しさん (ワッチョイ 377b-nbuf)2016/05/15(日) 13:07:07.31ID:vsTAFBzF0
C++じゃまだrestrictは規格的にはサポートされてないよ
C99との互換性のために書いてもエラーにせず無視することになってるけど(C++14 $17.2/2)
でも殆どのコンパイラで__restrictが使えるけどね
0757デフォルトの名無しさん (ワッチョイ 4b42-Wsqh)2016/05/15(日) 13:12:53.03ID:dHmJMeXo0
禁止と言うことは、無視されるではなく、
エラーになる(可能性がある)って理解で良いですか?
0758デフォルトの名無しさん (ワッチョイ 377b-nbuf)2016/05/15(日) 13:18:12.39ID:vsTAFBzF0
>99との互換性のために書いてもエラーにせず無視することになってるけど(C++14 $17.2/2)
ごめん。これ嘘
GCCでもClangでもrestrictはエラーになる
0759デフォルトの名無しさん (オッペケ Sr2f-/3cR)2016/05/15(日) 13:54:04.82ID:Ep7D2rxvr
>>757
イエス、マダーム

register int x;
&x;
0760デフォルトの名無しさん (ワッチョイ 87cb-Wsqh)2016/05/15(日) 18:54:11.89ID:vMirLtIS0
struct hoge
{
int val;
};
hoge h;
int* val = static_cast<int*>( &h );

のようにhoge*をint*にキャストしたら自動的に&hoge::valが得られるようにしたいんですが
どうすればいいですか。
0761デフォルトの名無しさん (スプー Sd1f-/3cR)2016/05/15(日) 18:57:44.93ID:YfWps9FTd
そんなことをやろうとしない
0762デフォルトの名無しさん (ワッチョイ 937b-UkU1)2016/05/15(日) 19:11:08.36ID:WYUaDR6g0
ポインタからじゃなくていいならキャスト演算子のオーバーロードで出来る
0763デフォルトの名無しさん (ワッチョイ a763-/3cR)2016/05/15(日) 19:16:44.98ID:TLapgfGj0
>>760
>>761の言うとおり。別の解を探さないと、マトモな方法では難しい
http://ideone.com/4D984F
0764デフォルトの名無しさん (ワッチョイ 9302-Wsqh)2016/05/15(日) 19:17:38.83ID:jxnGY8hD0
>>760
int* val = (int*)&h;
0765デフォルトの名無しさん (ワッチョイ afc2-1Mko)2016/05/15(日) 19:19:32.41ID:HZxVWbFB0
int* val=(int*)(&h)
0766デフォルトの名無しさん (ワッチョイ a763-/3cR)2016/05/15(日) 19:31:53.73ID:TLapgfGj0
やっぱり最も素直なのはこうだな
http://ideone.com/iRfjtv

std::chronoのduration_castもこんな感じだろう
0767デフォルトの名無しさん (ワッチョイ 53dc-zbyT)2016/05/15(日) 19:48:04.92ID:yfD+f9Qr0
そもそも struct hoge {int val;}; において、
hoge h; の &h と &h.val が値として一致する、つまり
reinterpret_cast<int*>&h == &h.val が常に成立するって
規格で保証されてるんだっけ?
0768デフォルトの名無しさん (ワッチョイ 377b-1Mko)2016/05/15(日) 19:52:05.11ID:vsTAFBzF0
保証されてるんじゃない(適当)
でなけりゃバイナリイメージのレイアウト作れない
0769デフォルトの名無しさん (ワッチョイ a763-/3cR)2016/05/15(日) 19:52:30.43ID:TLapgfGj0
その保証を得るための条件確認を>>763で書いてやったというのに…
ISO/IEC 14882:2014 9.2p19
0770デフォルトの名無しさん (ワッチョイ a763-/3cR)2016/05/15(日) 22:10:43.04ID:TLapgfGj0
>キャスト演算子のオーバーロードで出来る

変換関数を定義することを規格で「キャスト」「演算子」「オーバーロード」と読んでいただろうか?
と思って調べたが、演算子とオーバーロードは確かに微妙な書き方だった。
キャストは式の一種で、変換関数のことをキャストとは言わないな
0771デフォルトの名無しさん (ワッチョイ b79d-hNIp)2016/05/15(日) 22:28:39.62ID:8VRuH69B0
さっぱりわからんが
int* val = static_cast<int*>( h );
なら(簡単に)出来るってことか?
0772デフォルトの名無しさん (ワッチョイ b79d-hNIp)2016/05/15(日) 22:35:42.94ID:8VRuH69B0
今気付いたんだけど、ワッチョイって結構重複するのか?
>>744は俺じゃないのにワッチョイ同じだな
0773デフォルトの名無しさん (ワッチョイ b7bf-a45h)2016/05/15(日) 22:37:30.44ID:vFNZTgb70
こういう珍しいコード?って実際の業務だと普通にあり得ることなんですか?
0774デフォルトの名無しさん (ワッチョイ 9fa6-Wsqh)2016/05/15(日) 22:39:05.28ID:q+e+aGMq0
>>771
普通に
operator int* () & { return &val; }
と定義するだけでできるでしょ?
0775デフォルトの名無しさん (ササクッテロ Sp2f-a45h)2016/05/16(月) 09:35:35.81ID:8tgjguWIp
右半分はブラウザのUAだからすぐ被るけど
左半分はipアドかホスト名とかだったきがするからそうそう被らんとは思うけど
0776デフォルトの名無しさん (ワッチョイ 937b-UkU1)2016/05/16(月) 10:58:51.83ID:UIK75Ntg0
template<typename T>const char* typename()
{
return typeid(T).name();
}
これって実行時に変わることはないけどコンパイル時に取れないよね?
コンパイル時に決定される代替の方法ないかな?
0777デフォルトの名無しさん (ワッチョイ 4be7-EA1W)2016/05/16(月) 11:05:06.85ID:Wv3wWMiG0
リフレクションは(標準には)無い。
0778デフォルトの名無しさん (ワンミングク MM9f-/3cR)2016/05/16(月) 11:11:03.55ID:bmeyzU+wM
ポインターがコンパイル時に決定されたとしてなにか嬉しいのだろうか…
特殊化で解決できないケースが思いつかない
0779デフォルトの名無しさん (ワッチョイ 377b-nbuf)2016/05/16(月) 12:19:01.47ID:5ug0//ZW0
RTTI使わないで型名を文字列化したいということでしょ
出来てもいいよね
ないんだっけ?
テンプレートの特殊化で解決とかは冗談だろ?
0780デフォルトの名無しさん (ガックシ 065f-a45h)2016/05/16(月) 12:47:03.24ID:ViRuPN/26
getmodulefilenameで拾ったwchar*を、stdのstringに変換する方法はありませんか?
ウェブで調べても、systemのstringに変換してたり、wstringから変換しているものしか見つかりませんでした
0781デフォルトの名無しさん (ワッチョイ 937b-UkU1)2016/05/16(月) 13:21:09.52ID:UIK75Ntg0
>>779
>型名を文字列化したい
まさにそれです。

今は実行時にvariadic templateで渡された型からエラーメッセージを生成しています。
エラーメッセージなので実行コストは問題にしていないのですが2〜3種類程templateのインスタンス化した時点で1KB以上コードサイズが増えてしまっててコンパイル時に生成できたら数十バイト程に収まるのになぁと思っての質問でした。
0782デフォルトの名無しさん (ワッチョイ a763-/3cR)2016/05/16(月) 21:35:11.73ID:ptsyD+4U0
もう、ウンコboostを使うしか無いな
http://melpon.org/wandbox/permlink/AQMpoO8QkAgq9vd2

boostつかうと一気に実行ファイルサイズが10倍に?!
0783デフォルトの名無しさん (ワッチョイ 2317-yliF)2016/05/16(月) 22:32:19.16ID:hnQ6k/Go0
見れば見るほどRTTIはクソだね
拙速にもほどがある
いつかメジャーチェンジで刷新をきぼんぬ
0784デフォルトの名無しさん (ワッチョイ a7cf-Jrc9)2016/05/16(月) 23:00:15.78ID:ZRzqLMgu0
>>781
ひどい話に聞こえるけど、それコンパイラ何?
■ このスレッドは過去ログ倉庫に格納されています