1 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 00:45:54.57 ID:VoemgV7u] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.89【環境依存OK】 toro.2ch.net/test/read.cgi/tech/1390171944/ ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。 【アップローダー】(質問が長い時はココ使うと便利) codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック) ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用) hogeは禁止します、使用しないでください。 万が一hogeが書き込まれても、スルーしてください。 相手にするとあなたも荒らしと同じ扱いになります。 なお、hogeはNGワードに追加しておくことが強く推奨されています。
151 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 03:39:44.68 ID:lcQBK2Mz] >>149 en.wikipedia.org/wiki/Typedef によると、POSIXでは _t サフィックスは typedef の名前にリザーブされていて、それゆえ 名前が衝突しないようにユーザが定義する typedef には _t を使わないほうがいいらしい
152 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 03:53:44.87 ID:PoyortF4] >>150 規約での確認、dです >>151 > Such type names are reserved by POSIX for future extensions and should generally be avoided for user defined types. …マジっすか orz
153 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 04:43:31.25 ID:7TI60JXf] 衝突ってのはコンパイルエラーではなくて 人が目で見て区別がつきやすいよう 同じ綴りを避けるって話だろうに アスペなおまいらは
154 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 07:44:06.37 ID:AUPUS+0I] >>153 人の目で区別する必要があるシチュエーションってどんなの?
155 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 11:01:21.41 ID:Gd53X1PX] >>153 よほど糞な開発環境なんだなお前
156 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 11:52:04.47 ID:gdJCg3c2] あえて言おう 処理系指定で組めばおk 初心者なんだろ、何か組みあがった快感って大事だぞ
157 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 12:09:44.18 ID:BmjYK//+] 別のものには違う名前を使うもので 名前を使い回すなって当たり前のことだろ どんだけ馬鹿なんだおまえら
158 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 12:18:02.39 ID:PoyortF4] 流れぶったぎりでスマソ _tサフィックスのことは、下にも書かれてたよorz ttp://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_02_02
159 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 13:36:30.63 ID:9b0FkJFr] >Such type names are reserved by POSIX 本当にWikiは嘘だらけだな byだと適用範囲がPOSIXでなくC全般と読めてしまう
160 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 15:47:59.42 ID:PoyortF4] byよりinの方が良いかもね…スレチだけど
161 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 16:35:16.36 ID:5rOAt6qX] >>159-160 Wikiなんだから編集できるんじゃねーの?
162 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 16:39:48.19 ID:Pw+vYT2x] A「こんな説明みつけたよ! B「間違ってるねそれ。 やっぱりWikipediaはこらだから A「直せるんだから直せよ B「えっ、何で俺が? A「えっ?
163 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 16:46:07.08 ID:YqB/fCSo] byの方がいいだろ
164 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 16:56:24.24 ID:k991ba7o] A「byだとPOSIX以外にもルールが適用されると読める B「byの方がいいだろ せめて意見するときは そう考える根拠ぐらい書きたいものだ
165 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 16:57:56.33 ID:PoyortF4] byの方が良いのかorz Wiki編集するところだったよorz
166 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 19:15:29.97 ID:X8q2hYwd] そもそもその後の for 以下を読めば C 全般に適用とかの変な解釈するわけないと思うんだが...
167 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 19:22:56.79 ID:714kpsax] >Such type names are reserved by POSIX for future extensions and should generally be avoided for user defined types. → POSIXによって予約されているため ユーザー定義型での使用は避けるべきである POSIX準拠システムでのアプリケーションプログラムを超えて POSIXと関係ないオペレーティングシステムのアプリケーションにまで言及しとりますがな
168 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 19:41:42.06 ID:YqB/fCSo] 避けるべきということに変わりはないだろ お前は移植性の事全く考えないの? POSIXでないシステムの方が圧倒的に少ないというのに
169 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 19:47:23.97 ID:X8q2hYwd] で、どこに C 全般とか書いてあるんだ?
170 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 19:54:26.32 ID:PoyortF4] >>167 "by ISO/IEC"でなく"by POSIX"という時点でお察し(ry
171 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 19:56:17.95 ID:k991ba7o] なんでこんなに揉めるんだ? Cのtypedefの説明に「_tはPOSIXで予約済」 って書いてあったら POSIX系以外も従う必用性がある ように読めるだろ。 >避けるべきということに変わりはないだろ それは書いた人の主観であって 百科事典の説明に書くべきじゃないぞ。 技術文書書いたこと無いの?
172 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 19:58:14.20 ID:k991ba7o] 「POSIXではオペレーティングシステムの為に予約」 という表現にすれば問題なくなると思うのだが
173 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 19:59:31.29 ID:14wt57ia] >>158 いっぱいあるんだな……
174 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:13:54.33 ID:IsEOtgMD] _t はタグのtなのかtypedefのtなのかどっちですか?
175 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:16:44.81 ID:YqB/fCSo] >>171 読めないよ 俺C言語で新しいOS書いたわー そのOSでは大文字で始まる型名予約してるから使うなよ!って書いて、誰がC言語全般に影響あると思うんだ?
176 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:22:32.03 ID:YqB/fCSo] POSIXが何かわかってるやつはC言語全般に影響が〜なんて誤解しない。 POSIXが何かわかってない奴は(圧倒的多数であるPOSIXシステムで動かされる可能性を考慮して)無条件に従っておいた方がいい なんの問題もない。
177 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:22:37.76 ID:ZIQhn8PO] Wikipediaの内容についての議論はWikipediaのTalkページでやれよ
178 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:24:58.76 ID:X8q2hYwd] >>171 > なんでこんなに揉めるんだ? 単なるしきたりを > POSIX系以外も従う必用性がある > ように読めるだろ。 なんて言うアホがいるからだろ。
179 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:29:09.78 ID:k991ba7o] >>178 説明の文面が妥当かどうかの話をするときに どうしてシキタリが出てくるんだよアホですか?
180 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:30:38.36 ID:8z3KlCR7] もうここで議論するべき内容ではないどっか行け
181 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:34:13.86 ID:X8q2hYwd] convention も読めないアホは口挟むなよ (w
182 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:36:21.69 ID:PoyortF4] なかなか面白かった >>174 型名(type name)のtらしい…俺はtypedefのtって思い込んでたけど ttp://stackoverflow.com/questions/231760/what-does-a-type-followed-by-t-underscore-t-represent
183 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:44:57.82 ID:k991ba7o] >>181 「Cのsize_t(しきたりでtypedefには_tを付けたもの)は POSIXによって予約されている」 などと言っている出鱈目なWikipediaの説明が 妥当だと思うアホはすっこんでろ
184 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:57:23.37 ID:6fUxN2Jx] All rights are reserved by POSIX.
185 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:57:26.93 ID:X8q2hYwd] >>183 誰が妥当って言ってるんだ? 俺は単にそう書いてると言ってるだけだぞ。 まあ、しきたりで自爆したからごまかしたいんだろうけど (w
186 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 21:05:47.20 ID:frwmbROr] NG推奨ワード: Qz STL ヘッダ POSIX ←new 片山 hoge
187 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 21:23:14.93 ID:YqB/fCSo] CがNGワードになる日も近いな
188 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 21:28:22.80 ID:5rOAt6qX] >>186 え、いつの間にかSTLとヘッダもアウトになってたのかw ここは酷いインターネッツですね
189 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 21:39:32.30 ID:uqLF0x8H] >>186 ついでに スレが荒れるのでCやC++に関することはすべて厳禁
190 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 21:52:35.54 ID:EzHv0eI8] まどろっこしいな ようは2ちゃんねるの禁止が落としどころだよね
191 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 22:19:16.09 ID:2m7iHXEE] p2使えないから2ch廃止でいいよもう 出先で書き込めなくてもどかしいったらありゃしない
192 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 22:35:34.44 ID:yUhKfMaZ] ●は使えるだろ ●が無いとスレ立てできない
193 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 23:14:43.66 ID:2m7iHXEE] 浪人ってやつ? 買う気ないからひろゆきの新しい方に期待するわ
194 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 01:28:14.02 ID:AB68SSs6] SYSTEMTIMEの引き算をしたくて stackoverflow.com/questions/8699069/difference-between-two-systemtime-variable の回答4にある SYSTEMTIME operator-(const SYSTEMTIME& pSr,const SYSTEMTIME& pSl) をそのまま使って、 SYSTEMTIME ts,te,tdif; GetSystemTime(&ts); Sleep(1000); GetSystemTime(&te); tdif = te - ts; としたら、最後の引き算の行で、 エラー 1 error C2676: 二項演算子 '-' : 'SYSTEMTIME' は、この演算子または定義済の演算子に適切な型への変換の定義を行いません。(新しい動作; ヘルプを参照) と出るのですが、解決方法がわかりません。どうしたらよいでしょうか?
195 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 02:54:37.57 ID:LXdO3Noc] >>194 teのアドレス - tsのアドレスをtdifに入れるというおかしな事してる
196 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 04:02:36.25 ID:Yfheg34z] >>194 operator-()の定義かプロトタイプ宣言を WinMain()だかtmain()だかの前でやれば解決する、と予想
197 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 04:21:05.28 ID:AB68SSs6] 皆さん アドバイスありがとうございました。 >>196 その通りでした。プロトタイプ宣言忘れていました。 無事に動いたのですが、実行結果がおかしいのです。 約1秒の差が計測できると思ったのですが、 tdifの中身を見ると、 wYear 1601 unsigned short wMonth 1 unsigned short wDayOfWeek 1 unsigned short wDay 1 unsigned short wHour 0 unsigned short wMinute 0 unsigned short wSecond 1 unsigned short wMilliseconds 515 unsigned short となっていますので 1601年1月1日0時間0分1.515秒 の差ということでしょうか?どういうことでしょうか?
198 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 04:29:51.17 ID:Yfheg34z] >>197 ttp://msdn.microsoft.com/ja-jp/library/x3399a54.aspx
199 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 06:08:42.83 ID:NjqqbTFI] >>197 SYSTEMTIME ってカレンダーの年月日時間みたいなもの。 それらの引き算をカレンダーの年月日時間にするってへんだろ。 結果のカレンダー年月日時間は0年0月0日0時0分1.515秒ですって、カレンダーではありえないだろ 期待する結果は年月日時間で表せる差じゃないか(1年2ヶ月3時間4分5秒違うとか)
200 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 11:35:54.05 ID:uM+gajuN] >>197 SYSTEMTIMEの起点は1601年1月1日0時0分0秒 つまり、ゼロをSYSTEMTIMEとして解釈すると「1601/01/01 0:00:00」になる
201 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 13:13:30.33 ID:8ZhLD5KA] どうでもいいけど、>199は説明が下手だな。
202 名前:片山博文MZジェバンニ ◆T6xkBnTXz7B0 mailto:sage [2014/04/07(月) 14:25:12.80 ID:nfj7Xkns] SystemTimeToFileTimeを使ってSYSTEMTIMEをFILETIMEに変換して、 ULARGE_INTEGERを使って64ビット整数に変換して、引き算をする。
203 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 15:40:44.16 ID:4PSeJxmH] 時刻と時間の違いが分かってないタイプ?
204 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 18:59:37.11 ID:iQnUI2e5] >>202 194がやっているのがまさにそれなんだけど、問題は戻り値の型が時間間隔ではなく 時刻を表す型になっていることだから、 >>194 の operator-() の戻り値を __int64 にして v_res=v_right-v_left; 以下を return v_res; に変えれば100ナノ秒単位の経過時間が得られるようになる。 100ナノ秒じゃ細かすぎるというなら、戻り値を double にして return v_res / 10000.0; に変えるとか工夫しろ。
205 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 19:23:33.56 ID:BajMmze5] >>202 時間差(経過時間)を秒単位ではなくて、年月..秒で表すものにしたいから、 SYSTEMTIMEを戻り型にしているんじゃないのか Winで経過時間を求めるのにSYSYEMTIMEを使うって普通なのか? 違うなら何を使うのが多い?
206 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 19:29:45.40 ID:4vTqmZSq] よく分からんがC++なら<chrono>使えばいいんじゃね? Win依存でいいならtimeGetTimeとかQueryPerformanceCounterとかがあるし
207 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 20:26:10.88 ID:Y4utMABq] 「時間差(経過時間)を秒単位ではなくて、年月..秒で表すものにしたい」 という要求下で "年" の計算にうるう年の考慮は必要だろうか?
208 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 20:35:46.78 ID:4vTqmZSq] >>207 その辺難しいよね 365日とするか365.2425日とするか365.2422日とするか…… 表示を日までに済ませておくのが無難かと
209 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 21:01:58.18 ID:iQnUI2e5] >>208 .NETのTimeSpanクラスはそうなってるね。 内部表現は100ナノ秒刻みの整数値で、ミリ秒、秒、分、時間、日への変換はするが 月、年への変換はしない。
210 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 21:27:01.61 ID:dmj0DO96] >>207 それ以前に月が 30日でいいのかと...
211 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 21:32:53.82 ID:Y4utMABq] >>210 あああああーーーーー 考えるほどマンドクサイっすな
212 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 21:49:28.54 ID:wQYu7k63] >>186 なんでQZが筆頭なんだ?
213 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 21:52:25.42 ID:pviM0T4Q] どう考えても一番の荒らしです
214 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 22:31:32.85 ID:tNhu6rzw] 片山やhogeよりPOSIXが上なのかw
215 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 22:33:46.15 ID:4vTqmZSq] 質問いい? switch構文のcase内で変数宣言したら、それについて 「'変数' の初期化が 'case' ラベルによって行われませんでした。」 って言われたんだけどどういうことなの……? ついでにswitch部分に赤波線が付いて、「制御の転送は次の初期化をバイパスします」 って言われたんだけど何故エラーになるのか意味が分からない。誰か分かる人教えて下さい (VS2013でコンパイルしている時に発生)
216 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 22:35:47.03 ID:2mFu56Lz] caseだけだとスコープが同じになる ブロックをつければいい
217 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 22:40:02.07 ID:Y4utMABq] switch () { case A: { // ローカルスコープにしちまう int a; } break; case B: … default: … }
218 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 22:41:30.01 ID:4vTqmZSq] >>216 ブロックを付けるって、要するに case test: 〜 break; を case test:{ 〜 break; } にするってことでいいの?
219 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 22:47:22.50 ID:2mFu56Lz] Yes
220 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 23:30:25.89 ID:H5+AU72d] 個人的にはbreakは外に出したいな
221 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 00:20:22.54 ID:lvT6VRY6] case test:としたときに testにおけるのは何? int a,b,c; ... switch() case (b=a+1, c++, C): なんてのでもOK(試してないけど)?
222 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 00:23:17.09 ID:lXmRpq/E] >>221 試せ
223 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 00:32:19.53 ID:zX8m8ach] >>221 ラベルだけだよ
224 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 00:32:44.67 ID:4GqgTU2E] >>221 定数の整数式とscoped enumの値だけ switch (a) case std::integral_constant<int, 6>::value:;
225 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 13:44:22.59 ID:J+Ne3rG0] 最近、よその板で、"「"だけで右を閉じてないのが流行ってるのか すんげーむずむずするんだが
226 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 14:02:26.18 ID:M2I5N33k] >>225 在日のおまえは知らないだろうが、明治時代からある用法だぞ。
227 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 16:39:02.94 ID:9nnVwB+Q] >>226 (正直鬼物語で見たのが最初だなんて言えない)
228 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 17:27:19.75 ID:DhHmBmSp] エロゲーでは普通じゃないのか?
229 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 18:01:46.09 ID:Agmut9XT] どんな使い方なんだ? (ry なんかはときどき見るな 閉じていない括弧に違和感を持つのはある意味プログラマらしいか
230 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 18:31:11.83 ID:Bi2RyCEo] カッコつけてんじゃね〜よ
231 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 18:50:35.55 ID:C0aY6nOj] つけてねーよ
232 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 19:05:43.04 ID:Ge61TJlR] case 1+1; goto 2; goto 1+1; goto 2*1; 各環境でナニがドコまで許されるのか興味はあるな
233 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 22:58:16.49 ID:5xZMJR+X] >>229 プログラマは、半開区間が大好きさ! [0, 4)
234 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 23:04:52.46 ID:9wIzdaaz] >>233 ワロタ
235 名前:デフォルトの名無しさん mailto:sage [2014/04/09(水) 00:10:02.38 ID:dDyddEcZ] もう全て半角にして英語圏顔文字でも使っとけよ:D
236 名前:デフォルトの名無しさん [2014/04/09(水) 04:45:08.14 ID:GDCkrjSs] roffとか気持ち悪いよな
237 名前:デフォルトの名無しさん mailto:sage [2014/04/09(水) 13:15:17.74 ID:/wyRfLaC] >>236 UN*XやるまえにDOSでTeXやってたからあれは意外になんとも かつては汗でパーサ書いてたっていうから、まあそういうことなら。
238 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 08:17:37.43 ID:7/oWURrR] time関数は1970年からの秒数らしいですが long型で格納するとなると、68年くらいで限界が来ませんか? 2038年くらいにいろんなプログラムやばいっすか?
239 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 08:24:54.58 ID:2iqAA/H6] 2000年問題の時に話題にあがりました 「2038年問題」でぐぐれぇ
240 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 08:30:51.23 ID:7/oWURrR] おーやべえ でも今からプログラムつくろうとするとtime_tは64bitで定義されてるっぽいですね 3000億年まで安心か
241 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 09:06:00.54 ID:olete8aZ] 炎上学習法は要りません
242 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 09:33:49.42 ID:m7xM1FWF] どこが炎上してんだよ
243 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 15:21:37.00 ID:qnyX9I3J] 2000年の頃は見えないほど先の話だと思っていたが 既に3分の1消化してるんだな
244 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 18:18:53.37 ID:CtgsENNt] 1000年以上先の問題ならまだしも、38年だと分野によっては平気で使われ続けるからな
245 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 18:50:58.03 ID:Am7dEU9n] 言わんとしてることはわかるからいいんだけど、64bitでコンパイルしてlongが32bitなのMSのコンパイラぐらいだぞ
246 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 18:52:32.07 ID:P3Ox4abS] 互換性を優先したんだろうね
247 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 18:55:12.72 ID:N2UMgO6H] time_tは64bitになってるから許してやれ
248 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 07:18:41.20 ID:CAt5QB21] ttp://ja.wikipedia.org/wiki/%E6%95%B4%E6%95%B0%E5%9E%8B 同じソースでlongが32bitになったり64bitになったりする方が混乱するわ 昔intが16bitになったり32bitになったりで難儀した
249 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 08:17:35.70 ID:XwQYiHbH] typedefせずソースに直接intとかlongとか書いてるの?
250 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 08:28:42.62 ID:iMQET/ga] >>248 つstdint.h(cstdint) 規格仕様上複数マシンで動作できることを重視したから型ごとの制約が緩いのよね と言うか既出の話題だったわw toro.2ch.net/test/read.cgi/tech/1393539884/61-69
251 名前:デフォルトの名無しさん [2014/04/14(月) 11:00:15.74 ID:fXV0vjOD] vectorにクラスを格納するのって #include <iostream> #include <vector> class c_myclass { public: void myfunc(int num) { std::cout << "myfunc" << num << " が呼び出されました \n"; } }; int main() { c_myclass temp; std::vector<c_myclass> vec; for(int i=0; i<10; ++i) vec.push_back(temp); for(int i=0; i<vec.size(); ++i) vec[i].myfunc(i); return 0; } このような感じでよろしいでしょうか? ちなみに サイズを指定する場合は std::vector<c_myclass> vec(10);でしょうか?
252 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 11:15:14.08 ID:Kn6UHMuG] よろしいです しいて言えば vec.push_back(temp); より vec.emplace_back(); の方がよろしいかと思われます
253 名前:デフォルトの名無しさん [2014/04/14(月) 11:22:23.22 ID:fXV0vjOD] >>252 ありがとうございます もしよろしければemplace_back()について解説お願いします リファレンスを見てもよくわからなかったので
254 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 11:23:47.56 ID:Kn6UHMuG] コンストラクタを直接呼び出してくれるpush_backでございます コピーが発生しないので多少効率的になります
255 名前:デフォルトの名無しさん [2014/04/14(月) 11:25:50.80 ID:fXV0vjOD] >>254 なるほど
256 名前:KUSO KOTE ◆unko./w.Osri mailto:sage [2014/04/14(月) 12:36:29.24 ID:8ev4IZFy] >>253 もしc_myclassにc_myclass(bool,double)みたいなコンストラクターがあったら、 emplace_back(true,1.23)とすることが出来て かつvectorの中の格納領域上に直接c_myclassを作成できる。 と思う(想像)。
257 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 15:28:45.80 ID:MAoTOR9V] emplace*()はいいね。巨大なクラスを連想配列に放り込む時に重宝だよ。
258 名前:デフォルトの名無しさん [2014/04/14(月) 16:17:06.14 ID:/qNJTuFi] open(2)したディレクトリを直接read(2)する方法ってあります?
259 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 16:37:16.17 ID:oIWmwaCC] 日本語でおk
260 名前:デフォルトの名無しさん [2014/04/14(月) 17:29:53.33 ID:aQsMBHRD] ↓ちなみにひろゆきサイドの開発者はめちゃくちゃ臭い 4095 :名無しさん@13周年 :2014/04/14(月) 04:46:02.73 ID:wJLzpOd2P(4) jimがさくらのクローラを遮断したみたいだな 迂回しても迂回→遮断のイタチごっこは目に見えてるので遮断できない方法でdatを引っこ抜くまでだ 具体的には専ブラっぽい挙動でnetからdat引っこ抜いてscに投げるスクリプト書いてやるからお前らそれブン回せ たらこにはリクエスト+受け取り+改ざんチェック用のスクリプト書いてやるよ あー久しぶりにemacs起動するわ 3時間で書いてやる 4209 :名無しさん@13周年 :2014/04/14(月) 09:22:21.15 ID:wJLzpOd2P(4) あとちょっと書き足してバグとったらexeで配るよ さしあたりdatの回収は俺がやっとく C++で書きなおして独自の難読化施してるからnetの奴らにREできるかな?マカフィーでも無理なんじゃないかな 4210 :名無しさん@13周年 :2014/04/14(月) 09:24:13.59 ID:wJLzpOd2P(4) 今の時点で一つ言えるとしたら不特定多数を舐めるなってこと あー久しぶりにemacs起動するわ() 3時間で書いてやる() C++で書きなおして独自の難読化施してるからnetの奴らにREできるかな?マカフィーでも無理なんじゃないかな() 不特定多数を舐めるなってこと()
261 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 18:01:44.00 ID:0/p4fR0J] いちいち持ってくるお前も臭い
262 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 19:15:32.34 ID:yacO1o/C] >>258 できるでしょ?readdir(3C)とかは内部ではreadを呼んでる
263 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 20:02:57.67 ID:g31zNjzu] >>262 read(2) の manには EISDIR fd refers to a directory. Other errors may occur, depending on the object connected to fd. POSIX allows a read() that is interrupted after reading some data to return -1 (with errno set to EINTR) or to return the number of bytes とある
264 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 20:41:55.55 ID:DVvt3Ia1] 最近C++勉強始めたんですが、質問があります。(Cは良く分っているつもりです)。 C++には参照渡しという記述方法があることを知ったのですが、Cのポインタ渡しに 慣れている私としては、参照渡しを使わずにすべてポインタ渡しでコードを記述する ほうが見易いので、そうしようかと思うのですが、何かデメリットありますか? 参照渡しを使うほうがよい点などありましたら教えてください。
265 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 20:51:36.33 ID:UPYb5gKr] (個人的に思う)一般的に ポインタで渡す=ヌルが渡ってくる可能性がある、つまり、常にヌルチェックが必要 ポインタで渡す=ヌルが渡せる、この引数はオプション的である 参照で渡す=なんかしらわたってくる、ヌルチェック不要 参照で渡す=この引数は必ず必要である あと一時変数オブジェクトの寿命の関係とかあった気がするが忘れたw
266 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 21:14:47.05 ID:iMQET/ga] >>264 ポインタ渡しと違い、参照渡しの場合、 ・絶対に実体があるので、適当なアドレスが渡って 不正なメモリアクセスを行うことがない また、参照する中身は変更できないので紛れがない ・普通の変数と同じように記述できる。構造体のメンバ関数にも アロー演算子ではなくドット演算子でアクセスできる また、関数の引数に使った際、呼び出す側としてはいちいち アドレスを渡すということを意識せず使用できる ・ポインタと違い参照自体にはメモリ消費がない こんなところか
267 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 21:17:29.88 ID:lcY87dee] 返り値の話ではないとして。 参照渡しの一番のメリットは渡したオブジェクトの所有権が移動しない事がわかる事かな。
268 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 21:21:57.27 ID:lEZQ3TFl] メモリ消費がないというのは不適切だろ インラインで消えたりするが
269 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 21:46:00.21 ID:iMQET/ga] >>268 いや、俺の持ってる本では 「ポインタと違って独自にメモリ領域が割り当てられない」 的なことが書いてあるんだが……違うの?
270 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 21:49:58.13 ID:7APDnn3f] (お前が)(malloc/new等で)と読めなくもないが大丈夫か
271 名前:デフォルトの名無しさん [2014/04/14(月) 21:55:35.64 ID:buURFUek] 初期のC++はC言語へのコンバータで実現してたろ。 参照も内部的にはポインタ動作と変わらないかと。
272 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 22:00:06.15 ID:iMQET/ga] >>271 それって「参照がポインタで実装されてる(ことが多い)」って話じゃなかった?
273 名前:264 mailto:sage [2014/04/14(月) 22:02:44.39 ID:DVvt3Ia1] みなさん解説ありがとうございます。 大変参考になります。 >参照渡しの一番のメリットは渡したオブジェクトの所有権が移動しない事がわかる事かな。 もう少し詳しく解説お願いします。
274 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 22:04:37.96 ID:iMQET/ga] あとこんなページも見つけた detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1320144958 www.osak.jp/program/arg_ref_val.html
275 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 22:18:22.93 ID:msrdBAHC] >>269 通常の実装では、呼び出し側ではスタックにアドレスを積むという点で全く同じだし、 呼ばれる側でもそこを参照するのに違いはないよ。 まぁ、インライン展開で消えれば話は別だけど。 一番のメリットは、(参照先ではなく)参照自体を書きかえられないことだね。 それもまた、ポインタでもconstにすればできるわけだけど。
276 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 22:54:29.26 ID:CAt5QB21] ttp://codepad.org/Qo0ErNs1 この例ではポインタで渡す気が起きない
277 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 23:06:35.99 ID:lcY87dee] >>276 const付けような。
278 名前:264 mailto:sage [2014/04/14(月) 23:14:28.51 ID:DVvt3Ia1] >276 サンプルコードありがとうございます。 >この例ではポインタで渡す気が起きない すみません、まだよく分らないのですが、ポインタで void WriteLine(const string *pstr) { printf("%s\n", pstr->c_str()); } のようにすると何か問題があるのでしょうか?
279 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 23:17:14.74 ID:lcY87dee] codepad.org/UUMHZZxJ 参照にするとこうかける
280 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 23:20:11.44 ID:i+D5B13r] >>273 ++や--の挙動がポインタと参照で違うんじゃね?
281 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 23:32:46.57 ID:lcY87dee] >>273 ポインタでオブジェクト返されると誰がdeleteすべきなのかドキュメント見るか返す関数の中身見るまでわからないよね? 参照にすると返したやつが所有している物の中身を見させて貰ってるってことがわかるからdeleteしなくていいって事がドキュメント見なくてもわかる。 引数でもポインタだと引数で渡されたポインタを内部で保持しておくから呼び出し側でdeleteや中身の変更をしてはだめになるのかとかわからない。
282 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 23:41:59.74 ID:CAt5QB21] >>278 ttp://codepad.org/uAzCCBJQ ポインタでも書けるしこの例では問題はない が、やっぱり人に見せると「何で参照使わないの?」と言われそう
283 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 23:54:52.78 ID:73GA0vhp] string *str = new string("hello"); .... delte str; .... WriteLine(str); //deleteしてるけど、、、ポインタ値は生きてるから アッー 結局、コンテナをうまく使って生ポ(生new)は極力排除しようぜって流れ
284 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 23:59:10.65 ID:lcY87dee] >>282 なんで「何で参照使わないの?」と言われるのかその理由を書かないと意味ないだろ。 たとえば codepad.org/wCMxFlfO 文字列を返す関数と文字列を引数にとる関数があるとする。 参照だったら文字列を返す関数を文字列を引数にとる関数の引数に直接書ける ポインタだったら一度ローカル変数で受け取ってそのポインタを書かないとだめ
285 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 00:13:55.46 ID:MOmoi8a1] int& a = *(int*)0; a = 0;
286 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 00:17:57.06 ID:lShoPitp] ポインター操作が目的でなく null許可を表現させたいわけでもなく 読み取り用途限定の時に わざわざポインターを使う方が不自然
287 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 00:21:36.20 ID:jMxUSFKT] >>285 一行目がダメコードって一目瞭然じゃないか。 ポインタだったらnullを渡すのが悪いのか?nullチェックせずに代入するほうが悪いのか?になる >>286 ポインタしかない世界から来た人には多分通じないよ。
288 名前:デフォルトの名無しさん [2014/04/15(火) 00:25:16.54 ID:hh7KqCRP] 生ポ引数/戻り値なんて特別理由がある場合以外は使うなってこった
289 名前:264 mailto:sage [2014/04/15(火) 00:28:56.87 ID:7FIahpja] 私なりに結論を出してみたのですが、 参照渡しをするのは、 void WriteLine(const string &str); みたいに、その関数に値を読み取り限定で渡す場合に主に使う。 ただし、必ずconstを付けておく。 上記以外はポインタ渡しを使う。 で良いでしょうか?
290 名前:デフォルトの名無しさん [2014/04/15(火) 00:35:43.12 ID:8L+RgIaL] 参照はポインタの初心者版みたいなもの。 使い方が分からないのがあえて使わなくていい。
291 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 00:36:31.44 ID:c0zlhsuS] >上記以外はポインタ渡しを使う いいえ。 その他にもムーブセマンティクスを達成 したいときにも参照を使います。
292 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 00:45:18.87 ID:jMxUSFKT] >>290 っていうC++初心者が書くコードはひどく読みづらいので真に受けたらだめ
293 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 01:27:44.04 ID:PjplhgrG] ageる奴は碌なこと喋んねーな
294 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 03:06:53.30 ID:2JpOUwgl] >>289 漏れも俺様ルールで、const参照は読み取り用、 ポインタは値を変更する時と、使い分けている
295 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 06:05:04.19 ID:sGkhMKKa] >>289 ttp://ideone.com/SIOYc5 なかなかいい例が思い浮かばないが この例ではconstを付けられないが参照が相応しいと思う 全てに当てはまる使い分けの条件は提示できないので 個人やチームの判断で使い分けするしか
296 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 07:52:53.60 ID:AA0ZYDWw] 格納場所という意味で>289が作った関数仕様を実装する場合も、自衛はするべき。 void readSome(Type * const result) { // ++result; // これがエラーになってくれる。 }
297 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 08:09:35.12 ID:6lm4j3zL] 俺はしないな。 意味的にはそうなのだけれど C++のconstは真面目に付けると可読性を著しく損なう
298 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 08:59:58.71 ID:Byz6doxp] >>263 うん。262は間違いでした。 調べたらreaddirはgetdents(2)を呼んでた そりゃそうか。ファイルシステムで構造違うしな
299 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 10:42:12.48 ID:ZiuccpsX] >>296 そのレベルは冗長
300 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 12:47:22.14 ID:tCJ2yelK] 参照なら要らないのにね。
301 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 12:54:41.51 ID:dDf7e/l1] 値渡しの引数にconstをつけるのはやりすぎな気がする void f(const int x) なんてしないでしょ
302 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 13:09:58.76 ID:tCJ2yelK] する奴いるよ。きっと>296も同じタイプ。
303 名前:KAC mailto:sage [2014/04/15(火) 13:26:56.79 ID:OYr23JgA] >>296 なんか違う事書いてるぞ。>289の仕様満たすならconstは*の左。 >>297 どんな所で可読性が落ちるって? お前がまともに使えないだけじゃないの?
304 名前:デフォルトの名無しさん [2014/04/15(火) 14:19:33.38 ID:SFbbbO6x] 流れぶった切って悪いんですが >>251 の c_myclassがインターフェースクラスを継承している場合は 継承元メンバ(インターフェースクラス)に仮想デストラクタを書いておけば良いのですか?
305 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 14:41:39.21 ID:tCJ2yelK] >>303 >296が言いたいことは、>289の仕様ならconst * string const strだろ。
306 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 14:42:44.92 ID:tCJ2yelK] いけね、Typo。 string const * const strね。
307 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 14:59:38.52 ID:JmWJ8ekL] >>304 違いが分かればよいのだが… ideone.com/w9UqT0
308 名前:デフォルトの名無しさん [2014/04/15(火) 15:09:29.49 ID:SFbbbO6x] >>307 さらっと確認したので怪しいのですがたぶん クラスAには仮想デストラクタが無い為に newしたオブジェクトがデリートされる際、継承元のデストラクタが呼び出されていませんが、 クラスBは仮想デストラクタがメンバにあるので deleteされる際に継承元のデストラクタが呼び出される訳ですよね そこで、ベクターにオブジェクトを格納する話につながる訳ですが >>251 のc_myclassがインターフェースクラスを継承しているときには やはり継承元のクラスに仮想デストラクタを記述しておかないと危険だという事ですよね?
309 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 15:27:23.32 ID:JmWJ8ekL] だーね
310 名前:デフォルトの名無しさん [2014/04/15(火) 15:32:30.40 ID:SFbbbO6x] 確認しつこくてすいませんが まとめると>>307 のdlvBを dlvB temp std::vector<dlvB> obj; obj.push_back(temp); みたいにしちゃっておkってことですよね
311 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 18:05:27.38 ID:ef3kTbvB] >>310 そうしたいなら仮想デストラクタとか仮想関数とか関係ない。 コピーコンストラクタを作ればいいだけ。
312 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 18:37:17.89 ID:u428dFct] std::vector<clsB>にdlvB型のオブジェクトを突っ込むとスライシングでダメになるから気をつけるように 多態をコンテナ内で実現したいならstd::shared_ptrやunique_ptrを入れるのがよい
313 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 20:01:11.81 ID:Nbqron3B] 仮想デストラクタが必須なのは当然として vectorに突っ込むケースを考えると 難易度としては vetcor<Base> vetcor<Base*> vetcor<shared_ptr<Base>> ptr_vector<Base> こんな感じじゃね? それぞれ注意点はあるが 一見簡単そうに見える vetcor<Base> が一番きつい
314 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 20:12:18.40 ID:MU2KfTCa] >vetcor<Base> そもそも派生クラスを突っ込めない。 >vetcor<Base*> 所有権がどこにあるのか分からないので論外。 >vetcor<shared_ptr<Base>> virtualデストラクタ不要で便利。 >ptr_vector<Base> 今更ptr_vector?unique_ptrでいい。
315 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 20:33:50.00 ID:O7xBtcGx] make_uniqueが標準に入らないと、記述量がちょっと面倒
316 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 20:42:49.07 ID:Nbqron3B] >>314 たしかに デザパタで 知らんかった 流行り廃りとかあるの?デザパタで
317 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 20:49:25.61 ID:aOtL598m] std::unique_ptrはvectorに突っ込めるのにboost::scoped_ptrは出来ないのはなんで?
318 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 20:54:50.82 ID:tBkVUf7m] moveできないから
319 名前:デフォルトの名無しさん [2014/04/15(火) 23:53:29.68 ID:hh7KqCRP] noncopyableだからだろ
320 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 23:56:04.64 ID:of9IS0B8] ユニポもそうだけど
321 名前:デフォルトの名無しさん [2014/04/16(水) 00:00:41.11 ID:cUKcFdx2] >>320 すまん、そうだね、copyかmoveが出来ないとコンテナには入れられないということで