■ このスレッドは過去ログ倉庫に格納されています
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
- 1 :デフォルトの名無しさん:2019/04/25(木) 06:54:38.08 ID:6xUIrXDu.net
- エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります
コードを貼れる所
http://codepad.org/
https://ideone.com/
前スレ
【初心者歓迎】C/C++室 Ver.104【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1545944692/
- 2 :デフォルトの名無しさん:2019/04/25(木) 11:00:25.52 ID:/tHSxicf.net
- チンポ体操
チンポを手に持ち しごく運動から
1 2 シコシコ
2 2 シコシコ
チンポを振り回す運動
1 2 ブルンブルン
2 2 ブルンブルン
- 3 :デフォルトの名無しさん:2019/04/30(火) 16:44:32.44 ID:hc3e5D+8.net
- Cを2年間やって最近大学の講義でC++をやりはじめたのですが
C++だけでなくCの勉強も継続したほうがいいのでしょうか?
- 4 : :2019/04/30(火) 16:51:17.25 ID:iYYZTFZo.net
- >>3
C89=K&R2 をマスターできたら、C99 など目もくれずC++に進むのがいいでしょう、私はそうしましたし C99 なんかどうでもいいと思っています
- 5 :デフォルトの名無しさん:2019/04/30(火) 17:08:01.32 ID:hc3e5D+8.net
- >>4
レスありがとうございます
競技プログラミングで言うと、C言語はatcoderでA問題とB問題はすぐに書くことが出来てC問題は解けたり解けなかったりというレベルです。構造体とポインタも基本的(C言語ポインタ完全制覇という書籍にあるような難しいことは知りませんが…)な扱いならばできます。
就職のことも視野に入れて考えたいのですが、C++が出来るならばCの知識が問われる機会というのは少ないのでしょうか?
- 6 : :2019/04/30(火) 17:18:00.19 ID:iYYZTFZo.net
- >>5
就職の話はよくわかりません
ただ、C89=K&R2 → C99 の改定内容は、C89 の時代に試みられていた拡大解釈を規格に取り込んだ、という部類が多いと私は思いました
それに C99 は、「C++ を見た後で決めたんかい?」という謎な部分が多くいけ好かないのも事実です、あんなものは知らないほうがいい部類でしょう
それよりも日々進化し続ける C++ をフォローするほうが、いろいろな面でお得です、私も p-thread 系マルチコアなプログラムを記述するために C++11 or lator に進み、とても満足しています
- 7 :デフォルトの名無しさん:2019/04/30(火) 18:05:48.04 ID:arIi2u2B.net
- >>5
C++のクラスとかテンプレートとかSTLとかをとりあえず無視して
Cと共通してる基礎的なとこから学べば、わざわざCを個別に学ぶ必要はないとおも
仕事の場合は純粋にCだけ長年使ってるような特殊な職場でなければ問題ない
- 8 :デフォルトの名無しさん:2019/04/30(火) 18:11:55.63 ID:hc3e5D+8.net
- お二人方ありがとうございます
CからC++の勉強に専念する決心が半分くらいつきました
Cのscanf()の仕様(バッファオーバーフローやバッファオーバーランの危険性を回避するいくつかの方法について等)、まだはっきりと把握していないのですが、それでも、C++の勉強に専念してしまっても問題ありませんでしょうか?
- 9 :デフォルトの名無しさん:2019/04/30(火) 19:25:08.89 ID:YvhWBPAF.net
- バッファオーバーランって、この辺の話?
https://ja.wikipedia.org/wiki/Scanf#%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%A9%E3%83%B3
- 10 :デフォルトの名無しさん:2019/04/30(火) 21:07:24.59 ID:tJFiug19.net
- C問題は使う言語の問題じゃないな
もちろんc++やJavaの方がC言語よりもスムーズに書けるがC問題はアルゴリズムを知らないと出来ない
それと現代ではC言語のscanfに習熟する意味は無い
それは後回しにした方がいい
- 11 :デフォルトの名無しさん:2019/04/30(火) 21:38:58.06 ID:B5WLnK8N.net
- >>3
C を続ける必要性がゼロなら C++ に専念した方が良いかと
必要性は個々人による
大学の同級生なり、研究室等の先輩なりに相談・確認するのも良いかも知れない
- 12 :デフォルトの名無しさん:2019/04/30(火) 21:41:18.36 ID:B5WLnK8N.net
- _s 系関数でも未定義な挙動を示すコードはいくらでも書けるのでキリがないんじゃね
詳細な資料はあるけれども、入門者が読むもんじゃなし
fgets + sscanf で安全になるわけでもなし
- 13 : :2019/05/02(木) 13:55:59.43 ID:USN+R+ig.net
- >>8
まあ他の人の意見も聴いておいたほうがいいでしょうね
個人的には何をやっても C で書けると「思える」感触ができるまで C で書きまくる経験は有用だろうと思います、時間はかかりますけれども何でも自分で実装する、という縛りを課してみる
データ構造(線形リスト、スタックやキュー、二分木やバランス木・K-dimensionなどのデータ構造)
アルゴリズム(ヒープ/クィック/シェル各種ソート、縦横探索やダイクストラ法と枝刈り・バックトラッキング、ナップサック、シンプレックス法、シャノンファノやハフマン)
いやもう、C なら何をやってもいい経験になりますね…
- 14 :デフォルトの名無しさん:2019/05/03(金) 11:34:54.23 ID:Gwp1b6R4.net
- いまどきの環境だと下部に丸投げか
- 15 :デフォルトの名無しさん:2019/05/03(金) 14:13:46.95 ID:xL3yQoTR.net
- 関数の引数の書き方について質問があります。
任意のオブジェクトを複数参照する関数f(A& a, B& b, ......)
において、引数の a,b,...を左辺値と右辺値の任意の組み合わせで
使用する場合、関数定義をf(const A& ac, const B& bc, ......){
A &a=const_cast<A&>(ac);
B &b=const_cast<B&>(bc);
:
}
とする方法がベストでしょうか?
- 16 :デフォルトの名無しさん:2019/05/03(金) 14:32:25.70 ID:qNybD7B2.net
- だめ
- 17 :デフォルトの名無しさん:2019/05/03(金) 14:34:29.48 ID:xL3yQoTR.net
- 15です。
追記します。
開発系のIDEでオブジェクトのメンバー変数を表示させながら
プログラム作成をしたいので、テンプレート関数化による
ユニバーサル参照の記述は使いたくありません。
- 18 :はちみつ餃子 :2019/05/03(金) 21:34:51.81 ID:Oy2+74/H.net
- >>15
控えめに言ってクソ。 本当に const なオブジェクトが渡されたときにエラーにならない。
const なオブジェクトに const でない操作をするのは未定義だぞ。
(const ではないオブジェクトなら途中で const を経由しても書き換えて良いらしい。)
言語の作法の範囲内でなら IDE に対する配慮は工夫として評価されるかもしれないけど、
型システムによる保護を台無しにしてまでやるのはオススメできない。
少なくともこのスレでそういう工夫を是とする人はあんまりいないと思うぞ。
- 19 :デフォルトの名無しさん:2019/05/03(金) 21:43:10.16 ID:16FcdCX4.net
- Arduinoなんだけど多分C一般の話だと思うんでここで
byte counter = 0;
while (true) {
if (Shori(counter)) { break; } // Shoriの結果によってwhileから脱出
if (counter < 4) { counter++; }
else { counter = 0; }
}
または
for (byte counter = 0; counter <= 4; counter++) {
if (Shori(counter)) { break; } // Shoriの結果によってforから脱出
if (counter == 4) { counter = 255; }
}
または
for (byte counter = 0; true; counter++) {
if (Shori(counter % 5)) { break; } // Shoriの結果によってforから脱出
// これだとcounterが255から0になるときcounter % 5が2回連続して0になるため
// 0〜5を繰り返し引数にしてShoriしていることにならない
}
または
while (true) {
for (byte counter = 0; counter <= 4; counter++) {
if (Shori(counter)) { goto dasshutu; } // Shoriの結果によってforとwhileから脱出
}
}
dasshutu:
みたいに一定の範囲を繰り返すカウンタを持つ無限ループってどう書くのがシンプルで一般的なんだろう?
無限ループとはいっても256回も回らずに終わる見込みだから3つ目の書き方でいい(仮にそれを越えても処理内容的に致命的な問題はない)とか、念のためwordにしとけば65536回まではいけるとか考えてもいいのかな
- 20 :デフォルトの名無しさん:2019/05/03(金) 22:05:03.91 ID:VZjV/dE9.net
- for (byte counter = 0; ; counter = (counter + 1) % 5) {
if (Shori(counter)) { break; }
}
とか?
- 21 :デフォルトの名無しさん:2019/05/03(金) 22:23:08.93 ID:16FcdCX4.net
- おおそんな書き方が。ありがたい。
しかも脱出に関して言えば、forの中でifで判定してbreakするのではなく
forの条件式に書いてしまうこともできるな…
- 22 :デフォルトの名無しさん:2019/05/04(土) 04:03:12.91 ID:qzgt3pmZ.net
- オブジェクト指向でなぜつくるのか
って書籍が今Kindleセールで半額だけど良さそうだな
読んだことある人どんな感想ですか?
- 23 :デフォルトの名無しさん:2019/05/05(日) 03:51:38.18 ID:NRm/lXtt.net
- >>22
じゃんけんゲームを2人(自分対PC)用から(PCを)何人でも増やせる設計に変える例で
構造化プログラミングだとちょっと書き換え多そう。。。オブジェクト指向プログラミングなら〜って感じ。
(そこしか覚えてないとも言う)
第2版は最終章でオブジェクト指向プログラミングの次世代は関数型プログラミングだとか言ってHaskellの紹介が追加された。
- 24 :デフォルトの名無しさん:2019/05/05(日) 11:14:43.13 ID:P7bsB8ff.net
- 皆さんが一番勉強になった本を教えてほしいです。
これならわかるC++と、C言語ポインタ完全制覇は持ってるので、基本的なことはわかります。
これ読んで実力がバズった!というのがあればぜひとも。
- 25 : :2019/05/05(日) 11:28:24.38 ID:3EWrT4Pn.net
- >>24
C++ ならハーバート・シルトの独習C++ ですね
その真ん中くらいにある「std::string を自分で実装する」というお題が非常によく、OO の教科書でそういうお題を配置しているのも本質を明示している意味でよく、この本より優れている初級C++教科書がみあたりません
- 26 :デフォルトの名無しさん:2019/05/05(日) 11:43:07.96 ID:qZTOu8es.net
- C言語を256倍使うための本
ttps://www.amazon.co.jp/dp/4756100430
- 27 :デフォルトの名無しさん:2019/05/05(日) 19:46:41.25 ID:P7bsB8ff.net
- >>25-26
ありがとうございます。参考にします。
- 28 :はちみつ餃子 :2019/05/05(日) 20:24:31.00 ID:TxpPZKKr.net
- >>24
私が学んだのは「詳説 C++ 第2版」だな。
https://www.amazon.co.jp/dp/479732743X
この本の内容は C++03 の時代のものなので C++11 以降のトピックはウェブで学んだ。
Twitter で C++ に強い人が独習C++の間違いを強く批判しているのを見ることがちょいちょいあるので、
自分では読んだことが無いけど独習C++には良い印象がない。
まあ不正確でもわかりやすいことは有りうるのでとりあえずおおざっぱな概略を把握する分には
どれでも割となんとかなる気がしている。
- 29 : :2019/05/05(日) 20:35:10.90 ID:3EWrT4Pn.net
- >>28
>独習C++の間違いを強く批判している
話を簡単にするために、一時的に紛らわしいことを言っている=どこを切っていも正しいというわけではない=文脈依存なところがある、という批判はアマゾンレビューにありましたね
しかし強く批判されるほどの欠点があるかどうかは、私にはよくわかりません
よろしければポインタをください
- 30 :はちみつ餃子 :2019/05/05(日) 21:21:05.73 ID:TxpPZKKr.net
- >>29
良い評価も悪い評価もあるので単純には言えないけど、批判している代表的な意見としてはこれかな。
https://twitter.com/yumetodo/status/1020966071702966273
ただ、全体として入門書として本当に妥当な本があまりないので、どれが比較的マシなのかというレベルの話だと思う。
私が読んだことがない中で評判を評価するとたぶん江添氏の出している本が (少なくとも日本語の本の中では)
だいぶん良さそうでは有る。
速度のある分野では、単純に古いものはそれだけで価値が低いので、
逆に言えば最新に追い付こうとしているものは高く評価できる。
(deleted an unsolicited ad)
- 31 :デフォルトの名無しさん:2019/05/05(日) 22:04:35.25 ID:vipN53in.net
- 俺「競プロ飽きたしC++の勉強でもするか」
isocpp.org「まずはTourofC++で概要をつかむといいよ〜」
ビャーネ「Tourはプログラミングに習熟した人を想定している」
俺「短くて面白いけど難しいな。プログラミング初心者向けのはないかな?」
isocpp「じゃあこれ つ原則と実践(1248ページ)」
俺「ファッ!?」
isocpp「あと勉強するときは少なくとも3冊持っといたほうがいいよ〜」
俺「ウーン…」
- 32 : :2019/05/05(日) 22:17:13.40 ID:3EWrT4Pn.net
- >>30
毒臭を有害ゴミと判断した理由が知りたいですね…
個人的には、C++ の中の Java に似た部分を抽出して、初心者(最近は C++ に直接参入する人が多いとか…なんか時代を感じます)にやさしい、できれば分厚くない本がいいなあ
以前は accelerated C++ を薦めたりしたのですが、最近 accelerated c++ の決定的に駄目なところを見つけてしまったので、もう私が薦める本は独習しかないのでした
- 33 :デフォルトの名無しさん:2019/05/05(日) 22:37:15.85 ID:RPhfdkos.net
- >>32
有害ゴミなどど、相手が使ってない言葉に勝手に置き換えて、さも相手が感情的で非論理的な
- 34 :デフォルトの名無しさん:2019/05/05(日) 22:39:39.67 ID:RPhfdkos.net
- 途中だった。
有害ゴミなどど、相手が使ってない言葉に勝手に置き換えて、さも相手が感情的で非論理的な発言をしてきたかのような印象操作は卑怯だとは思わないか?
- 35 : :2019/05/05(日) 22:39:39.95 ID:3EWrT4Pn.net
- >>33
https://twitter.com/yumetodo/status/1020966071702966273
>言うまでもなく独習C++は時代遅れの化石で有害ゴミ行き。
使っていますが…
(deleted an unsolicited ad)
- 36 : :2019/05/05(日) 22:41:08.48 ID:3EWrT4Pn.net
- >>34
https://twitter.com/yumetodo/status/1020966071702966273
>言うまでもなく独習C++は時代遅れの化石で有害ゴミ行き。
印象操作などではありえず、ずばり「有害ゴミ」指定されちゃってますが…
(deleted an unsolicited ad)
- 37 :デフォルトの名無しさん:2019/05/05(日) 22:42:08.10 ID:RPhfdkos.net
- >>36
twitterの方は見てなかった。失礼した。
- 38 :デフォルトの名無しさん:2019/05/05(日) 23:27:07.88 ID:DzyvOKLj.net
- プログラミングの最初の一歩すらわからない状態から始めるのか
Pythonやjsやphpなんかである程度書ける状態から始めるのかで話が変わると思う
後者ならググりながら適当になんか書いてみればいいと思う
- 39 : :2019/05/05(日) 23:43:52.77 ID:3EWrT4Pn.net
- >>38
>ググりながら適当になんか書いてみれば
それは C/C++ に関していえば、ちょっと危険な気が… 逆に Python や ruby をやるのなら、それでもいいと思いますが…
- 40 :はちみつ餃子 :2019/05/05(日) 23:57:02.81 ID:TxpPZKKr.net
- >>39
それに強く同意。
C++ には未定義の挙動が多すぎるので、
表層的な理解で使うのは大変に危険である。
- 41 :デフォルトの名無しさん:2019/05/06(月) 01:21:26.82 ID:oGUqqIoM.net
- C++に関してググって出てくる情報って適当なの多いよなw
Qなんとかとか特にw
- 42 :デフォルトの名無しさん:2019/05/06(月) 04:37:01.34 ID:z7Cz8mZC.net
- どうも最近は最新のC++の機能を使うべきだとしつつ
自分なりにとりあえず適当に書くのは危険とか言う意見が多いけど
人間もあくまで動物なので手を動かして書かなきゃ覚えないしCの時代から続く古臭い書き方は長年の積み重ねでセオリー確立してんだから
そういう学習方法を否定するのは違うと思うよ
クラス、ひいては最新の機能を正しく使う、なんて初心者がいきなり目指すようなことじゃない
- 43 :デフォルトの名無しさん:2019/05/06(月) 06:08:09.39 ID:Geq8Gq1G.net
- >>42
手を動かして覚えることは誰も否定していないし、むしろそれは強く推奨したい。ただ、C/C++の場合は表面的な理解だけで動いたから良しとして進むのは危険で、基本的な部分は正しく理解しておくことは必要だと思う。
ある程度の基礎がある状態なら、新しい機能やライブラリの関数もググって得られる情報から正しい仕様を理解して習得できるが、基礎ができていない状態でそれは難しい。
初心者がとりあえず適当に切り貼りして動かそうというやり方をするなら、他の言語から入った方がいいと思う。ググって調べた断片的な情報だけでなく入門書等で基礎を押さえつつ、実際に書いて愚直に挙動を確認しながら理解をしていくのが良いと思う。
- 44 : :2019/05/06(月) 11:40:40.36 ID:vu8V8zIe.net
- >>42
>人間もあくまで動物なので手を動かして書かなきゃ覚えないし
プログラミングは特に、自分で書いて書いて書きまくって読んでというところは同意
となれば、ちょっと書く気になろうという心の動きを、分厚い教科書で潰したくない、という趣旨は理解
さて、困ったものです、そういうときに使える教科書があればいいのですが、C/C++ の教科書って高くて分厚いですからね…私もメイヤーズはまだ積読だし、いつ読む気になるかな?
- 45 :デフォルトの名無しさん:2019/05/06(月) 13:27:09.96 ID:MWPsBkkn.net
- 300ページ未満の入門書…
- 46 :デフォルトの名無しさん:2019/05/06(月) 13:46:12.30 ID:z7Cz8mZC.net
- まぁ確かにサンプルコードの切り貼りとかは危ないだろうしネットの情報だけってのはね
でも独習みたいな古臭い(03以前)入門書なんて初心者にうってつけだと思うんだけど
・・・って、twitterでこき下ろしてる奴のアカウント名に見覚えあるわw
そいつ勘違いの激しい学生ちゃんだから言ってること真に受けない方がいい
- 47 :デフォルトの名無しさん:2019/05/06(月) 16:16:47.15 ID:yQTWUAYp.net
- isocppで推薦されてる原則と実践の前の版がたまたま
近くの図書館にあったから読んでみたけど、意外と面白いな。
- 48 :はちみつ餃子 :2019/05/06(月) 16:19:28.55 ID:K/rO19sE.net
- >>46 見つけられなかったので比較的に新しいやつの中から探して一例として出したけど、
そやつひとりだけが言ってるわけじゃないよ。 良いと評価している人も当然いるんだけど、
あくまで私の観測範囲で私が総合的に感じた漠然敵な印象の話なんで。
- 49 :はちみつ餃子 :2019/05/06(月) 16:20:48.53 ID:K/rO19sE.net
- 今の時点でそれなりに C/C++ をわかるようになっている人の思う「良い本」というのは
「昔に学んだ」という体験だからさ、今から学ぶという人の事情とはやっぱり時代が違うと思う。
自分が読んだ本を言えても、それを強く勧めるほどの自信はないな。
例えば私が最初に買った C++ 本は ARM なんで、これにはいわゆる STL さえ載ってないんだけど、
当時としては妥当な選択肢だったし、十分にわかりやすかった。
でももちろん、今の時代に ARM を勧めるなんて馬鹿馬鹿しくてあり得ないでしょ。
昔の C++ を身に着けてから徐々に知識を更新してきていると昔の C++ と今の C++ が
滑らかに繋がっているように錯覚してしまうけど、昔の C++ を学んでから今の C++ というのは
結構な飛躍があると思うんだよ。
今から学ぶなら C++11 程度は想定している本の方がいいんじゃないかな、と個人的には思う。
- 50 : :2019/05/12(日) 18:12:45.12 ID:wqyHUvPG.net
- >>49
> C++11 程度は想定している本の方がいいんじゃないかな
しかし、C++03 までのからくりをしらずして、C++11 のあれこれを理解できるかな?とも思うのです、ranged for の for(auto &item; vec) の & の意味とか…これはあんがい簡単にクリアできるのやもしれませんけど
- 51 :デフォルトの名無しさん:2019/06/13(木) 17:42:42.66 ID:KieG+j09.net
- テンプレート特殊化を前方宣言したいんだけど、
コンパイルエラーが出て詰んでるんですけど、
どうやればいいですか?
例えば以下のようなことがしたいんですが。
template<class T>
struct A {};
template<>
struct A<int>;
template<>
struct A<float> {
A<int> f() { //エラー : 認識できない型A<int>が使われいます。
return A<int>{};
}
};
template<>
struct A<int> {
int value;
};
- 52 :デフォルトの名無しさん:2019/06/13(木) 23:30:30.78 ID:CsiJtfL2.net
- A<float>::fを定義するにはA<int>の定義(classのサイズ)が必要
fの定義をA<int>のあとにすればできる
https://ideone.com/Vv0Psu
- 53 :51:2019/06/14(金) 00:54:44.79 ID:rrlL2Eyk.net
- >>52
おお!マジで出来たw
ありがとう
- 54 :デフォルトの名無しさん:2019/06/18(火) 08:26:42.73 ID:YBHtdulC.net
- 入門書の入力された文字列が同じかどうかを判断するコードなのですが
https://ideone.com/vaASOS
14行目のif(str1[i]!=str2[i])break;がどういう意味なのかさっぱり理解できません
文字コードが同じじゃなければbreakッて意味ですか?
len+1してるのも意味がわからないです・・・
説明よろしくお願い致しますm(_ _)m
- 55 :デフォルトの名無しさん:2019/06/18(火) 09:08:30.02 ID:Sq2beh5p.net
- 文字コードが同じじゃなければbreakということでいいんじゃない?
len+1しているのはヌル文字があるから
- 56 :デフォルトの名無しさん:2019/06/18(火) 09:20:54.17 ID:R6plNfEa.net
- まず配列について勉強だね
デバッガのステップ実行で追っていくといいよ
- 57 :デフォルトの名無しさん:2019/06/18(火) 09:21:46.85 ID:3nOE2mBA.net
- プログラム板の精神病コテ 松本卓朗 さん殺害予告!
https://mevius.5ch.net/test/read.cgi/tech/1560808598/
- 58 :デフォルトの名無しさん:2019/06/18(火) 11:28:13.79 ID:uO3416eX.net
- 文字列が同じ = 1文字1文字全部同じ = 1文字でも違えば違う
strlenは文字数を返すけど最後の\0を含まない
最後の\0まで比較しないと入力した文字列と先頭部分が一致したら一致してしまうのでlen+1
- 59 :デフォルトの名無しさん:2019/06/18(火) 11:38:40.31 ID:YX5RP0uz.net
- 文字列長の短いほうを len としないと突破したところを参照してまうぞ
str1 = asd\0
str2 = asdf\0
で str2 の len+1 まで str1 を参照すると嘔吐
- 60 :デフォルトの名無しさん:2019/06/18(火) 11:39:47.81 ID:YX5RP0uz.net
- まぁ 文字列長がちがったら いきなり不一致って脱出してもいいんだけどね
- 61 :デフォルトの名無しさん:2019/06/18(火) 11:50:07.19 ID:uzZY1452.net
- https://ideone.com/JUWWBr
分かり易くなったゾ
変数を減らせばラク
lenで判定してるイマイチな書き方を排除すればもっとラク
要するに分かりにくく書いてるから分かりにくいだけだよ
- 62 :デフォルトの名無しさん:2019/06/18(火) 12:00:25.27 ID:YX5RP0uz.net
- 元々は入門書に書かれてたコードか
むむむ
- 63 :デフォルトの名無しさん:2019/06/18(火) 12:36:36.95 ID:uzZY1452.net
- ループを再帰に直せば終了条件がもっと分かり易くなるゾ
再帰にして時系列の1段階ずつ見せればその1段階ごとにどういう判断してるか分かり易いでしょ
bool scr(char* p, char* q){//string compare recursive
if( *p == '\0' || *q == '\0' ){
if( *p == *q ){
return true;
}
return false;
}
if( *p != *q ){
return false;
}
return scr(p+1, q+1);
}
元のヤツは文字コードと文字列の長さがこんがらがってぐちゃぐちゃになってるから分かりにくいんだなコレ
同じ文字列かどうかを、「文字コードが同じか」と「文字列の長さはどうか」、この二つで判断してるでしょ
判定するのに全く別の二つのものを取り扱ってるから分かりにくいんだよ
forのカウンタのiの取り扱いも分かりにくい
文字列長さの境界の+1の有無も分かりにくい
文字コードが同じじゃなければbreakしてlenで判定、すんごく分かりにくいでしょ
何せ「文字コードが同じじゃなければbreak」、その通りなんだけど「意味が理解できない」と来てる、意味が分かってるのに「分からん」と言ってるワケだ
結局はbreakしてるはiのカウントを止めるためと、lenと比較するためにforのスコープ超えた場所でiの値を参照するため
これ入門書の前段階までにfor文の外側でiの値を参照してる例がないと詰まる箇所だよ
for文の外側でiの値を使う、この意味が分からんと「文字コードが同じじゃなければbreak」まで分かってても全体が分からないようになってる
- 64 :デフォルトの名無しさん:2019/06/18(火) 12:55:58.74 ID:GYXVYwQo.net
- ポインタを知らないであろう初学者にポインタ演算を使って分かりやすいとする鬼畜の所業
- 65 :デフォルトの名無しさん:2019/06/18(火) 16:53:31.85 ID:eB4Ftz1Y.net
- >>57~63回答ありがとうございます
説明下手でスイマセン。このコードが書いてある前のページに文字列の比較は出来ないため
str1==str2と書いて判定は出来ないと書いてあったのに
14行目でstr1[i]!=str2[2]で判定してるのがよくわからないです
strlenは\0返さないのですね。そこはスッキリしました。ありがとうございます
- 66 :デフォルトの名無しさん:2019/06/18(火) 18:05:58.84 ID:U3/WUc9c.net
- >>65
str1==str2はポインタ(それぞれの文字列が格納されている先頭アドレスの値)を比較してるだけ。
str1[i]!=str2[i]は、str1とstr2のi番目の文字を比較している。
- 67 :デフォルトの名無しさん:2019/06/18(火) 18:50:13.29 ID:ujoReLWG.net
- >>66
文字列の中身を比較してるんじゃなくて先頭のアドレスを比較していて
str1[i]!=str2[i]は文字列の中身を比較してるってことなんですね
もやもやが解けました。ありがとうざいます
- 68 :デフォルトの名無しさん:2019/06/18(火) 19:28:14.92 ID:U/JJd+xv.net
- >>59
馬鹿なの?
- 69 :デフォルトの名無しさん:2019/06/18(火) 20:04:16.08 ID:ADibu3ht.net
- きゃー はずかしい><
- 70 :デフォルトの名無しさん:2019/06/18(火) 22:39:27.24 ID:R4l3qwnJ.net
- int a = b - 1;
if (a < 0){
a = 0;
}
これのスマートな書き方を教えてください。
- 71 :デフォルトの名無しさん:2019/06/18(火) 22:45:19.63 ID:BC11WozD.net
- ここで聞いていいのかわからないけど
組み込み系で上位割り込みでライト、下位割り込みでリードする場合割り込み禁止する必要ありますか?
- 72 :デフォルトの名無しさん:2019/06/18(火) 23:11:51.18 ID:gZnFDsgJ.net
- >>70
それ以上にスマートな書き方なんてない
素直が一番
>>72
atomicにアクセスできないなら必要
readの途中でwriteが発生したらダメだし、
writeの途中でreadが発生してもダメなんだから、上位/下位は関係無い
- 73 :デフォルトの名無しさん:2019/06/18(火) 23:13:26.53 ID:48k2aFsK.net
- >>70
bの型が不明な場合はスマートな書き方は特に無い
- 74 :デフォルトの名無しさん:2019/06/18(火) 23:24:05.71 ID:f34xyyaF.net
- >>70
int a = b < 1 ? 0 : b - 1;
- 75 :デフォルトの名無しさん:2019/06/18(火) 23:28:32.54 ID:BC11WozD.net
- >>72
何故ダメなのかが理解できてません。
書き忘れてましたが割り込みはタイマで周期的に発生させてます。
リード中にライトが発生しても下位割り込みは一周期遅れて上位割り込みのライト結果をリードするだけではないのですか?
- 76 :デフォルトの名無しさん:2019/06/18(火) 23:45:23.52 ID:gZnFDsgJ.net
- >>75
writeの割り込みが発生するまではreadは進行するんじゃないの?
だから「readの途中で」なんだけど
「2つの割り込みは完全制御下にあり、read中にwriteは発生しない」なら大丈夫だよ、当然
- 77 :デフォルトの名無しさん:2019/06/19(水) 00:02:23.61 ID:/MswhT0Q.net
- >>75
>リード中にライトが発生しても下位割り込みは一周期遅れて
ここがちょっと勘違いを感じる
割り込み処理が終わったら、割り込まれた処理の続きをするのよ
低レベルにDBのrollbackみたいな複雑な仕組みはないのよ
- 78 :デフォルトの名無しさん:2019/06/19(水) 02:33:40.48 ID:v2+76oWz.net
- char型の動作がどうもわからない。
例えば
char str[] = "abc"; として
cout << &str[0]; ----> abc
になるのはなんで? index 0番だから a がでると思ったんだけど...
初心者ですまん
- 79 :デフォルトの名無しさん:2019/06/19(水) 03:26:09.45 ID:0DgdOBcz.net
- >>78
&str[0]に付いてる&はアドレスを取得する演算子だから、strの最初の文字「a」のアドレスを取得するという意味になり、
結果的には cout << str; と同じことになる。
- 80 :デフォルトの名無しさん:2019/06/19(水) 05:18:40.21 ID:xxgeB2IO.net
- >>78
cout << &str[0] << '\n';
cout << str[0] << '\n';
この2行でソースと実行結果を見比べれば腑に落ちるんじゃないかな。
- 81 :デフォルトの名無しさん:2019/06/19(水) 08:25:58.04 ID:huda4IDC.net
- >>76
>>77
下位割り込みのリードが一命令で完了するなら「リードの途中でライト」が発生しないので割り込み禁止しなくていいということですか?
例えばリードライトの対象が配列なら割り込み禁止要、変数単体なら不要
- 82 :デフォルトの名無しさん:2019/06/19(水) 09:03:32.83 ID:bPRT+MIA.net
- >>81
アセンブラ確認してほんとに一命令なら良いけどそうじゃないなら結局危険じゃない?
Cで1行だからアセンブラでも一命令とはかぎらんよ
- 83 :デフォルトの名無しさん:2019/06/19(水) 09:06:41.55 ID:zjjAtQWn.net
- ちなみに上位下位って割り込みの優先度のこと?
- 84 :デフォルトの名無しさん:2019/06/19(水) 09:22:03.41 ID:RukLP400.net
- たとえ1命令でも安全かどうかはcpuによる
あいまいな質問にはあいまいな回答しか返らない
マニュアル読むのが正解
- 85 :デフォルトの名無しさん:2019/06/19(水) 09:54:17.80 ID:huda4IDC.net
- >>82
なるほど。極端な例ですがcでword変数への代入処理一行だったとしてもアセンブラでは上位バイト、下位バイトを分けて代入してるかもしれませんもんね。
>>83
そうです。
>>84
アセンブラで一命令でもまずい場合ありますか?例えでもよいのでご教授頂けたら助かります。
- 86 :デフォルトの名無しさん:2019/06/19(水) 11:34:02.00 ID:kjBiA8ae.net
- vector<std::vector<char> > vec;
の二次元配列で、一行を削除するのはどうしたらよいのでしょうか。
int row = 1;
vec.erase(vec.begin() + row );
ではだめなんでしょうか。
- 87 :デフォルトの名無しさん:2019/06/19(水) 11:40:44.36 ID:kjBiA8ae.net
- すみません。これでちゃんと動きました。
お騒がせしました。
- 88 :デフォルトの名無しさん:2019/06/19(水) 15:30:59.62 ID:2x/CN7xY.net
- >>70
int a = max(b - 1, 0);
というような書き方を見たことが有る。
- 89 :デフォルトの名無しさん:2019/06/19(水) 20:53:07.15 ID:RukLP400.net
- >>85
だから一般論で答えられないって言ってんの
使ってるcpuのマニュアル読め
書いてあるから
- 90 :デフォルトの名無しさん:2019/06/19(水) 23:49:00.15 ID:v2+76oWz.net
- >>79
>>80
回答ありがとう。
そもそもaddress-of演算子でIndex 0番を指定してるのに アドレス値じゃなくて 文字が出てくることが混乱の元だった。
char型については>> 演算子がオーバーロードされててc-stringとして解釈される。
実際のアドレスを出力したい時は
cout << (void *)&str[1]; とする
って感じでいいのかな?
- 91 :デフォルトの名無しさん:2019/06/23(日) 01:18:33.15 ID:X4lwQ0L+.net
- 学校の課題でバブルソートアルゴリズムを使った画像処理の課題で、VSの警告にfor-loopの定義が無効です:最初の条件はテストを満たしていません。ループボディは実行されませんと出てきます。これはどういった原因で出てくる警告なのか教えほしいです
- 92 :デフォルトの名無しさん:2019/06/23(日) 01:30:30.52 ID:xbroTRmV.net
- ループの初期状態でループ終了条件を満たしている
- 93 :デフォルトの名無しさん:2019/06/23(日) 01:31:24.99 ID:xbroTRmV.net
- 単純化すればこういうこと
for (int i = 0; i < 0; i++)
- 94 :デフォルトの名無しさん:2019/06/23(日) 06:24:41.17 ID:TKCAljQF.net
- てst
- 95 :デフォルトの名無しさん:2019/06/23(日) 11:28:18.87 ID:6GXr3JQp.net
- 最近BS/CSが映らなくなった人はここを見ると良い
【B-CAS改造】Bカスカード2038化書き換えツール配布所 205
https://mevius.5ch.net/test/read.cgi/avi/1560914909/1-100
- 96 :デフォルトの名無しさん:2019/06/24(月) 06:51:52.73 ID:lwUqObiG.net
- FILE* file;
file=fopen("test.txt","w");
fclose(file);
これでソリューションのフォルダ内にtest.txtファイルが作られると読んでる入門書には書いてあるのですが
VisualStudioのフォルダ内、何処を探しても生成されてません;何処に有るのでしょうか?
- 97 :デフォルトの名無しさん:2019/06/24(月) 09:37:54.94 ID:LpgW8DGO.net
- ドキュメントにプロジェクトを作らなかったか?
その中かと
- 98 :デフォルトの名無しさん:2019/06/24(月) 10:06:16.55 ID:N4e4wdnY.net
- >>96
「ソリューションのフォルダ内」であって「VisualStudioのフォルダ内」じゃないぞ
- 99 :デフォルトの名無しさん:2019/06/25(火) 07:24:49.37 ID:jHEFOU5u.net
- >>96
取りあえずコマンドプロンプト開いて
dir /s /b ¥test.txt
ってやってみ
- 100 :デフォルトの名無しさん:2019/06/26(水) 01:39:16.88 ID:6WTwK8fu.net
- STLコンテナ「set」の特定要素を削除したいとき
set<int> s = {1,2,3};
for (auto itr = s.begin(); itr != s.end(); ++itr) {
cout << *itr << endl;
if (*itr == 2) s.erase(itr);
}
これの実行結果が
1
2
1
3
となるのですが、erase後に最初に戻っているように見えるのは偶然、つまり不定の動作ですか?
なお、正しいイタレータの使い方は以下のようになるのは承知してます
for (auto itr = s.begin(); itr != s.end(); ) {
cout << *itr << endl;
if (*itr == 2) itr = s.erase(itr);
else ++itr;
}
- 101 :デフォルトの名無しさん:2019/06/26(水) 07:52:05.91 ID:Re4GWmuT.net
- >>100
erase で無効になったイテレータの使用により動作は未定義となります。
そのコードの場合は erase 直後にくるループ条件にある比較時点で。
- 102 :デフォルトの名無しさん:2019/06/26(水) 09:02:19.59 ID:16uFKMyS.net
- いやいや
- 103 :デフォルトの名無しさん:2019/06/26(水) 09:07:00.61 ID:Re4GWmuT.net
- あ、インクリメントのほうが先か。ごめんなさい。
- 104 :デフォルトの名無しさん:2019/06/26(水) 14:50:08.20 ID:7raG/MY1.net
- 未定義動作を起こしてるんで
プログラムがたまたまクラッシュもせずに最後まで動いたというレベルからの偶然
- 105 :デフォルトの名無しさん:2019/06/26(水) 23:47:19.51 ID:6WTwK8fu.net
- やはり偶然なんですね
ありがとうございました
- 106 :デフォルトの名無しさん:2019/06/28(金) 01:54:12.27 ID:kYWVUvHS.net
- constを外すのに使う const_cast<T&>(t) ですが、Tをいちいち書くのが面倒なので
そうだdecltypeを使えば楽できると思ったものの、remove_constも併用しないといけないみたいですね
参照だったらさらにremove_referenceも必要で、これじゃTがくっそ長くない限り有り難みが薄いですね
なんかもっといいやり方ないですかね?
const int i = 0;
const_cast<remove_const<decltype(i)>::type&>(i) = 1
const int& j = i;
const_cast<remove_const<remove_reference<decltype(j)>::type>::type&>(j) = 2;
- 107 :蟻人間 :2019/06/28(金) 01:56:07.93 ID:5qyojIkB.net
- >>106
テンプレート構造体内部の型。
- 108 :デフォルトの名無しさん:2019/06/28(金) 02:11:51.51 ID:4VImPalK.net
- const_cast<decay_t<decltype(i)>&>(i)
で大体事足りる
まあ大抵は
using U=decay_t<...>;
とかしておくが
- 109 :デフォルトの名無しさん:2019/06/28(金) 03:26:31.25 ID:kYWVUvHS.net
- >>108
有り難うございます。decayなんてあるんですね
ここ見るといろいろ機能あるようで
https://ja.cppreference.com/w/cpp/types/decay
type_traitsってあんまり詳しくないですけど、よくこんなの考えたなぁと感心します
仕組みを知らないと魔法使ってるみたいに見えますね
- 110 :デフォルトの名無しさん:2019/06/28(金) 18:20:06.99 ID:SuTGhcfs.net
- 作りたいものにC++が必要なので1から学んでるプログラミング初心者です
biginteger という型の使い方・使い道がよくわからず悩んでいます。
- 111 :デフォルトの名無しさん:2019/06/28(金) 21:15:56.74 ID:+JSlLfql.net
- C/C++の標準にそんな型ないよ
C#にBigIntegerあるみたいだね
使い方は普通の整数型と同じ
使い道は、大きな整数を扱いたい時
使い道がわからないものを無理に使う必要ないんじゃね?
- 112 :デフォルトの名無しさん:2019/06/28(金) 21:19:18.85 ID:U9hxi1vj.net
- 多倍長整数ならboostには入ってるからそのうち標準にも来るかもね
- 113 ::2019/06/28(金) 21:46:26.65 ID:FS2l1RCX.net
- >>110
https://mevius.5ch.net/test/read.cgi/tech/1434079972/51
私は biginteger が欲しかったので自分で書くことにしました
- 114 :110:2019/06/29(土) 19:00:51.29 ID:gqtgvd1f.net
- 標準の型じゃなくて読み込んでるライブラリ?のクラスだったみたいです
そっちのマニュアルを見て見たら詳しく書いてありました…
いろいろ教えていただきありがとうございました。
- 115 :デフォルトの名無しさん:2019/07/24(水) 09:52:41.24 ID:0j2752sC.net
- オブジェクト指向を使ってないアプリを c++ (コンパイラはg++6)で作るのは良でしょうか?それとも推奨されないでしょうか?
当方、意図せずにそうなってしまいました。
Cで書いてるつもりだったのですが、Cでは認められないと知らずにブロック頭以外の所での変数の宣言などを使っていて、
エラーにならなかったのは、Makefile が c++
用の流用で、ソースの拡張子が.cc だったからでした。
こんな c++ コンパイラの使い方は、許される事なのか、良くある事なのか気になりました。
- 116 :デフォルトの名無しさん:2019/07/24(水) 10:00:57.54 ID:zKJbgf3R.net
- Cで書いてるつもりがC++になってた、は良くはないけど別に気にすることじゃないかと
Cであることが要件ならCに直せばいいし、C++でもokならそれでもいいし
要件満たすものが出来てんならひとまずokじゃない?
- 117 :デフォルトの名無しさん:2019/07/24(水) 10:52:12.93 ID:yY+SPHit.net
- ブロック頭以外の所での変数の宣言はC言語で認められてるでしょ
- 118 :115:2019/07/24(水) 12:47:15.91 ID:qoUieyoj.net
- >>116 どうもです。
ひとまず動いてるのですが、気になりました。
例えば、「完全にcで書いていてcでコンパイル出来るものでも、c++ 必要なものでも、どちらにも拡張子は .cc に統一して、どちらにも常にコンパイラは c++ を使う」と言う態度ってどうでしょう?
c++ が c の上位互換ならこれで良いように思えます。
- 119 :115:2019/07/24(水) 12:48:43.68 ID:qoUieyoj.net
- >>117
そうなのですか?
私の見た情報が古かったのですかね。
- 120 :デフォルトの名無しさん:2019/07/24(水) 13:31:50.28 ID:zKJbgf3R.net
- >>118
いや、プログラムってそもそも道具なんだから何で書かれてるかとかどうでもいいかと
複数人で開発していて他人もコードを見ることがある、技術情報として発信する、要件として言語の指定がある
とかいう縛りがあるならその縛りに応じるようにコードを書き直せば良い
個人的にはCでなければ困るというのでなければC++にするし、多少の困りくらいなら回避してC++にする
基本的にC++はCの上位互換
- 121 :115:2019/07/24(水) 20:52:46.78 ID:qoUieyoj.net
- 私が知りたかったのは、ソースを書くのに何言語を選ぶべきか、でははないです。
知りたかったのは、例えば、
「ソースが c -> gcc 。ソースが c++ -> g++」
をしないで
「一切合切どちらも常に g++ 」でも良いのか?でした。
- 122 :デフォルトの名無しさん:2019/07/24(水) 21:07:11.23 ID:0jLIOgkf.net
- >>121
ダメです。兄弟はもう袂を分かちました。
30年前の仕様しか使わないと心に決めているならお好きに…
- 123 :115:2019/07/24(水) 22:28:11.62 ID:tRuObC3H.net
- >>122
>>>121
>ダメです。兄弟はもう袂を分かちました。
>30年前の仕様しか使わないと心に決めているならお好きに…
どうもです。そうなのですね。
「一切合切 gcc 」はダメでも「一切合切 g++ 」なら大丈夫かと思ってしまいました。
なにぶん始めたばかりでして、この辺りの常識がないのです。
- 124 :デフォルトの名無しさん:2019/07/24(水) 23:59:42.77 ID:7wBUx5ir.net
- 良い悪いじゃないけど
実質的にCのプログラムでしかないなら純粋なCのプログラムとして書き直して
Cコンパイラとの組み合わせで使っていた方が幸せだと思うよ
- 125 :115:2019/07/25(木) 13:26:54.50 ID:A3AJFf0Q.net
- その方がサイズも小さく速度も速いですかね。
トライしてみます。
- 126 :デフォルトの名無しさん:2019/07/27(土) 08:53:41.05 ID:zR8v2AWF.net
- >>125
ブロック変数宣言の位置だけがブロックの冒頭ではないというだけなら、通常、
速度低下は全く無く、それをブロックの冒頭に書き直しても速くなることは
有りません。
また、コンストラクタ、デストラクタ、仮想関数、STL、コンテナなどを使わない限り
通常、C++がCより遅くなるということは有りません。
- 127 :デフォルトの名無しさん:2019/07/28(日) 00:37:20.66 ID:YxeZH1gr.net
- Embedded C++みたいなこと言ってんな
- 128 :デフォルトの名無しさん:2019/08/05(月) 22:51:14.97 ID:DMRdHfR+.net
- これからC++勉強しようと思うのですが、
開発環境は何を入れるのがおすすめですか?
Visual Studio Communityが無料で良いのでしょうか
他におすすめあれば御紹介願います
あと、C++勉強に当たっておすすめ定番の本あれば
ご教示ください
- 129 :デフォルトの名無しさん:2019/08/05(月) 22:55:30.85 ID:vqN4pUkV.net
- 今時ならUbuntu入れてatomなりvs codeなり入れりゃいいんじゃないかな
純粋にc++の勉強したいなら
VCは独自仕様が酷すぎるから言語学習には不向き
- 130 :デフォルトの名無しさん:2019/08/05(月) 23:01:28.37 ID:nblSLoEW.net
- VCの独自仕様が気に入らんのならVS2019で対応したLLVMツールセットを使えばいい
初心者にIDEなしはモチベ維持が困難
- 131 :デフォルトの名無しさん:2019/08/05(月) 23:18:05.24 ID:f20npl5p.net
- 独自仕様ならGCC、未実装ならVCってかんじだがどちらも独自仕様はオプションで制御できる
まあWindows環境でやるならVisualStudio使わないのはマゾ
おすすめできる定番の本についてはどれも一長一短だし
テンプレートの利用くらいまで扱ってればとりあえずなんでもいいと思う
- 132 :デフォルトの名無しさん:2019/08/05(月) 23:29:17.63 ID:vqN4pUkV.net
- vcのは独自と言っても、なぜかコンパイルが通らない
なぜかコンパイルが通る
なぜかリンクエラーが起こる
みたいなあまり明文化されていないのだから面倒
structとclassがリンカで別物ってのは酷すぎる
- 133 :デフォルトの名無しさん:2019/08/05(月) 23:45:44.34 ID:4w7A00FF.net
- >>132その最後の行の話、はじめて聞いたけど参考になるサイトとかあったら教えて。
- 134 :デフォルトの名無しさん:2019/08/05(月) 23:49:09.91 ID:vqN4pUkV.net
- ググればいくらでも出てくるがとりあえず一番上を貼っておく
https://stackoverflow.com/questions/33483623/visual-c-2015-linker-error-when-forward-declaring-a-struct-as-class
- 135 :デフォルトの名無しさん:2019/08/06(火) 00:52:13.35 ID:pONItBAd.net
- コマンドライン引数ってのが何を出来るものなのか全く分からないのですが、何が出来るものなんでしょうか?
書き方はまー分かったんですけど、空のメモ帳をドラッグ&ドロップすると意味あるみたいなこと書いてあるけど何も起こりません…
使用環境Visualstudio2019 で見ているサイトhttp:ああwisdom.sakura.ne.jpあprogramming/c/c32.htmlです
- 136 :デフォルトの名無しさん:2019/08/06(火) 11:26:59.34 ID:qIlFvc4N.net
- std::optionalが内部に値を保持する仕組みについてお聞きしたいことがあります
現在いくつかのサイトを巡り、値を保持するためにstd::aligned_storageで確保した領域に配置構文newで値を書き込んでいることがわかりました
このaligned_storageを使った場合に、std::vectorなどのサイズが可変な値が格納されるとどういった挙動になるのでしょうか
vectorの要素数が増えてサイズが大きくなると、alinged_storageで確保したサイズを超えてしまったりしないのでしょうか
- 137 :デフォルトの名無しさん:2019/08/06(火) 14:04:02.23 ID:AX25/xXa.net
- 根本的な部分の理解が足りていない気がするが直接の答えとしてはvectorのサイズは増えないので問題ない。
vectorが管理しているバッファのサイズは増える。
vectorはポインタを持っているだけ。
- 138 :デフォルトの名無しさん:2019/08/06(火) 21:09:46.35 ID:qIlFvc4N.net
- >>137
なるほど、的確な解答ありがとうございます
- 139 :デフォルトの名無しさん:2019/08/07(水) 00:38:52.58 ID:pFHPYbJE.net
- VS2019でchar* name="ABC"みたいにやると
cont char*値を使用してchar*のエンティティを初期化することはできません。とエラーが出るんですけど
どうしたら実行できます?
ググったらcharの前にconst付けると直るみたいですけどこの例だと治りませんでした
http://ideone.com/YyFypJ
- 140 :デフォルトの名無しさん:2019/08/07(水) 00:46:34.02 ID:nHUnBCAO.net
- const char* name;
ってしてもダメなの?
- 141 :デフォルトの名無しさん:2019/08/07(水) 04:58:05.08 ID:pFHPYbJE.net
- >>140
それはやったんですけど出来ませんでした
paizaとかはconstとか付けなくても付けても出来ましたけどVSでは出来ないのでしょうか?
- 142 :デフォルトの名無しさん:2019/08/07(水) 05:16:54.31 ID:v77Wmobb.net
- 構造体だから
- 143 :デフォルトの名無しさん:2019/08/07(水) 05:19:14.35 ID:v77Wmobb.net
- あるいはそれを許可するコンパイルオプション付けるか
- 144 :デフォルトの名無しさん:2019/08/07(水) 08:50:49.29 ID:F5bbfK8A.net
- 文字列リテラルの型はconstな文字列の配列です
https://ezoeryou.github.io/cpp-book/C++11-Syntax-and-Feature.xhtml#encoding-scheme
- 145 :デフォルトの名無しさん:2019/08/07(水) 10:29:55.43 ID:5hdKKXYg.net
- >>141
それをやってダメだったときのエラーメッセージを張ろう
- 146 :デフォルトの名無しさん:2019/08/07(水) 10:45:14.88 ID:9Ff0DYo3.net
- >>139
C/C++の言語仕様的には
const char *name="ABC";
で行ける可能性は高いんですが、分かりやすさのためには、
static const char szName[] ="ABC"; // szName[4] という配列を "ABC",0 で初期化。
const char *name =&szName[0];
とするものお勧めです。
- 147 :デフォルトの名無しさん:2019/08/07(水) 11:36:34.89 ID:Io4EJaZl.net
- 少なくとも>>139のリンクにあるコードはchar*にリテラルを入れようとしてるのでNG
constをつけても駄目なのは生成後に代入しようとしてるから
てか意味もなくグローバルスコープの構造体とかやめろ
- 148 :デフォルトの名無しさん:2019/08/07(水) 17:26:37.26 ID:Io4EJaZl.net
- あと特に理由がないなら文字列はstd::stringを使うべき
C言語じゃないんだから
- 149 :デフォルトの名無しさん:2019/08/07(水) 17:27:18.45 ID:Io4EJaZl.net
- ↑C言語じゃないんだったら
- 150 :デフォルトの名無しさん:2019/08/08(木) 08:01:13.41 ID:kZ+216R/.net
- >>147
構造体メンバに
const char *name;
と書いていて、構造体を生成後に後から name メンバに
Cの文字列リテラルの先頭アドレスを代入することは、
C/C++の言語仕様的にはいけるはずです。
なぜなら、xxx.name のように書いた場合、コンパイラの内部的には
const char* 型の左辺値(代入先)が有るのと同じように扱われるので、
ローカル変数に const char *aaa; aaa = "xxx"; と書いた場合と変わらなく
なるはずですから、C/C++ の言語仕様的には。
- 151 :デフォルトの名無しさん:2019/08/08(木) 16:00:04.26 ID:uMVCdDWb.net
- 独自のクラスに比較演算子==を実装する時、クラス内に定義するのとグローバルで定義するのとでは、実装の仕方以外に違いがあるのでしょうか?
また、例えば独自クラスとintの比較演算子==を実装する場合は、左辺にintがある場合と右辺にintがある場合の二つを用意する必要があるのでしょうか
ちなみに使用しているのはC++11です
- 152 :デフォルトの名無しさん:2019/08/08(木) 16:20:50.94 ID:5ZN2ymvH.net
- それくらいすぐ作れるんだからやってみればいいのでは
- 153 :デフォルトの名無しさん:2019/08/08(木) 16:35:41.72 ID:uMVCdDWb.net
- >>152
これって自分でやったところで解決できる質問なのでしょうか?
もちろん既に自分で実装していますが、自分で使ってみた感じではクラスでもグローバルでも一切の違いがないと「思います」
左辺と右辺のintについても、わざわざ2つの演算子を定義するしか方法がないと「思います」
- 154 :デフォルトの名無しさん:2019/08/08(木) 23:38:32.45 ID:gitRBAeC.net
- クラス内に定義するのとグローバルで定義するのとってどういう意味でだ?
クラスのメンバ関数と普通の関数として定義するのとってこと?
あるいはクラスのstaticメンバ関数と普通の関数?
そういうのとは違ってクラス定義の中にメンバ関数の定義も書くのと
クラス定義の中では宣言だけで外に定義を書くのとってこと?
- 155 :デフォルトの名無しさん:2019/08/09(金) 01:10:13.49 ID:QHhCdgXb.net
- >>151
クラス内に定義すると当然メンバー関数扱いなるのでprivateメンバーにアクセスできるが、左辺を自クラス、右辺をintにoperatorしか定義できない。
クラス外に定義すると、そのままではprivateメンバーにアクセス出来ないが、左辺、右辺どっちでも自由に定義できる。
- 156 :デフォルトの名無しさん:2019/08/09(金) 01:23:46.70 ID:QHhCdgXb.net
- >>151
相手がintの場合はわざわざoperator==を定義しなくても、intへの型変換operatorを定義すれば勝手に変換してくれるので、そっちの方が楽だと思う。
- 157 :デフォルトの名無しさん:2019/08/09(金) 04:08:33.63 ID:P26n3T2n.net
- >>151
どっちでもいいに一票
どっちが自然か&楽かで決めればいいとおも
- 158 :デフォルトの名無しさん:2019/08/09(金) 11:09:20.14 ID:0rjrOlB6.net
- >>155
大きな違いとして出てくるのは実装面の都合になってくるわけですね
>>157 の方の言う通り楽な方で実装しようと思います
>>156
型変換のオペレータを実装するのは思いつきませんでした
確かにそれが一番手っ取り早いですね
教えていただきありがとうございます
- 159 :デフォルトの名無しさん:2019/08/10(土) 01:46:44.99 ID:07GKNAvB.net
- 質問ですがリフレクションってのは何ナノですか?
これがないのがC++の欠点って言われてるそうですが
- 160 :デフォルトの名無しさん:2019/08/10(土) 02:13:52.05 ID:0AyH8q+k.net
- ググって何がわからなかったのか書けよ
そういう気配り謙虚さがないからお前は伸びないんだよ
- 161 :デフォルトの名無しさん:2019/08/11(日) 09:19:19.57 ID:tY3BhpyE.net
- https://psicodisea.webnode.es/_files/200000043-2c2a82d249/geek_gang_signs.jpg
かっこいい
- 162 :デフォルトの名無しさん:2019/08/12(月) 16:51:27.60 ID:dO9cEAMi.net
- >>151
それよりもその定義をどのファイルに置いとくかっていうディレクトリ構成のが重要。
- 163 :デフォルトの名無しさん:2019/08/12(月) 16:56:28.87 ID:FzF2lTUV.net
- ある型TでT[]とT*とTって何が違うの??
- 164 :デフォルトの名無しさん:2019/08/13(火) 00:33:44.36 ID:DG2S/APd.net
- T[]は配列、Tなものが並んだもの
T*はポインタ、Tなものを指すもの
Tは、Tそのものとしか
配列は随所でポインタに変換されるから混同するのもわからんでもないが
- 165 :デフォルトの名無しさん:2019/08/13(火) 01:11:53.36 ID:7xRhzmxz.net
- じゃあ配列を関数の実引数で与えるときに[]…って書かないで*ってするのはなんで??
- 166 :デフォルトの名無しさん:2019/08/13(火) 03:45:41.66 ID:4ID4APxI.net
- 配列を渡すんじゃなくて配列を指すものを渡すため
- 167 :デフォルトの名無しさん:2019/08/13(火) 05:41:26.72 ID:DG2S/APd.net
- 配列を関数の実引数で与えるときに*なんてしない
int arr[NUM] = 0; func(arr, NUM);
普通こう書く
cでは、配列は構造体とは違い「満足なオブジェクト」ではないんだ
関数に配列そのものを渡すには構造体で包むなりしないとならない
面倒なんで普通はそんなことはしなくて、先頭要素へのポインタとサイズを渡す
上記func(arr, NUM);も、本当は配列そのものを渡したいんだけどできないから
そういう意味だと解釈される
- 168 :デフォルトの名無しさん:2019/08/13(火) 07:20:08.26 ID:j44aRWG6.net
- つまり、めんどくせぇし表現乱立するくらいならvectorなりarray使えってことだな
- 169 :デフォルトの名無しさん:2019/08/13(火) 16:33:08.61 ID:qE6XkMY1.net
- mallocした配列なら*
二次元配列なら**
三次元なら***
すんごく分かり易いじゃん
- 170 ::2019/08/13(火) 16:50:37.78 ID:RSblMGL3.net
- >>167
>cでは、配列は構造体とは違い「満足なオブジェクト」ではないんだ
私にいわせると、C の配列の扱い方こそ正義であり、まるまま渡せるという構造体の方が正義に反するやりかただと考えています
構造体の扱いに関しては、K&R1 のままの方が良く K&R2 は改悪だったと思っています
- 171 :デフォルトの名無しさん:2019/08/13(火) 18:08:35.02 ID:rOcNi2je.net
- >>170
お前の正義はどうでもいい
- 172 :デフォルトの名無しさん:2019/08/14(水) 07:35:10.61 ID:R+Q0cUgU.net
- >>168
乱立とかちょっと何言ってるかわかんない
- 173 :デフォルトの名無しさん:2019/08/14(水) 10:53:25.60 ID:K0s/BHfQ.net
- Cだけだといろいろ物足りないから
C++ をちょっと便利な C として
手を付けるのは あり?
- 174 :デフォルトの名無しさん:2019/08/14(水) 11:07:19.09 ID:ULyjZxwK.net
- Better Cっていう用語があるくらい一般的な使い方です
- 175 ::2019/08/14(水) 16:51:47.26 ID:tpn/GSyz.net
- >>173
みんなそうやって C から C++ に移ってきたのだと、私は思います
- 176 :デフォルトの名無しさん:2019/08/14(水) 19:59:27.72 ID:H7xh21M5.net
- >>175
お前はC++の機能はまともに使えてないけどな
- 177 ::2019/08/14(水) 20:13:46.55 ID:tpn/GSyz.net
- >>176
どんなところが「まともに使えていない」と感じられるものだったのでしょうか?
- 178 :デフォルトの名無しさん:2019/08/14(水) 21:53:50.90 ID:xRZNaRgT.net
- いや、もうc言語とかいいじゃん、 c++使おうよ
配列で悩むのめんどくさくね?
配列のサイズ渡せないとか欠陥だからマジで
- 179 :デフォルトの名無しさん:2019/08/15(木) 06:20:44.75 ID:KtlbsHo8.net
- >>176
どうせメタプログラミングもまともに出来ない雑魚だろ?
>>178
vectorやarrayじゃないと渡せないと思ってる?
- 180 :デフォルトの名無しさん:2019/08/15(木) 07:46:25.74 ID:xtiqLszO.net
- >>179
じゃあ、共通的なやり方で動的配列のサイズ渡してくださいよ
どうやるんですか?
- 181 :デフォルトの名無しさん:2019/08/15(木) 08:00:09.50 ID:KtlbsHo8.net
- >>180
お前わざと条件増やしたろ?
- 182 :デフォルトの名無しさん:2019/08/15(木) 23:28:39.14 ID:/raW50Q0.net
- メタプロなんてできない方がかえって生産性あがるわ。
カスが使うと無駄にモジュラリティーの低いもの作るだけ。
- 183 ::2019/08/16(金) 15:30:12.59 ID:s6h04g1l.net
- >>182
貴重なお言葉恐悦至極に存じます、メタプロとかは私は一生理解できないと思っていますが、それでもいい、というお言葉ですよね…
- 184 :デフォルトの名無しさん:2019/08/16(金) 17:52:44.76 ID:WXGx/ZZ4.net
- >>182
> 「カスが使うと」無駄にモジュラリティーの低いもの作るだけ。
よくわかってるじゃないかw
- 185 :デフォルトの名無しさん:2019/08/16(金) 18:07:14.43 ID:w6EX52R7.net
- つまりksかどうかを判定するにはメタプロさせてみればいい、ってこと?
- 186 :デフォルトの名無しさん:2019/08/16(金) 18:08:34.43 ID:JO1Ik9g1.net
- 十分条件と必要条件でググって
- 187 :デフォルトの名無しさん:2019/08/16(金) 22:52:38.68 ID:Y5iyjQTU.net
- >>177
何か指摘するとまたイチャモンつけて否定するだけだろ
俺がまともに使えてないと感じた
理由は自分で考えな
- 188 ::2019/08/16(金) 23:02:28.12 ID:s6h04g1l.net
- >>187
>何か指摘するとまたイチャモンつけて否定するだけだろ
そうでもないと思いますよ…実感では 3% くらいしか使っていないかと
- 189 :デフォルトの名無しさん:2019/08/16(金) 23:54:46.13 ID:thOVjQYW.net
- >>183
理解の問題じゃなくてセンスの問題だつってんだよバカ。
- 190 ::2019/08/17(土) 00:55:09.12 ID:ToRIVhzM.net
- >>189
そうですか、でも、それはそれで興味深いですね
センスの問題、ということは非言語領域的テーマだろうか、と推察しますが、
コンピューター言語という極めて形式的=言語的な領域の話にて非言語的概念が語られる、いや、それが最重要であるというところに奥の知れない「恐ろしさ」を予想します
- 191 :デフォルトの名無しさん:2019/08/17(土) 02:40:02.84 ID:MepC3sRG.net
- (どうもコンパイル時最適化が効くからテンプレートメタプログラミングするって人がいないように思う)
- 192 :デフォルトの名無しさん:2019/08/17(土) 09:39:59.02 ID:1UQd730E.net
- コンパイル時最適化て、C++の最適化は普通コンパイル時とリンク時だけやろ
- 193 ::2019/08/17(土) 11:22:38.89 ID:ToRIVhzM.net
- >>192
リンク時に最適化するのですか?単にリンカがリンクするだけだと思っていましたが
- 194 :デフォルトの名無しさん:2019/08/17(土) 12:18:18.80 ID:1UQd730E.net
- メジャーなコンパイラにはある機能だよ
リンク時最適化でggr
- 195 :デフォルトの名無しさん:2019/08/17(土) 14:11:42.12 ID:0hT5zrAG.net
- テンプレートのコンパイル時最適化なんてのはマクロ展開的な最適化をしてるだけ。
そんな最適化が必要な部分はもっと慎重に関数化するわ。
ただドヤリたいだけのバカがありがたがってるってのがよくわかる。
- 196 :デフォルトの名無しさん:2019/08/17(土) 15:01:36.23 ID:uFx2S1XX.net
- マクロと違って型で挙動変えられるのが美味しいのに
- 197 :デフォルトの名無しさん:2019/08/17(土) 15:22:51.03 ID:mvKCT7Z2.net
- これまで何も考えずにC++で配列を使ってたんですけど
もしかしてC++で配列を使うのってナメられますか?
arrayやvectorなどでないとやはりコードのクオリティが下がることになってしまうのでしょうか?
- 198 :デフォルトの名無しさん:2019/08/17(土) 15:52:09.37 ID:BZ3r0cTp.net
- newからdeleteまでの間の例外処理に不備がないと自信があるなら生配列で構わん
- 199 :デフォルトの名無しさん:2019/08/17(土) 16:56:59.91 ID:kME64/ZP.net
- >>197
静的配列なら生配列もありかと思う
静的配列でもarrayのメソッド使いたいとか引数で他の関数等に渡すとかあるならarray
動的配列なら他に理由がない限りvector一択
- 200 :デフォルトの名無しさん:2019/08/17(土) 17:14:22.35 ID:WCU4L4CL.net
- >>197
生配列とarrayやvectorのメリットデメリットや使い分けを理解せずに何も考えずにarrayやvectorにする方がいいらしいなんて理解の仕方ならクオリティは低いままだよ。
- 201 :デフォルトの名無しさん:2019/08/17(土) 18:13:22.13 ID:1UQd730E.net
- >>195
その表現もおかしいけどな
テンプレートによってマクロ展開的に生成されたコードにも等しく最適化がかかるだけであって
>>197
コードのクオリティとか良いコードとかより、最終的にどちらがユーザーの利益になるかどうかを考える方が健全だと思うけど
- 202 :デフォルトの名無しさん:2019/08/18(日) 00:09:06.82 ID:XCKtcmfj.net
- >>201
マクロ展開で実行評価される必要のない部分が削られるって話なんだが
あんまり理解してないでしょ?
まあ別に理解してないならしてないでほとんどの場面で使わなくていいものではあるが。
- 203 :デフォルトの名無しさん:2019/08/18(日) 08:44:15.16 ID:vyOg2WJ0.net
- >あんまり理解してないでしょ?
こっちの台詞だよ
必要とされたときに初めて実体化されるの
必要ないのに全ての型全ての組み合わせ用意してから削ってると思ってたのか
- 204 :デフォルトの名無しさん:2019/08/18(日) 09:58:09.36 ID:S9bN8HAf.net
- >>197
「配列 キャッシュ効率」で調べると次のようなものが出てくる
平たく言うと「配列をキャッシュに乗せる」
プログラミング :: 高速なプログラムを書く為に :: メモリ
ttp://myoga.web.fc2.com/prog/cpp/opti02.htm
Processingで見るプログラミングスタイル七変化 - Qiita
ttps://qiita.com/FAL/items/19be333d55f7fcb1943a
プログラムを高速化する話
ttps://www.slideshare.net/KMC_JP/ss-45855264
- 205 :デフォルトの名無しさん:2019/08/18(日) 12:05:15.42 ID:XCKtcmfj.net
- >>203
やっぱ変数評価の問題とマクロの関係を全く理解してないんだな。
>>196
そういう型マッチングシステムに依存しまくったものの危険性を全く理解してないのが
問題なんだよ。
SFINEとか型マッチングシステムのデバッグしずらいものに頼る問題を
全く意識していない輩が多すぎる。
- 206 :デフォルトの名無しさん:2019/08/18(日) 12:24:08.36 ID:vyOg2WJ0.net
- 変数(というよりテンプレート実引数)を特殊化なりオーバーロードなりで評価した結果コードが生成されない(テンプレートが実体化されない)のは最適化でも何でもない
- 207 :デフォルトの名無しさん:2019/08/18(日) 12:27:17.01 ID:vyOg2WJ0.net
- ただし、よくわかりもせずにテンプレートを持て囃したりC++歴数年でテンプレートに首突っ込む(しかも生産性ガン無視で)初心者が増えたのは俺も問題だと思う
- 208 :デフォルトの名無しさん:2019/08/18(日) 12:37:50.86 ID:AmZy196G.net
- でもテンプレート便利じゃん
- 209 :デフォルトの名無しさん:2019/08/18(日) 12:52:38.69 ID:rJ9LPM9I.net
- >>205
君の用語の使い方が独特で、君の思ってることを読み取れるエスパーは少ないって話だと思うよ。
マクロ展開の「実行評価」って何なの?
具体的な問題を挙げずに危険とかいうのは単なるFUDってやつじゃないの?
理解させるために言葉を工夫するつもりが無いなら黙ってくれていい。
- 210 :デフォルトの名無しさん:2019/08/18(日) 18:15:25.68 ID:XCKtcmfj.net
- >>209
理解してないならそういえばいい。
とりあえずcommon-lispでも勉強することをオススメする。
少しは見識が広がると思うよ。
- 211 :デフォルトの名無しさん:2019/08/18(日) 22:22:43.25 ID:4oEGaRbg.net
- >>210
common lispで実行評価って、evaluationのことを言いたいのだろうか?それなら「評価」と訳されると思うけど、実行評価はググっても見当たらない。PDCAの用語と混同してるのではないかと思えてしまう。
- 212 :デフォルトの名無しさん:2019/08/18(日) 23:03:24.76 ID:Onid3Fuw.net
- lispがでてくるならこれはもう defmacro しかないんじゃないか?
- 213 :デフォルトの名無しさん:2019/08/18(日) 23:06:53.30 ID:8LEpKI7v.net
- 用語でもめるくらいならサンプルコードでやれ
- 214 :デフォルトの名無しさん:2019/08/19(月) 01:57:01.62 ID:DiXQVhta.net
- そやっ
common lisp言うたら相手びびるはずやっ
- 215 :デフォルトの名無しさん:2019/08/19(月) 11:27:33.54 ID:icNxZHqv.net
- まずはダイナミックとスタティックの違いがある
静的なものは未来永劫不動なので、一度作ったら未来でも一切変わらない
動的なものは「未来は不定である」「未来は誰にも分からない」という哲学あるいは神学から作られたので、未来に挙動が変わる
決定論的な未来の世界観では一度作ったらそれきり、静的なものが出来上がる
ここでいう決定は本当に神学で、全知全能の神を指している
未来の事柄があらかじめ全部分かっていれば、ダイナミックなことはしなくて良くなる、というのが、彼ら西洋人の究極の理想論
今分かることは動かす前に全部決め打ちすりゃーいい、ってのが静的だ
- 216 ::2019/08/19(月) 18:55:20.55 ID:D6AI5dRa.net
- >>215
>未来の事柄があらかじめ全部分かっていれば、ダイナミックなことはしなくて良くなる、というのが、彼ら西洋人の究極の理想論
ラプラスの悪魔、という語句をご存知ですか?西洋人ですら「未来の事柄をあらかじめ」予測することはできない、と観念しているようですよ…
- 217 :入門:2019/08/19(月) 20:35:59.98 ID:aCo9z6Zb.net
- 色んなサイトを見てC言語の文法を学習中なのですが構造体の自己参照のやり方がどうも分かりません。
かんたんな短いサンプルコードを使って教えてほしいです
よろしくお願い致します😪
- 218 :蟻人間 :2019/08/19(月) 20:40:39.17 ID:GYeBbzEk.net
- 構造体Aが内部に構造体Aを持つとすると、Aは無限の構造的ループを持つことになる。これはあり得ない。
自己参照するなら、Aのポインタを使わないといけない。
typedef struct A
{
struct A *next;
int value;
} A;
こんな感じになる。ポインタが分かっているなら、
A *a = (A *)calloc(1, sizeof(A));
a->next = NULL;
a->value = 666;
...
この変数aにさらに追加するなら、
A *b = (A *)calloc(1, sizeof(A));
a->next = b;
...
問題は破棄だが、自己参照をたどっていってすべてのAの実体に対して、
freeを呼ばないといけない。
- 219 :蟻人間 :2019/08/19(月) 20:48:42.67 ID:GYeBbzEk.net
- ただし、同じ実体に対して2回free関数を呼ぶことはできない。
また、解放した実体のメンバーは参照することができない。
参照すると、不正読み込みでプログラムが異常終了するかもしれない。
ということでパズルのように解放方法のアルゴリズムを考案しないといけない。
C言語というのは、そういうややこしさをはらんでいる。
- 220 :蟻人間 :2019/08/19(月) 20:56:19.12 ID:GYeBbzEk.net
- 1個追加したいときに、このようなコードをいちいち書くのは大変なので、
普通は「1個追加する」という動作を行う関数を用意する。
void add(A *a, int value)
{
A *b = (A *)calloc(1, sizeof(A));
b->next = NULL;
b->value = value;
a->next = b;
}
- 221 :デフォルトの名無しさん:2019/08/19(月) 21:05:52.16 ID:thJnfNrr.net
- テンプレートの話題でlispの話題ならマクロの話ってピンとくるもんだと思ったが
結構バカが多いんだな。
- 222 :デフォルトの名無しさん:2019/08/19(月) 22:08:18.21 ID:mpyM2QmS.net
- バカはお前だ
- 223 :入門:2019/08/19(月) 22:29:52.38 ID:OunjwQY3.net
- >>218
かなりコンパクトに纏めていただきありがとうございます
ただまだcallocとポインタ型のキャストがいまいち分からなくて😪
すいません
- 224 :さまよえる蟻人間 :2019/08/19(月) 22:45:30.60 ID:5pda5jNo.net
- calloc(1, sizeof(A))は、1*sizeof(A)バイトのメモリーブロックを確保し、ブロックをゼロでクリアする。そして先頭アドレスとしてvoid*型を返す。リファレンスをちゃんと読もう。全部書いてある。
- 225 :デフォルトの名無しさん:2019/08/20(火) 13:31:20.80 ID:iQfxCe91.net
- c++でanimal, dog, catなどのクラスを作ってオブジェクト指向の勉強してます.
dogとcatはanimalを継承するよくある例です.
適当にa[]という配列を切って,a[0]はdogのクラスでa[1]はcatのクラスで…
というようにしたいのですが,この配列a[]の型やaのクラスを指定するやり方が
分かりません.
最終的にはa[i].barkというようなことをやりたいです.
よくある質問だと思うのですが,適切な検索ワードが分からず困っています.
どうやったら良いかor適切なキーワードを教えてください.
- 226 :デフォルトの名無しさん:2019/08/20(火) 13:45:18.40 ID:XxGMpj+X.net
- animalの配列にdog, catをアップキャストしてぶち込む
animal, dog, catのunionを作り、そのunionの配列を作る
- 227 :デフォルトの名無しさん:2019/08/20(火) 13:52:03.45 ID:XxGMpj+X.net
- 2つ目は違ったから忘れてくれ
- 228 :デフォルトの名無しさん:2019/08/20(火) 13:58:30.55 ID:J42ZId0L.net
- >>226
さっぱり分かりませんがありがとうございます.これでgoogle先生に質問できます.
- 229 :さまよえる蟻人間 :2019/08/20(火) 14:40:59.88 ID:UPm4IEm3.net
- ポインタの配列にしてポリモーフィズム。
- 230 :sage:2019/08/20(火) 15:46:52.82 ID:5Gd7p9P4.net
- >>229
こんな感じですか?
push_backでエラーが出てコンパイル出来ませんが…
std::vector<std::unique_ptr<Animal>> a;
a.reserve(2);
a.push_back(std::make_unique<Dog>());
a.push_back(std::make_unique<Cat>());
- 231 :デフォルトの名無しさん:2019/08/20(火) 15:47:51.55 ID:KtaU4TpY.net
- 基底クラスの実体配列じゃ多分無理で
基底クラスのポインタ配列しかないと思うわー
- 232 :225:2019/08/20(火) 16:04:10.66 ID:5Gd7p9P4.net
- ポインタの配列を作ったつもりだったんですが違うんですね....
誰か簡単なコード書いてくれませんか?
- 233 :デフォルトの名無しさん:2019/08/20(火) 16:32:36.95 ID:ixrUSoxU.net
- c++17ならstd::variantが使えそうだけどね。
- 234 :デフォルトの名無しさん:2019/08/20(火) 18:41:29.45 ID:XxGMpj+X.net
- >>232
std::unique_ptrだからうまくいかない
生ポインタにするだけで通る
- 235 :デフォルトの名無しさん:2019/08/20(火) 19:03:13.66 ID:KUiZK6p2.net
- >>230
普通にとおるような
- 236 :デフォルトの名無しさん:2019/08/20(火) 19:04:40.28 ID:KUiZK6p2.net
- https://wandbox.org/permlink/cnOTu7uhuEfon7Nv
- 237 :デフォルトの名無しさん:2019/08/20(火) 19:05:34.46 ID:PwBGX6fG.net
- >>230
VS2019だと問題なくコンパイルできるけど。
Animalをpublic継承していないとかだったりして。
- 238 :デフォルトの名無しさん:2019/08/20(火) 19:54:26.69 ID:vf53Ia55.net
- >>230
> push_backでエラーが出てコンパイル出来ませんが…
なぜエラーメッセージを貼らないの?
- 239 :デフォルトの名無しさん:2019/08/20(火) 20:23:10.77 ID:QkieET4w.net
- つか、エラー貼るまでもないだろ
std::unique_ptr
コイツはmovしかできないから、コンテナに格納できる条件に合わない。
スマートポインタをコンテナに入れたかったらsharedポインタを使う
常識じゃなかったのか
- 240 :デフォルトの名無しさん:2019/08/20(火) 20:36:33.84 ID:rT2paKVb.net
- unique_ptrはコンテナに格納可能という俺の常識とは違うようだな
- 241 :デフォルトの名無しさん:2019/08/20(火) 21:46:43.07 ID:vf53Ia55.net
- >>239
>>235-237でエラーなくコンパイルできるのに何を言ってるんだよw
- 242 :デフォルトの名無しさん:2019/08/20(火) 23:47:14.68 ID:ehCs1rOT.net
- >>239
std::unique_ptrはコンテナに入れられるぞ
std:auto_ptrをコンテナに入れた場合に起きるCOAPという問題は起きないんだぜ
- 243 :230:2019/08/21(水) 20:14:24.97 ID:tFOQQ8LH.net
- 質問者です。すいません。
コンストラクタのエラーでした。
無事コンパイルできました。
ありがとうございました。
- 244 :デフォルトの名無しさん:2019/08/26(月) 16:42:54.84 ID:LypwkFGf.net
- 人の書いたプログラム読んでるですが,#includeとclassの定義の間に入ってるclassの意味が分かりません.
下の例で言うとHogeのところです.
これは何ですか?
#include <string>
class Hoge;
class Foo : public Bar
{
protected:
...
- 245 :デフォルトの名無しさん:2019/08/26(月) 16:47:52.57 ID:goJw/KBc.net
- 前方宣言
- 246 :デフォルトの名無しさん:2019/08/26(月) 17:01:32.76 ID:LypwkFGf.net
- ありがとうございます.ググって勉強しまう.
- 247 :デフォルトの名無しさん:2019/08/26(月) 19:18:54.68 ID:YVFaeJ51.net
- class TA{
static public int a;
}
があって、
int b = TA::a ;
のようにするのと、
TA A;
int b = A.a;
のようにするのは、bに読み込む速度は違うんですかね。
- 248 :さまよえる蟻人間 :2019/08/26(月) 19:30:09.75 ID:doK8kIo2.net
- >>247
後者はAの実体を作るから遅いかも。まあ多分、最適化で変わらないと思う。
- 249 :デフォルトの名無しさん:2019/09/08(日) 17:10:16.42 ID:eAq/jxOF.net
- wavファイルなどの外部の別ファイルを読み込んで使いたいのですが、どのようにやればいいのでしょうか…?
バイナリデータにして読み込む、みたいな方法を見かけたのですがファイルのサイズが大きすぎるとヒープの領域を使い果たしました的なエラーが出てしまって行き詰まっています
- 250 :デフォルトの名無しさん:2019/09/08(日) 17:38:17.62 ID:46Wp6heU.net
- mallocを使う
まずは音ではなく画像、bmp読み込みから練習する
数百MBの音声ファイルよか数MBのbmp画像読み込みの方が気がラク
- 251 :デフォルトの名無しさん:2019/09/08(日) 19:18:59.59 ID:MtO5EQx1.net
- >>249
一度に全データを読み込むのでなく、固定サイズのバッファに、必要な分だけ少しずつ読み込めばいい。
読み込み済みデータを再生するスレッドとは別に、もう一つのスレッドで再生にあわせてデータを先読みで読み込んでいけばいい。途切れなく再生するにはリングバッファとかを使う。
- 252 :デフォルトの名無しさん:2019/09/08(日) 21:28:55.65 ID:eAq/jxOF.net
- malloc・リングバッファ、詳しく調べて挑戦してみようと思います!
あとスレッドの概念もちゃんと理解できてない気がするのでそこも勉強しようと思います。
ありがとうございます!
- 253 :デフォルトの名無しさん:2019/09/09(月) 10:46:06.36 ID:QoBVzNSJ.net
- >ファイルのサイズが大きすぎると
積んでるメモリぐらいでかいファイルなのかな?
どういった読み込みで失敗してるんだろう?
- 254 :デフォルトの名無しさん:2019/09/09(月) 10:54:14.51 ID:MF4WMKe5.net
- > ヒープの領域を使い果たしました的なエラー
これからまず連想したのは、VCで巨大ファイルをリソース化しようとしたときに出るコンパイルエラーだな
どのタイミングで出たエラーか書いてないからわからんけど
- 255 :デフォルトの名無しさん:2019/09/09(月) 11:17:30.78 ID:QoBVzNSJ.net
- 実行ファイル中にリソースとして埋め込み
リソースからバイナリ列を引き出して(読み出して)
再生コードに渡す
音声を実行ファイルに埋め込みたかったのかな?
- 256 :249:2019/09/09(月) 13:17:02.59 ID:4LFzbPos.net
- もう少し詳しく書くと、とあるプラグインを作りたくて、それ用のプロジェクトファイルのジェネレーターとVisual studio 2019 を使っています。
そのジェネレーターを通してwavファイルをバイナリデータ化しているのですが、wavファイルのサイズが一定以上になると「error C1060 ヒープの領域を使い果たしました」っていうエラーが出てビルドが通らない状態です。
10MBぐらいのwavファイルだと普通に通って、18MBぐらいになるとエラーが出ます。
- 257 :デフォルトの名無しさん:2019/09/09(月) 13:19:41.05 ID:By40c52C.net
- ソース貼れ
- 258 :デフォルトの名無しさん:2019/09/09(月) 13:27:07.20 ID:8EKyQA8Q.net
- 企業秘密な秘伝のタレかもしれません
- 259 :デフォルトの名無しさん:2019/09/09(月) 13:27:52.11 ID:FLVXg6p/.net
- タレこめ
- 260 :デフォルトの名無しさん:2019/09/09(月) 14:06:32.05 ID:QoBVzNSJ.net
- プラグイン本体にバイナリデータ埋めまず、エンドユーザーにはプラグインと音声ファイルを配布
音声ファイルのパスだけうまく帳尻あわせてファイル開いて、メモリ確保して、ファイル読んで、etc
って設計するかな
- 261 :デフォルトの名無しさん:2019/09/09(月) 15:35:47.49 ID:4OXc+RTk.net
- >>256
そのジェネレータとやらがエラー吐いたという話ならスレ違いだろう。
- 262 :デフォルトの名無しさん:2019/09/09(月) 16:07:02.52 ID:aCapJVZa.net
- >>256
その秘伝のジェネレーターとやらがどんなコード吐いてるのか見当もつかないがとりあえず
https://docs.microsoft.com/en-us/cpp/error-messages/compiler-errors-1/fatal-error-c1060?view=vs-2019
の対策を片っ端からやればいいんじゃね?
- 263 :デフォルトの名無しさん:2019/09/12(木) 12:49:41.16 ID:J5GPib5U.net
- スレチのような気もするんですが,ここが一番適切な回答がありそうなんで,質問させて下さい.
iPadでc++のコード(複数のファイルでつくられている)を読みたいんですが便利なビューワーありますか?
関数名やクラス名クリックしたら定義してるところまでジャンプしてくれるようなやつを探してます.
emacsで言うetagsみたいな機能のことです.
- 264 :デフォルトの名無しさん:2019/09/12(木) 13:17:15.41 ID:FruSebPm.net
- 「ipad emacs」 でぐぐったら iPad用の emacs そのものがあるようだけど
- 265 :263:2019/09/12(木) 13:56:43.03 ID:Ng4JTS7f.net
- >>264
後出しですいません.キーボードは使わないのでemacsはないです.あと,iPadのemacsはけっこうがっかりだった記憶が….
タッチでジャンプできると嬉しいのですが….
便利そうなエディタは何個かあるみたいなんですが,ジャンプ機能がないんですよね.
- 266 :225:2019/09/17(火) 22:40:09.17 ID:iQJ8U52u.net
- 以前 >>225 で質問させてもらったものです。
>>230 で書いたようなプログラムを作ってるんですが、
DogやCatだけでループを回したいんですがどうしたら良いですか?
Dogだけの配列とCatだけの配列作ってから、Animalのポインタでそれらの配列を
参照すれば出来るのかなと思ってるんですが、考え方はあってますか?
- 267 :デフォルトの名無しさん:2019/09/17(火) 22:42:37.60 ID:cgXPZZnO.net
- MZうyちゃーーーん♪こんなとこにいたのかw
- 268 :蟻人間 :2019/09/17(火) 22:52:04.49 ID:vrvr50SL.net
- >>266
ポリモーフィズムがうまくできていればAnimalのポインタの配列にDogやCatのポインタを突っ込めるはず。
- 269 :デフォルトの名無しさん:2019/09/17(火) 22:54:48.57 ID:cgXPZZnO.net
- >>268
んでサウンドは使えるようになったか?w
- 270 :デフォルトの名無しさん:2019/09/17(火) 23:00:14.32 ID:iQJ8U52u.net
- >>268
ポインタ突っ込む方法を具体的に教えてくれませんか?
ポインタがよく分からないです…。
- 271 :蟻人間 :2019/09/17(火) 23:04:06.26 ID:vrvr50SL.net
- Animal *array[10] = {NULL};
array[0] = new Cat(2, 3);
array[0]->walk();
delete array[0];
- 272 :デフォルトの名無しさん:2019/09/17(火) 23:08:52.42 ID:4Zel//hf.net
- >>270
一旦オブジェクト指向のことは忘れてポインタを先にしっかり学んできた方が近道かもよ。ここで小さなサンプル教えてもらって真似しても近い将来嵌まって行き詰まりそう。
オブジェクト指向の勉強が目的なら他の言語で始めた方が余計なところで躓かないと思う。
- 273 :デフォルトの名無しさん:2019/09/17(火) 23:08:55.80 ID:cgXPZZnO.net
- DIM MZUY(0)
- 274 :デフォルトの名無しさん:2019/09/17(火) 23:10:14.52 ID:cgXPZZnO.net
- >>272
MZうyちゃーーーん♪はBASICで充分w
- 275 :デフォルトの名無しさん:2019/09/17(火) 23:12:50.50 ID:iQJ8U52u.net
- DogやCatのインスタンスも複数あって、
Dog だけでループとかCatだけでループとかしたいんです。
animalだけでループするなら書いていただいたので良さそうなんですが。
- 276 :蟻人間 :2019/09/17(火) 23:15:14.33 ID:vrvr50SL.net
- >>275
目標の設定と要件定義が先
- 277 :デフォルトの名無しさん:2019/09/17(火) 23:18:18.48 ID:f5N3Fp86.net
- 目標の設定と要件定義が先だってよ(ゲラゲラ
- 278 :デフォルトの名無しさん:2019/09/17(火) 23:19:18.73 ID:Ps8IF7R/.net
- DogやCatに自身のタイプを返す機能をつけるか、typeidを使ってループをフィルタすればいい
- 279 :蟻人間 :2019/09/17(火) 23:20:21.52 ID:vrvr50SL.net
- dynamic_castでダウンキャスト失敗すればNULLが買える。一個800円。
- 280 :デフォルトの名無しさん:2019/09/17(火) 23:20:27.62 ID:f5N3Fp86.net
- それで完成品は100年後か?
- 281 :デフォルトの名無しさん:2019/09/17(火) 23:20:52.26 ID:iQJ8U52u.net
- 初心者スレだし、解答欲しいです。
- 282 :デフォルトの名無しさん:2019/09/17(火) 23:21:58.70 ID:f5N3Fp86.net
- バカのうんちくは回しコピペと同じw
- 283 :デフォルトの名無しさん:2019/09/17(火) 23:22:25.46 ID:iQJ8U52u.net
- >>278
何言ってるか不明ですがキーワードありがとうございます。
とりあえずググります。
- 284 :デフォルトの名無しさん:2019/09/17(火) 23:23:03.14 ID:Ps8IF7R/.net
- for(auto a : animals){
if(typeid(a) == typeid(Dog*){
}
}
- 285 :デフォルトの名無しさん:2019/09/17(火) 23:23:37.07 ID:f5N3Fp86.net
- |
|
|
|
|
|
|
|
|
|
- 286 :蟻人間 :2019/09/17(火) 23:24:00.17 ID:vrvr50SL.net
- dynamic_cast<Cat>(array[0]) == NULLだったらarray[0]はネコではない
- 287 :デフォルトの名無しさん:2019/09/17(火) 23:24:31.61 ID:f5N3Fp86.net
- || ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄||
||. =ねらー三原則= ||
|| 1.助けない ||
|| 2.教えない 。 ∧_∧ いいですね。
|| 3.関わらない\ (゚Д゚,,)
||________⊂⊂ |
∧ ∧ ∧ ∧ ∧ ∧ | ̄ ̄ ̄ ̄|
( ∧ ∧ ( ∧ ∧ ( ∧ ∧ | |
〜(_( ∧ ∧ __( ∧ ∧__( ∧ ∧ ̄ ̄ ̄
〜(_( ∧ ∧_( ∧ ∧_( ∧ ∧ は〜い、先生。
〜(_( ,,)〜(_( ,,)〜(_( ,,)
〜(___ノ 〜(___ノ 〜(___ノ
- 288 :蟻人間 :2019/09/17(火) 23:24:40.10 ID:vrvr50SL.net
- dynamic_cast<Cat*>(array[0]) == NULLだったらarray[0]はネコではない
- 289 :デフォルトの名無しさん:2019/09/17(火) 23:27:47.60 ID:iQJ8U52u.net
- >>284
理解しました。
そのif文つかうとOpenMP使うときにロードが均等に分散されないので、
dogだけの配列欲しいですね。
- 290 :デフォルトの名無しさん:2019/09/17(火) 23:41:03.11 ID:4Zel//hf.net
- >>289
それなら条件に該当するエントリのポインタを抜き出した配列を作ってループすればいいんじゃないか?
ループ内の処理が並列化する価値があるくらいコストかかるなら、ポインタを抽出してコピーするコストは無視できるかと思われる。
- 291 :デフォルトの名無しさん:2019/09/18(水) 00:08:00.90 ID:yNiXaOMn.net
- >>290
ありがとうございます。
それやってみます。
- 292 :デフォルトの名無しさん:2019/09/18(水) 12:06:57.92 ID:L8SHYgAR.net
- >>266
C#スレでマルチしてないかお前
- 293 :デフォルトの名無しさん:2019/09/18(水) 20:26:23.65 ID:yNiXaOMn.net
- >>292
してないやでー
- 294 :デフォルトの名無しさん:2019/09/22(日) 11:43:54.30 ID:LQCFANDg.net
- > Animal *array[10] = {NULL};
20年以上前に配列要素を一つ以上書かないといけない処理系があったな
タイムスリップでもしてきたか
- 295 :デフォルトの名無しさん:2019/09/22(日) 11:53:00.80 ID:y42gsAly.net
- Animal *array[10] = {p0, p1, p2};
だとすると
array[0] 〜 array[2] は p0〜p2 になるが
array[3] 以降は全部 NULL で FA?
- 296 :デフォルトの名無しさん:2019/09/22(日) 16:44:01.11 ID:dRs63Jnx.net
- >>295
引数の無いコンストラクター呼ばれる
- 297 :デフォルトの名無しさん:2019/09/22(日) 16:45:05.27 ID:zrmuC8G0.net
- char *array[10] = {p0, p1, p2};
だとすると
array[0] 〜 array[2] は p0〜p2 になるが
array[3] 以降は全部 NULL で FA?
- 298 :デフォルトの名無しさん:2019/09/22(日) 17:27:15.07 ID:kTa1SMwh.net
- >>296
ポインタだぞ?
- 299 :デフォルトの名無しさん:2019/09/22(日) 18:52:04.08 ID:9/tlWbjv.net
- >>294
Cだと今でもダメだから、それ見たんじゃないの?
- 300 :デフォルトの名無しさん:2019/09/22(日) 19:39:28.11 ID:KmeF3kAh.net
- >>298
ポンタってローソンのカード?
- 301 :デフォルトの名無しさん:2019/10/01(火) 17:46:09.39 ID:yQHk6Pyq.net
- Windows の普通のソフトのインストーラは Program Files 以下に適当なフォルダを作ってそこにファイルをまとめて入れるけど、
コマンドラインアプリの場合ってどうしてる?
GUI アプリと同じようにフォルダに突っ込んで環境変数 PATH を設定するってのが標準的なやり方だと思うけど、
そういうのが増えてくると PATH が長大になって嫌な感じなので、なんかうまい方法ってないもんかな?
C/C++ とは直接の関係がなくてスマソ。 どのスレがベストかわからんかったもんで。
- 302 :デフォルトの名無しさん:2019/10/01(火) 19:01:46.51 ID:HsilaFth.net
- 環境変数なんて入れずに叩くときにフルパス入れりゃいいだけでは?
- 303 :デフォルトの名無しさん:2019/10/01(火) 19:48:41.05 ID:yQHk6Pyq.net
- >>302
フルパスを前提にすると連携しづらい場合が出てくるんよ。
「このバッチファイルを実行するにはこのソフトとこのソフトを入れてね!」
みたいなことをやろうとすると、想定してたのと違うフォルダにインストールしてるだけで破綻してしまう。
32bit のアプリケーションって 32bit 版の Windows だと Program Files に入るけど
64bit 版の Windows だと Program Files (x86) 入るようにするのが基本的な作法じゃん?
それだけでも違ってしまうけど
システムドライブとは違うドライブにアプリケーションをインストールしたりする運用をやってる人は意外にいるので、
インストール先を選択させずに固定するってのも縛りが強いかなぁと思うし。
どこにインストールしてでも同じように使えるようにするには PATH くらいしか選択肢がなくなる。
でも嫌。 っていう話。
- 304 :デフォルトの名無しさん:2019/10/01(火) 20:00:47.20 ID:gawiB1ps.net
- 20年以上前からある問題だな
Windowsではその辺は未だにグダグダだと認識している
- 305 :デフォルトの名無しさん:2019/10/01(火) 22:13:00.30 ID:sghBprd5.net
- >>303
設定でその外部アプリへのパス指定できるようにすれば?
インストール先固定、環境変数追加、レジストリ追加よりユーザーに指定させるほうが個人的には好き
というかこの三種のような方法をとるアプリはそもそもインストールを躊躇する
- 306 :デフォルトの名無しさん:2019/10/01(火) 23:27:11.07 ID:D6lr/hhZ.net
- コマンドラインアプリでコンソールから起動 バッチファイルから呼び出し etc
実行ファイルの検索順位に依存しまくるからにゃぁ
- 307 :デフォルトの名無しさん:2019/10/01(火) 23:54:08.52 ID:yQHk6Pyq.net
- app paths をコマンドラインでも適用してくれよって思ってる。
- 308 :デフォルトの名無しさん:2019/10/02(水) 12:47:26.92 ID:55+aQRnY.net
- >>301 >>303
C:\bin
- 309 :デフォルトの名無しさん:2019/10/02(水) 12:49:56.03 ID:55+aQRnY.net
- > 32bit のアプリケーションって 32bit 版の Windows だと Program Files に入るけど
> 64bit 版の Windows だと Program Files (x86) 入るようにするのが基本的な作法じゃん?
> それだけでも違ってしまうけど
違わない
32bitアプリケーションからは
Program Filesしか見えない
実際はProgram Files (x86)をアクセスしてる訳だが
そんなことは32bitアプリケーション側は知らなくて良いし知らない方が良い
- 310 :デフォルトの名無しさん:2019/10/16(Wed) 18:22:59 ID:imXCztCz.net
- class A{
public:
B b
}
class B{
…
}
の時、Aのコンストラクタなどで b = new B; とすると、
このbはAのクラス内で使えますが、Aのデストラクタが走る時に、
bも一緒に消えるのでしょうか。
それとも別途に delete b が必要なのでしょうか。
- 311 ::2019/10/16(Wed) 18:24:40 ID:uv22jov9.net
- Aのデストラクタにdelete bを書く
- 312 :デフォルトの名無しさん:2019/10/16(Wed) 18:27:03 ID:imXCztCz.net
- 一緒に消えないのですか。どうもありがとうございました。
- 313 ::2019/10/16(Wed) 18:36:34 ID:d1R3XcHH.net
- >>310-312
A のコンストラクタ内で例外が送出されると delete b が実行されない可能性があるのでなるべくならスマートポインタを使うのが望ましいし楽。
- 314 ::2019/10/16(Wed) 18:43:49 ID:6mvmnwRf.net
- B b; と定義したなら、b = new B;が不要で、Aのデストラクタ実行時にbも一緒に消える。
B* b; と定義したなら >>311 だが、わざわざポインタで定義するのは
コピーコンストラクタ等々自前で定義しなきゃならんのでお勧めしない。
スマポならAのデストラクタ実行時にbも一緒に消えるけど、
shared_ptrはコピー時に共有されてしまうし、unique_ptrはコピーできなくなる。
- 315 :310:2019/10/16(Wed) 18:53:13 ID:imXCztCz.net
- なるほど。B* bで書いたつもりが間違ってました。
しかしA内でbを使い回すなら、B b の方が良さそうですね。
どうもありがとうございました。
- 316 :蟻人間 :2019/10/22(火) 20:10:13.74 ID:+0Lq2R8m.net
- C++相談室 part145
https://mevius.5ch.net/test/read.cgi/tech/1568362404/
から移住しました。
YappyCamという録画ソフトを作っています。
https://github.com/katahiromz/YappyCam
よろしくお願いします。
- 317 :デフォルトの名無しさん:2019/10/23(水) 00:02:04.30 ID:FSIo0WLO.net
- 多分スレチな話題だけど
高速化目的で固定小数点数クラス作って満足してた所に、コンパイラの設定で浮動小数点モデルをfastにしたら何倍も速度差つけられたんだが
どういう原理でそうなるのかわからない 調べても中々資料出てこないし
誰か教えて下しい
- 318 :はちみつ餃子 :2019/10/23(水) 01:44:13.82 ID:GER+FSVM.net
- >>317
現代では浮動小数点はハードウェア (CPU) のサポートがあるので丸め方の一貫性とか捨ててめいっぱいに CPU の機能を利用したら速いよ。
- 319 :蟻人間 :2019/10/23(水) 02:19:12.55 ID:DFr4VJRt.net
- 昔、インテルの一部のCPUにfloating pointの処理に不具合があって、それで高い精度が求められるプログラムでは、ソフトで対応できるようなコンパイラが作られたらしい(要出展?)。
- 320 :蟻人間 :2019/10/23(水) 02:24:10.56 ID:DFr4VJRt.net
- これだ。
https://ja.m.wikipedia.org/wiki/Pentium_FDIV_%E3%83%90%E3%82%B0
- 321 :デフォルトの名無しさん:2019/10/23(水) 07:13:23.64 ID:chxy1JWV.net
- ARMのEABIとは逆方向の流れだな
- 322 :デフォルトの名無しさん:2019/10/23(水) 09:00:32.48 ID:FSIo0WLO.net
- >>318-320
thx!
- 323 :蟻人間 :2019/10/23(水) 12:36:36.18 ID:bxABcYeD.net
- 記憶媒体の性能を計測してみた。
https://github.com/katahiromz/YappyCam/blob/master/tests/diskrate/diskrate.cpp
SSDでデータを取得。
https://twitter.com/katahiromz/status/1186558848393285633
HDDでデータ取得。
https://twitter.com/katahiromz/status/1186848186737905664
(deleted an unsolicited ad)
- 324 :蟻人間 :2019/10/23(水) 13:01:09.43 ID:bxABcYeD.net
- SSDは早い。400MB/sec近い。
HDDは遅い。100MB/secくらい。
音声に加えて画像も出力することを考慮すると、音声出力の実際の性能は50MB/sec以下だろう。
音声を最高の品質にすると、10msecごとに音声データがおよそ3900バイトあるようだ。1秒では390000バイト、390KB/secになる。余裕のよっちゃんだ。
- 325 :蟻人間 :2019/10/23(水) 13:08:27.27 ID:DFr4VJRt.net
- 記憶媒体やOSはときどきフリーズすることがある。0.5秒フリーズしても耐えられるようにするには、390KB*0.5==195KB。
少なくともこれだけのバッファが必要になる。余裕を持って事前にリングバッファ400KBを用意することにする。
- 326 :蟻人間 :2019/10/23(水) 13:12:48.38 ID:DFr4VJRt.net
- 一度にファイルに書き込むデータは100KBにする。このデータ量は小さすぎても性能が下がるし、大きすぎると流れが止まってしまう。
- 327 :蟻人間 :2019/10/23(水) 13:25:45.62 ID:bxABcYeD.net
- アプリ起動時に音声消費スレッドを起動する。イベントハンドルで音声データが車で待つ。イベントが来たら、音声データを少しずつファイルに吐き出して、消費する。全部消費したら再びイベントを待つ。これの繰り返し。
- 328 :蟻人間 :2019/10/23(水) 13:37:23.16 ID:bxABcYeD.net
- (間違いがあったら指摘してね、よろぴく)
- 329 :デフォルトの名無しさん:2019/10/23(水) 14:54:53.56 ID:JzA6/vMp.net
- 引っ越したんなら質問も引っ越せよ
- 330 :デフォルトの名無しさん:2019/10/23(水) 15:27:52.17 ID:dG0kuu8/.net
- >>328
ここはお前のメモ帳ではなく掲示板だ
- 331 :蟻人間 :2019/10/24(木) 20:49:36.30 ID:hL+vNXS/.net
- 長く録画してると、画像と音声のタイミングがずれる。
WM_TIMERのせいか?
- 332 :蟻人間 :2019/10/24(木) 21:21:54.34 ID:ZzyW2UAB.net
- WM_TIMERの精度が低いから音ずれが起きている。
QPCと別スレッドで書き直し。
- 333 :蟻人間 :2019/10/24(木) 22:15:20.99 ID:hL+vNXS/.net
- std::chrono使ってみるか。
- 334 :デフォルトの名無しさん:2019/10/24(木) 22:48:01.86 ID:se7EzpzH.net
- 何のタイミングを作ろうとしてる?
リアルタイムに録画したデータをストレージに保存するんだよね?
- 335 :蟻人間 :2019/10/24(木) 23:08:40.74 ID:ZzyW2UAB.net
- スクリーンショットを定期的に撮るタイミングだよ。
- 336 :蟻人間 :2019/10/24(木) 23:14:06.35 ID:ZzyW2UAB.net
- どうもタイミングの累積誤差があって、ゲームのWinDepthで試すと動画では音が遅れるみたいなんだ。
- 337 :デフォルトの名無しさん:2019/10/24(木) 23:17:05.32 ID:se7EzpzH.net
- 録画した後、それを再生するとずれていくといこと?
それとも狙った時間でスクショをキャプチャできないという意味?
- 338 :デフォルトの名無しさん:2019/10/25(金) 09:14:50.02 ID:cKRHja93.net
- >>336
WindowsMediaPlayer起動しながらやってみたらどうなる?
- 339 :蟻人間 :2019/10/25(金) 13:15:44.76 ID:OgTxIR48.net
- Visual Studio 2017だと音ズレはなくなった。
MSYS2のデバッグバージョンでは少しずつ音がずれる。
WinDepth のSTAGE 2にいくと0.5秒ほどずれる。
- 340 :蟻人間 :2019/10/25(金) 13:28:08.21 ID:OgTxIR48.net
- MSYS2のリリースバージョンでも音ズレなくなった。
ありがとうございます。
https://github.com/katahiromz/YappyCam/blob/master/YappyCam.cpp#L75
これがPictureConsumerThreadProc (映像消費スレッド)。
https://github.com/katahiromz/YappyCam/blob/master/YappyCam.cpp#L158
これがPictureProducerThreadProc (映像生成スレッド)。
次はパフォーマンスを出来る限り高めないといけない。
- 341 :蟻人間 :2019/10/25(金) 14:06:51.29 ID:OgTxIR48.net
- CreateThreadはCRTと一緒に使っちゃいけないらしいから、_beginthreadexで書き直しだ。
- 342 :蟻人間 :2019/10/25(金) 16:19:18.72 ID:OgTxIR48.net
- https://twitter.com/katahiromz/status/1187629168042708992
画面切り替え(フルスクリーンゲーム)のときにSegmentation faultが発生する。。。
まずいぞまずいぞ。。。
(deleted an unsolicited ad)
- 343 :蟻人間 :2019/10/25(金) 16:30:53.82 ID:OgTxIR48.net
- https://twitter.com/katahiromz/status/1187632297601716225
これ見て原因わかりますか?
(deleted an unsolicited ad)
- 344 :蟻人間 :2019/10/25(金) 17:01:41.65 ID:OgTxIR48.net
- PT_SCREENCAPにBITMAPチェックを入れたら直った。
画面にごみが残るのはどうにかならないかなあ?
- 345 :蟻人間 :2019/10/25(金) 18:50:20.70 ID:VkouAEbH.net
- フレーム落ちはしてないから、性能の問題ではない。たぶんフレームと音声のタイミングの違いだろう。音声の方が長い場合は音声を削ることも検討する。
- 346 :デフォルトの名無しさん:2019/10/25(金) 18:53:10.78 ID:cKRHja93.net
- >>338はどうなんよ?
- 347 :蟻人間 :2019/10/25(金) 19:06:40.11 ID:OgTxIR48.net
- >>346
なんか意味あるの?
当たり前だが、フレームレートに枚数をかけ算すると、動画の時間が求まる。これを音声の長さと比較して音声が長ければ音声の先頭を削除。これでいってみるか。
- 348 :デフォルトの名無しさん:2019/10/25(金) 19:36:22.67 ID:q8W1xqeq.net
- あらかじめMediaPlayerを起動しておくと
あら不思議なぜか動作が軽い
っていうのは昔から有名な検証方法の一つ
- 349 :デフォルトの名無しさん:2019/10/25(金) 20:00:49.22 ID:VxINcxQ3.net
- スレチのキチガイを飼い慣らすのは止めてください
- 350 :デフォルトの名無しさん:2019/10/25(金) 20:38:50.75 ID:StYWqeWG.net
- どうせ過疎スレ
- 351 :デフォルトの名無しさん:2019/10/25(金) 22:23:03.54 ID:MULKQLsl.net
- >>347
Windowsのタイマーはmsecのオーダーは出ない(Linuxもだ)
それしかビデオのタイミング作る手段がないならタイムスタンプ管理すべきだ
またPCではそもそもハードウェア的にビデオとオーディオは同期してる保証がない
その前提を踏まえてつくる必要がある
オーディオもビデオもキャプチャしたタイミングでタイムスタンプを取得して同様にファイルに保存する
再生するときにそのタイムスタンプを比較してビデオが±0.5フレームずれてきたら
フレームをスキップかリピートして調整する
オーディオを基準に考えるのがポイントだ
最後にWindows10では画面録画は標準機能だ
- 352 :デフォルトの名無しさん:2019/10/25(金) 22:35:35.48 ID:cKRHja93.net
- >>347
とりあえずやってみたらいいのに
- 353 :蟻人間 :2019/10/25(金) 22:50:25.82 ID:OgTxIR48.net
- >>351
核心情報キタ―――(゚∀゚)―――― !!
ありがとうございます。
- 354 :デフォルトの名無しさん:2019/10/25(金) 22:56:14.57 ID:APY4ctz9.net
- timeBeginPeriod使えで済む話だろう
- 355 :蟻人間 :2019/10/26(土) 11:07:21.59 ID:Q5f3+aYX.net
- YappyCam 0.9をリリースしました。
https://katahiromz.web.fc2.com/yappycam/ja
- パフォーマンスの改善。
- 音ズレを修正。
- 356 :蟻人間 :2019/10/26(土) 14:53:06.64 ID:Q5f3+aYX.net
- これで終わり、、、じゃないよ。
プラグインで時刻表示と猫耳ができるまで終わらないぞ。
- 357 :デフォルトの名無しさん:2019/10/26(土) 15:23:17.18 ID:a/Ne+y1n.net
- 蟻人間のらくがき帳になってしまった
- 358 :蟻人間 :2019/10/26(土) 15:30:57.98 ID:Q5f3+aYX.net
- プラグインを実装するには自作のPluginFrameworkを参考にする。
これもC++/Win32で書かれている。
PluginFramework
https://github.com/katahiromz/PluginFramework
拡張子は.yapでいいだろう。拡張子こそ違うが、プラグインファイルの中身はDLLファイルと同じ。LoadLibraryで読み込めるはずだ。
- 359 :蟻人間 :2019/10/26(土) 17:16:55.73 ID:Q5f3+aYX.net
- >>354
ありがとうございます。
- 360 :デフォルトの名無しさん:2019/10/26(土) 22:31:16.45 ID:Gui6HX0l.net
- クラスの中の処理を別のプロセスのプログラムに行わせたいんですけどどのような方法があるでしょうか
64bit環境のプログラムにインターフェースのみを提供するクラスがあって、中の処理を32bitのプログラムに行わせたいです
クラスは状態を保持する必要があるので呼び出す度にプログラムを実行することはできません
- 361 :デフォルトの名無しさん:2019/10/26(土) 22:31:33.65 ID:Gui6HX0l.net
- windows環境です
- 362 :デフォルトの名無しさん:2019/10/26(土) 22:38:25.84 ID:SyjizfQh.net
- まずお前が何を試してどうだったか書いて
- 363 :蟻人間 :2019/10/26(土) 22:42:34.07 ID:Q5f3+aYX.net
- >>360
プロセス間通信
- 364 :デフォルトの名無しさん:2019/10/26(土) 22:44:08.74 ID:w/PE+z55.net
- >>363
呼び出される側のプログラムはどのように待機するべきですか?
- 365 :デフォルトの名無しさん:2019/10/26(土) 23:34:00.80 ID:fKw1xQJ9.net
- dllインジェクションの話?
- 366 :蟻人間 :2019/10/26(土) 23:43:30.80 ID:0HLEEd3+.net
- コマンドライン引数経由でファイルマッピングハンドルの値を受け取る、もしくはPostMessageでハンドルの値を受け取る。
クリップボードを使ってもいいし、ファイルを経由してもいい。
- 367 :蟻人間 :2019/10/26(土) 23:44:43.73 ID:0HLEEd3+.net
- WM_COPYDATAは生のデータを送信できる。
- 368 :デフォルトの名無しさん:2019/10/27(日) 17:20:04.24 ID:IkTaChA0.net
- 自由に変更できるならsocket使ってTCP(UDP)portで待機
- 369 :デフォルトの名無しさん:2019/10/27(日) 17:20:36.84 ID:IkTaChA0.net
- ANTさんはNimやってない訳?
- 370 :蟻人間 :2019/10/27(日) 17:28:47.53 ID:irXhIBVc.net
- >>370
古くて枯れた技術を触っているから、マイナーな言語は使ってない。
- 371 :蟻人間 :2019/10/27(日) 19:33:52.69 ID:irXhIBVc.net
- 最近はRustとElixirがブームらしいが、私は相変わらずC++。
- 372 :蟻人間 :2019/10/27(日) 22:03:41.19 ID:cNZwDfUU.net
- カメラアプリのプラグインを設計しないといけない。要件定義から。
OpenCVのcv::Matを受け取り、何らかの画像処理をする。今考えているのはフィルタープラグインと監視役プラグイン。
時刻表示フィルターと猫耳フィルターは必ず実装する。監視役は、何かが発生したら、管理者権限で保護されたコマンド列(Command*.bat)を実行する。
フィルターは処理の順序が大事だから、プラグインを順序付けしないといけない。
プラグインは自作のPluginFrameworkをチューニングして使用する。
- 373 :蟻人間 :2019/10/27(日) 22:11:26.78 ID:cNZwDfUU.net
- 読み込んだプラグインは有効か無効かを選べる。プラグインの順序も変えられる。そこでプラグインを管理するダイアログが必要だ。
そのダイアログはメインメニューからアクセスできる。ダイアログからプラグインの名前やバージョン情報にアクセスできるようにリストビューを使用する。
読み込んだ全てのプラグインが有効であるとは限らない。有効なプラグインは、プラグインを表す文字列のリストで記録する。高速にアクセスするためにさらにプラグインのインデックスのリストを使用する。
- 374 :蟻人間 :2019/10/27(日) 22:34:37.57 ID:cNZwDfUU.net
- 順序の変更には上・下ボタンを使用する。
有効・無効の切り替えはリストビューのチェックボックスを使用する。
時刻表示にはcv::putTextを使用する。
拡張子は.yapで決まり。exeと同じ場所に置く。
- 375 :蟻人間 :2019/10/31(木) 20:42:35.84 ID:ssZYzg5C.net
- YappyCamプラグイン実装。
https://github.com/katahiromz/YappyCam
https://github.com/katahiromz/YappyCamPlugins
https://twitter.com/katahiromz/status/1189869665251553280
何か追加してほしいプラグインがあったら教えてね。
(deleted an unsolicited ad)
- 376 :蟻人間 :2019/11/03(日) 12:41:34.03 ID:nr4jSbTs.net
- https://github.com/katahiromz/YappyCam/blob/master/PluginFramework.cpp#L25
ドライバ関数を通じてDLLからEXEの関数にアクセスできる。凄いだろ?
- 377 :デフォルトの名無しさん:2019/11/11(月) 09:09:46.18 ID:TRmuSqs3.net
- 完全初心者です
苦しんで覚えるC言語という初心者サイトを終わらせたら
次になにかおすすめサイトor本をやるべきなどありますか?
とりあえず義務教育に組み込まれるということで
何か作れるという体験をしてみたいのですが
- 378 :デフォルトの名無しさん:2019/11/11(月) 09:12:12.48 ID:lxCWwdCX.net
- 作れ
どの言語でもそれが最短かそれに近い高効率
- 379 :デフォルトの名無しさん:2019/11/11(月) 12:29:24.77 ID:bjD92kdR.net
- Rust, Elixir は、小さめのサイズの本が出たから、簡単に読める。
その代わり、情報は少ない
Rustプログラミング入門、酒井 和哉、2019/10/13
小さめのサイズの本で、初心者向け。
簡単すぎるから、たぶん、かなり情報が少なそうw
プログラミングElixir、2016
著者は「プログラミングRuby」のDave Thomas
Elixir = Ruby + Rails + Erlang VM
Elixir は関数型言語で、状態を持たず、並行処理が得意
Elixir で並列に動く、小プロセスはデータを共有しない。
10万の小プロセスを、0.6秒で起動できて、すべてのCPUコアを使いつくす
これで、スレッドと状態を持つ地獄から、おさらば!
- 380 :デフォルトの名無しさん:2019/11/11(月) 12:32:20.68 ID:2oMqNNOD.net
- >並行処理が得意
そんなもん今どきの言語なら皆そうなんだが?
いい加減スレ違いの書き込みはやめろ
ここはC/C++スレだ
- 381 :デフォルトの名無しさん:2019/11/11(月) 13:44:52.51 ID:dWj5v9Wo.net
- >>377
終わってから考えろ
- 382 :デフォルトの名無しさん:2019/11/11(月) 16:13:50.62 ID:JcIJLOOR.net
- 義務教育を受けてる若者なのか、教える立場の教師なのか、
はたまた我が子の勉強を心配する教育ママか。
とりあえず義務教育でCは使わないと思うよ。
しかし、このスレッドも意外に見てる人がいるのね。
- 383 :デフォルトの名無しさん:2019/11/11(月) 16:30:36.69 ID:nmrg3hQp.net
- 義務教育課程のプログラミング教育はフローチャート書いて終わりだよ
- 384 :デフォルトの名無しさん:2019/11/11(月) 17:08:28.39 ID:rlOgmRK8.net
- それでいいよ
問題を分解して論理立てて解決する力
が必要なのであって構文とかどうでもいい
だから擬似言語でも良いし図だけでもいい
- 385 :デフォルトの名無しさん:2019/11/11(月) 17:12:08.97 ID:dWj5v9Wo.net
- パヨチン教師に論理的思考ωを教えさせるのは無理やろ
- 386 ::2019/11/11(月) 21:00:22.89 ID:br96B5K/.net
- >>385
kwsk
- 387 :デフォルトの名無しさん:2019/11/11(月) 21:28:40.68 ID:+nZ+GxSE.net
- >>377
完全初心者で作ってみるのがまず目標ならscratch辺りが無難じゃないかな?取っつきやすくプログラミングの基本に触れられると思うよ。
初心者がCから始めても作る喜びを見つける前に細かなところで躓きを繰り返して挫折する率が高いと思う。
入門書一冊読んだ時点でその知識を組み合わせてなんか試してみようと自発的に思い付くとか、文字だけの画面で入力した数字を並び替えただけで喜びを感じられるとかなら、向いているとは思うけど。
- 388 :デフォルトの名無しさん:2019/11/12(火) 09:36:03.48 ID:uG6HIbdY.net
- >知識を組み合わせてなんか試してみようと自発的に思い付く
コピペしか出来ないkidsには無理
- 389 :デフォルトの名無しさん:2019/11/12(火) 10:16:48.75 ID:L22oXPxY.net
- 初心者にマウント取るの楽しいー!
- 390 :デフォルトの名無しさん:2019/11/12(火) 11:56:52.41 ID:tiISvNIN.net
- 初心者にマウントとるしか出来ない無自覚kidsには無理
- 391 :デフォルトの名無しさん:2019/11/13(水) 01:32:22.16 ID:hjs0qnAg.net
- >>389,390
救いようのないバカ
- 392 :デフォルトの名無しさん:2019/11/13(水) 08:59:42.98 ID:G4amaIT4.net
- >>391
救いたくもならないバカ
- 393 :デフォルトの名無しさん:2019/11/13(水) 10:20:21.80 ID:OceCV+VL.net
- 馬鹿には無理
- 394 :はちみつ餃子 :2019/11/13(水) 15:20:35.33 ID:B91T1gla.net
- 本格的にやる気はないやつにも最低限の知恵を与える (義務教育) ってのと
学ぶ意欲があって学ぶってのは別物だよ。
- 395 :デフォルトの名無しさん:2019/12/20(金) 17:01:42.60 ID:mI5I/WU7.net
- これからc++に手を出そうという人間に、江添氏の入門サイトもしくはその書籍化本は向いてますか?
いきなりヘッダファイルまとめて、コンパイルオプションに設定してて、たしかに記述減るけどありなのかがよくわかりません
- 396 :デフォルトの名無しさん:2019/12/20(金) 17:32:42.71 ID:VlcbOuJw.net
- これか
https://ezoeryou.github.io/cpp-intro/
別に自由だろ
悪い意味でも良い意味でもC++の自由なところ
- 397 :デフォルトの名無しさん:2019/12/20(金) 17:42:09.99 ID:mI5I/WU7.net
- >>396
ありがとうございます
楽なのは事実だし、そこよりもまずは中身がまともに使えなきゃ無意味でしたね
- 398 :デフォルトの名無しさん:2019/12/20(金) 17:47:54.25 ID:VlcbOuJw.net
- Java で import *;
- 399 :はちみつ餃子 :2019/12/20(金) 18:50:13.84 ID:smtL92ik.net
- >>395
意味がわかってるならやりたいようにやっていいよ。
「プラグラマがやりたいことをさまたげない」という意味のことは D&E に書いてある。
言語仕様としてはさまたげないという意味なのでやった結果がクソになっても自己責任だけど。
そのあたりは言語仕様がどうこうよりも設計の話になるんじゃないかなぁ。
まあまずは言語を理解しないことにはどうにもならんので、
いい感じの作法は後回しでもいいでしょ。
(そういってずっと後回しにし続けるのはよくある話なのでちゃんと計画を立てて学習しような!)
- 400 :デフォルトの名無しさん:2019/12/20(金) 20:36:03.32 ID:PIQAyvT8.net
- はちみつが江添を腐すのは意外だな
- 401 :はちみつ餃子 ◆8X2XSCHEME :2019/12/21(土) 01:13:26 ID:hBrPM7yJ.net
- >>400
俺は >>399 で江添氏による C++ 入門書については何も言ってないよ。
「作法は後回しにして言語 (C++) の入門書を読め」ってだけ。
言語の入門書っていうのは特に限定しないけど、江添氏のでも別にいいんじゃね。
俺は読んだことないから知らんけど。
- 402 :デフォルトの名無しさん:2019/12/21(土) 21:42:45.92 ID:r9u4FEpO.net
- >>401
正にその入門の本探しで迷宮入りしてるところに、江添氏の本を見たので、そういうのもありなのかと思っての質問でした
作法にこだわって肝心な部分を落としてたら意味がない(作法を無視して良いというわけではなく)のは確かなので、本読み手を動かしていきます
アドバイスありがとうございます
- 403 :デフォルトの名無しさん:2019/12/21(土) 21:53:38.39 ID:Pmk2U2LB.net
- 別にそこまで言語文法と作法がバッティングするわけでもないし、両方やったらいいとしか言いようがない。
何を心配してるんだか。
- 404 :デフォルトの名無しさん:2019/12/21(土) 22:06:25.82 ID:/C2Zxfa9.net
- カネの心配だろ
どの本がいいか=どれを買えばいいか だ
- 405 :はちみつ餃子 :2019/12/22(日) 16:56:47.47 ID:0CTeJT4Z.net
- だいたいの作法にはそれなりの理由があるけど、
言語を理解せずに作法を学んでもただそうするということだけが頭に残って教条的になりやすい気がするんだよね。
完璧に言語を理解する必要はないけどほどほどには理解してから作法に入った方が良くない?
- 406 :デフォルトの名無しさん:2019/12/22(日) 17:17:17.16 ID:x1zpVDy3.net
- 質問者は江添の示す作法に疑問を持ってんだからその理屈はおかしい
- 407 :デフォルトの名無しさん:2019/12/22(日) 17:30:35.07 ID:WxFIsXHD.net
- とりあえずこうする!じゃなくて
自分が納得して辿りついた方法はこれ
の方がいいよね
- 408 :はちみつ餃子 :2019/12/22(日) 18:00:49.87 ID:0CTeJT4Z.net
- >>406
あ〜〜そゆことか。 江添本でやってるわけね。
https://ezoeryou.github.io/cpp-intro/#%E3%83%98%E3%83%83%E3%83%80%E3%83%BC%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E7%9C%81%E7%95%A5
その前提をわかってなかった。 すまぬ。
わかってる人からするとこれは説明の便宜のためであって作法を示すものではないことがわかるけど、
入門書の冒頭でやっちゃうのは思い切りが良すぎるな。
- 409 :デフォルトの名無しさん:2019/12/23(月) 12:35:08.34 ID:sEnpgkKc.net
- 禿添を擁護する気は無いが
そもそも他の入門書だって
#include はおまじないとか言って
お茶を濁してるレベルなのを考えれば
(見た目のインパクトは知ってる人が見てそう思うだけで)
初心者には大した違いは無い
- 410 :デフォルトの名無しさん:2019/12/23(月) 17:22:38.49 ID:cv9cp49U.net
- 思い切りがいいのはgotoの説明があるところダゾ
- 411 :デフォルトの名無しさん:2019/12/23(月) 17:31:52.28 ID:7PnpYzan.net
- goto否定は時代遅れ
- 412 :デフォルトの名無しさん:2019/12/23(月) 17:56:04.90 ID:yUC4LEa+.net
- 肯定するもんではない
- 413 :デフォルトの名無しさん:2019/12/23(月) 18:23:13.68 ID:FZMFlrDL.net
- gotoの是非ではなくスパゲッティコードの是非
- 414 :デフォルトの名無しさん:2019/12/23(月) 20:32:41.60 ID:JFzkr+Zj.net
- gotoアレルギーは悪
多様も悪
- 415 :デフォルトの名無しさん:2019/12/23(月) 20:38:42.86 ID:Dm8g2GT6.net
- gotoが悪とか言ってるやつの脳は
武器があるから戦争がおこるんだ!
っていうパヨク脳と同じ構造
- 416 :デフォルトの名無しさん:2019/12/23(月) 21:29:45.76 ID:kZpvALBe.net
- >>413
スパゲッティは困るのが本人限定でない限りは非でいいだろう。問題はgotoのどんな使い方までがスパゲッティにならないかだけど合意を得られる共通認識はないから、組織のルールに合わせるくらいしかないかも。
- 417 :デフォルトの名無しさん:2019/12/23(月) 23:14:04.93 ID:VCFgqBQo.net
- 深いところからの抜け出しはわかる
飛び込みは……ヤバイ
- 418 :デフォルトの名無しさん:2019/12/23(月) 23:42:38.10 ID:qDrReXNq.net
- プロは使うぞ goto
- 419 :デフォルトの名無しさん:2019/12/24(火) 01:18:53.63 ID:qpZ25SUC.net
- switchとgoto組み合わせてステートマシン作るのよくやってる。
- 420 :デフォルトの名無しさん:2019/12/24(火) 03:33:33.92 ID:4c9jV6+e.net
- 何重にもネストしたforの真っ只中にぶっこんでくgotoとかじゃない限り
そこまで可読性が悪くなるってことはないかな。
- 421 :デフォルトの名無しさん:2019/12/24(火) 06:58:18 ID:cUFUrp77.net
- gotoネタまだやってんのか
初心者に使い方を教えれば終わりだよ
- 422 ::2019/12/24(火) 18:02:52.32 ID:Kb/HLSFP.net
- 所詮 goto は関数内でジャンプするだけだから、たいしたスパゲッティにはならないのでは?
むしろ setjmp()/longjmp() 大好き人間のほうが怖い…
- 423 :はちみつ餃子 :2019/12/24(火) 18:36:41.63 ID:HGX5RVNB.net
- >>422
そんな奴はおらん。
- 424 :デフォルトの名無しさん:2019/12/24(火) 18:39:15.66 ID:IBUEMR4t.net
- setjmp/longjmpって具体的に使われてるプロジェクト今ある?
- 425 :蟻人間 :2019/12/24(火) 18:49:21.37 ID:4kM/Vj6H.net
- >>424
JPEGライブラリで使われてるよ。
- 426 :デフォルトの名無しさん:2019/12/25(水) 16:23:59.62 ID:Jr8g24A7.net
- bool readShaderSource(const char *name,std::vector<GLchar> &buffer){
//ファイルなし
if(name == NULL) return false;
//ソースファイルを開く
std::ifstream file(name,std::ios::binary);
if(file.fail()){
//開けなかった場合
std::cerr << "Error: Can't open source file: " << name << std::endl;
return false;
}
// 以下読み込み部分の為省略
}
Macでこんな感じのコードを書いてるのですが、実行ファイルをターミナルから
相対パスで実行すると成功し、Finderからダブルクリックすると別ウィンドウのターミナルが出て
Last login: ~~
$[実行ファイルの絶対パス] ; exit;
"Can't open Source File [ファイル名]"と出てしまいます。
絶対パスと相対パスでファイル読み込みの挙動が変わるのでしょうか?
調べてもそれっぽい情報が出てこず……もし思い当たる方がいたらお願いします。
ちなみに読み込みファイルはOpenGLのShaderです。
- 427 :デフォルトの名無しさん:2019/12/25(水) 16:34:37.25 ID:TfD43SqC.net
- カレントディレクトリでググって。
- 428 :デフォルトの名無しさん:2019/12/25(水) 16:34:37.50 ID:ZI663GBY.net
- まず、端末とFinder は、異なる!
Windows のExplorer で言えば、拡張子に対して、開くアプリが関連付けられている。
漏れの場合、.txt なら、TeraPad で開く
関連付けられていないと、どのアプリで開きますか? と聞いてくる
- 429 :デフォルトの名無しさん:2019/12/25(水) 20:11:17.23 ID:Jr8g24A7.net
- >>427
すみません、言われたことをよく考えたら重要な説明抜けてました
mainの中で先ほどの関数が使われるのは、
const GLuint program(loadProgram("point.vert","point.frag"));
という部分であり、ここで読み込まれている
GLuint loadProgram(const char *vert,const char *frag))
の内部に先ほどのコードがあります。
上の"point.vert"と"point.frag"を"./point.vert"、"./point.frag"に変えたりしましたがダメでした。
/User/~~~ による絶対指定なら動いたのですが、それだと別ファイルに移動した時使えなくなるので
ファイルの階層などを変えても動くようにしたいです。
>>428
とりあえずfileコマンドの結果は
Cのソースファイル(main.cpp): c program text, UTF-8 Unicode text
同ファイル内から読み込んでいるヘッダ(Matrix.hなど): C++ source text, UTF-8 Unicode text
読み込んでいるシェーダーファイル(上記の返答レスの二つ): c program text, ASCII text
実行ファイル: Mach-O 64-bit executable x86_64
dSYMファイル(実行と同時に生成された): directory(IOSの情報ファイル)
という感じです。
実行ファイルなので開くアプリはデフォでterminal、他はバイナリエディタで開けます。
- 430 :デフォルトの名無しさん:2019/12/25(水) 20:28:55.00 ID:KX6i+Zbe.net
- >>429
カレントディレクトリの概念は分かったの?
プログラムを何らかの方法で起動したときに、そのプログラムはどこかのディレクトリを「現在位置」として処理を行う。
だからプログラム中でファイルを指定するときに絶対パスではない書き方、つまり相対パス(point.vertや./point.vertという書き方)で指定すると、それは現在位置から見てその名前の場所にあるファイルを指す。
macの環境は詳しくないけど、terminalから実行したならカレントディレクトリはterminal上のカレントディレクトリだろうし、finderから実行したらプログラムの実行ファイルがある場所だろう。
そこと、開きたいファイルの位置関係を確認して、適切な相対パスを指定してみて。
- 431 :デフォルトの名無しさん:2019/12/25(水) 20:45:23.56 ID:ZI663GBY.net
- >>429
loadProgram と言う名前から想像すると、
特定のディレクトリだけから、ファイルを探すとか?
カレントディレクトリ内からは、探さないとか?
絶対パスなら読めるのなら、絶対パスへ変換すれば?
例えば、ruby -e 'puts $:'
と、Ruby でライブラリの探索パス・ロードパスを表示すると、
その中に、カレントディレクトリは入っていない
他には、エラーの前後で、カレントディレクトリがどこにあるか、確認すれば?
- 432 :デフォルトの名無しさん:2019/12/25(水) 20:48:27.13 ID:88EUoeVm.net
- まず相対パスを絶対パスに変換してどうなるか確認したらいいんでないの
- 433 :デフォルトの名無しさん:2019/12/25(水) 21:06:23.06 ID:KX6i+Zbe.net
- >>430
質問者はC++のifstreamで目的のファイルを開くと言ってるだろ。
的外れなことを言って混乱させるのはやめれ。
- 434 :デフォルトの名無しさん:2019/12/25(水) 21:07:02.85 ID:KX6i+Zbe.net
- 上のレスは>>431宛だった
- 435 :デフォルトの名無しさん:2019/12/25(水) 22:03:46.49 ID:R9J1PIns.net
- iOSのシミュレータで実行するアプリ??(IOSとか書いてるから
それだったらfstreamには絶対パスを渡すしかなかったはず
あんま自信ないので違ってたらすまん
- 436 :デフォルトの名無しさん:2019/12/25(水) 22:09:17.12 ID:ulJiubw3.net
- ほんとruby君はどこのスレでも邪魔しかしないね
- 437 :デフォルトの名無しさん:2019/12/25(水) 22:18:35.22 ID:ZI663GBY.net
- Ruby なら簡単!
これだけでカレントディレクトリが分かるw
p Dir.pwd
- 438 :デフォルトの名無しさん:2019/12/25(水) 23:47:22.85 ID:Jr8g24A7.net
- >>430
カレントディレクトリは多分terminal上での起動でもfinderでも同じです。
426が分かりづらい文章で申し訳ないのですが、なぜかクリックした時
新規にterminalのウィンドウが出て実行ファイルまでの絶対パスまで出てきたので。
terminal上での起動方法はカレントディレクトリに移動してからの"$ ./実行ファイル"です
>>432
一応./とか../とか新規ディレクトリ作ってその中にぶち込むとかはやったんですが、それでも
結果は変わりませんでした。改めて自分で見ても分かりづらいのですが、429の9行目の/User/~~
というのが読み込み部分を絶対パスにしたやつで、その場合はFinderからでも読み込めました。
>>435
OpenGLで簡単な描画をするやつです。
ビルドが
c++ main.cpp -g -Wall -std=c++11 -I/usr/local/include -L/usr/local/lib -lglfw3 \
-lGLEW -framework OpenGL -framework CoreVideo -framework IOKit -framework Cocoa
とかそんな感じでIOKitが入ってるので多分そうかもしれません、入門書
(ttp://marina.sys.wakayama-u.ac.jp/~tokoi/GLFWdraft.pdf)のコピペです。
もしかしてMacでOpenGLを動かす場合って全てiOS対応しなきゃいけないんでしょうか…?
後遅いかもしれませんが長文&多レスと先ほどのお礼を言い忘れててすみません。
非常に稚拙な文章ですが、質問に答えてくださってありがとうございます。
- 439 :デフォルトの名無しさん:2019/12/26(木) 00:25:36.72 ID:qMazsM0J.net
- すまんそれならiOS関係無いな
カレントディレクトリがどうなってるか、MacOSのAPIで取って
それを表示してみてターミナルとFinderでどう違うか確認した方がいいかと
- 440 :デフォルトの名無しさん:2019/12/26(木) 00:44:53.30 ID:mIZi4PgB.net
- MacってBSDらしいじゃん
多分じゃなくて、getcwd()すればいいんじゃ
>カレントディレクトリに移動して
どこにいても、今いるところがcurrentなのだが
- 441 :デフォルトの名無しさん:2019/12/26(木) 00:51:48.47 ID:aYxazJyl.net
- ファイル読み込みをそのまま生成に変更してみ
カレントディレクトリちゃんと考慮してないよ相対パスと絶対パスでファイル生成される場所かわるよ
- 442 :デフォルトの名無しさん:2019/12/26(木) 01:09:15.00 ID:uS8pvwi2.net
- >>438
Finder上でダブルクリックで起動する場合はカレントディレクトリはホームディレクトリだったように思うよ。
ダブルクリックで起動したいなら、
#!/bin/sh
cd "$(dirname "$0")"
./program
と書いたprogram.commandをprogramと同じ場所に作ってchmod +xし、それから起動するとよい。
program.commandのあるディレクトリに移動してからプログラムを移動するシェルスクリプトだから、確実に
カレントディレクトリをprogramのあるディレクトリに変更できる。
- 443 :デフォルトの名無しさん:2019/12/26(木) 01:14:40.83 ID:T0QuicHn.net
- Ruby なら、File.expand_path で、相対パスを絶対パスへ変換できる
相対パスでエラーになるなら、それを絶対パスへ変換すれば?
- 444 :デフォルトの名無しさん:2019/12/26(木) 01:17:24.37 ID:91oPsedU.net
- Ruby ならって情報意味ないから消えて
- 445 :デフォルトの名無しさん:2019/12/26(木) 01:18:31.55 ID:hx3t0oVF.net
- >>439 >>440
とりあえず実行ファイルの入ってるディレクトリ名はsampleで、
カレントディレクトリに移動して~というのはterminalでそこまで移動した
という意味です、念の為付け加えたのですが説明がヘタクソ故分かりづらくてすみません。
そして言われた通り
getcwd(pathname, PATHNAME_SIZE);
fprintf(stdout,"現在のファイルパス:%s\n", pathname);
をmainの最初にぶち込んだところ。
ターミナルでの実行では
現在のファイルパス: /Users/username/program/GLFW_tutorial/sample/sample
finderでの実行では
finderからsample内の実行ファイルをダブルクリックするとterminalのウィンドウが出て
Last login: [前回のログイン情報]
username:~ usename$ /Users/username/中略/実行ファイル ; exit;
現在のファイルパス:/Users/username
Error: Can't open source file: point.vert
Error: Can't open source file: point.frag
とterminal上に表示されました。
finderの最初の方で実行ファイルまでの絶対パスが出てたので、多分同じところ開いてると
思い込んでましたがなぜか /User/username になってたみたいです
素人の先入観で余計な一手間を掛けさせてしまって申し訳ありません orz
- 446 :デフォルトの名無しさん:2019/12/26(木) 04:42:31.39 ID:T0QuicHn.net
- Ruby なら、あちこちに、p Dir.pwd
って書けば、その時点のカレントディレクトリがどこか、すぐわかる
それに、File.expand_path で、相対パスを絶対パスへ変換できるし
何でも、p を付けるだけで、分かるから!
エラーを解決する速さが、桁違い!
C/C++ とかは、ポインターもあるし、1週間ぐらい解決できないのも、ザラ。
効率が悪い
- 447 :デフォルトの名無しさん:2019/12/26(木) 04:48:44.82 ID:91oPsedU.net
- 消えろ
- 448 :430:2019/12/26(木) 06:51:13.58 ID:CYmUjjjA.net
- >>445
finderから起動したときのカレントディレクトリについて誤った情報を書いてすまんかった。正しくは>>442が書いた通り(=445で自分で確認した通り)だね。
ついでに、知ってるかもしれないけど補足情報。
「Rubyでは〜」といってる奴はこの板の有名な荒しなのでスルー推奨。どこかで聞き齧った上辺だけの知識と構ってちゃん精神によって、的外れな情報や誤った情報を垂れ流す困り者。いくら周りが指摘しても改まる気配がない。
書き方が特徴的だからすぐに分かると思う。
- 449 :デフォルトの名無しさん:2019/12/26(木) 09:04:48.57 ID:cN+Hl7PN.net
- >>438,445
解決したみたいだけど一応補足
>>432 > まず相対パスを絶対パスに変換して
これはハードコードで絶対パスを指定するって意味ではなく
指定している相対パスそのものを関数を使って絶対パスに変換してみれば?って意味ね
- 450 :デフォルトの名無しさん:2019/12/26(木) 11:32:31.02 ID:qmNoWNu8.net
- CどころかOSすらまともに使えないような香具師は
まずpythonで練習汁
話はそれからだ
- 451 :426:2019/12/26(木) 11:47:02.89 ID:hx3t0oVF.net
- >>442,448,449
(安価打ちすぎると書き込めないらしいのでひとまとめになります)
ありがとうございました、書き忘れてましたが無事解決しました!
とりあえず442さんのやり方と449さんのやり方両方で成功しました、
430さんのレスがきっかけでカレントディレクトリについて考えることになったのでありがとうございます!
長文&稚拙な説明で長い間付き合わせてしまいましたが、
懇切丁寧に解説してくださった皆様方にはただただ感謝の極みですm(_ _)m
- 452 :デフォルトの名無しさん:2019/12/26(木) 12:51:22.31 ID:DjlxxgLR.net
- c++20対応してる処理系てどれ?
- 453 :デフォルトの名無しさん:2019/12/26(木) 14:08:21.39 ID:AOHRGRKj.net
- clが全く対応してないのは知ってる。
- 454 :デフォルトの名無しさん:2019/12/26(木) 15:03:20.65 ID:91oPsedU.net
- VCは一部対応してる
- 455 :デフォルトの名無しさん:2019/12/27(金) 11:59:00.73 ID:mPCTTnxc.net
- どっちやねん
- 456 :デフォルトの名無しさん:2019/12/27(金) 14:20:44.04 ID:rOhR0D35.net
- https://ja.cppreference.com/w/cpp/compiler_support
gccが一番対応が進んでる
- 457 :デフォルトの名無しさん:2019/12/27(金) 14:23:56.07 ID:eT+8Od/E.net
- コンセプト使おうと思ってgccビルドしたけど、ビルド成功に満足して結局何もしてない
- 458 :デフォルトの名無しさん:2019/12/27(金) 18:15:17.64 ID:XdsZzS9X.net
- > ビルド成功に満足して結局何もしてない
あるあるやな
- 459 :デフォルトの名無しさん:2019/12/27(金) 18:26:52.15 ID:SnoWmlYG.net
- じゃあ話はかんたんだ
gccの改造をすればいい
- 460 :デフォルトの名無しさん:2019/12/28(土) 08:02:42.09 ID:YMDBWz/J.net
- gccは真っ先に規格に対応するけど、
コード品質が糞すぎて結局商用には使えない
- 461 :デフォルトの名無しさん:2019/12/28(土) 14:03:33.98 ID:YMDBWz/J.net
- ubuntuでapt install clangをさっきインストールしてみた。
gccで正常に動くプログラムが動作しないんで調べてみると
#pragma omp parallel
で使ってるomp_get_thread_num()がスレッドidを0しか返してない。
スレッドそのものは指定した数だけ、立ち上がってるのにどのスレッドも0しか返してないんだけどなんで?
- 462 :デフォルトの名無しさん:2019/12/28(土) 16:04:39.76 ID:y9mZ+5If.net
- それが返すのはスレッドIDじゃなくない?
- 463 :デフォルトの名無しさん:2019/12/28(土) 16:11:50.22 ID:c5TG1bir.net
- OpenMP知らないのに関数名だけ見てレスしただろ
- 464 :デフォルトの名無しさん:2019/12/28(土) 16:14:16.51 ID:y9mZ+5If.net
- 知ってるけど関数間違えてた
- 465 :デフォルトの名無しさん:2019/12/28(土) 17:13:12.18 ID:YMDBWz/J.net
- #pragma omp parallel num_threads(16)
{
#pragma omp critical
{
cerr << "thnum = "<< omp_get_thread_num()<"\n";
}
}
単にこれだけ。
gccは問題ないのに
clangが 0 しか返さない。
clangのエラーメッセージがよさげなんで乗り換えたいんだけど
- 466 :デフォルトの名無しさん:2019/12/28(土) 17:15:58.80 ID:izuDiHMA.net
- スレッド出来てるならコンパイルオプションじゃないよなあ
- 467 :デフォルトの名無しさん:2019/12/28(土) 18:59:17.80 ID:wFzdDG/T.net
- omp_get_thread_num always returns 0
で調べてみて
- 468 :デフォルトの名無しさん:2019/12/29(日) 00:45:01.76 ID:DJG0a+qG.net
- clang の omp 解決しました
- 469 :デフォルトの名無しさん:2020/01/01(水) 11:25:57.89 ID:EQq3rigy.net
- Win10上のVS2019でもParallel Studio2020でも、
ubuntuのgccでもコンパイル&実行できる、コンソールプログラムを書きました。
標準で勝手にリンクされるライブラリ以外にライブラリの指定などは一切行っていないのですが、
Parallel Studioでコンパイルしたものだけ、実行直後すぐに終了されてしまうので、
デバッガで実行させると、
序数270がダイナミック ライブラリから見つかりませんでした
と表示されます。
どなたかこの件で情報お持ちじゃないですか?
ちなみにVSでもネイティブ/WSL ubuntuのgccでは正しく実行できています
- 470 :デフォルトの名無しさん:2020/01/01(水) 11:38:25.85 ID:UDgnGpGd.net
- >>469Intellのなんかをインストすればok
- 471 :デフォルトの名無しさん:2020/01/01(水) 11:40:01.97 ID:tqBP4ADq.net
- .def 使えば解決するはず
- 472 :デフォルトの名無しさん:2020/01/01(水) 12:17:27.05 ID:EQq3rigy.net
- >>470
今コンパイルして動かないので、dllのチェックはしてるんだろうと思いましたが、
void
main(){
cout << "Hello World\n";
}
はインテルでも何の問題もなく動いたのでdllが足りないんだと思います
- 473 :デフォルトの名無しさん:2020/01/01(水) 12:54:53.74 ID:kPvcajv8.net
- いまさらながら、std::vector::swap がC++14までnoexceptじゃなかったことに気付いた。
今までvectorをメンバに持つクラスのmoveコンストラクタ/代入の中でswapを使って
しれっとnoexceptを付けてたけど、C++11では本来どうすべきだったんだろう。
- 474 :デフォルトの名無しさん:2020/01/01(水) 14:11:16.43 ID:Y/jFplKd.net
- swapを例外吐くように実装するほうが難しそう…
>>469
これかしら
https://software.intel.com/en-us/articles/redistributable-libraries-for-intel-c-and-fortran-2019-compilers-for-windows
- 475 :デフォルトの名無しさん:2020/01/01(水) 15:11:33.16 ID:kPvcajv8.net
- >>474
実際に例外が発生する処理系はまずないんだろうけど、規格の上ではnoexceptがついていない以上
それに備えなければならないわけで。
- 476 :デフォルトの名無しさん:2020/01/01(水) 15:40:05.94 ID:MYEeMeEE.net
- noexcepつける理由ってほぼ自己満足だよな
unwindの最適化気にするぐらいなら例外禁止にするわ
- 477 :デフォルトの名無しさん:2020/01/01(水) 16:29:22.59 ID:kPvcajv8.net
- >>476
つまり、>>473のようなケースではそのままnoexceptを付けないmoveコンストラクタにするということかな。
例外禁止というのがどこのことを言っているのかよくわからないが。
- 478 :はちみつ餃子 :2020/01/01(水) 17:53:46.55 ID:6jqQqgz1.net
- C++17 からは noexcept 指定は型の一部ってことに変更されてる。
(noexcept から非 noexcept への型変換は有りだが逆は駄目。 まあ無理にキャストすればできなくはないだろうけど……。)
型が合わなきゃコンパイルエラーだ。
各種ライブラリとの組み合わせの関係で否応なく気にしなきゃならんってこともあるんじゃないの?
- 479 :デフォルトの名無しさん:2020/01/03(金) 12:36:25.83 ID:umaZYxrI.net
- Intel Compiler 19.1の序数270エラー解決しません Help me
- 480 :デフォルトの名無しさん:2020/01/03(金) 14:13:50.99 ID:FKz36Fkl.net
- >>479
だから、intelのmathmaticsライブラリをインストしろ
- 481 :デフォルトの名無しさん:2020/01/03(金) 19:33:04.88 ID:umaZYxrI.net
- MKLですか?
- 482 :デフォルトの名無しさん:2020/01/04(土) 11:34:30.60 ID:fWyFLqKp.net
- mkl2019というか
インテルコンパイラツール 2019なんかをインストールすると
Visual Studio16.4環境を破壊するよ
単にコンパイラ環境だけでなくプルダウンメニューの内容とかも破壊してしまう。
VS 16.4以降はParallel Studio 2020以降じゃないと対応しない
- 483 :デフォルトの名無しさん:2020/01/04(土) 20:26:44.77 ID:WECvYau6.net
- 副作用で草
- 484 :デフォルトの名無しさん:2020/01/05(日) 00:12:30.19 ID:HA4RDQkA.net
- 環境破壊とかグレタ嬢に報告しないといかんな
- 485 :デフォルトの名無しさん:2020/01/05(日) 15:10:03.49 ID:cAxs9Xlp.net
- >>480
知りもしないでいい加減なレスすんなアホ
- 486 :デフォルトの名無しさん:2020/01/06(月) 13:40:33.49 ID:Q/9nqAWN.net
- >>485
え?私はそれで解決したんだけど
知りもしないで碌ないちゃもんつけんな
- 487 :デフォルトの名無しさん:2020/01/08(水) 16:50:37.82 ID:3hPXf+vV.net
- >>486
parallel Studio 2020えコンパイルに必要なライブラリ一式がすべてそろってるのに
わざわざ別途mklなんか必要あるかよ。わかってんのか馬鹿たれ。
しかも今,mkl2019しか入手できない中、
最新VSにインストしたら不具合起こすことわかってる2019ツールのインストすすめてどうすんだアホ
死ね情弱ゴミ
夢でも見てんのか?
- 488 :デフォルトの名無しさん:2020/01/08(水) 23:18:09.28 ID:qsayucr9.net
- 人を罵倒せずにいられない人っているよね
- 489 :デフォルトの名無しさん:2020/01/09(木) 08:33:01.04 ID:pwu9e7aL.net
- 他では自信がないんでしょうね
- 490 :デフォルトの名無しさん:2020/01/13(月) 12:28:29.10 ID:Tr5rZ1p8.net
- テンプレートテンプレートパラメタに関する質問です。
こういうのはどう書けばいいのでしょうか?
以下はコンパイラできないんですが、
意図としては
テンプレート引数の型を関数引数として使いたい。
そして、テンプレートテンプレート引数の型Xを返したい
Xの型としてはデフォルトで'+'が定義されているdouble とか intが入ります
template < template<typename X> class L, template<typename X> class R>
X &
Func(const L<X> & l, const R<X> & r)
{
return l + r;
}
- 491 :デフォルトの名無しさん:2020/01/13(月) 12:49:13.64 ID:Tr5rZ1p8.net
- コンパイラできないじゃなく
コンパイルできない
です
L<X>の部分をどう書けばいいのかわからないんです。
ところで、
clangってデフォルトテンプレート引数を正しく処理できないんですね
template< typename T = int>
class C{
};
・・・・
C x;
がエラーになってしまう。
C<> x; と書けばokです
gccは<>がなくてもokです
- 492 :デフォルトの名無しさん:2020/01/13(月) 12:56:31.05 ID:A/MByXKy.net
- Xが何者か書いてない
Xが型ならtypename Xを<>の中に付け足すべし
- 493 :デフォルトの名無しさん:2020/01/13(月) 13:00:00.75 ID:A/MByXKy.net
- template<template<typename X> L>
はtemplate<template<typename> L>と同じでXはなんの意味も持たない
- 494 :デフォルトの名無しさん:2020/01/13(月) 13:11:53.50 ID:A/MByXKy.net
- classが抜けてた
- 495 :デフォルトの名無しさん:2020/01/13(月) 13:33:15.28 ID:Tr5rZ1p8.net
- >Xが型ならtypename Xを<>の中に付け足すべし
Func(const L<teypename X> & l, const R<teypename X> & r)
ってこと???
テンプレート引数の X の型を返すのはどうすればいいんですかね?
- 496 :デフォルトの名無しさん:2020/01/13(月) 13:38:01.62 ID:A/MByXKy.net
- template<typename X,
template<typename> class L,
template<typename> class R>
X Func(const L<X>& l,const R<X>& r)
- 497 :デフォルトの名無しさん:2020/01/13(月) 13:44:12.54 ID:Tr5rZ1p8.net
- >>492
>Xが型ならtypename Xを<>の中に付け足すべし
Func(const L<double> & l, const R<double> & r)
と具体的にXを書く必要があるってことでしょーか?
- 498 :デフォルトの名無しさん:2020/01/13(月) 14:14:22.42 ID:Tr5rZ1p8.net
- >>496
なるほど。
わかりました。
- 499 :デフォルトの名無しさん:2020/01/13(月) 14:26:44.12 ID:Tr5rZ1p8.net
- Funcが2項演算
X operator+ (const L<X> &l, const L<X> &r)
だと
template < typename X,
template<typename> typename L,
template<typename> typename R>
は,clangで
invalid operands to binary expressionになりますね。
- 500 :デフォルトの名無しさん:2020/01/13(月) 15:21:33.84 ID:Tr5rZ1p8.net
- https://faithandbrave.hateblo.jp/entry/20081003/1223026720
ここにある
floatを例えばdoubleとかintとか汎用性を持たせたい
Vector<double> x;
Vector<double> y;
Vector<double> z;
Vector<double> t;
で
t= x+y+z;
という計算ができるようにしたい。
このとき
template <typename T>
class Vector{
ここに式テンプレート一切合切をメンバに持たせる
};
と定義して、式テンプレートの一切合切をVectorクラスのメンバとしてしまえば、うまくいくことがわかりましたが、
式テンプレートを独立させると、2項演算の型情報"float" をどう渡せばいいのか困っています。
2項演算の一番最初に呼ばれる
template <class L, class R>
Expression<L, Plus, R> operator+(const L& lhs, const R& rhs)
ここにfloatやdoubleの型情報を埋め込むにはどうすればいいのか?
ってことになると思うんですが。
- 501 :デフォルトの名無しさん:2020/01/14(火) 12:00:41.65 ID:AM8t1N0H.net
- C++に108ある苦行の一つ、テンプレートの明示的特殊化
- 502 :デフォルトの名無しさん:2020/01/14(火) 12:10:40.04 ID:AAWN8rY8.net
- 108で済むのか?
- 503 :デフォルトの名無しさん:2020/01/14(火) 12:53:30.61 ID:KjTpusiu.net
- Vector内にtype持たせるなりget_type構造体作って特殊化で取るなりして合わないものをenable_ifで弾くなり
operator +の特殊化を書くなりいくらでもやり方はある
- 504 :デフォルトの名無しさん:2020/01/14(火) 13:00:30.38 ID:Sh3SY+TQ.net
- 簡単に描けないと意味が無い
- 505 :デフォルトの名無しさん:2020/01/14(火) 13:05:03.28 ID:KjTpusiu.net
- ETがそんな簡単に書けるわけねーだろ
- 506 :デフォルトの名無しさん:2020/01/14(火) 17:54:11.46 ID:3su9tm6y.net
- >>500
そのサイトをちょっと読んでみたんだけど、LとRがすでにfloatやdoubleの型情報を持っているように思うのですが。
- 507 :デフォルトの名無しさん:2020/01/14(火) 18:39:49.77 ID:3su9tm6y.net
- >>500
https://ideone.com/3Hp3q6
- 508 :デフォルトの名無しさん:2020/01/15(水) 09:17:00.06 ID:kgDFfipS.net
- >>506
完成形はサイトの一番最後にある
Expression , Plus , operator+
で、operator+ -> Expression -> Plusの順で呼ばれる、
operator+ に演算型(floatやdouble)がないので、ExpressionとPlusのfloatが自動的に選択されてしまう。
一番はじめのoperator+にデータ型を識別する仕組みを入れてそれを引き継いでいくか、
ExpressionとPlus内部でデータ型を認識することが必要だと思うんだけど?
2項演算でなければ3つの型を並べれば済むのにと思ってました。
>>507
using valu_type か
めっちゃ参考になります。
てかこれでほぼ解決です。
聞いて良かった。ありがとうございました
- 509 :デフォルトの名無しさん:2020/01/15(水) 15:44:09.21 ID:0mJheqXR.net
- なんでこの子そんなに上からなんだろ。
- 510 :デフォルトの名無しさん:2020/01/15(水) 22:41:08 ID:kgDFfipS.net
- どこが上から?
- 511 :デフォルトの名無しさん:2020/01/15(水) 22:55:31 ID:CBF4WmsT.net
- ちょっと賢そうだから嫉妬してる感
- 512 :デフォルトの名無しさん:2020/01/15(水) 23:10:31.17 ID:kgDFfipS.net
- 見下して質問やレスした箇所がどこかわからん。
- 513 :503:2020/01/16(木) 10:42:26.08 ID:CVktcrTk.net
- >>510-512
自分もちょっと偉そうだな、と思ったけどな
>>506に対するレスとかね
答え教えてもらってて経験不足で理解できてないのに言い返してる
読んでてわからんなら同レベルってことだろ
- 514 :430:2020/01/16(Thu) 11:28:05 ID:0X0XQobn.net
- もしかすると文字でのコミュニケーションが下手なだけかも。直接対話しているならイントネーションやニュアンスで伝わるものが文字では伝わらない、誤解され得る、ということが分かってないとか。
「〜思うのですが。」ではなく「〜思うのですが、どうでしょうか?」と書けば言い返しているのではなく疑問点を質問していると明確になるのにね。
- 515 :デフォルトの名無しさん:2020/01/16(Thu) 11:29:06 ID:0X0XQobn.net
- >>514の名前欄は間違いなので無視してください
- 516 :デフォルトの名無しさん:2020/01/16(Thu) 11:36:45 ID:N6AzyVRW.net
- int main() {
while(1) {
if (kbhit()) return -1;
}
}
- 517 :デフォルトの名無しさん:2020/01/16(Thu) 13:18:13 ID:lpjDYSs5.net
- 環境はMac Mojave10.14.6、VScodeは1.14.1
clang,gccはApple LLVM version 10.0.1 (clang-1001.0.46.4)です。
他VScodeの設定で"clang.cxxflags": [
"-std=c++17"
]
としています。
VScodeを使っていて、/Users/[USERNAME]/PATH/にある
c.cppというファイルを右上の矢印でコンパイルしてたら急に
cd "/Users/[USERNAME]/[PATH]/" && runFiles=`ls *.cpp` &&
g++ -std=c++17 `echo ${runFiles}` -o c && "/Users/[USERNAME]/[PATH]/"c
duplicate symbol _main in:
/var/folders/fy/0rw1xdjd3csf2v8nzp2wb4vc0000gn/T/c-216688.o
/var/folders/fy/0rw1xdjd3csf2v8nzp2wb4vc0000gn/T/d-c0a03b.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
というエラーが出てきました。
対応するにもこの/var/folders/fy/以下にあるファイル群がなんなのか分かりません、
どうすれば良いのでしょうか。
- 518 :蟻人間 ◆T6xkBnTXz7B0 :2020/01/16(Thu) 13:27:47 ID:xhLhfq9D.net
- >>517
シンボルが重複している。
たぶんinline指定を忘れてるか、変数の定義が重複している。
- 519 :デフォルトの名無しさん:2020/01/16(Thu) 14:34:35 ID:vo+Ub67N.net
- >>513
オマエ何様のつもりだ。
匿名掲示板でいったいどんな言葉使いを期待してるんだアホww
だいたい>>507のレスにしても大概だろ
using valu_type= T
とかww
こんな回答もらってよろこんでるほうもアレだが、
auto
operator[](std::size_t i) const{
return Op::Apply(l_[i], r_[i]);
}
ですむ話
レベルの低い奴に相応の応対したんだろww
- 520 :デフォルトの名無しさん:2020/01/16(Thu) 14:39:29 ID:vo+Ub67N.net
- >>513
>答え教えてもらってて経験不足で理解できてないのに言い返してる
その答えのレベルのわからんおまえも同レベルって乞田ww
- 521 :デフォルトの名無しさん:2020/01/16(Thu) 14:50:56 ID:sHruIOmX.net
- 乞田川
乞田型
乞田首
- 522 :513:2020/01/16(Thu) 16:00:48 ID:CVktcrTk.net
- >>519
質問者が聞いてるのは内部で使ってる型に応じて実装を変えたいって話なんだが
お前何もわかってないアホだろ、autoにしても何も変わらねーんだよ
- 523 :デフォルトの名無しさん:2020/01/16(木) 16:06:03.64 ID:CVktcrTk.net
- あと
>>517-518
_mainてあるから多分エントリポイントが重複してるのでは?
- 524 :デフォルトの名無しさん:2020/01/16(Thu) 16:21:00 ID:vo+Ub67N.net
- >>522
やっぱりな
auto一発ですむ話に
>>503
>Vector内にtype持たせるなりget_type構造体作って特殊化で取るなりして合わないものをenable_ifで弾くなり
>operator +の特殊化を書くなりいくらでもやり方はある
こういう寝言ほざいてたんだな。
質問者は
>>500
>Vector<double> x;
>Vector<double> y;
>Vector<double> z;
>Vector<double> t;
>t= x+y+z;
>という計算ができるようにしたい。
>式テンプレートの一切合切をVectorクラスのメンバとしてしまえば、うまくいくことがわかりましたが、
>式テンプレートを独立させると、2項演算の型情報"float" をどう渡せばいいのか困っています。
- 525 :デフォルトの名無しさん:2020/01/16(Thu) 16:21:26 ID:vo+Ub67N.net
- >>522
つづき
内部に
type持たせるも何も
auto
operator[](std::size_t i) const{
return Op::Apply(l_[i], r_[i]);
}
として、
struct Plus{
struct Plus
{
template <typename T>
とするだけで、
質問者のやりたいことはいくらでも出来ますがなにか。
お前自身低レベルの極みなんだよ馬鹿たれ
- 526 :デフォルトの名無しさん:2020/01/16(Thu) 16:23:29 ID:vo+Ub67N.net
- >>522
お前は
Op::Apply(l_[i], r_[i]); の型がvalu_typeの型そのものってことがわかってない
アホは死にな。
- 527 :デフォルトの名無しさん:2020/01/16(Thu) 16:27:23 ID:CVktcrTk.net
- 質問者は型情報を渡したいと言ってるだろうが
お前のやり方だと要素ごとのbitwise orとか実装するときに困るんだよアホ(多分他にも困る場面あるはず
整数だろうが浮動少数点数だろうが表記が同じ演算ならお前の言うそれでいいけどな
- 528 :デフォルトの名無しさん:2020/01/16(Thu) 16:28:28 ID:CVktcrTk.net
- あと
>オマエ何様のつもりだ。
>匿名掲示板でいったいどんな言葉使いを期待してるんだアホww
そっくりそのまま返すわキチガイが
- 529 :デフォルトの名無しさん:2020/01/16(Thu) 16:33:49 ID:vo+Ub67N.net
- >>522
言ってることがわからなければ>>507
のコードで
typename L::value_type →auto に置換
using value_type = T; → 削除
Vector<int> →Vector<double>に置換
とでもして実行してみろ低脳
- 530 :デフォルトの名無しさん:2020/01/16(Thu) 16:39:34 ID:CVktcrTk.net
- >Op::Apply(l_[i], r_[i]); の型がvalu_typeの型そのものってことがわかってない
お前の言ってるそれは>>506そのもの
そういや俺operator +の特殊化とか書いてたけど
Applyの方だな
あとオーバーロードが抜けてた
- 531 :デフォルトの名無しさん:2020/01/16(Thu) 16:40:27 ID:vo+Ub67N.net
- >>527
はぁ?文盲か低脳
>>500
ex template をVector内部に持たせるんじゃなく、独立させて、
t= x+y+z;
演算型をfloat double int に汎用性を持たせたいといってるんだろうが。
だれが"要素ごとのbitwise orの実装"の話なんかしてるんだ。お前の勝手な妄想だろが馬鹿たれ
>多分他にも困る場面あるはず
を、妄想の自己弁護か?www
夢でも見て寝ぼけてんのかアホ
テメエみたいな低脳ごときが俺様に対して言葉の使い方気をつけろ
- 532 :デフォルトの名無しさん:2020/01/16(Thu) 16:42:45 ID:vo+Ub67N.net
- >>530
はぁ?
Op::Apply(l_[i], r_[i]); が型情報もってるのにわざわざクラス内部に不要なtype実装させてどーするつもりだと言ってるんだよ低脳
日本語わからんのかアホ
お前は日本語の勉強からやり直せ
- 533 :デフォルトの名無しさん:2020/01/16(Thu) 16:44:58 ID:vo+Ub67N.net
- アホさらしあげ
>>522
>autoにしても何も変わらねーんだよ
>autoにしても何も変わらねーんだよ
>autoにしても何も変わらねーんだよ
>autoにしても何も変わらねーんだよ
>autoにしても何も変わらねーんだよ
>autoにしても何も変わらねーんだよ
>autoにしても何も変わらねーんだよ
変わるんだようすらバカ
autoにするだけで質問者の解決だ。ばかたれ
- 534 :デフォルトの名無しさん:2020/01/16(Thu) 16:47:00 ID:CVktcrTk.net
- まじめんどくせぇこいつ
俺はtypeだのvalue_typeだの余計な要件増やすことを良い実装だとは思ってないぞ
>>506を挙げてそれに言い返してるのを批判的に言ったのはそれが理由
お前がドヤ顔でautoとか言い出す前からな
- 535 :デフォルトの名無しさん:2020/01/16(Thu) 16:52:26 ID:CVktcrTk.net
- >>525
>template <typename T>
>とするだけで、
それ>>507の時点ですでにそうなってるんだが
- 536 :デフォルトの名無しさん:2020/01/16(木) 17:42:18.71 ID:ZhNhElM8.net
- で、ID:vo+Ub67N は逃げたの?
いつものイチャモンつけるしか能が無いクズだろうけど
そんな暇があったら最初からちゃんと答えてやれよゴミが
- 537 :デフォルトの名無しさん:2020/01/16(木) 19:09:23.03 ID:goTqdxUb.net
- 外野が喚いて質問者が迷惑するパターン?
- 538 :デフォルトの名無しさん:2020/01/16(木) 19:24:24.34 ID:J+/qaxiI.net
- >>518
ご返信ありがとうございます、とりあえず言われたことに関係ありそうなことを
調べたのですが、自分のファイルにそういった感じの文法ミスがあるのかは
分かりませんでした。一応短いのでエラー吐いたソースコード貼っておきます。
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
int a[N];
for (int i = 0; i < N; i++) cin >> a[i];
long long ans = 0;
for (int i = 1; i <= 3000; i++) {
long long sum = 0;
for (int j = 0; j < N; j++) sum += a[j] % i;
ans = max(ans, sum);
}
cout << ans << endl;
return 0;
}
後、以前コンパイルできていたプログラムで同様の手順を試しにやってみたら、
同様の症状が起こって実行ファイルが消えました。
>>523
申し訳ありません、無知だったので色々調べたのですがエントリポイントという物が
よく分かりませんでした。気がつかないうちに何かまずいところ弄って他のプログラムと
開始アドレスが被ったとかそんな感じでしょうか?
- 539 :蟻人間 ◆T6xkBnTXz7B0 :2020/01/16(Thu) 19:36:20 ID:AwrKlCOf.net
- *.cppにより、エントリポイントのmain関数を2つコンパイルしたんではないか?
- 540 :蟻人間 :2020/01/16(木) 19:38:26.02 ID:AwrKlCOf.net
- 1つのフォルダには1つのプロジェクトにした方がいいのかも。
- 541 :デフォルトの名無しさん:2020/01/16(木) 19:38:35.95 ID:ZhNhElM8.net
- >>538
エントリポイントっていうのはそこでいうmain関数のことね
それが複数作られてるとエラーになる
そのソースコードをヘッダファイルに書いててそれを複数のファイルでインクルードしてるとか
あるいは他にもmain関数を定義してる余計なソースコードがあるとかそういうのが原因だとおも
- 542 :デフォルトの名無しさん:2020/01/16(Thu) 19:40:09 ID:ZhNhElM8.net
- リロードしてなくて被った
- 543 :デフォルトの名無しさん:2020/01/16(Thu) 20:19:17 ID:J+/qaxiI.net
- >>539、>>541
とりあえずファイル内にmain関数を持つc.cppとd.cppがある状態だったので、
試しに適当なディレクトリを作ってそこにc.cppを移してみたらコンパイル成功しました!
ずっと詰まっていたので感謝します、お二方とも本当にありがとうございます!!
恐らく原因である runFiles=`ls *.cpp` の部分が以前どうなっていたか
覚えていないのですが、前は同ディレクトリにmain文複数あっても成功しているんですよね…
VScodeの自動更新等でビルドの設定が変わったとかでしょうか…?
- 544 :デフォルトの名無しさん:2020/01/16(Thu) 20:26:56 ID:J+/qaxiI.net
- 申し訳ありません、今VScodeのsetting.jsonを確認したらいつの間にか
"code-runner.executorMap": {
"cpp": "cd $dir && runFiles=`ls *.cpp` && g++ -std=c++17 `echo ${runFiles}` -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
},
が書かれてました。恐らくですが、最近別の機会でc++17のオプションを使う時にそのまま他の方の
設定を写していたのと最近一つのファイル内に複数のフォルダ作ることが無かったからだと思います。
昼から何度も長文でお騒がせして申し訳ありませんでしたorz
エントリポイントに関しては大変参考になりました。
- 545 :デフォルトの名無しさん:2020/01/17(金) 10:27:22 ID:fMuYUnvE.net
- >>522
戻り値の型をテンプレートにするのってどうするの
- 546 :デフォルトの名無しさん:2020/01/17(金) 14:15:38.50 ID:GiayRj2a.net
- Tかautoでいんじゃね
あるいはdecltype
- 547 :デフォルトの名無しさん:2020/01/17(金) 14:18:21.61 ID:fMuYUnvE.net
- 戻り値Tで関数オーバーロード出来る?
- 548 :デフォルトの名無しさん:2020/01/17(金) 14:37:12.74 ID:GiayRj2a.net
- 戻り値が違うだけだと無理よ
- 549 :デフォルトの名無しさん:2020/01/17(金) 14:39:16.16 ID:GiayRj2a.net
- あ、戻り値だけ指定させる関数テンプレートならオーバーロードしなくても
その関数テンプレート一つでいける
ただし推論できないので呼び出すときにテンプレート引数の指定は必須
- 550 :デフォルトの名無しさん:2020/01/17(金) 18:48:04 ID:PzZl0Asa.net
- autoと型指定で同じコードに落ちるとは限らないというか、おそらく同じコードにならないので、よく考える必要があると思います。
- 551 :はちみつ餃子 :2020/01/19(日) 01:28:50.10 ID:pwo1VM/U.net
- decltype(auto) とも使い分けが必要なの本当にアレだよな……
- 552 :デフォルトの名無しさん:2020/01/20(月) 10:42:02 ID:CUHpWb/I.net
- ptrってなんて読むん
- 553 :デフォルトの名無しさん:2020/01/20(月) 11:17:45 ID:wNCym70P.net
- ポインタ
- 554 :デフォルトの名無しさん:2020/01/20(月) 11:47:15 ID:rZl1icD3.net
- ハリー・ポッター
- 555 :デフォルトの名無しさん:2020/01/20(月) 11:52:47 ID:quHzxrTX.net
- ペトリザラ
- 556 :デフォルトの名無しさん:2020/01/20(月) 12:52:13 ID:CUHpWb/I.net
- ずっと脳内でピトラって読んでたがポインタか
ありがとう
- 557 :デフォルトの名無しさん:2020/01/20(月) 13:19:51 ID:0GX6odYx.net
- int_ptr
INT_PTR
*int
全部違う型?
- 558 :デフォルトの名無しさん:2020/01/20(月) 13:20:08 ID:0GX6odYx.net
- int *
ですすんまそ
- 559 :はちみつ餃子 :2020/01/20(月) 15:13:06.58 ID:UOBRzIUl.net
- >>557
INT_PTR は Windows SDK で定義されてるやつのことだと思うけど、
標準で言うところの intptr_t に相当するやつ。
int のポインタじゃなくて、ポインタを格納できる (のに充分な幅がある) int っていう意味。
- 560 :デフォルトの名無しさん:2020/01/20(月) 15:46:05.19 ID:UDU8umXR.net
- >>507
これって2項間はいけるけど
v=l+z+w;
とか3項間以上の場合
typename L::value_type
operator[](std::size_t i) const{
・・・
}
ここで、コンパイル通らないんじゃないの?
+wの部分で(l+z)::valu_typeを参照し、
class Expressionで宣言されてないvalu_typeを参照することになってエラーになるはず。
auto
operator[](std::size_t i) const{
・・・
}
では何の問題もない。
- 561 :デフォルトの名無しさん:2020/01/20(月) 15:51:26.28 ID:UDU8umXR.net
- >>507
のコードはおよそ使えない間違いコードといいっていい。
- 562 :デフォルトの名無しさん:2020/01/20(月) 15:58:55.44 ID:UDU8umXR.net
- 一応
gcc 9.1で確認してみた
error: no type named ‘value_type’ in ‘class Expression<Vector<int>, Plus, Vector<int>
>’
11 | typename L::value_type operator[](std::size_t i) const
だな。
>>507のコードはコンパイルすら通らない間違いコードだ。
- 563 :デフォルトの名無しさん:2020/01/20(月) 16:08:08 ID:UDU8umXR.net
- コンパイル通らないってのは
以下を追加したときの話ね
Vector<int> w{ 5, 4, 3 };
v = l + r +w;
2項間では通るが3項間以上の式では通らない。
ex-templateを使うメリットが全くないコードが>>507
- 564 :デフォルトの名無しさん:2020/01/20(月) 17:26:42 ID:UDU8umXR.net
- auto
operator[](std::size_t i) const{
とせず、value_type直接指定でいくためには
class expressionの中で
もう一度
using value_type = typename L:value_type;
を宣言して、
value_type
operator[](size_t i) const{
・・・
}
で多項間でも問題なくいけるはず。
- 565 :デフォルトの名無しさん:2020/01/21(火) 18:43:12 ID:of4oLLe2.net
- >>563
3項以上でなければメリット無くなるわけではないぞ
というかまぁ今どきはETより先にSIMD使えって話だけど
- 566 :デフォルトの名無しさん:2020/01/21(火) 22:39:57.57 ID:jv9UY41A.net
- >>565
2項迄の演算では式テンプレートに何のメリットもない。
デバッグを困難にするだけの糞コーディングだ
バグに気づくことも出来なかった一知半解の口だけウスノロはすっこんでな
そもそも、質問者は
>>500
>t= x+y+z;
>という計算ができるようにしたい。
と希望を述べているのに>>507のコードは要求仕様を満足できてないゴミコードということだ。
- 567 :デフォルトの名無しさん:2020/01/21(火) 22:42:13.76 ID:jv9UY41A.net
- >>565
>というかまぁ今どきはETより先にSIMD使えって話だけど
能力不足をHWに補ってもらわないとなww
その分電力無駄に食ってることは覚えとけ
- 568 :デフォルトの名無しさん:2020/01/21(火) 23:33:50 ID:oeYN0gBf.net
- え?
SIMDで並列化できたら電力あたりのパフォーマンスはあがるぞ
ETと比べるものとは思わないが
- 569 :デフォルトの名無しさん:2020/01/22(水) 10:04:13 ID:RE1hbZ/o.net
- >>566
お前大して攻撃的でもない書き込みにすぐ喧嘩売ってイキるの辞めたほうがいいよ
俺はETとSIMD両方使って自作の線形代数ライブラリ(4行4列まで限定だが)作った上で言ってる
恥書く前に謝っとけよ
>能力不足をHWに補ってもらわないとな
アホだろお前、ETがSIMD以上に速度上がると思ってんの?
>ETと比べるものとは思わないが
確かに速度が目当てと勝手に限定してたね
- 570 :デフォルトの名無しさん:2020/01/22(水) 10:18:16 ID:s6VTVCIo.net
- 最近のコンパイラならETできれいに展開しておけば
勝手にはSIMD化してくれんじゃない?
- 571 :デフォルトの名無しさん:2020/01/22(水) 10:27:28 ID:RE1hbZ/o.net
- Intelのは使ったことないんで知らんけど、VCだと基本そういうのは期待できないよ
(最適化かけたEigenのコードの逆アセでも見てみればわかる)
単一の要素の計算にxmmレジスタ使ってはくれるけど並列にやってくれることは無い
SIMDに収まる範囲のベクトルなら、手動できっちりSIMD使いつつ
インターフェースを使いやすくするのは普通に出来るから先にそうした方がいい
- 572 :デフォルトの名無しさん:2020/01/22(水) 12:20:19 ID:mLtdNNMm.net
- >>569
言うだけ無駄
意図的に絡んでるのが大半だから
自然体だったら残念な性格としか
ソースは無い
- 573 :デフォルトの名無しさん:2020/01/27(月) 00:16:58 ID:kzLo5KUi.net
- class vec2
{
- 574 :デフォルトの名無しさん:2020/01/28(火) 10:57:31.95 ID:/YDDbz91.net
- // >>573
}
- 575 :デフォルトの名無しさん:2020/01/28(火) 15:18:36 ID:PrwWvwu0.net
- // >>574
;
- 576 :デフォルトの名無しさん:2020/01/29(水) 08:49:45 ID:RKbTXMV3.net
- なんかわろた
- 577 :デフォルトの名無しさん:2020/01/29(水) 13:23:40.81 ID:zE4LbE2k.net
- >>575
:q!
- 578 :はちみつ餃子 ◆8X2XSCHEME :2020/01/29(水) 17:06:53 ID:F1ZVbYEm.net
- は? C-x C-c だが。
- 579 :デフォルトの名無しさん:2020/01/29(水) 19:14:06.94 ID:cVCtJzaf.net
- >>577
保存しないで抜けるんじゃないw
- 580 :デフォルトの名無しさん:2020/01/31(金) 16:53:29 ID:Hjj/uk/N.net
- g++やclangで-std=c++17オプションをterminal、VScode共に一括で
デフォルトにしたいのですが何か良い方法ってありませんか?
環境はMac OS Mojaveです
- 581 :デフォルトの名無しさん:2020/01/31(金) 22:24:21.02 ID:I/eJOw0W.net
- >>569
それがどうした?
4x4?それが自慢か雑魚野郎
こっちは自由にサイズ変更可能な行列演算ライブラリを20年以上前から仕事で使ってる。
そして一定サイズ以上の行列乗算では式テンプレートではまったくパフォーマンス向上できないこともわかってる。
土下座すんのはテメエなんだよ一知半解の低脳野郎
ちなみに>>500のサイトにあるBlitzの有名なコードだが、operator=内部で =r(i.j)などとして、行列乗算(each productではなく)に拡張した場合、
式テンプレートを使用しない方式と比べて100x100行列なら1000倍以上の速度低下を引き起こす
>アホだろお前、ETがSIMD以上に速度上がると思ってんの?
はぁ? 異なるHW条件持ち出してきて速度向上ほざいてアホの極みか低脳
- 582 :デフォルトの名無しさん:2020/01/31(金) 22:45:37 ID:I/eJOw0W.net
- >>569
あぁ
言い忘れてたわ式テンプレートは一時領域コピー時間の削減と言う意味で3項以上と書いてるわけだが、
一時領域の必要ない2項でメリットがあるというなら挙げてミロよ低脳www
寝ぼけんな雑魚野郎
- 583 :デフォルトの名無しさん:2020/01/31(金) 23:43:58 ID:HzrC4w9c.net
- 団子だろ
- 584 :デフォルトの名無しさん:2020/01/31(金) 23:56:24 ID:I/eJOw0W.net
- >>479
#pragma omp critical
使ってるコードで同じエラー出たわ
criticalセクションが無ければこのエラーは出ない
無くしたら動かんけどww
19.1のバグやね
まだ、気づいてない人多いんだろな検索してもヒットしない
- 585 :デフォルトの名無しさん:2020/02/01(土) 04:58:28 ID:sDMEFbxi.net
- >>581
ずいぶん反論に時間がかかったなw
>20年以上前から仕事で”使ってる”
作った側ではないなら実装時の問題とかには疎いんじゃねーの?
>Blitzの有名なコード
Blitzのコードとかどっかに書いてたか?
Blitzのソース読んだことないんで具体的にどのヘッダか示してくれるか
というかあんなクソ単純な説明のためのサンプルと同等のコードとは考えにくいが
>100x100行列なら1000倍以上の速度低下を引き起こす
へー。で??
俺別にETを絶賛などしてないんだが
質問者の話もそういう可変要素のやつじゃなかったよね
>異なるHW条件持ち出してきて
お前が
>能力不足をHWに補ってもらわないとなww
とかアホなこと抜かしたからだろ
- 586 :デフォルトの名無しさん:2020/02/01(土) 05:17:20 ID:sDMEFbxi.net
- >>582
>一時領域の必要ない2項でメリットがあるというなら挙げてミロよ低脳www
2項で一時領域が必要ないのはRVO前提にしてんだろうけど
お前コンストラクタしか頭に無いだろ
あと、よっぽど自信がおありのようだから質問してやるが
上に挙がってたコード例のようなやり方でバカ正直に行列の乗算のような計算を
仮に3項以上でやると重大な問題が起きるわけだが、それが何か即答できるよな?
- 587 :デフォルトの名無しさん:2020/02/01(土) 07:35:36 ID:tav2AwxI.net
- 最適化、高速化は具体的な用途とセットじゃないと語っても意味がない
要素ごとに演算すれば良い巨大ベクタと
1個の結果を得るのに広範囲にアクセスしなきゃならない巨大行列の乗算
全然違う話
- 588 :デフォルトの名無しさん:2020/02/01(土) 07:57:11 ID:sDMEFbxi.net
- 大きな行列の場合、高速化手法なんて他にいくつもあるからね(詳しくはないが
それ以前になぜ遅くなるのかも分かってない&ET以前にSIMDと言われて
「能力不足をHWに補ってもらわないとなww」とか(ライブラリ実装したことある立場ではないにもかかわらず)
平気で言える時点で、20年仕事でってのは嘘だろう
C++かじっただけのどこかの暇な学生だろ
- 589 :デフォルトの名無しさん:2020/02/01(土) 08:20:06.35 ID:tav2AwxI.net
- HWを使わない最適化(高速化)なんてあり得ないからね
SIMD、スレッド、キャッシュ、(GPU、FPGA、...)
これらを有効に使うのが最適化
- 590 :デフォルトの名無しさん:2020/02/01(土) 08:23:05 ID:tav2AwxI.net
- 高速化はどうでも良くて単に楽に書きたいだけならC/C++は向いてない
- 591 :デフォルトの名無しさん:2020/02/01(土) 12:22:48.15 ID:TULylXcw.net
- >>589
アルゴリズムはハード非依存と言っていいでしょ
- 592 :デフォルトの名無しさん:2020/02/01(土) 13:49:03 ID:eXUHWthh.net
- 「ソフトウェアに対して本当に真剣な人は、独自のハードウェアを作るべきだ。」
アラン・ケイ
- 593 :デフォルトの名無しさん:2020/02/02(日) 23:42:11 ID:vTjBAXNr.net
- >>591
ある段階まではね。
- 594 :デフォルトの名無しさん:2020/02/03(月) 08:23:47 ID:Ns1a0i+O.net
- >>593
具体的にどの段階?
ハードウェアに依存したアルゴリズムの最適化って何?
例えばロックフリーでCASが前提とかはあるけどあれも具体的なハードではないだろ
- 595 :デフォルトの名無しさん:2020/02/03(月) 08:56:52 ID:MWPuXKWI.net
- 除算回数を減らすチューニングなんかはHW依存と言えるんじゃない?
- 596 :デフォルトの名無しさん:2020/02/03(月) 12:02:25 ID:62FLJlST.net
- 触ったこと無い人には説明しても判らんやろて
- 597 :デフォルトの名無しさん:2020/02/03(月) 12:33:05.83 ID:n2ny0GIb.net
- 極端なこというと、量子コンピュータ向けアルゴリズムはHWが量子コンピュータであることが前提
HWとSW合わせて1つの装置だから
- 598 :デフォルトの名無しさん:2020/02/03(月) 15:01:01.85 ID:Exvuz9nd.net
- >>595
それはアルゴリズムとは言わないでしよ
計算のオーダー変わるわけじゃないし
- 599 :デフォルトの名無しさん:2020/02/03(月) 15:46:17 ID:MWPuXKWI.net
- >>598
いや、計算量も変わるしアルゴリズムでもあるけど?
- 600 :デフォルトの名無しさん:2020/02/03(月) 17:07:19 ID:Exvuz9nd.net
- >>599
計算量でなく計算オーダー
知らずにしゃしゃり出てくるとか
- 601 :デフォルトの名無しさん:2020/02/03(月) 17:13:32 ID:Si1aHG26.net
- ビッグオーが変わるようなのはアルゴリズムの違いだろうけど
ビッグオーがそのままで計算量だけが変わるのはどっちとも言いがたい
- 602 :デフォルトの名無しさん:2020/02/03(月) 17:33:31 ID:MWPuXKWI.net
- >>600
より除算回数の少ないアルゴリズムを選択することは現状のCPUは除算が遅いことに対応するわけだからHW依存と言えなくもない
この主張に対してそういった選択はアルゴリズムでもなければオーダーもかわらないと反論しているのですか?
- 603 :デフォルトの名無しさん:2020/02/03(月) 23:27:39.99 ID:Ns1a0i+O.net
- 特異な例を持ち出しても一般論を否定できないっての
- 604 :デフォルトの名無しさん:2020/02/03(月) 23:33:51.85 ID:e9E2NTEb.net
- 計算量のオーダーが変わらないアルゴリズム的最適化なんていくらでもあるよ
- 605 :デフォルトの名無しさん:2020/02/04(火) 00:20:58.43 ID:mQynHgib.net
- 有限の並列度の並列化ってオーダー変わらないけどワザワザ並列化可能なアルゴリズム使うよね
- 606 :デフォルトの名無しさん:2020/02/04(火) 00:29:54 ID:A8BeWHVj.net
- どうせO(n)だから配列丸コピしても問題なしっていう馬鹿を思い出したわ。
- 607 :デフォルトの名無しさん:2020/02/04(火) 00:37:14 ID:mQynHgib.net
- と言うか最適なオーダーのアルゴリズムなんて殆んど既知だから、オーダー変わるような最適化ってあんまりないよね
- 608 :デフォルトの名無しさん:2020/02/04(火) 12:35:39.06 ID:SyKO2BA6.net
- 車輪の再発明は良く批判されるけど
素数を列挙するプログラムなんて
既に判ってる素数はテーブル参照するのが最適なのに
なんで毎回計算して地球環境破壊に貢献してる訳?
- 609 :デフォルトの名無しさん:2020/02/04(火) 12:47:30 ID:GNpMFwh2.net
- ROM容量にはテーブル化は最適ではない
- 610 :デフォルトの名無しさん:2020/02/04(火) 12:48:27 ID:t2uF8z+f.net
- 競技ルール的なアレじゃね
- 611 :デフォルトの名無しさん:2020/02/04(火) 13:48:07 ID:4xoSX3tu.net
- 「ROM容量にはテーブル化は最適ではない」
典型的な論点ずらし
- 612 :デフォルトの名無しさん:2020/02/04(火) 16:52:46.33 ID:t6zt27Qb.net
- >>608
素数の話はどっから出てきた?
アルゴリズムの例として挙げたのかも知れんが、
別のスレッドで最近見た気のする話題なので投稿する場を間違えたのかと。
実用プログラムでは「車輪の再発明」は上手いやり方じゃないけど、
低レベルの部分から組み上げたほうが理解が深まるって面はあるでしょ。
- 613 :デフォルトの名無しさん:2020/02/04(火) 16:53:25.40 ID:GNpMFwh2.net
- お前が何を論じたいかとか
知るか
- 614 :デフォルトの名無しさん:2020/02/04(火) 17:26:23 ID:MKouw6om.net
- 車輪の再発明は学習に最適
- 615 :デフォルトの名無しさん:2020/02/05(水) 00:16:57 ID:GCTF3gV7.net
- >>611
>>608が最適と豪語したから反例挙げてるだけだろ
お前のほうが論点ずらしだよw
- 616 :デフォルトの名無しさん:2020/02/05(水) 01:36:02.88 ID:RkJ0eyiK.net
- >>615
悔しそうですねw
- 617 :デフォルトの名無しさん:2020/02/05(水) 04:53:06 ID:GCTF3gV7.net
- 夜中まで大変だなw
- 618 :デフォルトの名無しさん:2020/02/05(水) 13:53:11 ID:rzfrqein.net
- バイナリデータを、文字列に変換して保持しようとした場合、素直に16進数表記にするのがよい?
データ量倍になるけど
- 619 :デフォルトの名無しさん:2020/02/05(水) 14:09:47 ID:ox5K4d9e.net
- おまえがやりたいようにやればいいとおもう
- 620 :デフォルトの名無しさん:2020/02/05(水) 14:22:22 ID:ElBlpF/h.net
- Base64
- 621 :デフォルトの名無しさん:2020/02/05(水) 14:32:42 ID:rzfrqein.net
- >>620
あーそんなのありましたな
ちょっとググったらライブラリも出てきたしよさそう
ありがとうございます
- 622 :デフォルトの名無しさん:2020/02/05(水) 15:41:12 ID:zWcxLf4u.net
- それでいいんだw
- 623 :デフォルトの名無しさん:2020/02/05(水) 16:07:18 ID:ImPcpEtv.net
- それでいいなら%Xで出力するのでも良い気がするね
base64にすると単純な16進表記よりデータ量増えるし、%Xなら余分なライブラリもいらないし
まぁどっちでもいいんだろうけど
- 624 :デフォルトの名無しさん:2020/02/05(水) 16:08:34 ID:ImPcpEtv.net
- 嘘言ったわ、base64は6ビットごとに1文字だからデータはこっちのほうが小さいか
- 625 :デフォルトの名無しさん:2020/02/05(水) 16:54:58 ID:2rKdW1Ec.net
- 8bit→HEX2桁→2倍
8bit→Base64→4/3倍
やろ
一定数以上桁が必要なのでpaddingとかあるし100%ではないが
- 626 :デフォルトの名無しさん:2020/02/05(水) 18:52:50 ID:hYuejzNd.net
- base64なんかビットシフトとテーブルだけで簡単に実装できるし依存ライブラリ増やす必要もないのでは
- 627 :デフォルトの名無しさん:2020/02/05(水) 19:13:05 ID:PZ/5vknB.net
- 16進数派
- 628 :デフォルトの名無しさん:2020/02/05(水) 19:23:50 ID:2rKdW1Ec.net
- データ量にもよるけど
"\x00\x00\x00\x00..." が一番楽じゃね
- 629 :デフォルトの名無しさん:2020/02/05(水) 19:35:11 ID:hYuejzNd.net
- 何のためにテキストに変換したいのかがわからんとなんとも言えんな
目的によって使える文字種も違うからな
- 630 :デフォルトの名無しさん:2020/02/05(水) 19:41:08.83 ID:PZ/5vknB.net
- Base64で良いって言ってるんだから
終了
- 631 :デフォルトの名無しさん:2020/02/05(水) 23:15:38 ID:NEouxGwD.net
- Base64 は、HTML でもよく使う
Base64の文字列で、PNG/JPEG画像を、HTMLファイルに直接埋め込める
<img src="data:image/png;base64,xxxxx..." />
- 632 :デフォルトの名無しさん:2020/02/06(Thu) 00:01:41 ID:7WdfZf7H.net
- base64って7bit通信路通すためのもんでしょ?
textにするならヒューマンリーダブルにするのが無難だと思うけど
そうじゃなけりゃバイナリでいいじゃん
と思った
まぁ好きにしなよ
- 633 :デフォルトの名無しさん:2020/02/06(木) 00:07:14.11 ID:/W9iMVJD.net
- ヒューマンリーダブル
- 634 :はちみつ餃子 ◆8X2XSCHEME :2020/02/06(Thu) 01:02:03 ID:jSrTrJa0.net
- ish みたいなやつで UTF-8 を利用したのをどっかで見たことある
- 635 :デフォルトの名無しさん:2020/02/06(Thu) 06:43:09 ID:bk3hpXlE.net
- >>632は一体何を主張してるんだろう…
- 636 :デフォルトの名無しさん:2020/02/06(Thu) 06:44:20 ID:bk3hpXlE.net
- >>634
ishなつい
パソコン通信の時代に使ってたけどもう30年近く前なんだな
- 637 :デフォルトの名無しさん:2020/02/06(Thu) 10:19:44 ID:s0z6ZqT0.net
- テキストファイルを結合してishでデコードしてえっちなMAGファイルを見てた人は手をあげなさい
- 638 :デフォルトの名無しさん:2020/02/06(Thu) 13:08:45 ID:sNihMBVC.net
- ishはBase64と違って誤り訂正あるやん?
- 639 :デフォルトの名無しさん:2020/02/06(Thu) 13:22:34 ID:euRWcwLl.net
- ソーセージのだけ覚えてる
- 640 :デフォルトの名無しさん:2020/02/07(金) 02:44:46 ID:FDFOp562.net
- boost::serializationがお手軽にシリアライズできて便利だなと使いまくってたら、
map系コンテナがあると一気に性能落ちるっぽいんですが、これって当たり前ですかね?
protocol buffersなどの他のシリアライザに替えて解決するものでもなさそうだし、どうしたもんかな…
- 641 :デフォルトの名無しさん:2020/02/07(金) 11:04:33 ID:j3f+aFgv.net
- >>637
here!
- 642 :デフォルトの名無しさん:2020/02/07(金) 11:15:10 ID:0A6dyGR7.net
- 独学で組み込みやりたいんだが…
- 643 :デフォルトの名無しさん:2020/02/07(金) 11:40:38 ID:PWhN+bN7.net
- 圧縮してからBase64すればbitチェックも出来てサイズも減って一石二鳥
- 644 :デフォルトの名無しさん:2020/02/07(金) 12:16:58 ID:qwopp/ku.net
- >>642
やればいいんじゃないかな
- 645 :デフォルトの名無しさん:2020/02/07(金) 12:29:23 ID:/AlUflk/.net
- >>642
やればいいんじゃね?
やれない理由があるならそれ書かないとわからんし
- 646 :デフォルトの名無しさん:2020/02/07(金) 12:30:00 ID:VWyX2qgb.net
- 今の組み込みは環境整いすぎてハード触ってる感ないよね
- 647 :デフォルトの名無しさん:2020/02/07(金) 12:35:41 ID:8FC0VQS8.net
- 小規模CPUなら全て自力のコードで書けるよ
- 648 :デフォルトの名無しさん:2020/02/07(金) 12:47:59 ID:0A6dyGR7.net
- Arduinoでいい?
- 649 :デフォルトの名無しさん:2020/02/07(金) 13:15:59 ID:j+3lGBli.net
- いいんじゃない?なんでわざわざ聞くのかわからんが
- 650 :デフォルトの名無しさん:2020/02/07(金) 13:20:18 ID:8FC0VQS8.net
- 自力が好きならまずは
PICフルアセンブラ
- 651 :デフォルトの名無しさん:2020/02/07(金) 13:31:27 ID:0A6dyGR7.net
- 制御的な知識は多少あるから今更Lチカやってもなぁって感じだ
- 652 :デフォルトの名無しさん:2020/02/07(金) 13:47:41 ID:8FC0VQS8.net
- PIC=Lチカ
かよ
- 653 :デフォルトの名無しさん:2020/02/07(金) 13:51:42 ID:PWhN+bN7.net
- 条件後出しするなとあれほど
板チ
- 654 :デフォルトの名無しさん:2020/02/07(金) 14:39:32.66 ID:aI41PDC9.net
- >>642
SPRESENSE、Arduinoよりスペックが高いからあまり制約を考えずに触れるからいいよ
- 655 :デフォルトの名無しさん:2020/02/07(金) 18:25:14 ID:tbpxydmI.net
- 組み込みって難しそうなのに年収は総じて低めだよね
オラオラ系Webプログラマとかのほうがマシだったりするし
なんか世知辛い
- 656 :デフォルトの名無しさん:2020/02/07(金) 20:39:09.61 ID:Dpv8aBJv.net
- 組み込みで出来る人は多分大企業メーカーのR&Dに転職してっちゃうんじゃないかな。
なんとなくのイメージだけど、組み込みプログラミングが必要な製品の品質管理を考えると、
請負組み込みの会社に開発を頼める範囲ってごく簡単な部分に限られそうだから、
単価が低い仕事が多くなっちゃうのかも。
- 657 :デフォルトの名無しさん:2020/02/07(金) 22:46:17 ID:k+IYFIKh.net
- まあコスト削減のために低スペックハード使うわけだしな。
- 658 :デフォルトの名無しさん:2020/02/08(土) 00:46:23 ID:Q7LgS8OA.net
- オラオラ系というよりウェーイ系というほうが表現が適切だろう
ホームページ見ただけでウェーイって叫びながら意識高い開発してる姿が容易に想像できる
- 659 :デフォルトの名無しさん:2020/02/08(土) 03:53:19 ID:/OouxCiy.net
- いわゆるロクロ回してる系やな
- 660 :デフォルトの名無しさん:2020/02/08(土) 13:16:27 ID:v1IBJgnW.net
- 京セラも陶器だったんやな
- 661 :デフォルトの名無しさん:2020/02/11(火) 18:11:48.90 ID:poOKFhcK.net
- そもそもここで質問するのが適切か分からないのですが
とりあえずC++っぽいので分かる方がいたら教えてください。
とあるライブラリのビルドスクリプトを叩いたところ以下のようなエラーが出ました。
```
略/filesystem.hpp:784:13: error: no member named 'make_absolute' in 'std::__1::__fs::filesystem::path'
略
```
ファイル名からC++のコンパイルに失敗しているようなのでした。
普段は別の言語を触っておりC++は触ったことがありません。
調べた限り、ヘッダの二重読み込みでエラーになっているとのことでしたが
該当の `filesystem.hpp` には #pragma once が宣言されています。
環境はMacOS 10.15.3で、とりあえず途中でgccを入れ直したりしましたがやはり同じところでコケます。
Mac上で #pragma once が機能するように環境を設定するにはどうしたら良いでしょうか。
よろしくお願い致します。
- 662 :661:2020/02/11(火) 18:13:22.88 ID:poOKFhcK.net
- 貼り付けるエラー文言間違い得ました。
```
略/filesystem.hpp:52:9: error: redefinition of 'path'
略
```
です。
- 663 :デフォルトの名無しさん:2020/02/11(火) 18:30:48.12 ID:GpQNLMm4.net
- >>661-662
とあるライブラリとか言わずにそのライブラリを示して。
初心者はどんな情報が必要か判断する能力がないので、情報を選別してはいかん。
情報を小出しにされるとイライラゲージが上昇しやすいから、
状況を再現可能な情報を提示することを心掛けて。
- 664 :デフォルトの名無しさん:2020/02/11(火) 18:38:14.46 ID:poOKFhcK.net
- >> 663
すみません、おっしゃる通りですね。
このライブラリのインストールになります。
github.com/WonderMediaProductions/Maya2glTF
- 665 :デフォルトの名無しさん:2020/02/26(水) 08:41:15 ID:PiyizPRV.net
- アンカもマトモに撃てないってアホじぇねえのコイツ
- 666 :デフォルトの名無しさん:2020/02/26(水) 11:09:35.39 ID:wiEfavJ1.net
- 見ないで答えるけど
include path の順番がまずいんじゃね
- 667 :デフォルトの名無しさん:2020/02/27(Thu) 10:57:15 ID:RXnANkEf.net
- -----sample.h (classAは変更不可)
class A
{ private: virtual void funcX(void) = 0;
public: void funcY(void);
public: void funcZ(void);
};
class B : private A {・・・};
-----
このような関係性で
classBでfuncXとfuncY(内部でfuncXを使用)が不要、funcZが必要な場合
funcXをclassBに追加せずに済む方法があればいいのですが
funcXもclassBに追加するしかないですか?
- 668 :デフォルトの名無しさん:2020/02/27(木) 11:17:47.73 ID:R9m18Hk4.net
- 追加ってのがvtblに追加って意味ならそうだよ
- 669 :デフォルトの名無しさん:2020/02/27(木) 11:55:46.48 ID:RX8iJBd3.net
- 継承しなければいい
- 670 :デフォルトの名無しさん:2020/02/27(Thu) 13:04:34 ID:RXnANkEf.net
- >>668
ありがとうございます
>>669
純粋仮想関数が含まれているので継承しないと使用できません
- 671 :デフォルトの名無しさん:2020/02/27(Thu) 15:19:56 ID:G6pyHvdg.net
- Icon とか継承したクラス造ろうとしたら protected 観たいなエラー出るのですが
無理やり継承する方法はありますか?
- 672 :デフォルトの名無しさん:2020/02/27(Thu) 21:56:32 ID:nCyLO+2A.net
- Ruby では、Forwardable モジュールで、
継承ではなく、包含を使って、インスタンス変数に委譲できる
使えるメソッドも、限定できる。
配列のメソッド中、指定した2つのメソッドだけが使える
@ary = [ ]
def_delegators( :@ary, :push, :pop )
- 673 :デフォルトの名無しさん:2020/02/27(Thu) 22:15:25 ID:IR/jNZBp.net
- 組み込みプログラマになりたいんだけどオススメの本とかあったら教えてください
- 674 :デフォルトの名無しさん:2020/02/27(Thu) 22:20:30 ID:dsi+r0l9.net
- 組み込みって言っちゃうと範囲が相当広いと思うんだけど具体的に何か目指してるのとかあるの?
- 675 :デフォルトの名無しさん:2020/02/27(Thu) 22:22:34 ID:IR/jNZBp.net
- 機械メーカーで製造やってるんどけどいつか組み込みシステムの部署に行きたいのです
- 676 :デフォルトの名無しさん:2020/02/27(Thu) 22:28:28 ID:IR/jNZBp.net
- C言語は学生の頃少しやった程度ですが、苦Cや新明解C言語などの本で勉強し直しているところ
- 677 :デフォルトの名無しさん:2020/02/27(Thu) 22:31:05 ID:nCyLO+2A.net
- 組み込みは、C
情報処理資格・エンベデッドの教科書を読めば?
- 678 :デフォルトの名無しさん:2020/02/27(Thu) 22:33:26 ID:IR/jNZBp.net
- >>677
いきなり難易度が高そうだ…
- 679 :デフォルトの名無しさん:2020/02/27(Thu) 22:44:47 ID:R9m18Hk4.net
- >>675
先に異動してしまってそこで学ぶ方がいいのでは?
若いなら可能だよ
おっさんならそもそも実務経験なしのスキルは評価されないと思う
- 680 :デフォルトの名無しさん:2020/02/27(Thu) 23:05:06 ID:IR/jNZBp.net
- >>679
29歳は若手ですか?
- 681 :デフォルトの名無しさん:2020/02/27(木) 23:12:49.02 ID:R9m18Hk4.net
- >>680
転職で考えればまだポテンシャルで採ってもらえる年齢
まぁ30前半までだと思うけど
企業文化にもよるけど可能性はあるんじゃない?
だめもとでいってみて、ダメでもそれが将来のコネになるかもしれないのだから
情熱あるなら動いてみるのが正解だと思うよ
- 682 :デフォルトの名無しさん:2020/02/27(Thu) 23:19:52 ID:IR/jNZBp.net
- >>681
ありがとう。
上司にはいつかは異動したいとは言ってる。後は組み込みやってるところにアピールする必要もあると思うんだ。
だから基礎でもいいから勉強しときたい。
- 683 :デフォルトの名無しさん:2020/02/27(Thu) 23:24:42 ID:dsi+r0l9.net
- 異動先の想定があるなら異動先の人間に聞くのが一番良いんじゃないかな?
話できる機会を作ってもらえるならポテンシャルやモチベーションを見せるチャンスにもなるし
組み込みって業種や企業で文化がだいぶ違うイメージだから自社内異動想定なら自社に目標合わせるのが一番だと思う
- 684 :デフォルトの名無しさん:2020/02/27(Thu) 23:29:18 ID:IR/jNZBp.net
- >>683
聞いたことあるんだけど、プログラミングできなくても設計書読めたらなんとかなりますよーって言われたなぁ。
- 685 :デフォルトの名無しさん:2020/02/27(Thu) 23:30:08 ID:DhCS2IXf.net
- >>680
29ならもうおっさん
その歳で経験無いなら組み込み系は絶望的
- 686 :デフォルトの名無しさん:2020/02/27(Thu) 23:43:07 ID:dsi+r0l9.net
- >>684
個人的にはプログラミング的なことなんざ実務やってりゃ嫌でも身につくんでそんな気にしない
素養とか基礎知識はあったほうがそりゃいいけどね
どれくらい部署間の関係性が強いかわからんが他部署出身者はその部門のことをケアした提案とかができるからむしろ重宝するくらい
やる気ある人間にやらせたほうが結果的に効率上がるからそういうのは積極的に対応する
まぁとは言っても企業文化次第ではあるけどねー
- 687 :デフォルトの名無しさん:2020/02/28(金) 00:06:09 ID:bgqQewMR.net
- >>682
勉強するのはもちろん構わない
でもしっかり勉強してから異動とか思ってたら機を逃すから注意ね
上でも言ってるとおり組み込みといっても千差万別で幅広い
組み込みlinuxかRTOSかぐらいは絞らないと
- 688 :デフォルトの名無しさん:2020/02/28(金) 10:20:28 ID:OpAeM4nJ.net
- PLC も組み込み系かな?
- 689 :デフォルトの名無しさん:2020/02/28(金) 23:31:02 ID:KhVuQUrV.net
- float型からdouble型にキャストした際に値が変わってしまうのですが、一般にどうやって対処するのでしょうか。
float f4_sample_t =0.0002;
double f8_sample_t = (double)f4_sample_t;
とすると、0.0002を期待するのですが0.000199****となります。
↓のように、してみましたが0.00199**となってしまいました。
f8_sample_t=(double)((uint)(f4_sample_t*10000))/10000;
- 690 :デフォルトの名無しさん:2020/02/28(金) 23:53:01 ID:bgqQewMR.net
- >>689
簡単に言うと浮動小数の中身は2進数の小数
なのでもともと0.0002を正確に表せない
表示する際に人にわかりやすくするために10進数の小数に変換するが
そのとき何桁まで計算するかで変わってるように見える
- 691 :デフォルトの名無しさん:2020/02/29(土) 00:56:43.52 ID:WzbNfV7+.net
- 0.0002 は循環小数だなぁ。
十進数ではキリのよい小数でも二進数では正確に表せないのはよくあること。
誤差はあるものだという考えで扱わないといけない。
一般には double の仮数部は 52bit の精度だから、この精度の範囲を超えるような (浮動小数点の) 計算は諦めるしかない。
https://ja.wikipedia.org/wiki/%E5%80%8D%E7%B2%BE%E5%BA%A6%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0
そんでもって計算の内容次第では精度が失われることがあるから、そこらへんも注意が必要。
https://ja.wikipedia.org/wiki/%E8%AA%A4%E5%B7%AE#%E8%A8%88%E7%AE%97%E8%AA%A4%E5%B7%AE%E3%81%AE%E7%A8%AE%E9%A1%9E
どうやれば出来るという簡単なものではないのでちゃんとした専門書で学ばないといけないと思う。
浮動小数点で計算するのは諦めて速度も諦めるなら
十進小数ライブラリを作るか導入してもいいだろうし、
計算の内容によっては有理数型を導入するとか
まあ出来ることは色々とあるよ。
- 692 :蟻人間 ◆T6xkBnTXz7B0 :2020/02/29(土) 02:50:21 ID:/KNqnMc5.net
- 固定小数点数や十進表現の選択肢もある。
- 693 :デフォルトの名無しさん:2020/02/29(土) 07:16:56 ID:a4Xwg1lT.net
- floatからdoubleへの変換では値は変わらない
- 694 :デフォルトの名無しさん:2020/02/29(土) 08:19:49.16 ID:WjxTYPok.net
- >>690-693
ありがとうございます。
現時点では理解できてないのですが、厳密に表現出来ない値があるという認識で良いでしょうか。
宣言時にdoubleで0.0002とする場合はその後の積和演算の誤差が問題にならないのですが、こちらの制約上でfloat入力しかできないのでキャストしています。
- 695 :デフォルトの名無しさん:2020/02/29(土) 08:23:33.95 ID:a4Xwg1lT.net
- 厳密に表現出来ない値があるのは当たり前
floatやdoubleで表現出来る値は有限通りなんだから
- 696 :デフォルトの名無しさん:2020/02/29(土) 08:32:37 ID:a4Xwg1lT.net
- floatの中身が元々10進数で簡単に表せる数という事がわかってるなら
doubleにするときに単純なキャストではなく
そういう補正を加えれば良い
10進7桁までならdouble精度に復元出来る
- 697 :デフォルトの名無しさん:2020/02/29(土) 14:00:46.61 ID:3sltTQiA.net
- >>693
>>689 のは既にfloatの時点で0.0002じゃないんだよなω
- 698 :デフォルトの名無しさん:2020/02/29(土) 17:13:36 ID:VpO1O9GW.net
- >>694
許容できる誤差の閾値がどうやって決まってんのか謎だけど
0.0002を救いたいなら例えば入力は10000倍しておくという運用にして
doubleにするときに10000で割るとかね
- 699 :デフォルトの名無しさん:2020/02/29(土) 23:21:10 ID:6IdZMwnf.net
- 浮動小数点は、非連続・飛び飛び。
数値の間が、ものすごく小さいこともあるし、大きい事もある
よく起こるバグは、ソフト・サーバーなどは、連続して3日しか動かないというもの
float に、1ずつ足していくと、3日後には数値間が、1以上になって足せなくなる。
組み込みプログラマーは、こういう基礎的なことを、知らない香具師が多いw
しかも発見するのに、3日も掛かるから、テストで発見できないので、こういう製品が多いw
- 700 :◆QZaw55cn4c :2020/02/29(土) 23:26:17 ID:c0ztbNyQ.net
- >>699
えーと、組み込みの人なら、そもそも float/double は昔は劇的に遅かったという名残があって最初から float/double を使わないんじゃないかな?
最近はそうじゃないのですか?
- 701 :デフォルトの名無しさん:2020/02/29(土) 23:38:03 ID:wnKEWZ56.net
- >>700
老害ですか?
- 702 :デフォルトの名無しさん:2020/02/29(土) 23:50:06 ID:uIzTDUXo.net
- 組み込みを一括りにしてる奴は見識が狭い井の中の蛙
- 703 :◆QZaw55cn4c :2020/02/29(土) 23:51:06 ID:c0ztbNyQ.net
- >>701
ジジイ、ジジイか…
それじゃお前はなんだ、この餓鬼が
おれはお前さんがこの世に落っこって来る前からバグつくってんだ
- 704 :デフォルトの名無しさん:2020/03/01(日) 00:15:22 ID:QmxFkZ5G.net
- 1ずつ足していく単純なカウンターにfloatを選ぶヤツがいるとも思えんが
組み込みだと特に
- 705 :デフォルトの名無しさん:2020/03/01(日) 00:23:59.37 ID:2kmwzB0g.net
- >>704
>>699は例のRubyバカだろうから、まともに考えるだけ無駄だと思うよ。
初心者スレで嘘や意味不明なことを垂れ流して周りに迷惑かけるのやめて欲しい。
- 706 ::2020/03/01(日) 01:17:16.77 ID:7ZOlNSWM.net
- >>705
決心しました
私も ruby で逆襲粉砕してやろうじゃありませんか
ruby のいい教科書を教えてください…
- 707 :デフォルトの名無しさん:2020/03/01(日) 13:19:26 ID:WMkrI5AG.net
- 706
https://www.尼損.co.jp/dp/B00QR4JST2
- 708 :デフォルトの名無しさん:2020/03/01(日) 22:54:47.39 ID:NSpMdQYF.net
- たのしいRuby 第6版
Ruby 2.6 対応で、ベストセラー本
- 709 :デフォルトの名無しさん:2020/03/03(火) 21:55:05 ID:jgFG2YH5.net
- >>708
トイレットペーパー代わりに良いね
- 710 :デフォルトの名無しさん:2020/03/04(水) 09:42:13.15 ID:hHbt2ovK.net
- マスゴミもトイペ買えずに困ってる一般庶民(それもあやしいが)の家訪問して
もうこの一本しかないの?今日一日持たない!とか取材してる暇あったら
本社ビルの在庫数本でも持って行って渡してやればいいんだよ
災害報道のときもいつも思うわ
マスゴミが本気で心配するなら新聞紙で尻ふけばいいとか本当の事言えば良いのにな
- 711 :デフォルトの名無しさん:2020/03/04(水) 09:46:49.16 ID:+mh63BBw.net
- まずお前がやってから言え
- 712 :デフォルトの名無しさん:2020/03/04(水) 10:55:34.93 ID:3tlRzDBf.net
- こんだけ災害の多い日本で備蓄なしのやつって頭悪すぎでしょ
- 713 :デフォルトの名無しさん:2020/03/05(Thu) 04:17:48 ID:E3z3OjjV.net
- 自作クラスのインスタンスを大量に作成したのち破棄したのですが、Linuxのtopコマンドで見ると
メモリを掴んだままでどれだけ待っても解放してくれません。これはいわゆるメモリリークでしょうか?
作成したインスタンスのデストラクタが全て走っていることはプリント文をかまして確認してますが、
「デストラクタが走ったからそのインスタンスのメモリは解放される」と思うのは間違いでしょうか?
- 714 :デフォルトの名無しさん:2020/03/05(木) 06:42:53.16 ID:cV+8pcak.net
- >>713
そのプログラムは動きつづけてるのかな。
プロセスが生きてるなら、そのプロセス自身で再利用できるように
OSに返さないで、と言うかOSが取り戻さないで残してることはあるでしょ。
いよいよ他のプロセスで使うメモリが減ってきたところで
「あのプロセスから返却されたメモリがあったはず」と
OSが本当に取り立てる、と。
変な擬人化をした、厳密とは言い難い説明だけど。
- 715 :デフォルトの名無しさん:2020/03/05(木) 06:44:44.35 ID:zdEofaoY.net
- 本当にリークだったりして
- 716 :デフォルトの名無しさん:2020/03/05(木) 10:32:20.81 ID:ZZWMeQXX.net
- >>714
プログラムは全インスタンス解放後にstd::chrono::secondsでスリープかけていて
2GBほど掴んだメモリが半日経ってもそのままでした
こういうのもシステム起因の挙動なのでしょうか?
- 717 :デフォルトの名無しさん:2020/03/05(Thu) 11:03:11 ID:2gUuzrSw.net
- >>716
心配なら Valgrind とかで調べてみれば?
Linux はなるべくメモリを使い切る方針だったはず (※) なので、 >>714 のようなことは普通にあると思う。
※ 空いているメモリがある状態というのは要するにメモリを無駄にしている状態ってこと
- 718 :デフォルトの名無しさん:2020/03/05(Thu) 13:46:12 ID:866E1Ujc.net
- 他のプログラムで多量に確保してみれば?
- 719 :デフォルトの名無しさん:2020/03/05(Thu) 14:55:04 ID:LYrzkUWd.net
- >>716
まず質問者の心がけとして
言葉だけでなく実際のコードと計測結果をそのまま書け
- 720 :デフォルトの名無しさん:2020/03/05(木) 16:41:49.18 ID:ZZWMeQXX.net
- 713=716ですが、malloc_trim関数を呼んだらメモリが空きました
>>714さんの仰るようにOSに返していないのが原因のようです
>>719
すみません、自社内のかなり複雑で汚いコードなので晒せませんでした
厄介なことにスクラッチから同じ程度のメモリを使うテストコードを書いたら現象は再現しませんでした
- 721 :デフォルトの名無しさん:2020/03/05(Thu) 17:13:53 ID:ywFWHxIm.net
- OSからのリクエストと返却はコスト高だから
ランタイムのアロケーターが握ったままでOSには返さない
OSへ返すタイミングはプロセスが終わるとき、という実装は割りとありえそう
- 722 :デフォルトの名無しさん:2020/03/05(木) 18:22:39.16 ID:ZZWMeQXX.net
- お礼を言うのを忘れてました
回答くれた方ありがとうございました
- 723 :デフォルトの名無しさん:2020/03/05(木) 18:46:09.59 ID:LYrzkUWd.net
- >>722
malloc_trim使えるなら
malloc_statsも見てみたらいい
たぶんmmapで確保した分は返却されない
- 724 ::2020/03/05(木) 21:06:25.30 ID:BOwkxST5.net
- >>713,716
http://www.kouno.jp/home/c_faq/c7.html#25
たぶん C++ もそうだと思います
- 725 :デフォルトの名無しさん:2020/03/06(金) 23:01:27.31 ID:+gnSZkOM.net
- CとC++ってなんで一緒にされていることが多いの?
- 726 :デフォルトの名無しさん:2020/03/07(土) 00:18:58 ID:OUVuA7Mu.net
- 一緒に使うことが多いから
じゃね?
- 727 :デフォルトの名無しさん:2020/03/07(土) 08:11:04.10 ID:bdrHDbLb.net
- 他の言語同士に比べて類似してる部分が多いだけに、
Cでの動作はこう、しかしC++では違う、みたいな情報の有用性が高いから、かも。
少なくとも、こういう質問と回答のようなスレッドでは。
- 728 :デフォルトの名無しさん:2020/03/07(土) 08:55:37 ID:gWhxXX2s.net
- ならC言語勉強するならC++もやれってことか?
- 729 :デフォルトの名無しさん:2020/03/07(土) 10:45:02.41 ID:XLWmxUUx.net
- c++の方ではcとの互換性を大きな要素として挙げてるからな。
元々cの前処理での言語拡張が始まりだし。
cの方はもう切り離して一緒にされたくないだろうが。
- 730 :デフォルトの名無しさん:2020/03/07(土) 16:29:47.82 ID:jUFqUInS.net
- C が C++ との非互換を最小限にするってのは大きな方針になってるよ。
少なくとも C99 の時点では。
http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf#page=11
ただし「C を C++ にしたいわけではない」みたいな文言もある。
C2X のドラフトを見る限りでも C++ に追従すると取れる変更は結構ある。
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n2478.pdf
C++ を使う上で改めて C を学ぶ必要はないが、
仕様としてはつかず離れずを維持し続けるのは C の側も是としている。
- 731 :デフォルトの名無しさん:2020/03/07(土) 16:53:11 ID:wgBH55a3.net
- いや、コンストラクタやデストラクタが暗黙で動く時点で全然違う言語でしょ。。
解釈を 2、3層入れてやっと表面上は同じように動くみたいな状況なわけでさ。
その辺誤魔化すからロクでもないことが起きるんだよ。
- 732 :デフォルトの名無しさん:2020/03/07(土) 17:26:14 ID:jUFqUInS.net
- >>731
いや、もちろん違う言語だよ。 >>729 の
> cの方はもう切り離して一緒にされたくないだろうが。
に対して、仕様の策定では連携していく方針があるってことを言ってるだけ。
- 733 :デフォルトの名無しさん:2020/03/07(土) 18:33:23.15 ID:RZgTMQsN.net
- >>728
Cを使える人は(C++知らない状態からでも)C++もそこそこすぐ馴染む
C++を使ってる人(C知らない人)はCだと使えないことが多いと思う
- 734 :デフォルトの名無しさん:2020/03/07(土) 18:38:46.76 ID:RZgTMQsN.net
- C++2017の電子本が無料らしい
Embarcaderoからメール来た
- 735 :デフォルトの名無しさん:2020/03/07(土) 20:21:56.03 ID:V3yrok8D.net
- Cから始めてC++に移行した時は
クラス・継承(仮想関数)・例外・new,deleteをもっと早く知りたかったわ
- 736 :デフォルトの名無しさん:2020/03/08(日) 06:17:37.40 ID:OioMZJ5n.net
- =0
- 737 :デフォルトの名無しさん:2020/03/10(火) 21:03:25.71 ID:4I7RYXwm.net
- 組み込みシステム部に転属したくてC言語の勉強してたんだけど、使ってる言語はC++とJAVAって聞いて萎えてる。
- 738 :デフォルトの名無しさん:2020/03/10(火) 21:27:52 ID:ez/DBx9r.net
- それならCそんな無駄じゃないような
- 739 :デフォルトの名無しさん:2020/03/10(火) 21:35:56 ID:3+CC2Qsy.net
- C言語が出来るってのが最低条件なんだろう
ついでにその部署には「この門をくぐる者は一切の希望を捨てよ」とか書いてないか?
- 740 :デフォルトの名無しさん:2020/03/10(火) 21:38:36 ID:4I7RYXwm.net
- >>738
無駄ではないが遠回りしたような…
>>739
その部署の新人教育見てたらJAVAとC++しかやってなかった。
- 741 :デフォルトの名無しさん:2020/03/10(火) 21:39:52.01 ID:ez/DBx9r.net
- まあ確かに、例えば変数の宣言がいちいちスコープの最初とか今更考えられんな
- 742 :デフォルトの名無しさん:2020/03/10(火) 21:40:37.65 ID:4I7RYXwm.net
- JAVAとC++ならどっちからやるべきなのだろうか
- 743 :デフォルトの名無しさん:2020/03/10(火) 21:47:57.73 ID:3+CC2Qsy.net
- 一か月でJavaをやりその次の一か月はC++をやる
さらに5月からはもう一度Javaをやって六月からはC++をやる
そして7月にはC言語をやる
- 744 :デフォルトの名無しさん:2020/03/10(火) 21:50:37.20 ID:808QYtU8.net
- >>742
どういう組み込み機器なんだ?
javaならjavaでsmartcard制御するのか、gui作るのかでかなり違う
- 745 ::2020/03/10(火) 21:50:59.61 ID:7t0MtDjq.net
- >>742
両方書いている者としては、java は virtual 付きで、C++ なら p = new XXX, p->property, p->method() と書く気持ちと思想で p.property, p.method() と書いておれば間違いないです
それと、コンストラクタの書き方、基底クラスの呼びかたは毎回お手本をみています
両方同時にやって混乱するようではセンスを疑います
- 746 :デフォルトの名無しさん:2020/03/10(火) 21:59:27 ID:EBgJJlCp.net
- C++対応してるプロゲートみたいなサイトってないの?
- 747 :デフォルトの名無しさん:2020/03/10(火) 22:01:39 ID:rLdwFfVF.net
- 俺、変数宣言は関数の頭じゃないとコンパイル通らない環境なんだがw
GUIつうかOSからして無いんだがw
組み込みってひとまとめに言っても範囲広すぎるからもう少し具体的な情報無いとアドバイスしづらいよね
- 748 :デフォルトの名無しさん:2020/03/10(火) 22:07:13.07 ID:3+CC2Qsy.net
- 相互参照がかんたんな方からやればいいんだよ
- 749 :デフォルトの名無しさん:2020/03/10(火) 22:18:40.36 ID:HIU8QCM9.net
- >>747
C99 に対応してないコンパイラってことか。
理屈の上では実際のメモリの確保は関数の頭にまとめてしまえばいいから
実行時のリソースが限られていても関係なく出来るはずなんだが、
マイナーな環境だとコンパイラもまともなものがなかったりするんだよな……。
- 750 :デフォルトの名無しさん:2020/03/10(火) 22:20:49 ID:808QYtU8.net
- >>743
おれとしてはc++から始めることをおすすめするな
javaから入るとc++でもjavaの作り方をずっと引きずる
そういう人数多く見てる
それだと組み込みでつらい場合が考えられる
ただしc++極めるのはまず無理なので
適当なところで打ち切る必要はある
- 751 :デフォルトの名無しさん:2020/03/10(火) 22:22:24 ID:EBgJJlCp.net
- C++勉強するなら江添亮のやつがいいのか?
- 752 ::2020/03/10(火) 22:37:05.22 ID:7t0MtDjq.net
- >>751
かつては、旧版独習C++ でstd::string を再実装する練習問題に出会うまで黙々と読んでいくことを薦めていましたが、確かに今となっては旧版独習はC++が古過ぎるでしょうね
江添さんは、私も今読んでいる最中です、もう少ししたらお勧めできるかどうかわかるかと思います
- 753 :デフォルトの名無しさん:2020/03/10(火) 22:58:14.28 ID:4I7RYXwm.net
- ありがとう
- 754 :デフォルトの名無しさん:2020/03/10(火) 23:02:41.52 ID:rLdwFfVF.net
- >>749
コストのためにハードが固定化され、ハードが決まってるからCPUも固定でコンパイラもそれに依存
ハードの更新なんて5年に1回あるかどうかだし、更新されてもROM容量が16MBに増えました!程度とかだしねぇ
ツール類はPC上で動けばいいからそっち方面触ってないと技術的に取り残される
つっても未だにMFCで新規ツール作るような人もいるけどねw
まぁ業界によってはこんな組み込みだって居るんだよって程度で
- 755 :デフォルトの名無しさん:2020/03/10(火) 23:27:10 ID:EBgJJlCp.net
- 江添亮VS柴田望洋
- 756 :デフォルトの名無しさん:2020/03/10(火) 23:41:21.31 ID:HIU8QCM9.net
- >>751
新しい仕様も考慮しているまともな C++ 入門書は少ないのでその中では十分に良いと思う。
紙でなくてよければ無料で読めるし、とりあえずこれで始めても損にはならんのじゃないかな。
https://ezoeryou.github.io/cpp-intro/
- 757 :デフォルトの名無しさん:2020/03/11(水) 00:14:52.72 ID:EKM5ywjJ.net
- >>751
江添亮の本は、勉強用じゃないw
プロが見て、あれこれ議論する土台になる本
10年以上やっていないと、まず読めないw
どの言語でも、勉強用は「Effective 何々」
- 758 :デフォルトの名無しさん:2020/03/11(水) 00:27:33.10 ID:FbH1Tm9+.net
- >>757
それはひょっとして「江添亮の詳説C++17」と混同してない?
「江添亮のC++入門」は初心者が基本的なツール (make やコマンドライン) の使い方さえわかってないからってんで、
そのあたりから記述している上にクラスの継承を説明しないという思い切った簡略化をしてる本だぞ。
- 759 :757:2020/03/11(水) 02:06:23 ID:EKM5ywjJ.net
- C++11/14 コア言語、江添 亮、2015
この神の書と勘違いしたw
江添は、素人向けの本も、出しているのか
- 760 :デフォルトの名無しさん:2020/03/11(水) 02:43:05.64 ID:zwwCe0yv.net
- hageで安全靴履いてリュック背負ってると職務質問される的なスキルが身に着く
- 761 :デフォルトの名無しさん:2020/03/11(水) 09:42:39.53 ID:QiiPQnMP.net
- 江添のあれ、糞本だろ。。
初心者はそんなとこでつまづかねーよってところにばかり無駄な記述を付け加えてるっていう。。
センスねーわ。
- 762 :デフォルトの名無しさん:2020/03/11(水) 10:20:19.09 ID:f25IEtU6.net
- 炎上商法に釣られてると売り上げが伸びちゃいますよ?
- 763 :デフォルトの名無しさん:2020/03/11(水) 13:07:41.95 ID:EKM5ywjJ.net
- 江添は職務質問で、大勢のポリ公に囲まれて、その場で監禁されたとかで、
今、警察を訴えているのだろ
警察はボーナスが欲しいから、誰でも犯人に仕立て上げるから、危険!
漏れも昔やられた。
パトカーに止められて、アルコール検知器に息を吐いても、ランプが点かなかったのに、
ポリ公がクルッと後ろを向くと、ランプが点いた!
何のことは無い。
そのポリ公が酔っ払いで、息を吹きかけていたw
後輩の若いポリ公も、グルだった
- 764 :デフォルトの名無しさん:2020/03/11(水) 14:07:13 ID:dMLI4DK7.net
- 知能低そう
- 765 :デフォルトの名無しさん:2020/03/29(日) 00:51:11 ID:yk11UhYR.net
- 何を作ったら一番C++の勉強になるんだ?
- 766 :デフォルトの名無しさん:2020/03/29(日) 00:56:17.78 ID:c4x4s1tb.net
- ビットマップ画像のファイルパスを入力したらそれにブラー処理を施して出力するコンソールアプリ
- 767 :デフォルトの名無しさん:2020/03/29(日) 01:24:25 ID:GFdzppn9.net
- C++使いのみなさんはC++以外だったら何の言語が好きなんですか
もしくは次何覚えたいですか
- 768 :デフォルトの名無しさん:2020/03/29(日) 01:40:31.93 ID:6ELGM9SE.net
- >>767
GUIはC++でやるのつらいからC#をよく使う
- 769 :デフォルトの名無しさん:2020/03/29(日) 01:52:28.90 ID:t2YV962W.net
- >>765
競技プログラムのクソコードのリファクタリング。
- 770 :デフォルトの名無しさん:2020/03/29(日) 02:37:01.61 ID:tSgWoZoj.net
- 競技プログラミング界隈だと #include<bits/stdc++.h> とか using namespace std; が普通になってるのが本当に嫌なんだよな。
AtCoder がそれを推奨しているのは「そこでつっかえて先に進まないよりは良い (競技の上では問題ないことが多いし)」みたいな
ニュアンスだし、ちゃんと理解してちゃんと書くならそれに越したことはないはずなんだよ。
- 771 :はちみつ餃子 :2020/03/29(日) 02:53:17.00 ID:tSgWoZoj.net
- >>767
ワイは Scheme が好きで日常的には C++ より使うなぁ。
興味があるのは Rust。 入門書を読みながら色々といじって遊んでる。
- 772 :デフォルトの名無しさん:2020/03/29(日) 04:41:47.48 ID:b/iWTQc8.net
- そらトリップにSCHEMEいれてるぐらいやしの
- 773 :デフォルトの名無しさん:2020/03/29(日) 09:44:17.77 ID:c4x4s1tb.net
- https://pbs.twimg.com/media/EUH_eMWUwAAgsV4.jpg
- 774 :デフォルトの名無しさん:2020/03/29(日) 10:05:56.36 ID:vg0TAzW0.net
- 二重言語であり真顔で「わたくしはC言語を極めました」と言えるのが第一関門
- 775 :デフォルトの名無しさん:2020/03/29(日) 12:55:27.64 ID:Kzf4aDfw.net
- >>771
Rustの入門書はどれがお勧めですか。
Box<T>や、Option<Box<T>> の代入や参照について詳しいものがあれば幸いです。
- 776 :デフォルトの名無しさん:2020/03/29(日) 15:54:38.44 ID:7B/pleQ/.net
- >>765
そういう視点より自分が何を造りたいかを考えろ
- 777 :デフォルトの名無しさん:2020/03/29(日) 15:55:46.75 ID:7B/pleQ/.net
- >>767
Python
C#
D
Go
Nim
- 778 ::2020/03/29(日) 16:08:26.57 ID:GnieE+99.net
- >>767
>C++使いのみなさんはC++以外だったら何の言語が好きなんですか
C です
>もしくは次何覚えたいですか
classpath を C++ に移植したいです
- 779 :デフォルトの名無しさん:2020/03/29(日) 18:35:29 ID:Kzf4aDfw.net
- >>778
Javaのclasspath相当の機能をC++に移植したいということかね。
- 780 :デフォルトの名無しさん:2020/03/29(日) 20:08:59 ID:GFdzppn9.net
- >>768,771,777,778
どうも
色々ご意見ありがとうございます。みな人それぞれですね
>>773
さすがねねっち
- 781 :デフォルトの名無しさん:2020/03/30(月) 14:36:39.18 ID:cpVmKDV2.net
- C/C++ で OpenGL とか Tck/Tk とかやるとオブジェクト指向ωの有難さωωが判るωωω
- 782 :デフォルトの名無しさん:2020/03/30(月) 19:25:06.14 ID:Oymj8mf6.net
- >>781
OpenGLが使いにくいという意味で言ってるなら、使いにくくなったのは OpenGL 2.0
以後に入った部分のみだ。
OpenGL 1.0 は非常に美しく人気が有った。
ところが、Direct3Dに対抗するためか、高速化やShaderの導入のために
2.0では非常に使いにくい方式を追加してしまった。
ややこしいのは、WebGL や OpenGL ES は、その 2.0 の部分だけをベースにしてしまったため、
美しい OpenGL 1.0 とは互換性が全く無い。
だから、WebGL や OpenGL ES から入った人は、OpenGLといえば、その使いにくい関数セット
の方しか知らないから、OpenGLは使いにくいと思ってしまっている。
- 783 :デフォルトの名無しさん:2020/03/30(月) 20:57:38 ID:3vRJi0Dq.net
- OpenGLって昔のやつは使いにくいぞ
- 784 :デフォルトの名無しさん:2020/03/31(火) 01:07:28.66 ID:Yt3qMdaP.net
- >>783
逆、昔のが使い易いから人気が出て標準の座を勝ち取った。
当時、OpenGL は、3Dを凄くよく理解している人が設計したといわれていた。
ところが、OpenGL 2.0 は高速だが使いにくくされた。
- 785 :デフォルトの名無しさん:2020/03/31(火) 09:24:13 ID:Ow5tuxOJ.net
- ハードウェアの種類が減ったんだよね。
その分だけ低レイヤまで踏み込ませても互換性が維持できる……
かと思いきや割とそうでもないな? みたいな闇が出来てしまった。
元から低レイヤを触る人にとってはハードウェアに近いところまで触れる方が使いやすいってのは
普通にあることなので、 API が綺麗なのが使いやすいというのは思い込み。
その人の経歴による。
- 786 :デフォルトの名無しさん:2020/03/31(火) 10:06:09 ID:vx6/o4d4.net
- 例のRuby君のことだから、自分で理解的ないものは難しい、使いにくい、汚いと非難の対象にしているか、もしくはどこかで聞き齧った意見をそのまま受け売りで垂れ流すだけ。
いずれにせよ聞くに値しない。
- 787 :デフォルトの名無しさん:2020/03/31(火) 10:06:35 ID:vx6/o4d4.net
- 理解的ない→理解できない
- 788 :デフォルトの名無しさん:2020/03/31(火) 15:44:37.42 ID:uFliupP+.net
- 機械工学部なんですが、授業で扱うレベルが初歩の初歩のみで
独学するにもどういうところから勉強すればいいのかわからず困っています
将来的にロボットを動かしたりするための知識を学ぶおすすめの教材とかありますか?
- 789 :デフォルトの名無しさん:2020/03/31(火) 16:11:50.19 ID:uDSFrRRV.net
- 電気・電子板へgo!
- 790 :デフォルトの名無しさん:2020/03/31(火) 16:21:47 ID:y4yBR0M3.net
- >>788
Arduino
- 791 :デフォルトの名無しさん:2020/03/31(火) 16:29:23.37 ID:daGoeiYK.net
- >>786
そうじゃない。
俺は3Dを専門にやってきた。
- 792 :デフォルトの名無しさん:2020/03/31(火) 18:09:22.14 ID:fXRU3fg2.net
- >>785
いや、書き方に夜がOpenGL 2.0以後は初期設定だけで200行を超えるくらいある。
それに比べて、OpenGL 1.0は、最初、お決まりの数行の初期化のあとは、
glBegin();
glVertex3f(x1,y1,z1);
glVertex3f(x2,y2,z2);
glVertex3f(x3,y3,z3);
glEnd();
glFlush();
程度でポリゴンが1枚書ける。
このコードを見ればマニュアルを見なくてもなんとなくやってることが分かるだろう。
それと、行列計算がとても判りやすくできるようになっている。
- 793 :デフォルトの名無しさん:2020/03/31(火) 18:33:37.31 ID:aMyLRkM9.net
- hello world的なプログラムなら1.0が楽だが、まともなアプリやゲーム作ろうとしたら、一々頂点定義していくのは面倒なだけ
しかも性能落ちる
- 794 :デフォルトの名無しさん:2020/03/31(火) 18:36:35.46 ID:chhHfIYK.net
- 一見簡単に見えるだけ
問題だらけのAPIデザインだよ
とにかくそんな遠い過去の技術どうでもいいから
- 795 :デフォルトの名無しさん:2020/03/31(火) 18:46:15.18 ID:fXRU3fg2.net
- >>793
2.0 は初期化時の
glBindBuffer(), glBufferData(), gl.bufferSubData()
が特に難しい。
STATIC_DRAW, DYNAMIC_DRAW
の違いや、glBufferData(), bufferSubData() の違いとか。
- 796 :デフォルトの名無しさん:2020/03/31(火) 18:50:55.69 ID:fXRU3fg2.net
- >>794
なら、あなたは何推しなの?
- 797 :デフォルトの名無しさん:2020/03/31(火) 18:55:52 ID:Ow5tuxOJ.net
- >>792
お前は俺の言うことがわからないということがわかった。
- 798 :デフォルトの名無しさん:2020/03/31(火) 19:06:18.63 ID:L/5UA51D.net
- htmlも昔の方が良かったって人なんだろうね
cssとか理解できないんだろう
- 799 :デフォルトの名無しさん:2020/03/31(火) 19:12:17 ID:chhHfIYK.net
- 使い物になるだけD3Dの方がまし
OpenGLは初期のAPIデザインひきずって最後までマルチスレッド対応できなかった
拡張性が高いとか言われてるけど
ベンダ依存多くて互換性なんかほとんど期待できない
初心者が一ヶ月学んで卒業するための
教育用の価値しかない
こんなのにしがみついてどうする
- 800 :デフォルトの名無しさん:2020/03/31(火) 20:05:53.51 ID:BqWL8gxf.net
- ハゲドゥ
- 801 :デフォルトの名無しさん:2020/03/31(火) 20:19:39 ID:Sf1iuZK0.net
- >>792
glBegin/glEndがdeprecatedになって、VBOを使うようになってわかりにくい、という主張はわかるけど、
2.0だと初期設定だけで200行必要というのと1.0は初期化の後はglBegin/glEndでポリゴンが書けるというのは、
対応してないところを比較している気がしてしまう。
それに、GLFWなんかを使わずに素のOpenGL APIを使って初期化するなんてこと今どきある?
2.0になってややこしくなったのは、世界が複雑になったのだから仕方のないことだと思うんだけど。
OpenGLの一番良くないところは、ハンドラが引数になくて、操作されるコンテキストがどれかということが
見えない状態になってしまっていることじゃない?
- 802 :デフォルトの名無しさん:2020/03/31(火) 20:21:22 ID:1hnfAhIg.net
- シェーダーとかなしで
グラフを書くだけの用途だから OpenGL1.0でごりおしだな
※ glBegin の対の glEnd を忘れて頂点バッファ漏らすのを ラッパークラスで回避する程度
- 803 :デフォルトの名無しさん:2020/03/31(火) 20:57:23.49 ID:BqWL8gxf.net
- OpenGL 2.0 専用スレ
http://mevius.5ch.net/test/read.cgi/tech/1126268759/
- 804 :デフォルトの名無しさん:2020/03/31(火) 21:29:07 ID:l+T/nNRF.net
- GLFWなんて使うのは試作や使い捨てツールとかくらいだと思ってた。
- 805 :デフォルトの名無しさん:2020/03/31(火) 23:22:06.63 ID:hFZHkIvl.net
- つーか昔はフレームバッファに書きこんだところにドットが表示されてすっきりしてわかりやすかった
今は全部GPUにふくざつなめいれいを送らないとドットひとつ打つのも大変だから昔のほうが良い
みたいな議論
- 806 :デフォルトの名無しさん:2020/03/31(火) 23:25:55.16 ID:vx6/o4d4.net
- できることが増えただけで今でも昔のやり方をしたいなら(それで事足りるなら)、昔ながらのやり方をすればいいだけだと思う
- 807 :デフォルトの名無しさん:2020/03/31(火) 23:28:34.45 ID:L/5UA51D.net
- imx6でframebuffer上にcv::Mat作って直接弄ったら表示されたときはなんかすごく懐かしかったよ
- 808 :デフォルトの名無しさん:2020/04/01(水) 10:16:21 ID:5VJq6KKK.net
- >>801
>OpenGLの一番良くないところは、ハンドラが引数になくて、操作されるコンテキストがどれかということが
>見えない状態になってしまっていることじゃない?
ほんそれ
python の matplotlib にも同じ違和感を感じる(重箱)
- 809 :デフォルトの名無しさん:2020/04/01(水) 10:18:19 ID:5VJq6KKK.net
- >>804
オレオレルール上は glut までですね判ります
- 810 :デフォルトの名無しさん:2020/04/01(水) 11:06:09.53 ID:15FH3/nz.net
- >>808
さすがにそういう30年ぐらい前のAPIデザインはいけてないってことで
direct state accessが導入されたんだけど、中途半端でぐだぐだ
- 811 :デフォルトの名無しさん:2020/04/01(水) 16:12:02 ID:bFLEHtBu.net
- 教えてください。
三項演算子
auto a=1;//なんでもいい
a?return 0:return -1;
なんでコンパイルエラー?
- 812 :デフォルトの名無しさん:2020/04/01(水) 16:12:55 ID:S74lm4t5.net
- >>811
return は文であって式ではない。
- 813 :デフォルトの名無しさん:2020/04/01(水) 16:13:30 ID:x/Ef9YKS.net
- >>811
return は式じゃないから
- 814 :デフォルトの名無しさん:2020/04/01(水) 16:14:38 ID:9AsYpIKM.net
- あっ被った
なので解決策書いとく
return a ? 0 : -1;
- 815 :デフォルトの名無しさん:2020/04/01(水) 16:59:46 ID:bFLEHtBu.net
- ありがとうございました。
式と文がまだわかっていませんでした。
>>814
なーるです。
- 816 :デフォルトの名無しさん:2020/04/07(火) 22:24:30 ID:lImlsKaR.net
- windows環境でC++のスタティックライブラリを作りたいんだけど、公開するシンボルを選択することって出来ます?
- 817 :デフォルトの名無しさん:2020/04/08(水) 00:42:54 ID:kI16h2GK.net
- 無名の namespace でくるめば内部リンケージにはなるけど
- 818 :デフォルトの名無しさん:2020/04/08(水) 01:16:03 ID:99j8EV3x.net
- なるほど 確かに消えるけどextern "C"付けると残りますね
- 819 :デフォルトの名無しさん:2020/04/08(水) 03:09:29 ID:99j8EV3x.net
- すみません自己解決に至りました
- 820 :デフォルトの名無しさん:2020/04/08(水) 12:25:08.81 ID:lWfV0IAd.net
- 公開する気が無いものまでexternしたらだめだぞ
- 821 :デフォルトの名無しさん:2020/05/24(日) 02:58:54.81 ID:r6ib7Asn.net
- VC++からXboxゲームバーを起動するサンプルどこかにありませんか?
- 822 :デフォルトの名無しさん:2020/06/05(金) 12:29:34 ID:BSWAx+xV.net
- C++頑張ります
宜しくお願いします
- 823 :デフォルトの名無しさん:2020/06/12(金) 08:44:01.32 ID:DgWPkv47.net
- pow関数が遅いというのは今もそうで今後も変わらなさそうで
できるだけ使うべきではないですかね?
- 824 :デフォルトの名無しさん:2020/06/12(金) 09:22:33.18 ID:M5MGuP1h.net
- >>823
何も前提条件を定めず「遅い」とか「使うべきか」とか議論しても無意味だよ。
例えば他の関数と比べて100倍遅い関数があったとして、それを使ったプログラムの実行が1msで終わるものなら、通常は別に問題ないだろう。
その遅い関数がどのくらいの回数呼ばれるのか(数回、数万回、数億回)、許容される時間はどれだけなのかによって異なってくる。
とりあえず使っとけ、問題が起こりうるケースならそのとき考える。
そもそもpow関数が必要ならそれを使うしかないんでないの? それに変わる同等な処理を自前で実装できるとは思えないから、powの頻度を減らした別のアルゴリズムを考えるか、同じ計算が繰り返し行われるなら覚えておくかするしかないと思う。
- 825 :デフォルトの名無しさん:2020/06/12(金) 09:46:09.57 ID:F8A7CVPb.net
- 元の式で数学的に最適化してしまえるケースは多い
何も考えずにコーディングだけしてると無駄な計算量が増える
- 826 :デフォルトの名無しさん:2020/06/12(金) 10:41:38.35 ID:0Y8ikztI.net
- ホワイトボードで式の変形を何種類かやってテストくらいはしないとな
- 827 :デフォルトの名無しさん:2020/06/12(金) 10:49:20.19 ID:6ZYMCXZR.net
- 整数回のべき乗なら最適化も可能だしこだわるならやってみればええ
でも数値演算ライブラリはFPU使って並列処理させてるだろ
わざわざCPU資源使って計算させるほどでもない
無駄なことして他の処理が遅くなることもあり得るからの
- 828 :デフォルトの名無しさん:2020/06/12(金) 11:01:15 ID:HKvMu5uJ.net
- >>823
pow(a,b)
aが同じ値でbのみ変わる事が多いなら
log(a) をとっておいて exp(log(a)*b) とする
取りうる値がわかっていて多くないなら
log(a)をテーブルにしておく
bが整数なら乗算や除算を組み合わせる
bが整数+0.5ならsqrtを組み合わせる
大量にpowを計算する必要があるなら
SIMDやGPUを使う
なと色々と工夫の余地はある
- 829 :デフォルトの名無しさん:2020/06/12(金) 13:56:17.64 ID:DgWPkv47.net
- 色々ありがとうございます
遅いので工夫しろというのが常識らしいですね
- 830 :デフォルトの名無しさん:2020/06/12(金) 15:22:14.47 ID:IF4Iurnq.net
- いや、必要なら工夫しろ、必要なければ余計なことはするな、だろう。
- 831 :デフォルトの名無しさん:2020/06/12(金) 15:39:43.80 ID:7ERtrFf+.net
- 速い遅いは実際に書いてるコードの中での相対的なものによるから自分のコードで観測しろ ってことだ
- 832 :デフォルトの名無しさん:2020/06/12(金) 15:45:39.23 ID:6Yfh5mGy.net
- すみません
他スレでJavaでdirectXやるにはCをやれといわれてココに来ました
CでdirectX出来るそうなので始めたいんですが
何をインストールすれば良いのですか?
Windows10Pro64bitですよろしくお願いします
- 833 :デフォルトの名無しさん:2020/06/12(金) 15:50:05.68 ID:1pXOSbLZ.net
- Goスレ池
- 834 :デフォルトの名無しさん:2020/06/12(金) 15:58:02.47 ID:6Yfh5mGy.net
- しっCじゃ出来ないのか、ウソつき
- 835 :デフォルトの名無しさん:2020/06/13(土) 04:51:37.44 ID:JTDnVNgN.net
- ウソってことはないはずだけど、よう分からん。
DirectX のスレッドなら確実じゃないかな。
【C++】 DirectX初心者質問スレ Part41 【C】
https://mevius.5ch.net/test/read.cgi/tech/1521786252/
ってのが見つかった。たらい回しにするみたいで気が引けるが。
なお、そちらのスレッドは見てないので紹介が適切かも分からない。
- 836 :デフォルトの名無しさん:2020/06/13(土) 19:12:26.60 ID:Q06gyfKt.net
- >>835
すみません
マルチプラットフォームで3Dやる言語には
JavaでCを呼び出してdirectXをいじるのではなく
UnityでJavaScript言語という結論にいたりました。
ありがとうございました。
- 837 :デフォルトの名無しさん:2020/06/13(土) 20:09:07.19 ID:yCAzSueK.net
- jsはもうサポート終了宣言してるからc#にしとこうな
- 838 :デフォルトの名無しさん:2020/06/13(土) 20:25:12.63 ID:Q06gyfKt.net
- よくわからないですけど
Unityの内部で使う動作スクリプトがC♯記述一択で
ゲームパッド入力はDirectXのC++で
AndroidスマホのタッチイベントはJavaだし
書き出すときはWebGLだからJavaScriptに変換されるという事かな〜意味不明だ
- 839 :デフォルトの名無しさん:2020/06/14(日) 03:01:38.31 ID:k9aaiAZC.net
- >>828
exp って pow よりどの程度速いの?
- 840 :デフォルトの名無しさん:2020/06/14(日) 06:59:24.45 ID:fieD7Z6G.net
- powは内部的にはexp(log(a)*b)
当然環境次第だけど
おおよそ半分くらいかな
もちろんlog(a)のテーブル検索に時間がかかるようだと
素直にpowを使う
>>828は
powがパフォーマンスに影響を与えているという前提のチューニングの話で
ほとんどの場合はそんな事はないので
ほとんどの場合はそのままpowを使うべき
- 841 :デフォルトの名無しさん:2020/06/14(日) 21:26:39.30 ID:csFQf9Gf.net
- y = a * pow(x, 3.0) + b * pow(x, 2.0) + c * x + d;
って糞コードを見たことがある
- 842 :デフォルトの名無しさん:2020/06/14(日) 22:50:07.68 ID:OziIXX0s.net
- そりゃ^演算子が使えないからクソコードに見える
- 843 :デフォルトの名無しさん:2020/06/14(日) 23:22:02.66 ID:9pT3ELpf.net
- **「…」
- 844 :デフォルトの名無しさん:2020/06/14(日) 23:59:21 ID:kf4Cc+ef.net
- ^は使えるだろ
- 845 :デフォルトの名無しさん:2020/06/15(月) 00:27:20 ID:y+ohQOA8.net
- 速度、精度、見やすさ、コードサイズ、ライブラリ使用
全ての面で糞コード
pow(x,y)が電源ボタンxをy回押す
という別の関数だということは無いとして
- 846 :蟻人間 :2020/06/15(月) 00:32:18.14 ID:xMj5gyYr.net
- こうか?
y = ((a * x + b) * x + c) * x + d;
- 847 :デフォルトの名無しさん:2020/06/15(月) 06:03:37.82 ID:6Rk/ljNV.net
- 元の数学的な式を素直にコードに落とし込んだ感じはあるけどな。
「xの3乗」を「pow(x, 3.0)」と「x * x * x」との
どちらで書くのを自然に感じるかという話だが。
- 848 :デフォルトの名無しさん:2020/06/15(月) 11:50:24.26 ID:6B2IPoD1.net
- クリティカルでないものならどう表記しようが別にどうでもいいがな
1億回計算したところで時間差は感じないだろうよ
んなことよりべき乗扱う上で大事なのは桁あふれと有効桁数の処理
必要精度のはっきり定義された科学計算用のライブラリ使ったほうがマシ
- 849 :デフォルトの名無しさん:2020/06/15(月) 12:09:05.38 ID:XCtiekxI.net
- 精度的には加減乗算の方がはっきりしてる
普通は無限精度で求めた後に丸めたのと同じ値になる
つまり誤差最小
- 850 :デフォルトの名無しさん:2020/06/15(月) 12:13:15.00 ID:XCtiekxI.net
- クリティカルじゃないという前提はどこから?
- 851 :デフォルトの名無しさん:2020/06/15(月) 12:16:59.98 ID:6B2IPoD1.net
- >>849
たとえばJIS規格に則った計算方法てのもある
測定値を足し合わせるだけでも±有効桁/2を混ぜ込まなきゃならなかったり計算ごとに有効桁に丸めこまなきゃならなかったり
乗算の場合は有効桁を減らしたりとかまあいろいろ
無限精度で計算して最後に丸め込んだら×もらう仕組みになってたりする
- 852 :デフォルトの名無しさん:2020/06/15(月) 12:20:31.42 ID:XCtiekxI.net
- 精度的にpowを使うことで解決することなど無いと思うが
- 853 :デフォルトの名無しさん:2020/06/15(月) 12:21:16.29 ID:XCtiekxI.net
- >>841の件
- 854 :デフォルトの名無しさん:2020/06/15(月) 12:27:23.16 ID:XCtiekxI.net
- powはライブラリや環境で結果が違う
- 855 :デフォルトの名無しさん:2020/06/15(月) 12:44:31 ID:O39kdlr3.net
- ポォーゥふみっドカンッ!
- 856 :デフォルトの名無しさん:2020/06/15(月) 13:24:20.56 ID:iqqqiJ5Y.net
- >>841
y = ((a * x + b) * x + c) * x + d;
- 857 :デフォルトの名無しさん:2020/06/15(月) 13:30:19 ID:5rULqijg.net
- いわゆるスパコンなんかだと式の変形してがんばらずとも pow そのままで速かったりするのかな?
- 858 :デフォルトの名無しさん:2020/06/15(月) 19:10:25.34 ID:aDRazGid.net
- ホーナー法か
名前を思い出せなくて難儀した
- 859 :デフォルトの名無しさん:2020/06/16(火) 05:58:44.90 ID:ehL8QS9+.net
- c++使う理由ってなんですか?
2dゲームにおいてもc++が必要でしょうか?
- 860 :デフォルトの名無しさん:2020/06/16(火) 06:19:28.37 ID:JnjsQYAt.net
- 普通の2dゲーム作るぐらいならluaとかでいいよ
- 861 :デフォルトの名無しさん:2020/06/16(火) 06:29:18.93 ID:ehL8QS9+.net
- ゲームと言うよりゲームエンジンでした
すみません
テクスチャの描写にすらC++は必要なのかなと
ポリゴンならもちろnC++一択でしょうけど
- 862 :デフォルトの名無しさん:2020/06/16(火) 06:41:12.27 ID:MpRAah0t.net
- 必要=必ず要る
という意味なら答えは分かってそうな気がするが
別の意味ならもっと日本語をうまく使った方が良い
- 863 :デフォルトの名無しさん:2020/06/16(火) 06:57:03.76 ID:5RaFaaPW.net
- 基幹部分の話ならC++使わずにCで書くって方向性もあるかも。
- 864 :デフォルトの名無しさん:2020/06/16(火) 07:13:44.64 ID:ehL8QS9+.net
- 可能かどうかで言えばテクスチャの描写はすべての言語でできると思います
ただRPGメーカーやウルフエディタはC++です
ここに理由はあるのかなと疑問に感じました
2dでもopenglなどを使うのですか?
- 865 :デフォルトの名無しさん:2020/06/16(火) 07:26:08.75 ID:JnjsQYAt.net
- 奥の方では2dでも使ってるよ
今どきのコンピュータならインタプリタでも速度は足りるけどc++を使うのはまあそれが一般的で資産があるからだと思うよ
- 866 :デフォルトの名無しさん:2020/06/16(火) 07:32:04.70 ID:Z1WD1bfY.net
- 足りるかどうかなんて処理次第
- 867 :デフォルトの名無しさん:2020/06/16(火) 07:37:01.12 ID:1BidYCqI.net
- GUIのOS画面「🐴🦌🦋」
CUIのOS画面「AAA」
- 868 :デフォルトの名無しさん:2020/06/16(火) 08:00:15.69 ID:TW5yPVrb.net
- ライフゲーム「•|•/•-•\•|•/•-•\」
7行テトリス
7行オセロ
10行ぷよぷよ
はじめてのゲームプログラム「荷物君」
- 869 :デフォルトの名無しさん:2020/06/16(火) 08:42:43 ID:6qjQ65l0.net
- >>867
絵文字に猪って無いんだっけ?
- 870 :デフォルトの名無しさん:2020/06/16(火) 09:08:39 ID:6qjQ65l0.net
- >>864
RPGメーカーもウルフエディタもさわったこと無いけど、RPGツクールみたいなものでしゅ。つまりただの2Dゲームではなく、ユーザが作成した(場合によっては膨大な大きさの)データを編集するツールと、そのデータを読み込んで処理しながら2D RPGとして動かすプレイヤ(仮想ゲーム機)のセットみたいなもの。
ただの2Dの描画ならマシン性能は大して求められないけど、膨大なデータを効率的に保持して動的な変更に耐えうるような仕組みを作るなら、処理速度が速くメモリ効率も良いC++を使うメリットはあると思う。特にスイッチや変数、イベントなどをユーザが定義して処理するなら、処理速度が遅いとかなり厳しいと思う。
で、結論を言えば、マップエディタが作りたいだけならわざわざ学習コストの高いC++に手を出して挫折する可能性を高める必要はない。他の使いやすい言語やフレームワークを使っとけ。
- 871 :デフォルトの名無しさん:2020/06/16(火) 09:09:25 ID:eN791Gfm.net
- >>869
>>859> 2dゲームにおいてもc++が必要でしょうか?
C++をディスってるのが分からな🐗?
- 872 :デフォルトの名無しさん:2020/06/16(火) 09:09:27 ID:JnjsQYAt.net
- でしゅ
かわいい
- 873 :デフォルトの名無しさん:2020/06/16(火) 09:21:01.68 ID:TBO9MSyh.net
- > テクスチャの描写にすら
すら?
- 874 :デフォルトの名無しさん:2020/06/16(火) 09:22:41.63 ID:6qjQ65l0.net
- >>872
おお、またやってしまった。
以前会社の上司にも似たような誤字を送ったことがある。いまだにスマホのフリック入力は慣れない...
- 875 :デフォルトの名無しさん:2020/06/16(火) 09:25:37 ID:ehL8QS9+.net
- >>870
何の言語が適切でしょうか
- 876 :デフォルトの名無しさん:2020/06/16(火) 10:11:49 ID:ZzQUhJK1.net
- Unityスレにもいた人だけどなんでこんな少ない情報で最適な言語を求めるんだろうか?
別にC++でもC#でもjsでも実現可能だし、大差ないと思うけど
COBOLとかならやめとけって言えるけど
- 877 :デフォルトの名無しさん:2020/06/16(火) 10:50:58.86 ID:ehL8QS9+.net
- 答えというか、一般論を知りたいです
例えばエレクトロンでピクセルの操作は出来ますか?
- 878 :デフォルトの名無しさん:2020/06/16(火) 11:13:05.91 ID:zfRgO9so.net
- 一般論なら、Unity
他には、Electron, React Native
サーバー側が、Ruby なら、Rails もある。
ただし、GUI は、HTML, CSS/SASS, JavaScript になる
- 879 :デフォルトの名無しさん:2020/06/16(火) 11:14:52.80 ID:ehL8QS9+.net
- ゲームではなく、タイルエディタでもunityという選択なんですか?
- 880 :デフォルトの名無しさん:2020/06/16(火) 11:21:02.46 ID:ZzQUhJK1.net
- 一般論なら使い慣れた言語でいいんじゃね?程度だと思うよ
実現したい機能の実装が不可能で無い限り関係ない
利用者の多い言語のほうがフレームワークやライブラリの面で開発は楽になるかもしれない
electronは言語ではなくフレームワークだけどなんで言語と比較してるの?
electronの質問は該当スレへ
今の質問もスレからずれてると思うけど
- 881 :デフォルトの名無しさん:2020/06/16(火) 11:26:32.29 ID:ehL8QS9+.net
- すみません。
既存のエディタがなぜc++なのか知りたかったのです。
- 882 :デフォルトの名無しさん:2020/06/16(火) 11:52:06.13 ID:ZzQUhJK1.net
- いや、unityスレでも言われてたけど作った人に聞け以外に答えは無いよ
ウルフエディタを触ったことは無いがやってることはC++でもC#でもjavaでもできるはず
他言語は俺じゃわからんが画像を任意座標へ表示するようなことができる仕組みさえあれば大抵のことはできるだろう
- 883 :デフォルトの名無しさん:2020/06/16(火) 11:55:46.30 ID:HRUNOXRJ.net
- 初学者なら兎も角、熟練者が少人数で使う分には言語による開発効率の差なんて大差ない
手足となるライブラリが一通り揃って使い方知っていれば、c++だろうがサクッと作れる
- 884 :デフォルトの名無しさん:2020/06/16(火) 12:27:02.09 ID:ehL8QS9+.net
- ごめんなさい
じゃあpyqtでやります
比較的pythonに慣れているので
- 885 :デフォルトの名無しさん:2020/06/16(火) 12:35:45.68 ID:zfRgO9so.net
- そもそも、Tiled Map Editor を使うから、作るのは無駄だと思うが
- 886 :デフォルトの名無しさん:2020/06/16(火) 18:18:34.27 ID:zj4kqDkW.net
- >>882
>任意座標へ表示
ここでポインターが便利ってことになるんだよな
線引いたり塗りつぶしたりといったプリミティブなことを自分でやるならポインター使えなきゃやってられない
ここまでくるとアセンブラの威力まざまざと見せつけられるわけだけども次点でC/C++
- 887 :デフォルトの名無しさん:2020/06/23(火) 21:41:19 ID:zFVhfcF5.net
- 競技プログラミング始めたいんだけど、どうやってcpp勉強すれば良い?
Cはある程度わかるからcpp特有の文法を勉強したい
変数みたいなのに>>みたいなのいっぱいついてて何がなんだかわからん
- 888 :デフォルトの名無しさん:2020/06/23(火) 22:27:25.31 ID:FqDmWE10.net
- 演算子に特に意味はない
擬装出来るからな
- 889 :デフォルトの名無しさん:2020/06/23(火) 22:41:51.81 ID:Oi2DUy0P.net
- とりあえず解いて他人の回答をみる
知らない内容があればググる
これの繰り返し
- 890 :デフォルトの名無しさん:2020/06/23(火) 23:01:01.90 ID:NciFLwYZ.net
- >>887
普通に本屋で入門書買ってきてやればいいだろう。
それとC++をcppと呼ぶのはやめれ。
- 891 :デフォルトの名無しさん:2020/06/24(水) 10:48:10.17 ID:6+kkBVmV.net
- >>887
細部を観る前にまずオブジェクト指向を理解するべき
- 892 :デフォルトの名無しさん:2020/06/24(水) 18:20:23.25 ID:amytSPrH.net
- 競技プログラムでまずオブジェクト指向?
順番が違う気がする
- 893 :デフォルトの名無しさん:2020/06/25(木) 00:55:35.66 ID:Dxq2c9AW.net
- あくまで競技プログラミングありきで C++ を導入したいってことならオブジェクト指向の考え方はそれほどいらんわな。
ただ、競技プログラミングで書かれてる C++ のコードってかなり汚いのばかりなので、
そこに特化しちゃうのはあまりオススメしないよ。
頻繁というほどではないが using int = long long; くらいのクソはちょいちょい見かける。
まともな書き方をわかった上で割り切り方を考えるとか、言語のトリッキーな部分に踏み込んでみるとか、
逆に言語はどうでもよくてアルゴリズムだけが大事とか考えてるなら競技プログラミングでスタートするのもありかもしれんが、
ちょっと C に毛の生えたくらいの C++ で競技プログラミングを始めると変なクセが付いちゃう。
- 894 :デフォルトの名無しさん:2020/06/25(木) 00:56:50.75 ID:Dxq2c9AW.net
- おっと using int = long long; は出来ないな。
#define int long long の間違い。
- 895 :デフォルトの名無しさん:2020/06/25(木) 07:59:46.82 ID:XUZZkb7Y.net
- 競技プログラムに特化
いいじゃない
何からはじめても
どうせ将来業務や集団でコーディングすることになったら
文法以外に色々と勉強しなきゃならん
- 896 :デフォルトの名無しさん:2020/06/25(木) 11:07:09.88 ID:2XRewe5U.net
- どうせ勉強するならへんな癖ついて手遅れになる前に
初めてやるときからオブジェクト指向やっとけって話だろ
急がば回れ
- 897 :デフォルトの名無しさん:2020/06/25(木) 12:58:11.49 ID:yb+enRFi.net
- クローズドな場所でレースがしたいって人に
まず道路交通法を学べっていう感じ
トンチンカン
- 898 :デフォルトの名無しさん:2020/06/25(木) 13:34:16.40 ID:RBMnjR2N.net
- いや道路交通法っていうよりサイドブレーキの使い方とか駐車の仕方って感じじゃね
- 899 :デフォルトの名無しさん:2020/06/25(木) 19:06:16.39 ID:TznTPNyN.net
- レースでサイドブレーキ使わないの?
- 900 :デフォルトの名無しさん:2020/06/26(金) 13:00:51.86 ID:PjbtVFt+.net
- 愚者は経験に学ぶ
賢者は歴史に学ぶ
- 901 :デフォルトの名無しさん:2020/06/26(金) 13:01:38.24 ID:bhcA+daA.net
- 俺は両方から学ぶわ
- 902 :デフォルトの名無しさん:2020/06/26(金) 17:38:59.84 ID:twdaurbq.net
- 賢者と愚者から学ぶのか
- 903 :デフォルトの名無しさん:2020/06/27(土) 03:32:14.85 ID:W+OG+j+5.net
- 違う賢者と歴史に教えを請うのだ
- 904 ::2020/06/27(土) 03:53:16.94 ID:5JNhQ0LT.net
- >>900
誰の言葉なんでしょうか?大概は誰(チャーチルとかルーズベルトとか)という情報とセットで引用されるものなんですが、この言葉はそういうのがあまりないのはどうしてなんでしょうか?
- 905 :デフォルトの名無しさん:2020/06/27(土) 07:12:11.81 ID:cFqQOOIi.net
- >>904
普通にググって出て来るけど?ほんまかどうかは知らん
https:/www.firstlogic.co.jp/blog/lab/aizawa/6243
>
「愚者は経験に学び、賢者は歴史に学ぶ」
鉄血宰相と呼ばれたオットー・フォン・ビスマルク(1815年−1898年)の言葉です。
- 906 :デフォルトの名無しさん:2020/06/27(土) 07:29:38 ID:QI4OAUXK.net
- ちょいちょいC++関連スレで見かけるけど、実際に書いたり経験したりもしてない聞きかじりの知識で
マウント取りたいだけ、ってのを正当化するために使われてる気がする
- 907 :デフォルトの名無しさん:2020/06/27(土) 07:46:50.62 ID:bIAfLa6c.net
- まあITなんて歴史が浅いものは他人の経験が歴史みたいなもんやし
- 908 :デフォルトの名無しさん:2020/06/27(土) 08:15:09.50 ID:TsX0h7IG.net
- そもそも>>900が間違ってる
賢者は色々な事から学ぶ
- 909 :デフォルトの名無しさん:2020/06/27(土) 08:16:30.59 ID:TsX0h7IG.net
- 学んだ事を盲信せず更新し続ける
- 910 :デフォルトの名無しさん:2020/06/27(土) 08:18:40.93 ID:TsX0h7IG.net
- 歴史から学ぶとは要するにパクり
これだけで新技術なんか生まれない
- 911 :デフォルトの名無しさん:2020/06/27(土) 08:23:27.23 ID:wwwZDyDi.net
- 文系がプログラミング ば読書だけじゃみにづがね゛
- 912 :デフォルトの名無しさん:2020/06/27(土) 08:31:20.77 ID:4VTCzLtL.net
- >>901の言うようにどっちも大事ってことやな
- 913 :デフォルトの名無しさん:2020/06/27(土) 08:59:57 ID:DRe2glKb.net
- つーかこの手の格言て日本語の意訳が過ぎるせいで
元の意味が失なわれてる事がちょいちょいあるけど
この「愚者は経験に・・」もそれで元のビスマルクの文言の意味はまんま >>907 の意味で
要するに「自分の経験のみで考えずに常に他者の経験を見聞きしてそこから学べ」という
意味だった
この他者の経験の集合の事を「歴史」なんつーて壮大な単語に集約しちゃったせいで
なんか「経験論で判断したらあかん、歴史書にあるような高尚な理論を学べ」
みたいな話になっちゃってるっていう
- 914 :デフォルトの名無しさん:2020/06/27(土) 09:35:19 ID:TsX0h7IG.net
- ああやっぱり
そんなことだろうと思った
ムーアの法則もそんな感じ
違う意味で使われてしまった例
- 915 :デフォルトの名無しさん:2020/06/27(土) 09:35:38 ID:tKkUIu86.net
- >>907
いやいやそれこそまさに"歴史"だろ
- 916 :デフォルトの名無しさん:2020/06/27(土) 09:35:39 ID:Fil4ka9J.net
- 賢者が歴史「だけ」から学ぶと思ってる>>908-910ってw
- 917 :デフォルトの名無しさん:2020/06/27(土) 09:44:14.10 ID:TsX0h7IG.net
- >>900は
愚者は経験を含めた色々な事から学ぶ
なんて文ではないだろ
- 918 :デフォルトの名無しさん:2020/06/27(土) 09:46:02.66 ID:TsX0h7IG.net
- >>900を見て違和感が無いなら
プログラミングに向いてない
- 919 :デフォルトの名無しさん:2020/06/27(土) 09:52:27 ID:TsX0h7IG.net
- 経験が無い言い訳をするために
偉い人の言葉を変造して使う
経験の無い文系にありがちなこと
- 920 :デフォルトの名無しさん:2020/06/27(土) 09:54:04.58 ID:twDHZDh4.net
- >>913
意訳が悪いというより、金言を字面通りにしか解釈できない奴が増えた(もしくは元から多い)ということが問題なんでないの?
例えば>>917みたいに。
>>900の意味を考えたら、愚者は「自分自身の」経験だけから学ぶのに対し、賢者は歴史というこれまでの多数の人間による経験の積み重ねからも学ぶという対比であることは分かりそうなものなのに、字面通りにしか受け取らない。
だから>>910みたいな頓珍漢なことも言い出す。
新たな技術を産み出すのは過去の積み重ねの上に、それをさらに発展させたり新たな発想などが必要になるだろうけど、この金言は別に学ぶことだけしていろと言う話をしているわけではない。ただ学ぶ対象は広い方が良いという話をしているだけなのに、何でわざわざ>>910のようなことを言い出すのだろう。
- 921 :デフォルトの名無しさん:2020/06/27(土) 10:01:34.50 ID:wwwZDyDi.net
- #include <stdio.history>
const 自動運転車 = require('運転経験');
import 数学史
- 922 :デフォルトの名無しさん:2020/06/27(土) 10:59:13.05 ID:3D9ce/Tt.net
- >>921
言語捏造すんなやゴミが
- 923 :デフォルトの名無しさん:2020/06/27(土) 11:10:43.60 ID:05T2q1jf.net
- >>920
誰が読んでもわかる文章にするべきだろう
小説じゃないんだから
- 924 :デフォルトの名無しさん:2020/06/27(土) 11:43:34.76 ID:iSXUJw2h.net
- >>922
クエっクエっクエっチョコボー〜ル〜
921>gcc a.c
stdio.history: No such file or directory
- 925 :デフォルトの名無しさん:2020/06/27(土) 11:46:58.91 ID:h6eax6A3.net
- 名言・格言・故事成語は枝葉や細部を切り捨てた理想的な空間だろ
その場その場に合わせたすっからカンのいいくるめだ
だから欧州も誰が言ったかに矢鱈と拘る
こういうのはマジで作り話で都合のいいことしか書いてない
虚偽のお話を信じさせられてるんだから虚構と現実のズレが生じる
- 926 :デフォルトの名無しさん:2020/06/27(土) 11:51:17.17 ID:tKkUIu86.net
- >>923
バカ向けに要約するね。
ID:TsX0h7IG は低能
- 927 :デフォルトの名無しさん:2020/06/27(土) 13:49:21.23 ID:TsX0h7IG.net
- 愚者は歴史に学ぶ
賢者は経験に学ぶ
- 928 :デフォルトの名無しさん:2020/06/27(土) 15:49:00.82 ID:QSLeN3Uh.net
- >>921
むしろ
----vc2019.h----
#include <vc2017.h>
----
----vc2017.h----
#include <vc2015.h>
----
----vc2015.h----
#include <vc2013.h>
----
----vc2013.h----
#include <vc2010.h>
----
みたいなものを想像した
- 929 :デフォルトの名無しさん:2020/07/03(金) 09:37:34.50 ID:DB1hQWD+.net
- 表紙に一休さんみたいな男が写った専門書を見つけたのだけど、買うのためらった
- 930 :デフォルトの名無しさん:2020/07/03(金) 11:41:58.59 ID:OljhRJZm.net
- UNIX公案なるものが存在するのでプログラミングを理解するには禅をやるのが早い
GEBでも公案の論理分解が行われてるくらいに当時のアメリカ西海岸では大麻と禅とLSDが流行った
- 931 :デフォルトの名無しさん:2020/07/03(金) 14:32:59.27 ID:/+uSoVK/.net
- >>929
江添亮のC-入門?
https://i.imgur.com/TswaEc3.jpg
- 932 :デフォルトの名無しさん:2020/07/03(金) 14:47:09.61 ID:1r/HjE0m.net
- フッw
- 933 :デフォルトの名無しさん:2020/07/03(金) 17:54:47.73 ID:6268sYfp.net
- これで安全靴でミリタリー服でうろついてたら職務質問される罠
- 934 :デフォルトの名無しさん:2020/07/05(日) 22:48:53.64 ID:9WS3R3Fj.net
- 江添のやつはわかりにくくない?
- 935 ::2020/07/05(日) 22:58:40.95 ID:UizTuhh+.net
- >>934
私は好きです!
while (), do while (), for () をやる前に goto を導入し、「if () と goto があれば何でも出来る!」という潔さ!
- 936 :デフォルトの名無しさん:2020/07/05(日) 23:00:31 ID:9WS3R3Fj.net
- include省略されるとちょっと
- 937 :デフォルトの名無しさん:2020/07/06(月) 10:32:47.31 ID:tZQ4aODX.net
- include をおまじないと称してすっとばす解説は大抵糞
- 938 :デフォルトの名無しさん:2020/07/06(月) 13:22:36.24 ID:DnB56BCk.net
- そういう解説で勉強したやつは100%コピペマンになり業務では使えない
- 939 :デフォルトの名無しさん:2020/07/06(月) 14:32:37.87 ID:kTgVemk4.net
- 大変だなバカって
- 940 :デフォルトの名無しさん:2020/07/06(月) 14:41:13 ID:gLHWFzBI.net
- バカは楽だぞ
- 941 :はちみつ餃子 :2020/07/06(月) 16:52:45.31 ID:Js6m+wFY.net
- 俺はアセンブリから入ったタイプだからよりプリミティブな機能の
組み合わせとして理解するという方法論は結局のところわかりやすいというのはわかる。
でも展開形を意識してしまうようになると抽象化の感覚が育たないような気もしていて、
あらゆる意味で万能ってことはないので色んな本があることが大事なんだと思う。
江添亮のC++入門は継承すら取り扱わないレベルの入門という位置づけなので、
不足する分はより本格的な本を読む前提だろうし、まあこんなもんじゃないの。
- 942 :デフォルトの名無しさん:2020/07/06(月) 18:43:53.42 ID:X9mxW4kC.net
- はちみつって何歳?
- 943 :デフォルトの名無しさん:2020/07/06(月) 19:04:52.45 ID:Xx+iWxrn.net
- 結局どういう順序で勉強していけばいいんだろう
- 944 :デフォルトの名無しさん:2020/07/06(月) 20:43:39 ID:SSQMtz9B.net
- >>943
一本道で過不足なく必要な物を順序通りに学べるような都合のいい方法なんてないから、ある程度は分からないものを保留して先に進んでから後戻りして理解したり、逆に順調に進んでると思ったら壁に突き当たって後戻りして不足部分を地固めし直してからまた先に進むなんてこともある。
それが当たり前だと思って最初は苦労するしかないと思うよ。ある程度なれてくれば、経験と勘で補いながら効率が上がっていくはず。
- 945 :デフォルトの名無しさん:2020/07/06(月) 20:54:22.43 ID:fLXZOc4N.net
- 二章からポインタの説明が始める入門書で勉強した。今思えば酷いサディスティック教本だったと思う。
タイトルが思い出せない…
- 946 ::2020/07/06(月) 21:27:01.83 ID:YRpfyW1U.net
- >>943
独習C++レベル、accelerated C++ レベル → C++98 STL本 レベル → 結城さんのデザパタを C++ に書き直す訓練 →C++11レイターを本格的に → テンプレートマジック本(今ここ) →積読している effective C++ とその兄弟たちはいつか読みたいものだ
- 947 :デフォルトの名無しさん:2020/07/06(月) 21:41:28.85 ID:P5id6Ara.net
- do{...}while(0);
ってどんな気持ちで使うんでしたっけ?
- 948 :デフォルトの名無しさん:2020/07/06(月) 21:42:15.58 ID:P5id6Ara.net
- #define HOGE(FUGA) do{...FUGA...}while(0)
だからdefineが重要なのかしら
- 949 :デフォルトの名無しさん:2020/07/06(月) 22:03:03.03 ID:KpksOV+E.net
- goto否定原理主義者がbreakをgotoの代わりに使う
- 950 :デフォルトの名無しさん:2020/07/06(月) 22:57:43.86 ID:juxBVe1k.net
- アナルに挿入しながら「まだ・・まだ本体には挿入していないっ!
だからこれはセックスではない!」とか言うのと似てるなそれ
- 951 :はちみつ餃子 :2020/07/07(火) 01:49:20.66 ID:tzlORGl2.net
- >>945
C/C++ でポインタを避けて説明する (理解を試みる) 方がつらくない?
- 952 :デフォルトの名無しさん:2020/07/07(火) 07:56:58.77 ID:bJbvn87/.net
- >>949-950
「大丈夫、パイプカットしてるから」みたいな感じかも。
break や continue を「去勢されたgoto」って喩えるじゃない。
if のネストが深くなるのは嫌だし、
関数からの早期returnも(デバッガで追うのが面倒になるので)ダメ、
goto なんかもっての外、という時に do {} while(0); でゴニョゴニョと。
で、コンパイラさんに「常に偽となる条件式です」とか警告されるの。
- 953 :デフォルトの名無しさん:2020/07/07(火) 12:13:10.64 ID:bEGKo5iM.net
- >>951
はい、もちろん。
でもそれが2章でなくてもいいのかな、と。
出鼻くじく気満々やん、みたいな
- 954 :はちみつ餃子 ◆8X2XSCHEME :2020/07/07(火) 13:48:51 ID:tzlORGl2.net
- >>953
選択肢があることが大事なんだって。
C の理屈だとビットパターンが並んだメモリ空間が広がっていてそこにオブジェクトを配置していくというモデルだから
ポインタを通してそこらを理解させるというのもひとつのやり方としてアリでしょ。
きちんとした理屈を後出しされると「先に言えや!」って気持ちになる人は少なくないと思う。
- 955 :デフォルトの名無しさん:2020/07/07(火) 19:09:26.79 ID:v3ijliVb.net
- ポインターの何がそんなに難しいと感じるのかわからん
コンピューターの処理なんてアドレス操作ばっかりじゃん
コンピューターの仕組みがわかってないからなのかな?
ならば言語学ぶ前にコンピューターの仕組みを学ぶのが先じゃね?
- 956 :デフォルトの名無しさん:2020/07/07(火) 19:39:25.64 ID:aaXFzUCt.net
- テスト問題にはポインタパズルとでもいうべきゴミみたいな問題が多いからね
わざわざ難しくして間違えるように幾重にも罠を張ったヤツ
そういうのでポインタ嫌いが増える
- 957 :デフォルトの名無しさん:2020/07/07(火) 21:02:20.63 ID:yByKJQAn.net
- サイズ100を100個用意するより
サイズ10000を1個用意してアドレス割り振るとか好き
ポインタ変数分サイズ増えるのは目をつむる確保速度重視
- 958 ::2020/07/07(火) 21:28:33.53 ID:7uEBIb8C.net
- >>945
私は ** を使うくらいなら *& の方がマシだと思っているのですが、 *& で書いた本はまったくないですね…
- 959 :はちみつ餃子 :2020/07/07(火) 22:00:58.59 ID:tzlORGl2.net
- >>958
何をいいたいのかわかんないのでもうちょっとくやしく
- 960 :デフォルトの名無しさん:2020/07/07(火) 22:12:29.39 ID:TeF3RSyR.net
- あんだけクズをバカにしてたのに、同じエディタを使ってたなんて!
- 961 :デフォルトの名無しさん:2020/07/07(火) 22:17:27.53 ID:4bY8cpqR.net
- >>960
くやしいのうwwwww
- 962 ::2020/07/07(火) 23:10:29.18 ID:7uEBIb8C.net
- >>959
https://ideone.com/LnS5rf
>>945
こういうのも、やっぱりサドになりますか…
- 963 :はちみつ餃子 :2020/07/07(火) 23:17:48.32 ID:tzlORGl2.net
- >>962
そういうデザインのプログラムがあっても不自然だとは思わないが、
初心者向けでポインタの説明をする段階という前提を置くと参照と混ぜて示すのは混乱の元ちゃう?
& という記号の多義性がアレなのが根本原因ではあるんだが……。
- 964 ::2020/07/07(火) 23:21:02.99 ID:7uEBIb8C.net
- >>963
>初心者向けでポインタの説明をする段階という前提を置くと参照と混ぜて示すのは混乱の元
そうかもしれませんね
>& という記号の多義性がアレなのが根本原因
まあ、そうですよね…
- 965 :デフォルトの名無しさん:2020/07/08(水) 08:50:17.72 ID:sJ2uy93A.net
- >>947-948
同じ人からの連続投稿、ひとつの質問だと気づかなかった。
マクロの実体を do {...} while (0) で囲む定型については
「#define do whole false」でネット検索すると色々出てくる。
この場で説明するには少々分量が多いのだ。
- 966 :デフォルトの名無しさん:2020/07/08(水) 09:23:35.50 ID:hADFKHgu.net
- そのうち
#define HOGE(FUGA) do{...FUGA...}while(0);
と描いてしまって失敗する
- 967 :965:2020/07/08(水) 18:00:01 ID:sJ2uy93A.net
- あ、もちろん whole は誤り while で検索してくれ。
× 「#define do whole false」
○ 「#define do while false」
- 968 :デフォルトの名無しさん:2020/07/09(木) 20:13:12.08 ID:gJQJWBxs.net
- テキストファイルに文字列を書き込みしたいのですが
ofstream ofs("test.txt",ios::ate | ios::in);
ofs << "hoge" << endl;
これだと動いているんですが
最後のendlを無くして"hoge"のみを書き込もうとすると動作しません
どういった理由なんでしょうか?
- 969 :デフォルトの名無しさん:2020/07/09(木) 20:17:07.59 ID:N+YU0rOq.net
- flushしないと
- 970 :蟻人間 :2020/07/09(木) 20:22:54.18 ID:2UhyUN9n.net
- 読み書きは時間がかかる処理だから、読み書きの前に、小さなデータは一時的にバッファという記憶域にまとめて
貯めておき(まあ、キャッシュと似たようなものだ)、改行などがあれば、押し流す(flush)という処理をする。
この場合はendlがflushの役割をする。
- 971 :デフォルトの名無しさん:2020/07/09(木) 20:48:42.31 ID:gJQJWBxs.net
- >>969 >>970
理解できましたありがとうございます!
- 972 :デフォルトの名無しさん:2020/07/11(土) 00:06:30.27 ID:87hwO6K6.net
- ポインタを初心者に完璧に理解させる方法分かったわ。
ポインタ=ショートカットアイコンと教えればいいんだ。
メモ帳に文字書いて保存して、ショートカットアイコン作って「これがポインタだよ」って言えばいい。
メモ帳の容量見てごらん?100kbでしょ?ショートカットアイコンの容量見てごらん?1kbしかないね。
ショートカット開いて。文章変えて。ほら1kbのデータで本体が変わった。これがポインタの仕組みだよ。
完璧
- 973 :デフォルトの名無しさん:2020/07/11(土) 00:21:04.14 ID:lUabZX1b.net
- ポインタの演算は?
- 974 :デフォルトの名無しさん:2020/07/11(土) 00:21:34.19 ID:nv0BNjEd.net
- その程度の抽象化ならポインタのこと直接説明すればいいと思う
- 975 :デフォルトの名無しさん:2020/07/11(土) 08:24:16 ID:sGHMgavQ.net
- 住所録とかじゃダメなん?
- 976 :デフォルトの名無しさん:2020/07/11(土) 11:03:46 ID:J0INoyBc.net
- ポインタの躓き処ってそういう場所じゃないから
- 977 :デフォルトの名無しさん:2020/07/11(土) 11:18:32 ID:60oNEnIZ.net
- アセンブラから入ると
Cのポインタは色々と意味不明
- 978 :デフォルトの名無しさん:2020/07/11(土) 11:20:02 ID:fm8o+adg.net
- 嬉々として大量に出題されるポインタパズルが難易度を無駄に押し上げてる
この時のアドレスは何か、変数は何かと、無駄に凝った問題を作り易いのがポインタの難点
テストのための問題を作る必要があって、そこではふるい落とす必要がある
全員100点じゃマズいと思ってる教師がいるからね
でも教育が成功したと言われる全員100点だとダメ
ここに現行教育の限界点がある
すると、問題難易度は加速しつつ急上昇する
しかも大して面白くもなんともない問題が製造される
穴埋めよりも酷いのが
- 979 :デフォルトの名無しさん:2020/07/11(土) 11:20:10 ID:Rtii2xnW.net
- レコード針みたいなもんじゃないの
- 980 :デフォルトの名無しさん:2020/07/11(土) 11:45:57.83 ID:J0INoyBc.net
- 自称「教科書」が間違ってたりするからな
そういうミスリードが初心者をさらに混乱させてる
- 981 :デフォルトの名無しさん:2020/07/11(土) 11:47:30.73 ID:60oNEnIZ.net
- 初心者用教科書は厳密じゃやくて良いんだよ
- 982 :デフォルトの名無しさん:2020/07/11(土) 11:49:05.50 ID:60oNEnIZ.net
- 高校生の教科書に
ニュートン力学は間違ってるとか
幾何光学は間違ってるとか
この世はユークリッド空間ではない
とか書いても混乱するだけ
- 983 :デフォルトの名無しさん:2020/07/11(土) 12:12:13 ID:J0INoyBc.net
- >>981
百歩譲って厳密じゃないのを許すとしても
明らかな間違いは遺憾
- 984 :デフォルトの名無しさん:2020/07/11(土) 12:23:45.26 ID:60oNEnIZ.net
- 技術書に明らかな間違い?
- 985 :デフォルトの名無しさん:2020/07/11(土) 15:56:25.03 ID:sGHMgavQ.net
- >>976
具体的にどういう場所なん?
- 986 :デフォルトの名無しさん:2020/07/11(土) 16:23:26.53 ID:60oNEnIZ.net
- & * の多義性
複合型の記述方法
メモリ確保解放
ポインタの型と演算の結果の違い
const, volatile
- 987 :デフォルトの名無しさん:2020/07/11(土) 20:36:15.52 ID:87hwO6K6.net
- わかってさえしまえば簡単至極なのに、これほど初心者に教えるのが難しいこともそうはないなw
配列や関数の戦闘アドレスの渡し方をわかりやすく出来てれば難しいと思えることもなかったかもしれない。
- 988 :デフォルトの名無しさん:2020/07/11(土) 20:47:57.04 ID:kW8apoiX.net
- 戦闘アドレスと防御アドレスを使いこなして達人を目指せ!
- 989 :デフォルトの名無しさん:2020/07/11(土) 20:48:58.21 ID:lUabZX1b.net
- >>987
そうか?
- 990 :デフォルトの名無しさん:2020/07/11(土) 21:29:54.59 ID:sGHMgavQ.net
- チートコードはベースアドレスからの距離
ベースアドレスが変わってもチートコードは変わらない
ゲーム好きにはこんな感じか
- 991 :デフォルトの名無しさん:2020/07/12(日) 08:37:19.13 ID:03QLQuvk.net
- vc++でバリアント型って使えますか??
- 992 :蟻人間 :2020/07/12(日) 10:07:58.94 ID:bazuV89L.net
- >>991
Boost
- 993 :デフォルトの名無しさん:2020/07/12(日) 10:26:26 ID:NK7E+AG5.net
- pythonのctypes使うときに役に立ってる
ctypes.POINTERとか謎仕様過ぎた
- 994 :デフォルトの名無しさん:2020/07/12(日) 21:37:47.68 ID:PErY82OB.net
- C++って団塊ジュニアまでの言語って感じがする
これから爆発的に需要が伸びていく可能性なんてないよね?
- 995 :デフォルトの名無しさん:2020/07/12(日) 21:51:26.17 ID:dmFXGwc3.net
- 伸びるとかよくわからんが
今時のウェーイってしている言語にしたって、大抵コア部分のライブラリやらランタイムやらはcやc++で書かれているのだから
その言語のお客様で済む用途を越えて何かしようとしたら、出来ないと困るだろ
- 996 ::2020/07/12(日) 22:14:41.38 ID:YoHAyY/u.net
- >>994
世に存在する計算機言語の半分以上は C/C++ で記述されていたりするのです
- 997 :はちみつ餃子 :2020/07/13(月) 02:47:06.70 ID:vJz2FqxN.net
- 陣取り合戦をしているわけでもなし、
需要が伸びればいいってもんでもない。
重要なのは居場所を見つけるかどうかって話だと思う。
C++ が適切とは言えないけど C++ が比較的マシという理由で C++ が使われている
というのはよくあることで、新しい言語が出現してそういう分野を奪っていくこともある。
もともと C++ がイマイチだったところが消えるだけで、
どんどん衰退して消える運命ってほどのもんではない。
- 998 :デフォルトの名無しさん:2020/07/13(月) 06:38:36.94 ID:17o/9bhC.net
- そろそろ次のスレッド…このスレッドが終わる前に告知を…。
俺は…ダメだ(がっくし)。
- 999 :デフォルトの名無しさん:2020/07/13(月) 07:37:30.49 ID:/O+2Yaja.net
- 1000なら次スレなし
- 1000 :デフォルトの名無しさん:2020/07/13(月) 07:53:41 ID:V+zIL/Eb.net
- のとおり
- 1001 :2ch.net投稿限界:Over 1000 Thread
- 2ch.netからのレス数が1000に到達しました。
総レス数 1001
269 KB
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★