1 名前:デフォルトの名無しさん mailto:sage [2015/08/18(火) 07:10:18.03 ID:47QFVOwL.net] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。 【アップローダー】(質問が長い時はココ使うと便利) codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック) ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用) 前スレ 【初心者歓迎】C/C++室 Ver.96【環境依存OK】 peace.2ch.net/test/read.cgi/tech/1433514467/
369 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 09:02:47.15 ID:x/sxD8ME.net] (Lispの)Schemeを頭のいい人に教えるのには10分と掛からないってジョエルは言ってる。 Cは頭が良くても10分じゃ覚えきらん。仕様書からしてSchemeの10倍近く分厚いからな。2時間は掛かるんじゃねぇか?
370 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 09:49:39.15 ID:qombZsi/.net] >>369 仕様書の厚さに比例するっていう観点は公平だと思うよ
371 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 10:14:08.59 ID:x/sxD8ME.net] ふむ。 仕様書が分厚いからCを教えるのが論外だとするのなら、 手続き型系の言語で教えるのに適した言語はPASCALかLuaあたりになると思う。 Lua良いよLua。PASCALもね。
372 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 13:26:54.55 ID:cTI0Jdzp.net] Cは概念だと思うけどね。ポインタと構造体を脳内でイメージできるようになったらおkかと。 後はリファレンスさえあれば、一生忘れる事はないと思うけどなぁ。 C++はもう底なしでw でもそれが楽しいのですが。
373 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 15:52:03.82 ID:9SCZR58b.net] 目的に最も近いと思われる言語を教えるのが初学者への配慮であって 入門に最も適した言語なんてのは幻想だと思う
374 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 17:58:02.16 ID:cTI0Jdzp.net] 今は専門学校ではjavaなのかな
375 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 18:08:01.54 ID:BAJfHtoc.net] うちの専門学校では1年目はC、2年目にJavaだったよ
376 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 18:47:15.34 ID:i41mJkcJ.net] うちは1年目はPASCAL、2年目にCをやり、3年目にSchemeとPrologを触り、4年目はCで研究したよ。 専門じゃなくて国立だけど。
377 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 19:53:42.72 ID:XYL4UGBK.net] 俺も一年目はPascalだったが Pascal教えられていたときは激しくモチベが下がった 2年目にCになって無茶苦茶うれしかったよ だって、Pascalは現場で使われてない言語だったから 何処でも使われてない言語を覚える苦痛と言ったらね breakが有るくせにreturnが無いあたりも最悪だった returnが無いから、どうにもこうにも関数の最後までいかないと 関数を抜けれないんだよ! 当然フラグだらけになるし、マジ鬼畜言語だと思った その点Cは未だに世界中で使われている言語なわけで だったら覚えてみようってなるし、モチベが上がるってものよ
378 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 20:07:57.52 ID:cTI0Jdzp.net] ふむふむ Pascalはセミコロンの位置で頭が禿げるw Delphiとか評判良かったんだけどねぇ。
379 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 20:57:35.02 ID:6a9kiPQ9.net] >>378 式文とdo-while文にセミコロンを含むか、 各文の間は必ずセミコロンで区切るかの差であって、 どちらも一貫してるよ
380 名前:デフォルトの名無しさん [2016/01/29(金) 21:36:27.47 ID:KHfAKsC3.net] ここは血迷ってAWKから入門させよう。ついでに正規表現も学ばせよう
381 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 21:56:42.92 ID:XYL4UGBK.net] 一貫してても使いにくかったら意味ねーんだわ
382 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 22:13:16.22 ID:V57FZVNV.net] じゃあ苦情の上がっていないJavaScript最強ってことだな
383 名前:デフォルトの名無しさん mailto:sage [2016/01/30(土) 03:16:59.92 ID:d4C/IYFO.net] マルチコアが当たり前になってGPGPUの手段が広がって低レベルが回帰の予感
384 名前:デフォルトの名無しさん mailto:sage [2016/01/30(土) 12:04:09.34 ID:qiIX3neU.net] そこでllvm-irですよ
385 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/01/31(日) 18:52:32.63 ID:KGvneECt.net] Cの文字列はヌル文字があるとそこで終わりだけど、 C++のstd::stringは長さを記録しているから、ヌル文字が 途中に来ても大丈夫! ということはstd::stringはバイナリデータも扱えるんだ! 大発見だね!
386 名前:デフォルトの名無しさん mailto:sage [2016/01/31(日) 18:56:36.30 ID:umKDphm1.net] どうした急に
387 名前:デフォルトの名無しさん mailto:sage [2016/01/31(日) 21:04:07.72 ID:kn/5LVuq.net] 今更すぎるな 単にC++11以前は連続した領域に確保されることが保証されてなかったからバイナリデータ置き場として使われてなかっただけ
388 名前:デフォルトの名無しさん mailto:sage [2016/01/31(日) 21:13:17.94 ID:JH58iwLT.net] >>385 の知識が残念なのは言うまでもないとして 話を理解できない>>387 はもっと哀れ
389 名前:デフォルトの名無しさん mailto:sage [2016/01/31(日) 23:23:19.06 ID:0VTupv6x.net] 自分の知識を総動員してドヤ顔してるんだからそっとしておいてやれ
390 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 00:16:08.05 ID:Jc+yiccs.net] そう指摘されても何を理解できてないのか理解できてないからもっと哀れだわ ハハッ
391 名前:デフォルトの名無しさん [2016/02/01(月) 01:45:26.45 ID:k88EDqNX.net] ここは初心者にフレンドリーでハートウォーミングなインターネットですね
392 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 04:58:19.06 ID:wHu9vKIt.net] >>390 >>386
393 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 17:08:19.81 ID:Ev74Df4F.net] >>392 のように日本語の文脈も読みとれない知能障害も 生きてて辛いだろうな
394 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 19:06:25.95 ID:aUqGS129.net] アホが文脈読めとか笑える スゲーいいこと書いたつもりなんだろうなぁ w
395 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 21:07:47.33 ID:cp5cboQs.net] 最近の2chは過疎も納得の糞さだな。
396 名前:デフォルトの名無しさん mailto:sage [2016/02/02(火) 11:36:29.11 ID:NTv/QStd.net] >>387 まじ? 連続性保証されてると思ってたわ。 vectorは03で規格化されてたよね? stringはされてなかったのか。 ま、いっか。
397 名前:デフォルトの名無しさん [2016/02/02(火) 22:25:20.39 ID:+WV++cRd.net] 助けてください 実数を2つ入力させて大小比較させるプログラム codepad.org/JYV0bpuL
398 名前:デフォルトの名無しさん mailto:sage [2016/02/02(火) 22:29:57.47 ID:7f7wf/mW.net] elseの後にifが無いな
399 名前:デフォルトの名無しさん mailto:sage [2016/02/02(火) 22:34:55.10 ID:7f7wf/mW.net] あれ? 同じ環境で、同じ入力文字列から読み取った二つの浮動小数点数型数が厳密に一致するって仕様で決まってたっけ? つまり、入力として 0.1 0.1 って入れた時に、scanf("%lf%lf", &a, &b);なりなんなりした後のa == bの値って処理系依存だっけ?
400 名前:デフォルトの名無しさん [2016/02/02(火) 22:58:44.04 ID:+WV++cRd.net] >>398 通りました。ありがとうございます。 けど、最後のはifがなくてはならないのでしょうか。 ストラウストラップ自身のテキストに、最後はelseとなっているのですが。
401 名前:デフォルトの名無しさん mailto:sage [2016/02/02(火) 23:00:44.47 ID:7f7wf/mW.net] >>400 ストラなんちゃらってのは知らんけど (a == b)が付くなら文法上ifが必要。 ifを省くなら括弧も省け。
402 名前:デフォルトの名無しさん [2016/02/02(火) 23:05:17.62 ID:+WV++cRd.net] >>399 実際のところ、 「2つの数字の差が1.0/10000000未満である場合に、どちらが大きくてどちらが小さいかを 書き出した後、the numbers are almost equalと書き出すようにプログラムを変更する」 という問題で、これより前にint型をdoubleに変更しろという問題もあって、 a == b はここでは必要ないかもしれないです。
403 名前:デフォルトの名無しさん [2016/02/02(火) 23:07:14.24 ID:+WV++cRd.net] >>401 あ。たしかに最後は条件式書いてないです。ありがとうございます! >>ストラ C++の設計者です。
404 名前:デフォルトの名無しさん mailto:sage [2016/02/02(火) 23:11:00.17 ID:7f7wf/mW.net] >>403 誰かと思ったらB. Stroustrupさんか。 カタカナって難しい
405 名前:デフォルトの名無しさん mailto:sage [2016/02/02(火) 23:13:08.88 ID:RveVHAYz.net] ハゲはa<bでもa>bでもなければa==bと考えてしまうほどモウロクしたんだろうか 最近の老衰っぷりを見るとかなり頭がヤバそうだが
406 名前:デフォルトの名無しさん [2016/02/02(火) 23:18:37.12 ID:+WV++cRd.net] >>405 細かいエラーは最後の「小数が入力されてない」で一括りなんです。 入門書なんで。
407 名前:デフォルトの名無しさん mailto:sage [2016/02/02(火) 23:20:19.55 ID:7f7wf/mW.net] >>406 多分そういうことじゃないと思う。
408 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 08:53:05.13 ID:6UPbxu8z.net] >>399 その入力の結果 memcmp(&a, &b, sizeof a) で 0 は保障して欲しいところだな 処理系依存だとなんかキモイ
409 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 10:15:51.45 ID:JXLYa8UB.net] うーむ 0.1 == 0.1 atod("0.1") == atod("0.1") atod("0.1") == 0.1 ぜんぶ成立してほしい 誰か規格を解読して
410 名前:プログラム初めてやってます mailto:sage [2016/02/03(水) 10:19:42.77 ID:lWEagrs5.net] 前回は皆さん色々ご検討くださってありがとうございました。 皆さんにお礼も言わずに去ってしまったなと思っていたのですが、 その後、高度な(に私は見えました)話題が続いていたので水を差してはいけないと思って どうしてもわからない事が出てきてしまって、また来てしまいました。 【二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の 全整数を加えた値を表示するプログラムを作りなさい 】 という課題なのですが インクリメント記述、全整数表示まではうまくいったのですが、 この後の合計値がどうしても出せません ご助力お願い致します。 ここまでできたのですが… https://ideone.com/THBj7S 多分恥ずかしいコーディングだと思います…
411 名前:プログラム初めてやってます mailto:sage [2016/02/03(水) 10:21:57.21 ID:lWEagrs5.net] 記述し忘れたので追記 2つの整数を入力し a以上b以下の全整数の和を求めなさいとの事でした
412 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 10:23:18.63 ID:Gb259GwX.net] >>410 for (i = min; i <= max; i++) {sum += i;}
413 名前:プログラム初めてやってます mailto:sage [2016/02/03(水) 10:24:14.98 ID:lWEagrs5.net] ありがとうございます! でも、for文はまだ出てきてなくて、for文を使わずにと言う事でした
414 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 10:36:23.49 ID:JzoFZA2F.net] またqの炎上学習法か?
415 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 10:37:46.94 ID:JXLYa8UB.net] >>413 たとえば、1から1000の合計の計算式知ってれば、それを使う
416 名前:プログラム初めてやってます mailto:sage [2016/02/03(水) 10:40:20.13 ID:lWEagrs5.net] ?? 何かの本ですか? 一応ある本の課題を見ています 今までに習ったのは簡単なprintfでの計算とif文do文なのですが
417 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 10:46:44.73 ID:XI3wSbIf.net] >>409 atodと言うものが何物かは知らんが保証は無いんじゃね ISO/IEC 9899:2011 5.2.4.2.4p6 The accuracy of the floating-point operations (+, -, *, /) and of the library functions in <math.h> and <complex.h> that return floating-point results is implementationdefined, as is the accuracy of the conversion between floating-point internal representations and string representations performed by the library functions in <stdio.h>, <stdlib.h>, and <wchar.h>.
418 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 10:48:09.46 ID:XI3wSbIf.net] 誤 5.2.4.2.4 正 5.2.4.2.2 Characteristics of floating types
419 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 10:51:30.15 ID:O/9tVwNc.net] >>416 min = 5, max = 10, sum = 45て事なら sum = ((min + max) * (max - min + 1)) / 2; じゃあかんの?
420 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 10:53:19.38 ID:Gb259GwX.net] >>416 forはwhileやdoを使って書き直せる。 for (A; B; C) D; A; while (B) {D; C;} A; do {if (B) {D; C;}} while (B);
421 名前:プログラム初めてやってます mailto:sage [2016/02/03(水) 10:55:10.44 ID:lWEagrs5.net] >>416 416さんありがとうございます!できました! 皆さんもいろいろありがとうございました!
422 名前:プログラム初めてやってます mailto:sage [2016/02/03(水) 10:56:18.48 ID:lWEagrs5.net] >>419さんでした; >>416さんもありがとうございました!
423 名前:プログラム初めてやってます mailto:sage [2016/02/03(水) 10:58:29.06 ID:lWEagrs5.net] >>420 420さんでした… ほんとにありがとうございました!
424 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 11:02:27.43 ID:JXLYa8UB.net] >>417 正確性については実装依存だけど、毎回の同一性まではここでは触れてないね
425 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 12:55:54.71 ID:R1lQnZw2.net] #include <cstdio> int main() { printf("hello, world\n"); return 0; } g++ (GCC) 4.8.2 を使っているんだが、上のソースがエラーなくコンパイルできる。 しかし printf() は std::printf() と書くべきじゃないかと思うんだ。 あるいは using で省略表記を明示するか。 この書き方でエラーにならないのはC++の規格通りなのか、 あるいはGCC独特の動作なのか教えてほしい。 またGCC独自だとしたら、コンパイル時にエラーとするオプションを知りたい。 (以前は -fhonor-std というオプションが使えたらしいが廃止されたみたい)
426 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 14:52:41.84 ID:1RubKd28.net] なーる
427 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 14:54:41.83 ID:XI3wSbIf.net] いつから>>425 は規格通りとGCC独特の動作が アンビバレンツなものであると錯覚していた?
428 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 15:53:30.47 ID:hvk9CpKQ.net] なんでCは外部リンゲージでexternをつけるのにC++はつけないんですか?
429 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 16:41:54.73 ID:uEOUJl1K.net] C++のコードからCを呼ぶ時に呼び出し規約の違いを明示する CのコードからC++を呼ぶことはない それに C/C++どちらも呼び出し規約が1種類ではないから 一部の関数はそういう指定がある
430 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 16:47:26.68 ID:XI3wSbIf.net] >>428-429 >Cは外部リンゲージでexternをつけるのにC++はつけない >CのコードからC++を呼ぶことはない お前等の個人的なスタイルがさも普遍的であるかのように語られても
431 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 16:54:04.33 ID:1RubKd28.net] そもそもデフォで外部リンケージを持つから extern はつけなくてもいんじゃねの? 外の変数を使う時はexternが必要ってことで。
432 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 16:56:12.19 ID:I+U+ZaiG.net] >>425 C++の規格通りっぽい cstdioとかはシンボルをグローバルにしてもいいししなくてもいいらしい
433 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:00:58.37 ID:XI3wSbIf.net] >>432 へー、規格のどこにそんなことが
434 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:06:35.02 ID:I+U+ZaiG.net] ちゃんとしたのに当った訳じゃないけど stackoverflow.com/questions/10460250/cstdio-stdio-h-namespace ここで引用されてた Annex D (normative) Compatibility features [depr] states:
435 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:13:24.24 ID:j8SYABEm.net] VS2015でも同じ結果でした
436 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:19:43.24 ID:XI3wSbIf.net] >>434 そこに書いてあるのは「グローバル名前空間にも提供するかも知れない」なのだが 「cstdioとかはシンボルをグローバルにしてもいい」というのはどこから来たのか
437 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:22:04.36 ID:I+U+ZaiG.net] どう違うのか分からない 間違ってたかな
438 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:31:35.42 ID:2Q1iapWx.net] >>436 太字のここでしょ? Every C header, each of which has a name of the form name.h, behaves as if each name placed in the standard library namespace by the corresponding cname header is placed within the global namespace scope. どこに「かも知れない」とかあるの? behavesって断定してるんじゃない?
439 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:33:45.85 ID:6UPbxu8z.net] RFC の MUST MAY SHULD みたいに整理してほしいわ
440 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:35:11.06 ID:XI3wSbIf.net] >>437 std::でアクセスできることが義務づけられているかどうかが違う >>438 それは>>425 とは関係ないstdio.hの記述 その下の It may also provide ではないのか
441 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:41:25.46 ID:1RubKd28.net] *.h → global空間で定義 c* → global空間とstd空間で定義 って事ですかい。
442 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:52:45.70 ID:R1lQnZw2.net] >>434 情報ありがとう。 確かに cstdio は シンボルをstd名前空間に入れて グローバル名前空間にも入れる「かもしれない」、と読めるね。 #include <cstdio> でstd修飾なしの printf() が使えるのは 規格通りでもあり、GCCがその挙動を選んだ、ということか。 しかしながら、グローバル名前空間に入れない環境もありうるし、 それで >>425 のコードがエラーになっても、これまた規格通りか。 うっかり std:: を書き忘れる癖があるので、 コンパイラがチェックしてくれると助かると思ったのだけれど。 >> ID:XI3wSbIf の人 有用が情報がなく挑発的なだけの投稿ばかりだね。 だからどうこうってわけじゃないよ。単なる感想として。
443 名前:425 == 442 mailto:sage [2016/02/03(水) 20:13:16.38 ID:R1lQnZw2.net] >>441 Including cstdio imports the symbol names in std namespace and possibly in Global namespace. Including stdio.h imports the symbol names in Global namespace and possibly in std namespace. cstdio をインクルードするとシンボルはstd名前空間に入る(必ず)。 グローバル名前空間にも入るかもしれない(入らないかもしれない)。 stdio.h をインクルードするとシンボルはグローバル名前空間に入る(必ず)。 std名前空間にも入るかもしれない(入らないかもしれない)。 だと思われる。
444 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 20:19:16.88 ID:pejUVpHJ.net] どちらを使うにしろ std名前空間を強要することはできないということになるのかな
445 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 21:13:49.98 ID:1RubKd28.net] >>443 Cシンボルは鬼っ子で色々議論したけどこうなった。 って事なんだろな [Stroustrup2013] に書いてあるかな? 簡単な事だけど、かなり根が深いのかも。 実際は c関数を使う場合は 衝突回避のため、独自の名前空間の中で使用する事になるだろうから 問題ないのかも namespace MyUtil{ auto aaa=strlen("wahaha"); } みたいな。
446 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 22:55:02.36 ID:XI3wSbIf.net] そうだな G++が::absのバグを十数年間放置したぐらいには根が深いだろう
447 名前:445 mailto:sage [2016/02/04(木) 01:51:05.67 ID:ZGjCmtZ8.net] 何をアホな事を書いてるのだろうと反省。失礼しました。
448 名前:デフォルトの名無しさん mailto:sage [2016/02/04(木) 19:27:08.85 ID:6dQTBxjx.net] 今日はQの自演による炎上学習法ナシ?
449 名前:デフォルトの名無しさん mailto:sage [2016/02/04(木) 20:07:26.52 ID:ZGjCmtZ8.net] 自演だったのかorz
450 名前:デフォルトの名無しさん mailto:sage [2016/02/04(木) 20:15:30.56 ID:M5WeNgYc.net] namespace org::gnu::gcc {}が書けるようになるのはC++14からだっけ? むしろ今までなんでこれが書けなかったのか、設計者に問い詰めたい。
451 名前:デフォルトの名無しさん mailto:sage [2016/02/04(木) 20:51:10.15 ID:cr9CcGXP.net] いえ、C++14では書けません
452 名前:プログラム初めてやってます mailto:sage [2016/02/05(金) 08:05:08.38 ID:0uefFKkY.net] ええっ…! それ私に向けられてるんです? なんで??そうなるんです??? Qとかって人じゃないですし… 毎日ここ見てられませんよ; 自力で勉強しないと失礼だって思ったのになんでそんな事言う人いるんです? もう来ない方がいいのでしょうか Qさんが誰かわかりませんが…
453 名前:デフォルトの名無しさん [2016/02/05(金) 08:05:39.03 ID:0uefFKkY.net] 勿論そのQさんとか言う人の自演じゃありません
454 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 09:12:32.23 ID:40iMBEwg.net] >>452-453 ID:0ue... が Que のパチモン臭く見えるのが素敵。
455 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 19:48:30.40 ID:7eaUpuXV.net] >もう来ない方がいいのでしょうか その通りだ 去れ
456 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 17:04:42.31 ID:nNZFJpww.net] CのコードをC++に移植しながら開発を続けようと思ってるのだが、 C++のラムダとCのブロックどちらを使うべきだろうか。
457 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 17:17:22.70 ID:9hAEzh2Z.net] ラムダ?
458 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 18:22:47.43 ID:VRPmATP2.net] このレベルだとC++を使うことを避けるのが望ましい ラムダとブロックは対比するものではないし CからC++への移行の手段でもない
459 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 23:43:46.75 ID:EbqYVSkn.net] エスパーしました。恐らく彼は初期化の話をしているのでしょう。初期化する際に何らかのリソースの確保を行う場合、初期化が済んだら即解放したいと思うことがあります。 ブロック内でリソースを確保しておけば、ブロックを抜けるときに自動的に解放されるのでこの意図を達成できます。 int i; { なにかリソースを確保したり、いっぱい一時変数を使ってこれからiの値を決める; i = 求めた値; }//用済みなった変数はここで即解放される C++ではこのアナロジーとしてλ式を当てはめられます。 const auto i { [&...]() ->int{ 何かのリソースを確保したり、いっぱい一時変数を使ってこれからiの値を決める return 求めた値; }() } これで定数を初期化でき、且つ、初期化時に用いた一時記憶域は即解放できることになります。
460 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 23:57:21.06 ID:+sMp0qjD.net] 327さん、おはようございます
461 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 23:59:35.45 ID:lc1dGjcs.net] Q「(しまった)」
462 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 00:50:30.55 ID:ECJX98k8.net] すまぬ。ここで言うブロック(Blocks)っていうのはClangの拡張の方のことだ。 C言語でクロージャーを実現するための機能なんだが、そういえばまだ標準になってなかったな。
463 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 03:25:55.80 ID:vUnRYzap.net] くっ・・・
464 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 12:22:58.36 ID:qM+VfxEi.net] 難しいわ
465 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 13:15:50.37 ID:5TnQ2D6C.net] >>459 後半使う時どうするん
466 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 15:26:10.43 ID:Ijn2TjOB.net] >>465 何を? 初期化に使用した資源? 後で使うならそれは使用済みではないということなので解放しちゃダメだから、ブロックの外のスコープで宣言するしかないのでは?
467 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 15:26:52.10 ID:Ijn2TjOB.net] ×使用済み ○用済み
468 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 15:34:20.94 ID:5TnQ2D6C.net] >>466 returnが仮に10なら const auto i { [&...]() ->int{ 何かのリソースを確保したり、いっぱい一時変数を使ってこれからiの値を決める return 求めた値; }() } int a; a = i;でaに10が入る?
469 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 17:44:59.48 ID:R5nKPKgb.net] そもそも論だけど const auto &&i = [&]()->int{ return 10; }(); と書かないのは何故?
470 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 18:03:43.29 ID:rWlIZ3EB.net] X x{init()};よりX x = init();という個人のスタイルがさも普遍的であるかのように話をされても
471 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 18:16:52.89 ID:R5nKPKgb.net] {}の数が減ってインデントが少なくて済むじゃん const auto &&i = []()->int { return 0; }(); 好みの問題であるけどね
472 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 18:28:52.25 ID:9LpCQunf.net] >>468 何故入らないと思うのか >>469 C++11から初期化は{}で囲むことがお行儀良いとされる。良い癖をつけよう。= {初期化値}も可。
473 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 20:04:31.18 ID:9LpCQunf.net] =を使わずに{}で囲むのみにしておけば、視認性抜群。一目でこれは代入でなく初期化なのだと判り脳の負担も軽くなる int i = 10; これからは int i {10}, j {1}, k {0}; の時代だ。jやkの位置が改行されたりタブで距離を取っていてもこれなら一目瞭然だ
474 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 20:45:28.76 ID:rWlIZ3EB.net] >>472 へー、ではなぜC++14のmake_uniqueには{}の初期化が使われていないのですか
475 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 22:38:27.35 ID:h5Y5qyZF.net] 推奨であって法律ではないからです
476 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 23:39:53.97 ID:rWlIZ3EB.net] へー、そうなのですか スコットメイヤーの本に別の理由が書かれていたのですが騙されていたのですね
477 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 00:00:23.89 ID:VRvtWrj2.net] すいません、全部適当言いました。許してください、何でもしますから
478 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 08:24:28.26 ID:pW7dPptS.net] >>472 アスペか
479 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 13:18:35.65 ID:3nWopzdP.net] アスペじゃありません、サイコパスです
480 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 14:18:31.86 ID:tZNW1Sh6.net] 北川景子?
481 名前:デフォルトの名無しさん mailto:sage [2016/02/15(月) 19:28:14.77 ID:qDxZgP2m.net] 悪夢ちゃん 良作ドラマやったな
482 名前:デフォルトの名無しさん mailto:sage [2016/02/16(火) 01:32:33.39 ID:iqNNo75Y.net] ideone.com/ONsNMR これがMSVC2015だとエラーになるのなんでなん? 回避方法知ってる人いる?
483 名前:デフォルトの名無しさん mailto:sage [2016/02/16(火) 07:15:41.19 ID:wJ7D3Nu/.net] true_typeのスペルミス 俺の環境では通った
484 名前:デフォルトの名無しさん mailto:sage [2016/02/16(火) 08:11:34.25 ID:nCCZDf8c.net] すぺるミスは見当たらない
485 名前:デフォルトの名無しさん mailto:sage [2016/02/16(火) 14:37:40.64 ID:WNE9IDAH.net] すべってます
486 名前:デフォルトの名無しさん mailto:sage [2016/02/16(火) 17:38:29.31 ID:nE46Ot5u.net] ラッパー関数を作成する場合、値渡しと参照渡し、どちらの方法が一般的なのでしょうか? void append(T o) { vector.push_back(o); } void append(const T& o) { vector.push_back(o); } boostのコードで値渡しの方法を見かけたのですが、 (www.boost.org/doc/libs/1_60_0/boost/assign/std/vector.hpp ) push_back内で行われるコピーを考えると二重のコピーになってしまう気がします。 参照を使わない方法にはなにか意図的な物があるのでしょうか。 またはC++では値渡しが基本ということなのでしょうか。
487 名前:デフォルトの名無しさん mailto:sage [2016/02/16(火) 17:43:40.27 ID:3V9H/1fh.net] テンプレートで、しかもinlineだから値渡しにしても良いという判断なんなんじゃないかな
488 名前:デフォルトの名無しさん mailto:sage [2016/02/16(火) 22:16:20.17 ID:eGMzofhZ.net] >>482 type_traitsヘッダを明示的にincludeしなきゃだめとかじゃないのか
489 名前:デフォルトの名無しさん mailto:sage [2016/02/17(水) 00:02:13.91 ID:BJJMKH5P.net] >>488 実際のコードではincludeしてたしそうでもないなー webcompiler.cloudapp.net/ ここでコンパイルすると通るけど 新規プロジェクトでWin32コンソールアプリケーション選んで同じコードコピペしてもエラーになるわ・・ 俺のVisual Studio 2015 Communityがおかしいのか・・・?
490 名前:デフォルトの名無しさん mailto:sage [2016/02/17(水) 00:47:09.77 ID:BJJMKH5P.net] まさかと思いUpdate 1当てたら通るようになりました。 どうもありがとうございました。
491 名前:デフォルトの名無しさん mailto:sage [2016/02/17(水) 01:24:40.77 ID:1H9n+Lj4.net] >>486 オブジェクト変更しないならconst参照でいいと思うけどなぁ
492 名前:デフォルトの名無しさん mailto:sage [2016/02/17(水) 01:37:30.39 ID:N1klTUFY.net] そのboostのやつは要素が基本形であることしか考えてないんだろ だから安易に値渡しになってる
493 名前:デフォルトの名無しさん mailto:sage [2016/02/17(水) 03:30:55.57 ID:1UNcQaMi.net] せやろか Boostに採択されるような手練れがそんな甘い設計をするのだろうか?
494 名前:デフォルトの名無しさん mailto:sage [2016/02/17(水) 07:43:08.25 ID:MVw4Ur3f.net] boost.assignの使いみち考えれば基本型しかなくても不思議はないな まぁでも、call_traitsみたいなやつくらいかましてくれても良いような気がするね forkして直すか、issueあげれば?
495 名前:デフォルトの名無しさん mailto:sage [2016/02/18(木) 12:57:49.40 ID:cxWjsl/x.net] 目的による ビットフィールドを切り捨てていいならforwarding-reference一択 そうでなければ値