1 名前:デフォルトの名無しさん (ワッチョイ dfcf-HvS5) mailto:sage [2017/01/09(月) 14:49:27.56 ID:p96WJVyd0.net] 次スレを立てる時は本文の1行目に以下を追加して下さい !extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part128 echo.2ch.net/test/read.cgi/tech/1480172629/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.100【環境依存OK】 echo.2ch.net/test/read.cgi/tech/1478440682/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
111 名前:デフォルトの名無しさん (アウアウカー Sa5f-YGRn) mailto:sage [2017/01/15(日) 14:48:53.66 ID:Vh4eztBka.net] ⊂
112 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/15(日) 16:26:13.53 ID:6tnmROhD0.net] >>95 それ C++14 の 6.7p4 ね。で、 3.6.2 p2 にこんな規定もある。 > Together, zero-initialization and constant initialization are called > static initialization; all other initialization is dynamic initialization. > Static initialization shall be performed before any dynamic initialization > takes place. だから>94の言う「実行時の初期化とは無縁」というのは間違ってないと思う。 あと、ここらへんの文面が C++14 の後に変わってて、>95の引用した文面は消えてる。 wg21.cmeerw.net/cwg/issue2026
113 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/15(日) 20:39:17.85 ID:T6BZe6fz0.net] >>111 3.6.2のタイトルを1000回音読してから出直してくれたまえ
114 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/15(日) 20:51:15.65 ID:6tnmROhD0.net] >>112 3.6.2 Static initialization [basic.start.static] で、これ読んだら話がどう変わると思ってるの?
115 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/15(日) 21:57:06.54 ID:T6BZe6fz0.net] >>113 なるほど、名前も変えるの見落としてた なんか支離滅裂な提案してるなと、読み込みを本能的に拒絶してた >>94 が正しくなるということだね >>86 みたいな電波とばしてるからマグレ当たりだろうけど
116 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/15(日) 22:22:21.32 ID:6tnmROhD0.net] >>114 名前?提案?いったい何の話? >46 からずっと、ほとんど何言ってるのかわかんなくてこわい。 もうちょっと伝わる文面にしてもらえないものか。 あと、「>>94 が正しくなる」じゃなくて現行の C++14 でも正しいよ。
117 名前:デフォルトの名無しさん (ワッチョイ 3298-los8) [2017/01/15(日) 22:24:11.33 ID:RPIsJnBb0.net] >>108 今現在の流れにどんな関係があるんだ? constexprの効力は最適化と関係ないぞ
118 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/15(日) 22:39:13.98 ID:OwCHVx6x0.net] >>115 少しでも解るなら凄いよ… 俺全く理解出来ないからスルーすると決めたもの。
119 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/15(日) 22:49:15.83 ID:OwCHVx6x0.net] デタラメばかり言ってるから流石にもう騙される人は居ないと思うけど、一応関数ローカルなstatic変数の初期化タイミングに排他必要ないという記事張っとくよ ググって日本語で一番上にでた記事だよ d.hatena.ne.jp/yohhoy/touch/20120309/p1
120 名前:デフォルトの名無しさん (ワッチョイ 3298-los8) [2017/01/15(日) 22:54:49.73 ID:RPIsJnBb0.net] ggrを最高神とあがめる信者か 採用1年目からアレをやらされるとそうなるかねえ
121 名前:デフォルトの名無しさん (ワッチョイ 0fc9-U8Ig) mailto:sage [2017/01/15(日) 23:01:04.84 ID:Ah8VE8+/0.net] 読点の前に書かれているように 読点の後を鵜呑みにするか試しているのではないか
122 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/15(日) 23:02:17.22 ID:OwCHVx6x0.net] >>119 検索したらすぐ解ることを読めもしない規格だけ読んで間違って解釈するやつの前でそんな事言えんの? 残酷な奴だな
123 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/15(日) 23:02:52.43 ID:T6BZe6fz0.net] >>118 そこにも日本語で解説してあるだろ > gcc 4.0.0から既定動作でスレッドセーフなコードが出力される。(自動的に排他制御コードが埋め込まれる。) これは最初から言っている(>>24 )
124 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/15(日) 23:08:33.39 ID:OwCHVx6x0.net] >>122 いや、そんな事十分に理解しておりますよ。 自分で排他制御を書く必要ないって書くべきだったか? どこぞのレスで > >>86 みたいな電波とばしてるからマグレ当たりだろうけど って書いてるからそれに騙されてる人が居ないか心配で書いただけだよ
125 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/15(日) 23:14:37.92 ID:T6BZe6fz0.net] >>123 はあ? 自分で排他制御なんてどうやって書くんだよ バカも休み休み言え
126 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/15(日) 23:20:48.48 ID:OwCHVx6x0.net] それは >>84 に言えよ ってやべー間違ったわアンカー付けたの触ったらダメな奴だった
127 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/15(日) 23:25:26.18 ID:T6BZe6fz0.net] >>115 >あと、「>>94 が正しくなる」じゃなくて現行の C++14 でも正しいよ。 現行はこれだろ > Constant initialization (3.6.2) of a block-scope entity with static storage duration, if applicable, is performed before its block is first entered. つまりブロックスコープのstatic storage durationな変数はそのブロックに最初に入る時に初期化、すなわち実行時
128 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/15(日) 23:30:17.30 ID:T6BZe6fz0.net] >>125 >>45 が > gcc 4.0.0から既定動作でスレッドセーフなコードが出力される。(自動的に排他制御コードが埋め込まれる。) こう言う自動的に埋め込まれる排他制御にstd::mutex使えなんて愉快な提案してしたんだろ > ひんとstd::mutexのコンストラクタはconstexpr修飾されてる
129 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/15(日) 23:35:49.06 ID:6tnmROhD0.net] >>126 before は「前」って意味ね。ブロックに入る「時」とまでは限定されてない。 同時に、定数初期化(を含む静的初期化)はあらゆる動的初期化より前に行われる とする規定があるのは>>111 で挙げたとおり。 これにより、動的初期化(実行時の初期化)との間で順序が問題になることはない。
130 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/15(日) 23:42:21.31 ID:OwCHVx6x0.net] >>92 の質問が >非ローカルstatic constexpr変数なら問題ないですよね? だからブロックスコープの話ですら無いんだけどね。
131 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/16(月) 00:16:22.26 ID:4D4bT+Tb0.net] >>128 ブロックに入る前なので、「実行時の初期化とは無縁」じゃ無いだろ あと、>>111 に書かれてるのは現行は 3.6.2 initialization of non-local variables の規定だね
132 名前:デフォルトの名無しさん (ワッチョイ 3298-los8) [2017/01/16(月) 00:21:18.11 ID:UB1GTfE40.net] >>121 すぐ解ることって自分で言いながら読めもしないって 言ってる意味わかんねえぜ 検索と規格のどっちが難しいかも逆に認識してるみたいだし まあ1年目に魔改造されたアタマっちゃそれらしいが
133 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/16(月) 00:39:27
] [ここ壊れてます]
134 名前:.16 ID:5OapSwc60.net mailto: >>130 ブロックに入る前、且つ、すべての動的初期化より前、だから「無縁」でもいいんじゃないの? ローカル static constexpr 変数について初期化順の問題が起こり得るというなら、コード例 出してみてよ。 >>114 の「名前」は 3.6.2 のタイトルのこと言ってたのか。ようやくわかった。 でも 3.6.2 のタイトルがどうあれ、>>126 で引用した箇所にある "Constant initialization" の 定義は 3.6.2 によるんだから、話は変わらないよ。 誤解を招くタイトル含め文面がマズいのは認めるけど、だからこそ本来の意図に沿うように修正 されたんだろうし。 [] [ここ壊れてます]
135 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/16(月) 00:44:11.56 ID:4D4bT+Tb0.net] >>129 実行時の初期化とは無縁の理由として > 変数にconstexpr付けたらコンパイル時定数になる をあげている(ローカルでもコンパイル時定数になる) ところが、コンパイル時定数であってもブロックスコープのConstant initilizationは実行時初期化(ブロックに入る前)なので間違い
136 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/16(月) 01:02:26.19 ID:4D4bT+Tb0.net] >>132 6.3.2を参照してるのはConstant initializerの定義だけ、 その初期化が行われるタイミングは6.7に書かれている通りブロックに入る前 ロード後、プログラムに制御が移る前かもしれないし、mainが呼び出された後かもしれない
137 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/16(月) 01:17:19.08 ID:5OapSwc60.net] >>134 Constant initializer じゃなくて
138 名前: Constant initialization の定義ね。 その Constant initialization に対する規定がローカル static の場合だけ 無視できるとする根拠が何かあるの? [] [ここ壊れてます]
139 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/16(月) 02:10:36.59 ID:4D4bT+Tb0.net] > その Constant initialization に対する規定がローカル static の場合だけ > 無視できるとする根拠が何かあるの? 6.7で参照してるConstant initializationは 3.6.2のConstant initialization is performed:の下で3つ列挙されてる部分 定義であって、初期化のタイミングは参照していない それぞれに別の記述がある タイミングは何度も引用してるけど6.7は > Constant initialization (3.6.2) of a block-scope entity with static storage duration, if applicable, is performed before its block is first entered. 3.6.2は > Together, zero-initialization and constant initialization are called static initialization; all other initialization is dynamic initialization. Static initialization shall be performed before any dynamic initialization takes place.
140 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/16(月) 02:53:47.44 ID:5OapSwc60.net] >>136 別の記述があることが根拠? それら2つの規定の両方が適用され得るだろうと言ってるんだけど、 なんでどっちか片方しか適用されないと思ってるの? A ⊃ B の場合に A に対する規定が B にも及ぶってことを認めないの? (この場合は A = "Constant initialization", B = "Constant initialization of a block-scope entity")
141 名前:デフォルトの名無しさん (オッペケ Sr37-U8Ig) mailto:sage [2017/01/16(月) 07:40:40.27 ID:a6XjHitHr.net] >>137 >>134 の主張は3.6.2, 6.7のどちらとも矛盾しないように見えるのだが
142 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/16(月) 08:43:01.09 ID:4D4bT+Tb0.net] むしろ 3.6.2 initialization of non-local variables と、明確に分けられてる項の規定が全部適用されると言ってるのが不思議過ぎる wg21.cmeerw.net/cwg/issue2026 もバグ指摘されてるし、前途多難だ
143 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/16(月) 09:38:47.49 ID:5OapSwc60.net] >>138 タイミングについての言及だけ読めばそうだけど、彼は 3.6.2 にある静的初期化一般に対する規定が ローカル static の場合に限っては及ばない、とする主張をしている。 新しい理由付けも出なくなって平行線みたいだし、次期規格ではざっくり改定される文面の話だし、 もういいかな。
144 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/16(月) 10:48:30.43 ID:4D4bT+Tb0.net] 3.6.2のnon-localに関する規定は6.7で「そのブロックに入る前」と上書きされてるだろ 3.6.2がlocal, non-local問わずに有効なら「そのブロックに入る前」と言う規定は矛盾する
145 名前:デフォルトの名無しさん (スプッッ Sdf2-9KqD) [2017/01/16(月) 11:01:51.83 ID:ULOq3Vpcd.net] https://cpprefjp.github.io/reference/atomic/atomic.html atomicを使ったspinlockなるmutexの例があるのですが これを再帰ロック可能なrecursive_spinlockにするには どのように実装すればいいですか。
146 名前:デフォルトの名無しさん (オッペケ Sr37-U8Ig) mailto:sage [2017/01/16(月) 19:11:32.79 ID:a6XjHitHr.net] >>141 「ブロックに入る前、且つ、すべての動的初期化より前」 規格がUNKOなのはさておき、論理的にどこも矛盾していないのでは?
147 名前:デフォルトの名無しさん (ワントンキン MMe2-dqLr) [2017/01/16(月) 19:40:06.27 ID:LWQyQSVNM.net] 仮にブロックスコープのconstexpr変数が実行時に初期化されたとして、どんな問題が発生するという主張なん?
148 名前:デフォルトの名無しさん (ワッチョイ 3298-los8) [2017/01/16(月) 22:29:50.06 ID:UB1GTfE40.net] 翻訳時に評価せよと指定したものが 実行時に評価されるようなら コンパイラを窓から投げ捨てて アセンブラか機械語を使うしかない int main() { return 1; }で0を返されるのと同じで もはや何を言っても無駄、根本的に話にならないということ
149 名前:デフォルトの名無しさん (ワッチョイ 1f7b-cG99) mailto:sage [2017/01/16(月) 23:04:39.73 ID:4D4bT+Tb0.net] >>145 初期化の意味がわからない子は参戦しないように
150 名前:デフォルトの名無しさん (オッペケ Sr37-U8Ig) mailto:sage [2017/01/16(月) 23:23:13.66 ID:+uglxnZcr.net] >>144 特に実害はなくても>>94 の『実行時の初期化とは無縁』が真実でないことを問題と考える者がいるのだと思っていた
151 名前:デフォルトの名無しさん (ワントンキン MMe2-dqLr) [2017/01/17(火) 03:28:47.43 ID:tvPWGsMMM.net] なんというか糞の役にもたたんな 今現在そんな実装のコンパイラがあるわけでもなし、今から実装するにしてもわざわざ複雑にして実行速度落とすような実装にするとも思えないし
152 名前:デフォルトの名無しさん (ワッチョイ a258-rG+u) mailto:sage [2017/01/17(火) 04:25:31.38 ID:ngprCvv90.net] 最近猫でもわかるって奴読んで独学でちょくちょく勉強してんだけど、こんまま独学でプログラミング学んでったらオセロくらいなら作れるようになる?どんくらいかかるかな
153 名前:デフォルトの名無しさん (ドコグロ MM0a-8ZdN) mailto:sage [2017/01/17(火) 07:56:18.72 ID:ueZ17iDzM.net] >>144 組み込みじゃ、ROMになるかRAMになるか大きな違いが出るな
154 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/17(火) 13:27:45.10 ID:mkv39b380.net] >>150 constすら付けなくても初期値が決まっていて変更する可能性のあるコードが無ければ最適化で定数に置き換えられる時代にそんな事気にするんだ?
155 名前:デフォルトの名無しさん (ワッチョイ b624-los8) [2017/01/17(火) 13:30:54.01 ID:Pbl2vPGV0.net] >>146 おい間抜け どこかに初期化って書いてあったか? 人を小馬鹿にしたつもりだろうがブーメラン刺さってるぞw
156 名前:デフォルトの名無しさん (ワッチョイ 3e5b-vSov) mailto:sage [2017/01/17(火) 22:57:29.19 ID:FvzokP9y0.net] >>149 オセロくらいなら excel と vba で一週間くらい集中すればできんじゃないかね。
157 名前:デフォルトの名無しさん (ワッチョイ 4f17-0Plu) mailto:sage [2017/01/18(水) 01:28:58.03 ID:9W34sy+b0.net] >>153 アスペ
158 名前:デフォルトの名無しさん (ワッチョイ 6296-8ZdN) mailto:sage [2017/01/18(水) 01:54:34.51 ID:an9uI7uk0.net] >>151 定数が実行時に初期化されれば、それはROMじゃなくてRAMに配置されてるってことだろ?そりゃ組み込みなら気にならないほうがおかしい
159 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/18(水) 02:36:42.52 ID:n1DpjkbT0.net] >>155 int f(){static int v=5;return v;} と int f(){return 5;} が最適化後は一緒になるって言ってんの。 そして static constexpr int v=...; にしたらそのvの初期化値はコンパイル時に求まるし変更出来ない。ここまで言えば最適化後にどうなるか解るよね? まぁ、constexprの場合は最適化しなくてもなんだけどさ
160 名前:デフォルトの名無しさん (ワッチョイ b2cf-YL17) mailto:sage [2017/01/18(水) 03:40:09.16 ID:2vnfhfI50.net] >>156 >>150 は>>144 の言った「仮に・・・」へのレスなんだから現実のコンパイラがどうなってるかは関係ないと思われ
161 名前:デフォルトの名無しさん (ドコグロ MM9f-lGK7) mailto:sage [2017/01/18(水) 07:14:44.33 ID:KfZHaLf7M.net] 定数であることと ROM に置くかどうかは別の話だし
162 名前:デフォルトの名無しさん (ワッチョイ 573c-U8Ig) mailto:sage [2017/01/18(水) 08:00:45.61 ID:+X3tak3t0.net] >>156 >最適化後は一緒になるって言ってんの デバッグ中の挙動を無視されると困ります
163 名前:デフォルトの名無しさん (ワッチョイ 677b-dqLr) [2017/01/18(水) 08:42:08.41 ID:n1DpjkbT0.net] >>157 ごもっとも。規格がどうかも関係なかったね。 >>159 なんで?
164 名前:デフォルトの名無しさん (ブーイモ MMd2-a69X) mailto:sage [2017/01/18(水) 08:52:41.79 ID:ZS0nd/enM.net] >>158 定数であるからromにも置けるって話なんで関係ない訳がない。
165 名前:デフォルトの名無しさん (ドコグロ MM4e-lGK7) mailto:sage [2017/01/18(水) 18:41:42.82 ID:Abs9KEqJM.net] >>161 > 定数であるからromにも置ける だからと言ってROMに置くとは限らない って話なんだがお前には難しすぎたか?
166 名前:デフォルトの名無しさん (アウアウカー Sa5f-YGRn) mailto:sage [2017/01/18(水) 21:27:37.78 ID:4GI0Tt+ca.net] このスレを見て、C++って永遠に喧嘩できて寂しくない言語だと判った
167 名前:デフォルトの名無しさん (ワッチョイ 3e5b-vSov) mailto:sage [2017/01/18(水) 21:56:10.60 ID:qB5vepR/0.net] こういうやりとり見てるとやっぱリーナスの c++観は正しいなと思う。
168 名前:デフォルトの名無しさん (ブーイモ MM8b-a69X) mailto:sage [2017/01/18(水) 23:18:53.09 ID:0GLHJE+5M.net] >>162 置けるってのは置くこともできるって意味だが、随分日本語不自由なやつだな
169 名前:デフォルトの名無しさん (ドコグロ MM7f-j6UX) mailto:sage [2017/01/19(木) 06:46:32.74 ID:JadLiFtgM.net] >>165 > 随分日本語不自由なやつだな 「置ける」と言う可能性の話と「置く」と言う実際の動作の区別がつかない奴に言われても... でっかいブーメラン乙としか言いようがないわな w
170 名前:デフォルトの名無しさん (ワッチョイ 037b-rTuY) [2017/01/19(木) 06:57:37.47 ID:bO+XZlhy0.net] 何を言い争ってんのか解らん 直値でもROMに置けると言えるだけでなんの違いも無いんだが。
171 名前:デフォルトの名無しさん (ワッチョイ 637b-voKO) mailto:sage [2017/01/19(木) 08:39:21
] [ここ壊れてます]
172 名前:.82 ID:4Gh/dudO0.net mailto: >>152 初期化==評価と考えてなけりゃ >>145 は出てこねーんだよ バーカ [] [ここ壊れてます]
173 名前:デフォルトの名無しさん (スプッッ Sd1f-xrkK) [2017/01/19(木) 10:16:43.40 ID:CldDY8MLd.net] int a=100; int&& b=std::move(static_cast<int>(a)); b=200; aは100、bは200になるのですが キャストすると必ず一時オブジェクトが生成されるのでしょうか 環境によってaもbも200になったりしますか。
174 名前:デフォルトの名無しさん (ワッチョイ ffcf-JQ1R) mailto:sage [2017/01/19(木) 10:39:40.20 ID:gPdsJo1i0.net] >>169 必ず生成される。 https://timsong-cpp.github.io/cppwp/n4140/expr.static.cast#4
175 名前:デフォルトの名無しさん (スプッッ Sd1f-xrkK) [2017/01/19(木) 10:50:03.86 ID:CldDY8MLd.net] わかりました
176 名前:デフォルトの名無しさん (ワッチョイ 23c9-mcUU) mailto:sage [2017/01/19(木) 11:10:02.61 ID:ipEwSksA0.net] 次に、「ボクのパソコンではaが200になるんてすけど」というレスが来るに違いない
177 名前:デフォルトの名無しさん (ドコグロ MMff-j6UX) mailto:sage [2017/01/19(木) 12:54:31.63 ID:Ccs4bPhGM.net] >>167 わからないなら絡んでくるなよ w
178 名前:デフォルトの名無しさん (オッペケ Sr87-mcUU) mailto:sage [2017/01/19(木) 14:28:16.75 ID:oLhGNghYr.net] >>169 >環境によってaもbも200になったりしますか Yes
179 名前:デフォルトの名無しさん (ワッチョイ bfcb-SmTw) [2017/01/19(木) 20:26:21.94 ID:+cE5RWPo0.net] どっちですか
180 名前:デフォルトの名無しさん (ワッチョイ cf24-RK9q) [2017/01/19(木) 21:29:45.00 ID:x+icVyy10.net] >>173 わからないなら絡まれたフリをするなよw おまえに教えを請うようなクズの中のクズはさすがにこのスレにもいないだろうから
181 名前:デフォルトの名無しさん (ドコグロ MMff-j6UX) mailto:sage [2017/01/19(木) 21:35:22.14 ID:ylWIT8ZQM.net] >>176 わからんって言ってるのは俺じゃなくて >>167 なんだが... 色々お前には難しすぎたか? w
182 名前:デフォルトの名無しさん (ワッチョイ 037b-rTuY) [2017/01/19(木) 21:54:21.33 ID:bO+XZlhy0.net] 何を言い争ってんのかわからん。
183 名前:デフォルトの名無しさん (ワッチョイ ff6c-L1Ju) mailto:sage [2017/01/19(木) 21:55:13.80 ID:f8wSWc2J0.net] いいのよ
184 名前:デフォルトの名無しさん (ワッチョイ 037b-rTuY) [2017/01/19(木) 21:56:39.26 ID:bO+XZlhy0.net] >>179 ありがとう
185 名前:デフォルトの名無しさん (アウアウカー Sac7-WqDQ) mailto:sage [2017/01/20(金) 02:35:51.43 ID:WXRyG1p+a.net] 最近この喧嘩は自演じゃないかと思ってる
186 名前:デフォルトの名無しさん (ワッチョイ f302-JQ1R) mailto:sage [2017/01/20(金) 08:56:02.47 ID:1CC8R4dK0.net] ここで出た話題のTips集を出したら売れるんじゃないかと思えてきたわ
187 名前:デフォルトの名無しさん (スプッッ Sd1f-ddg/) mailto:sage [2017/01/20(金) 18:53:55.75 ID:zIVGmPHgd.net] 32bitのソフトを64bit対応させようかなって考えてるのだけど printf, winapi, _t型変数以外気を付けることある?俺これやってはまったわみたいなのが知りたい
188 名前:デフォルトの名無しさん (ワッチョイ cf24-RK9q) [2017/01/20(金) 23:36:02.52 ID:GZ99lyBK0.net] >>168 いーや、初期値==評価とは考えずに書いた 事実とおまえの考えは完全が食い違っているんだよ せいぜい妄想の世界で自画自賛してろナルシスト
189 名前:デフォルトの名無しさん (ワッチョイ 637b-voKO) mailto:sage [2017/01/21(土) 01:01:56.19 ID:v+i75+9D0.net] >>184 引っかかりやがった 初期化の話題で評価と言い出しのはテメーだ バーカ
190 名前:デフォルトの名無しさん (ワッチョイ cf7b-5ScM) mailto:sage [2017/01/21(土) 01:52:25.87 ID:RmTA4cQd0.net] 江添はなんて言ってる?
191 名前:デフォルトの名無しさん (アウアウカー Sac7-WqDQ) mailto:sage [2017/01/21(土) 11:02:38.55 ID:Bf4L6OzOa.net] それワイのやつや!
192 名前:デフォルトの名無しさん (ワッチョイ cf24-RK9q) [2017/01/22(日) 00:06:25.08 ID:LwmXYJhf0.net] >>185 だから初期化ってどこに書いてあるんだよ 幻視か? だからリスパダールちゃんと飲めとあれほど・・・
193 名前:デフォルトの名無しさん (ワッチョイ cf7b-rTuY) [2017/01/22(日) 00:24:56.56 ID:77/TNfJH0.net] >>182 こんなのどうやってまとめるんだ…
194 名前:デフォルトの名無しさん (ワッチョイ bfcb-xrkK) [2017/01/22(日) 02:31:51.43 ID:hchjfZjx0.net] 江口はなんて?
195 名前:デフォルトの名無しさん (ワッチョイ 6f56-3qL8) mailto:sage [2017/01/22(日) 02:40:24.62 ID:rrJzCAZR0.net] 教えて下さい。 環境は VisualC++2015 x64 です。 与えられた文字列の引数について、1文字が1バイトなのか、2バイトなのかで呼び出す関数を切り分けたいと思い、SFINAE で以下のようなコードを書きました。 しかし、こののコードで「関数A」を呼んで欲しいのに、「関数B」が呼ばれてしまいます。 - なぜ関数Bが呼ばれるのか - 1文字のバイト数で切り替える手段 この2点について、教えて下さい。よろしくお願いします。 extern void* enabler; // 関数A (本当は1文字が1バイトの時用の関数) template <typename STR, std::enable_if_t<sizeof(decltype(std::remove_all_extents<STR>::type()[0])) == 1> *& = enabler> void hoge(const STR&) { } // 関数B (本当は1文字が2バイトの時用の関数) template <typename STR, std::enable_if_t<sizeof(decltype(std::remove_all_extents<STR>::type()[0])) != 1> *& = enabler> void hoge(const STR&) { int tmp; tmp = sizeof(decltype(std::remove_all_extents<STR>::type()[0])); // どういう訳か tmp == 1 となる } void main() { std::string s; hoge(s); // 1バイト版である、関数Aを呼んで欲しい }
196 名前:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK27-o4cX) mailto:sage [2017/01/22(日) 03:05:41.88 ID:NkQzBql/K.net] >>191 1 charは常に2バイトではない。あなたはマルチバイト文字列の基礎を理解していないようだ。 マルチバイト文字列中の複数のcharが一文字になっているか否かは、 文字列の先頭から1charごとにcharの値の範囲を確認し、lead byteかtrail byteかを判定するしかない。
197 名前:デフォルトの名無しさん (ワッチョイ bfcb-SmTw) [2017/01/22(日) 03:12:07.68 ID:hchjfZjx0.net] ビルド通らないからなんでかはわかんない template <typename STR, std::enable_if_t< sizeof( typename STR::value_type ) == 1, std::nullptr_t > SFINAE = nullptr > void hoge(const STR&) { } template <typename STR, std::enable_if_t< sizeof( typename STR::value_type ) != 1, std::nullptr_t > SFINAE = nullptr > void hoge(const STR&) { } これでいけない?
198 名前:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK47-o4cX) mailto:sage [2017/01/22(日) 03:12:21.28 ID:NkQzBql/K.net] 型情報からはマルチバイト文字列のlead/trailに関する情報は得られない。よって、各charの値の範囲を実際に確認しないと、わからない。
199 名前:デフォルトの名無しさん (ワッチョイ 23c9-mcUU) mailto:sage [2017/01/22(日) 07:14:06.66 ID:7mC+0LM10.net] >>192 日本語が理解できないボケ老人は去れ
200 名前:デフォルトの名無しさん (ワッチョイ a37d-wsSS) mailto:sage [2017/01/22(日) 08:04:55.45 ID:5o7PrILb0.net] >>191 例のコンパイラがぶっ壊れてるんだろうね gccは期待通り ideone.com/9pSqel
201 名前:デフォルトの名無しさん (ワッチョイ 037b-rTuY) [2017/01/22(日) 08:28:45.75 ID:gigvK4EO0.net] オーバーロードでよくね
202 名前:191 (ワッチョイ 6f56-3qL8) mailto:sage [2017/01/22(日) 08:37:36.49 ID:rrJzCAZR0.net] >192-196 ありがとうございます。 >193 確かに期待通りの動作をします。 ただ、この先 MFC の CStringA, CStringW, 生配列などを仮引数として与えたいため、operator[] の戻り値で判定出来ないか考えていました。 >196 なるほど。コンパイラの問題くさいので代替案を考えてみます。 ありがとうございました。
203 名前:191 (ワッチョイ 6f56-3qL8) mailto:sage [2017/01/22(日) 08:50:18.71 ID:rrJzCAZR0.net] >192-197 下の様に、sizeof, decltype を移動させたら、あっさり動きました。失礼しました。 template <typename STR> struct helper { enum { item_size = sizeof(decltype(STR()[0])), }; }; extern void* enabler; // 1バイト版 template <typename STR, typename std::enable_if<helper<STR>::item_size == 1>::type *& = enabler> void hoge(const STR&) { } // 2バイト版 template <typename STR, typename std::enable_if<helper<STR>::item_size == 2>::type *& = enabler> void hoge(const STR&) { } void main() { std::string a; hoge(a); // 1バイト版 std::wstring w; hoge(w); // 2バイト版 }
204 名前:デフォルトの名無しさん (ワッチョイ 237b-rTuY) [2017/01/22(日) 09:58:50.62 ID:iEDujvJA0.net] https://youtu.be/quIHgwuF6r4
205 名前:デフォルトの名無しさん (ワッチョイ f302-JQ1R) mailto:sage [2017/01/22(日) 13:37:19.35 ID:gnARoY8z0.net] CStringとかまだ存在してたのかよ
206 名前:デフォルトの名無しさん (ワンミングク MM9f-aDhR) mailto:sage [2017/01/22(日) 14:40:31.27 ID:hBhrTyQGM.net] https://chrome.google.com/webstore/detail/%E3%81%AF%E3%81%A6%E3%81%AAng/mbgdnfmdelffjdhkdggilmphfdihnmcj?hl=ja
207 名前:デフォルトの名無しさん (ワッチョイ ffcf-JQ1R) mailto:sage [2017/01/22(日) 15:06:13.66 ID:paMlvMvI0.net] >>199 sizeof(decltype(STR()[0])) って sizeof(STR()[0]) と何か違ったっけ?
208 名前:デフォルトの名無しさん (ワッチョイ 23c9-mcUU) mailto:sage [2017/01/22(日) 15:53:04.56 ID:7mC+0LM10.net] mainがvoidなレベルの人にそんな突っ込みをしても…
209 名前:デフォルトの名無しさん (ワッチョイ cf24-RK9q) [2017/01/22(日) 20:43:26.81 ID:LwmXYJhf0.net] 戻らないmainについてもガタガタ言っちゃう人がねえ
210 名前:デフォルトの名無しさん (ワッチョイ 037b-rTuY) [2017/01/22(日) 22:57:58.70 ID:gigvK4EO0.net] mainのreturnは省略したら0が返ることが保証されている
211 名前:デフォルトの名無しさん (ワッチョイ 23c9-mcUU) mailto:sage [2017/01/22(日) 22:59:58.14 ID:7mC+0LM10.net] >>206 当たり前のことを言い出して、いきなりどうした