X



【初心者歓迎】C/C++室 Ver.105【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0002デフォルトの名無しさん
垢版 |
2019/04/25(木) 11:00:25.52ID:/tHSxicf
チンポ体操

チンポを手に持ち しごく運動から
1 2 シコシコ
2 2 シコシコ

チンポを振り回す運動
1 2 ブルンブルン
2 2 ブルンブルン
0003デフォルトの名無しさん
垢版 |
2019/04/30(火) 16:44:32.44ID:hc3e5D+8
Cを2年間やって最近大学の講義でC++をやりはじめたのですが
C++だけでなくCの勉強も継続したほうがいいのでしょうか?
0004 ◆QZaw55cn4c
垢版 |
2019/04/30(火) 16:51:17.25ID:iYYZTFZo
>>3
C89=K&R2 をマスターできたら、C99 など目もくれずC++に進むのがいいでしょう、私はそうしましたし C99 なんかどうでもいいと思っています
0005デフォルトの名無しさん
垢版 |
2019/04/30(火) 17:08:01.32ID:hc3e5D+8
>>4
レスありがとうございます
競技プログラミングで言うと、C言語はatcoderでA問題とB問題はすぐに書くことが出来てC問題は解けたり解けなかったりというレベルです。構造体とポインタも基本的(C言語ポインタ完全制覇という書籍にあるような難しいことは知りませんが…)な扱いならばできます。
就職のことも視野に入れて考えたいのですが、C++が出来るならばCの知識が問われる機会というのは少ないのでしょうか?
0006 ◆QZaw55cn4c
垢版 |
2019/04/30(火) 17:18:00.19ID:iYYZTFZo
>>5
就職の話はよくわかりません
ただ、C89=K&R2 → C99 の改定内容は、C89 の時代に試みられていた拡大解釈を規格に取り込んだ、という部類が多いと私は思いました
それに C99 は、「C++ を見た後で決めたんかい?」という謎な部分が多くいけ好かないのも事実です、あんなものは知らないほうがいい部類でしょう
それよりも日々進化し続ける C++ をフォローするほうが、いろいろな面でお得です、私も p-thread 系マルチコアなプログラムを記述するために C++11 or lator に進み、とても満足しています
0007デフォルトの名無しさん
垢版 |
2019/04/30(火) 18:05:48.04ID:arIi2u2B
>>5
C++のクラスとかテンプレートとかSTLとかをとりあえず無視して
Cと共通してる基礎的なとこから学べば、わざわざCを個別に学ぶ必要はないとおも

仕事の場合は純粋にCだけ長年使ってるような特殊な職場でなければ問題ない
0008デフォルトの名無しさん
垢版 |
2019/04/30(火) 18:11:55.63ID:hc3e5D+8
お二人方ありがとうございます
CからC++の勉強に専念する決心が半分くらいつきました
Cのscanf()の仕様(バッファオーバーフローやバッファオーバーランの危険性を回避するいくつかの方法について等)、まだはっきりと把握していないのですが、それでも、C++の勉強に専念してしまっても問題ありませんでしょうか?
0010デフォルトの名無しさん
垢版 |
2019/04/30(火) 21:07:24.59ID:tJFiug19
C問題は使う言語の問題じゃないな
もちろんc++やJavaの方がC言語よりもスムーズに書けるがC問題はアルゴリズムを知らないと出来ない

それと現代ではC言語のscanfに習熟する意味は無い
それは後回しにした方がいい
0011デフォルトの名無しさん
垢版 |
2019/04/30(火) 21:38:58.06ID:B5WLnK8N
>>3
C を続ける必要性がゼロなら C++ に専念した方が良いかと
必要性は個々人による
大学の同級生なり、研究室等の先輩なりに相談・確認するのも良いかも知れない
0012デフォルトの名無しさん
垢版 |
2019/04/30(火) 21:41:18.36ID:B5WLnK8N
_s 系関数でも未定義な挙動を示すコードはいくらでも書けるのでキリがないんじゃね

詳細な資料はあるけれども、入門者が読むもんじゃなし
fgets + sscanf で安全になるわけでもなし
0013 ◆QZaw55cn4c
垢版 |
2019/05/02(木) 13:55:59.43ID:USN+R+ig
>>8
まあ他の人の意見も聴いておいたほうがいいでしょうね
個人的には何をやっても C で書けると「思える」感触ができるまで C で書きまくる経験は有用だろうと思います、時間はかかりますけれども何でも自分で実装する、という縛りを課してみる

データ構造(線形リスト、スタックやキュー、二分木やバランス木・K-dimensionなどのデータ構造)
アルゴリズム(ヒープ/クィック/シェル各種ソート、縦横探索やダイクストラ法と枝刈り・バックトラッキング、ナップサック、シンプレックス法、シャノンファノやハフマン)

いやもう、C なら何をやってもいい経験になりますね…
0015デフォルトの名無しさん
垢版 |
2019/05/03(金) 14:13:46.95ID:xL3yQoTR
関数の引数の書き方について質問があります。
任意のオブジェクトを複数参照する関数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);
:
}
とする方法がベストでしょうか?
0017デフォルトの名無しさん
垢版 |
2019/05/03(金) 14:34:29.48ID:xL3yQoTR
15です。
追記します。

開発系のIDEでオブジェクトのメンバー変数を表示させながら
プログラム作成をしたいので、テンプレート関数化による
ユニバーサル参照の記述は使いたくありません。
0018はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/05/03(金) 21:34:51.81ID:Oy2+74/H
>>15
控えめに言ってクソ。 本当に const なオブジェクトが渡されたときにエラーにならない。
const なオブジェクトに const でない操作をするのは未定義だぞ。
(const ではないオブジェクトなら途中で const を経由しても書き換えて良いらしい。)

言語の作法の範囲内でなら IDE に対する配慮は工夫として評価されるかもしれないけど、
型システムによる保護を台無しにしてまでやるのはオススメできない。

少なくともこのスレでそういう工夫を是とする人はあんまりいないと思うぞ。
0019デフォルトの名無しさん
垢版 |
2019/05/03(金) 21:43:10.16ID:16FcdCX4
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回まではいけるとか考えてもいいのかな
0021デフォルトの名無しさん
垢版 |
2019/05/03(金) 22:23:08.93ID:16FcdCX4
おおそんな書き方が。ありがたい。
しかも脱出に関して言えば、forの中でifで判定してbreakするのではなく
forの条件式に書いてしまうこともできるな…
0022デフォルトの名無しさん
垢版 |
2019/05/04(土) 04:03:12.91ID:qzgt3pmZ
オブジェクト指向でなぜつくるのか
って書籍が今Kindleセールで半額だけど良さそうだな
読んだことある人どんな感想ですか?
0023デフォルトの名無しさん
垢版 |
2019/05/05(日) 03:51:38.18ID:NRm/lXtt
>>22
じゃんけんゲームを2人(自分対PC)用から(PCを)何人でも増やせる設計に変える例で
構造化プログラミングだとちょっと書き換え多そう。。。オブジェクト指向プログラミングなら〜って感じ。
(そこしか覚えてないとも言う)

第2版は最終章でオブジェクト指向プログラミングの次世代は関数型プログラミングだとか言ってHaskellの紹介が追加された。
0024デフォルトの名無しさん
垢版 |
2019/05/05(日) 11:14:43.13ID:P7bsB8ff
皆さんが一番勉強になった本を教えてほしいです。
これならわかるC++と、C言語ポインタ完全制覇は持ってるので、基本的なことはわかります。
これ読んで実力がバズった!というのがあればぜひとも。
0025 ◆QZaw55cn4c
垢版 |
2019/05/05(日) 11:28:24.38ID:3EWrT4Pn
>>24
C++ ならハーバート・シルトの独習C++ ですね
その真ん中くらいにある「std::string を自分で実装する」というお題が非常によく、OO の教科書でそういうお題を配置しているのも本質を明示している意味でよく、この本より優れている初級C++教科書がみあたりません
0028はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/05/05(日) 20:24:31.00ID:TxpPZKKr
>>24
私が学んだのは「詳説 C++ 第2版」だな。
https://www.amazon.co.jp/dp/479732743X
この本の内容は C++03 の時代のものなので C++11 以降のトピックはウェブで学んだ。

Twitter で C++ に強い人が独習C++の間違いを強く批判しているのを見ることがちょいちょいあるので、
自分では読んだことが無いけど独習C++には良い印象がない。
まあ不正確でもわかりやすいことは有りうるのでとりあえずおおざっぱな概略を把握する分には
どれでも割となんとかなる気がしている。
0029 ◆QZaw55cn4c
垢版 |
2019/05/05(日) 20:35:10.90ID:3EWrT4Pn
>>28
>独習C++の間違いを強く批判している

話を簡単にするために、一時的に紛らわしいことを言っている=どこを切っていも正しいというわけではない=文脈依存なところがある、という批判はアマゾンレビューにありましたね
しかし強く批判されるほどの欠点があるかどうかは、私にはよくわかりません

よろしければポインタをください
0030はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/05/05(日) 21:21:05.73ID:TxpPZKKr
>>29
良い評価も悪い評価もあるので単純には言えないけど、批判している代表的な意見としてはこれかな。
https://twitter.com/yumetodo/status/1020966071702966273
ただ、全体として入門書として本当に妥当な本があまりないので、どれが比較的マシなのかというレベルの話だと思う。

私が読んだことがない中で評判を評価するとたぶん江添氏の出している本が (少なくとも日本語の本の中では)
だいぶん良さそうでは有る。
速度のある分野では、単純に古いものはそれだけで価値が低いので、
逆に言えば最新に追い付こうとしているものは高く評価できる。
https://twitter.com/5chan_nel (5ch newer account)
0031デフォルトの名無しさん
垢版 |
2019/05/05(日) 22:04:35.25ID:vipN53in
俺「競プロ飽きたしC++の勉強でもするか」
isocpp.org「まずはTourofC++で概要をつかむといいよ〜」
ビャーネ「Tourはプログラミングに習熟した人を想定している」
俺「短くて面白いけど難しいな。プログラミング初心者向けのはないかな?」
isocpp「じゃあこれ つ原則と実践(1248ページ)」
俺「ファッ!?」
isocpp「あと勉強するときは少なくとも3冊持っといたほうがいいよ〜」
俺「ウーン…」
0032 ◆QZaw55cn4c
垢版 |
2019/05/05(日) 22:17:13.40ID:3EWrT4Pn
>>30
毒臭を有害ゴミと判断した理由が知りたいですね…

個人的には、C++ の中の Java に似た部分を抽出して、初心者(最近は C++ に直接参入する人が多いとか…なんか時代を感じます)にやさしい、できれば分厚くない本がいいなあ
以前は accelerated C++ を薦めたりしたのですが、最近 accelerated c++ の決定的に駄目なところを見つけてしまったので、もう私が薦める本は独習しかないのでした
0033デフォルトの名無しさん
垢版 |
2019/05/05(日) 22:37:15.85ID:RPhfdkos
>>32
有害ゴミなどど、相手が使ってない言葉に勝手に置き換えて、さも相手が感情的で非論理的な
0034デフォルトの名無しさん
垢版 |
2019/05/05(日) 22:39:39.67ID:RPhfdkos
途中だった。

有害ゴミなどど、相手が使ってない言葉に勝手に置き換えて、さも相手が感情的で非論理的な発言をしてきたかのような印象操作は卑怯だとは思わないか?
0038デフォルトの名無しさん
垢版 |
2019/05/05(日) 23:27:07.88ID:DzyvOKLj
プログラミングの最初の一歩すらわからない状態から始めるのか
Pythonやjsやphpなんかである程度書ける状態から始めるのかで話が変わると思う
後者ならググりながら適当になんか書いてみればいいと思う
0039 ◆QZaw55cn4c
垢版 |
2019/05/05(日) 23:43:52.77ID:3EWrT4Pn
>>38
>ググりながら適当になんか書いてみれば
それは C/C++ に関していえば、ちょっと危険な気が… 逆に Python や ruby をやるのなら、それでもいいと思いますが…
0040はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/05/05(日) 23:57:02.81ID:TxpPZKKr
>>39
それに強く同意。
C++ には未定義の挙動が多すぎるので、
表層的な理解で使うのは大変に危険である。
0041デフォルトの名無しさん
垢版 |
2019/05/06(月) 01:21:26.82ID:oGUqqIoM
C++に関してググって出てくる情報って適当なの多いよなw
Qなんとかとか特にw
0042デフォルトの名無しさん
垢版 |
2019/05/06(月) 04:37:01.34ID:z7Cz8mZC
どうも最近は最新のC++の機能を使うべきだとしつつ
自分なりにとりあえず適当に書くのは危険とか言う意見が多いけど
人間もあくまで動物なので手を動かして書かなきゃ覚えないしCの時代から続く古臭い書き方は長年の積み重ねでセオリー確立してんだから
そういう学習方法を否定するのは違うと思うよ

クラス、ひいては最新の機能を正しく使う、なんて初心者がいきなり目指すようなことじゃない
0043デフォルトの名無しさん
垢版 |
2019/05/06(月) 06:08:09.39ID:Geq8Gq1G
>>42
手を動かして覚えることは誰も否定していないし、むしろそれは強く推奨したい。ただ、C/C++の場合は表面的な理解だけで動いたから良しとして進むのは危険で、基本的な部分は正しく理解しておくことは必要だと思う。
ある程度の基礎がある状態なら、新しい機能やライブラリの関数もググって得られる情報から正しい仕様を理解して習得できるが、基礎ができていない状態でそれは難しい。
初心者がとりあえず適当に切り貼りして動かそうというやり方をするなら、他の言語から入った方がいいと思う。ググって調べた断片的な情報だけでなく入門書等で基礎を押さえつつ、実際に書いて愚直に挙動を確認しながら理解をしていくのが良いと思う。
0044 ◆QZaw55cn4c
垢版 |
2019/05/06(月) 11:40:40.36ID:vu8V8zIe
>>42
>人間もあくまで動物なので手を動かして書かなきゃ覚えないし
プログラミングは特に、自分で書いて書いて書きまくって読んでというところは同意
となれば、ちょっと書く気になろうという心の動きを、分厚い教科書で潰したくない、という趣旨は理解
さて、困ったものです、そういうときに使える教科書があればいいのですが、C/C++ の教科書って高くて分厚いですからね…私もメイヤーズはまだ積読だし、いつ読む気になるかな?
0046デフォルトの名無しさん
垢版 |
2019/05/06(月) 13:46:12.30ID:z7Cz8mZC
まぁ確かにサンプルコードの切り貼りとかは危ないだろうしネットの情報だけってのはね
でも独習みたいな古臭い(03以前)入門書なんて初心者にうってつけだと思うんだけど

・・・って、twitterでこき下ろしてる奴のアカウント名に見覚えあるわw
そいつ勘違いの激しい学生ちゃんだから言ってること真に受けない方がいい
0047デフォルトの名無しさん
垢版 |
2019/05/06(月) 16:16:47.15ID:yQTWUAYp
isocppで推薦されてる原則と実践の前の版がたまたま
近くの図書館にあったから読んでみたけど、意外と面白いな。
0048はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/05/06(月) 16:19:28.55ID:K/rO19sE
>>46 見つけられなかったので比較的に新しいやつの中から探して一例として出したけど、
そやつひとりだけが言ってるわけじゃないよ。 良いと評価している人も当然いるんだけど、
あくまで私の観測範囲で私が総合的に感じた漠然敵な印象の話なんで。
0049はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/05/06(月) 16:20:48.53ID:K/rO19sE
今の時点でそれなりに C/C++ をわかるようになっている人の思う「良い本」というのは
「昔に学んだ」という体験だからさ、今から学ぶという人の事情とはやっぱり時代が違うと思う。
自分が読んだ本を言えても、それを強く勧めるほどの自信はないな。

例えば私が最初に買った C++ 本は ARM なんで、これにはいわゆる STL さえ載ってないんだけど、
当時としては妥当な選択肢だったし、十分にわかりやすかった。
でももちろん、今の時代に ARM を勧めるなんて馬鹿馬鹿しくてあり得ないでしょ。

昔の C++ を身に着けてから徐々に知識を更新してきていると昔の C++ と今の C++ が
滑らかに繋がっているように錯覚してしまうけど、昔の C++ を学んでから今の C++ というのは
結構な飛躍があると思うんだよ。
今から学ぶなら C++11 程度は想定している本の方がいいんじゃないかな、と個人的には思う。
0050 ◆QZaw55cn4c
垢版 |
2019/05/12(日) 18:12:45.12ID:wqyHUvPG
>>49
> C++11 程度は想定している本の方がいいんじゃないかな

しかし、C++03 までのからくりをしらずして、C++11 のあれこれを理解できるかな?とも思うのです、ranged for の for(auto &item; vec) の & の意味とか…これはあんがい簡単にクリアできるのやもしれませんけど
0051デフォルトの名無しさん
垢版 |
2019/06/13(木) 17:42:42.66ID:KieG+j09
テンプレート特殊化を前方宣言したいんだけど、
コンパイルエラーが出て詰んでるんですけど、
どうやればいいですか?
例えば以下のようなことがしたいんですが。

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;
};
005351
垢版 |
2019/06/14(金) 00:54:44.79ID:rrlL2Eyk
>>52
おお!マジで出来たw
ありがとう
0054デフォルトの名無しさん
垢版 |
2019/06/18(火) 08:26:42.73ID:YBHtdulC
入門書の入力された文字列が同じかどうかを判断するコードなのですが
https://ideone.com/vaASOS
14行目のif(str1[i]!=str2[i])break;がどういう意味なのかさっぱり理解できません
文字コードが同じじゃなければbreakッて意味ですか?
len+1してるのも意味がわからないです・・・
説明よろしくお願い致しますm(_ _)m
0055デフォルトの名無しさん
垢版 |
2019/06/18(火) 09:08:30.02ID:Sq2beh5p
文字コードが同じじゃなければbreakということでいいんじゃない?
len+1しているのはヌル文字があるから
0058デフォルトの名無しさん
垢版 |
2019/06/18(火) 11:28:13.79ID:uO3416eX
文字列が同じ = 1文字1文字全部同じ = 1文字でも違えば違う
strlenは文字数を返すけど最後の\0を含まない
最後の\0まで比較しないと入力した文字列と先頭部分が一致したら一致してしまうのでlen+1
0059デフォルトの名無しさん
垢版 |
2019/06/18(火) 11:38:40.31ID:YX5RP0uz
文字列長の短いほうを len としないと突破したところを参照してまうぞ

str1 = asd\0
str2 = asdf\0
で str2 の len+1 まで str1 を参照すると嘔吐
0060デフォルトの名無しさん
垢版 |
2019/06/18(火) 11:39:47.81ID:YX5RP0uz
まぁ 文字列長がちがったら いきなり不一致って脱出してもいいんだけどね
0061デフォルトの名無しさん
垢版 |
2019/06/18(火) 11:50:07.19ID:uzZY1452
https://ideone.com/JUWWBr
分かり易くなったゾ

変数を減らせばラク
lenで判定してるイマイチな書き方を排除すればもっとラク
要するに分かりにくく書いてるから分かりにくいだけだよ
0063デフォルトの名無しさん
垢版 |
2019/06/18(火) 12:36:36.95ID:uzZY1452
ループを再帰に直せば終了条件がもっと分かり易くなるゾ
再帰にして時系列の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」まで分かってても全体が分からないようになってる
0064デフォルトの名無しさん
垢版 |
2019/06/18(火) 12:55:58.74ID:GYXVYwQo
ポインタを知らないであろう初学者にポインタ演算を使って分かりやすいとする鬼畜の所業
0065デフォルトの名無しさん
垢版 |
2019/06/18(火) 16:53:31.85ID:eB4Ftz1Y
>>57~63回答ありがとうございます
説明下手でスイマセン。このコードが書いてある前のページに文字列の比較は出来ないため
str1==str2と書いて判定は出来ないと書いてあったのに
14行目でstr1[i]!=str2[2]で判定してるのがよくわからないです
strlenは\0返さないのですね。そこはスッキリしました。ありがとうございます
0066デフォルトの名無しさん
垢版 |
2019/06/18(火) 18:05:58.84ID:U3/WUc9c
>>65
str1==str2はポインタ(それぞれの文字列が格納されている先頭アドレスの値)を比較してるだけ。
str1[i]!=str2[i]は、str1とstr2のi番目の文字を比較している。
0067デフォルトの名無しさん
垢版 |
2019/06/18(火) 18:50:13.29ID:ujoReLWG
>>66
文字列の中身を比較してるんじゃなくて先頭のアドレスを比較していて
str1[i]!=str2[i]は文字列の中身を比較してるってことなんですね
もやもやが解けました。ありがとうざいます
0070デフォルトの名無しさん
垢版 |
2019/06/18(火) 22:39:27.24ID:R4l3qwnJ
int a = b - 1;
if (a < 0){
 a = 0;
}

これのスマートな書き方を教えてください。
0071デフォルトの名無しさん
垢版 |
2019/06/18(火) 22:45:19.63ID:BC11WozD
ここで聞いていいのかわからないけど
組み込み系で上位割り込みでライト、下位割り込みでリードする場合割り込み禁止する必要ありますか?
0072デフォルトの名無しさん
垢版 |
2019/06/18(火) 23:11:51.18ID:gZnFDsgJ
>>70
それ以上にスマートな書き方なんてない
素直が一番

>>72
atomicにアクセスできないなら必要
readの途中でwriteが発生したらダメだし、
writeの途中でreadが発生してもダメなんだから、上位/下位は関係無い
0075デフォルトの名無しさん
垢版 |
2019/06/18(火) 23:28:32.54ID:BC11WozD
>>72
何故ダメなのかが理解できてません。
書き忘れてましたが割り込みはタイマで周期的に発生させてます。
リード中にライトが発生しても下位割り込みは一周期遅れて上位割り込みのライト結果をリードするだけではないのですか?
0076デフォルトの名無しさん
垢版 |
2019/06/18(火) 23:45:23.52ID:gZnFDsgJ
>>75
writeの割り込みが発生するまではreadは進行するんじゃないの?
だから「readの途中で」なんだけど
「2つの割り込みは完全制御下にあり、read中にwriteは発生しない」なら大丈夫だよ、当然
0077デフォルトの名無しさん
垢版 |
2019/06/19(水) 00:02:23.61ID:/MswhT0Q
>>75
>リード中にライトが発生しても下位割り込みは一周期遅れて
ここがちょっと勘違いを感じる
割り込み処理が終わったら、割り込まれた処理の続きをするのよ
低レベルにDBのrollbackみたいな複雑な仕組みはないのよ
0078デフォルトの名無しさん
垢版 |
2019/06/19(水) 02:33:40.48ID:v2+76oWz
char型の動作がどうもわからない。
例えば 
char str[] = "abc"; として
cout << &str[0]; ----> abc
になるのはなんで? index 0番だから a がでると思ったんだけど...
初心者ですまん
0079デフォルトの名無しさん
垢版 |
2019/06/19(水) 03:26:09.45ID:0DgdOBcz
>>78
&str[0]に付いてる&はアドレスを取得する演算子だから、strの最初の文字「a」のアドレスを取得するという意味になり、
結果的には cout << str; と同じことになる。
0080デフォルトの名無しさん
垢版 |
2019/06/19(水) 05:18:40.21ID:xxgeB2IO
>>78
cout << &str[0] << '\n';
cout << str[0] << '\n';
この2行でソースと実行結果を見比べれば腑に落ちるんじゃないかな。
0081デフォルトの名無しさん
垢版 |
2019/06/19(水) 08:25:58.04ID:huda4IDC
>>76
>>77
下位割り込みのリードが一命令で完了するなら「リードの途中でライト」が発生しないので割り込み禁止しなくていいということですか?
例えばリードライトの対象が配列なら割り込み禁止要、変数単体なら不要
0082デフォルトの名無しさん
垢版 |
2019/06/19(水) 09:03:32.83ID:bPRT+MIA
>>81
アセンブラ確認してほんとに一命令なら良いけどそうじゃないなら結局危険じゃない?
Cで1行だからアセンブラでも一命令とはかぎらんよ
0084デフォルトの名無しさん
垢版 |
2019/06/19(水) 09:22:03.41ID:RukLP400
たとえ1命令でも安全かどうかはcpuによる
あいまいな質問にはあいまいな回答しか返らない
マニュアル読むのが正解
0085デフォルトの名無しさん
垢版 |
2019/06/19(水) 09:54:17.80ID:huda4IDC
>>82
なるほど。極端な例ですがcでword変数への代入処理一行だったとしてもアセンブラでは上位バイト、下位バイトを分けて代入してるかもしれませんもんね。

>>83
そうです。

>>84
アセンブラで一命令でもまずい場合ありますか?例えでもよいのでご教授頂けたら助かります。
0086デフォルトの名無しさん
垢版 |
2019/06/19(水) 11:34:02.00ID:kjBiA8ae
vector<std::vector<char> > vec;
の二次元配列で、一行を削除するのはどうしたらよいのでしょうか。

int row = 1;
vec.erase(vec.begin() + row );
ではだめなんでしょうか。
0087デフォルトの名無しさん
垢版 |
2019/06/19(水) 11:40:44.36ID:kjBiA8ae
すみません。これでちゃんと動きました。
お騒がせしました。
0089デフォルトの名無しさん
垢版 |
2019/06/19(水) 20:53:07.15ID:RukLP400
>>85
だから一般論で答えられないって言ってんの
使ってるcpuのマニュアル読め
書いてあるから
0090デフォルトの名無しさん
垢版 |
2019/06/19(水) 23:49:00.15ID:v2+76oWz
>>79
>>80
回答ありがとう。
そもそもaddress-of演算子でIndex 0番を指定してるのに アドレス値じゃなくて 文字が出てくることが混乱の元だった。

char型については>> 演算子がオーバーロードされててc-stringとして解釈される。
実際のアドレスを出力したい時は
cout << (void *)&str[1]; とする
って感じでいいのかな?
0091デフォルトの名無しさん
垢版 |
2019/06/23(日) 01:18:33.15ID:X4lwQ0L+
学校の課題でバブルソートアルゴリズムを使った画像処理の課題で、VSの警告にfor-loopの定義が無効です:最初の条件はテストを満たしていません。ループボディは実行されませんと出てきます。これはどういった原因で出てくる警告なのか教えほしいです
0096デフォルトの名無しさん
垢版 |
2019/06/24(月) 06:51:52.73ID:lwUqObiG
FILE* file;
file=fopen("test.txt","w");
fclose(file);

これでソリューションのフォルダ内にtest.txtファイルが作られると読んでる入門書には書いてあるのですが
VisualStudioのフォルダ内、何処を探しても生成されてません;何処に有るのでしょうか?
0100デフォルトの名無しさん
垢版 |
2019/06/26(水) 01:39:16.88ID:6WTwK8fu
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;
}
0101デフォルトの名無しさん
垢版 |
2019/06/26(水) 07:52:05.91ID:Re4GWmuT
>>100
erase で無効になったイテレータの使用により動作は未定義となります。
そのコードの場合は erase 直後にくるループ条件にある比較時点で。
0104デフォルトの名無しさん
垢版 |
2019/06/26(水) 14:50:08.20ID:7raG/MY1
未定義動作を起こしてるんで
プログラムがたまたまクラッシュもせずに最後まで動いたというレベルからの偶然
0106デフォルトの名無しさん
垢版 |
2019/06/28(金) 01:54:12.27ID:kYWVUvHS
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;
0108デフォルトの名無しさん
垢版 |
2019/06/28(金) 02:11:51.51ID:4VImPalK
const_cast<decay_t<decltype(i)>&>(i)
で大体事足りる

まあ大抵は
using U=decay_t<...>;
とかしておくが
0110デフォルトの名無しさん
垢版 |
2019/06/28(金) 18:20:06.99ID:SuTGhcfs
作りたいものにC++が必要なので1から学んでるプログラミング初心者です

biginteger という型の使い方・使い道がよくわからず悩んでいます。
0111デフォルトの名無しさん
垢版 |
2019/06/28(金) 21:15:56.74ID:+JSlLfql
C/C++の標準にそんな型ないよ
C#にBigIntegerあるみたいだね
使い方は普通の整数型と同じ
使い道は、大きな整数を扱いたい時

使い道がわからないものを無理に使う必要ないんじゃね?
0114110
垢版 |
2019/06/29(土) 19:00:51.29ID:gqtgvd1f
標準の型じゃなくて読み込んでるライブラリ?のクラスだったみたいです
そっちのマニュアルを見て見たら詳しく書いてありました…
いろいろ教えていただきありがとうございました。
0115デフォルトの名無しさん
垢版 |
2019/07/24(水) 09:52:41.24ID:0j2752sC
オブジェクト指向を使ってないアプリを c++ (コンパイラはg++6)で作るのは良でしょうか?それとも推奨されないでしょうか?

当方、意図せずにそうなってしまいました。
Cで書いてるつもりだったのですが、Cでは認められないと知らずにブロック頭以外の所での変数の宣言などを使っていて、
エラーにならなかったのは、Makefile が c++
用の流用で、ソースの拡張子が.cc だったからでした。

こんな c++ コンパイラの使い方は、許される事なのか、良くある事なのか気になりました。
0116デフォルトの名無しさん
垢版 |
2019/07/24(水) 10:00:57.54ID:zKJbgf3R
Cで書いてるつもりがC++になってた、は良くはないけど別に気にすることじゃないかと
Cであることが要件ならCに直せばいいし、C++でもokならそれでもいいし
要件満たすものが出来てんならひとまずokじゃない?
0118115
垢版 |
2019/07/24(水) 12:47:15.91ID:qoUieyoj
>>116 どうもです。
ひとまず動いてるのですが、気になりました。

例えば、「完全にcで書いていてcでコンパイル出来るものでも、c++ 必要なものでも、どちらにも拡張子は .cc に統一して、どちらにも常にコンパイラは c++ を使う」と言う態度ってどうでしょう?
c++ が c の上位互換ならこれで良いように思えます。
0119115
垢版 |
2019/07/24(水) 12:48:43.68ID:qoUieyoj
>>117
そうなのですか?
私の見た情報が古かったのですかね。
0120デフォルトの名無しさん
垢版 |
2019/07/24(水) 13:31:50.28ID:zKJbgf3R
>>118
いや、プログラムってそもそも道具なんだから何で書かれてるかとかどうでもいいかと
複数人で開発していて他人もコードを見ることがある、技術情報として発信する、要件として言語の指定がある
とかいう縛りがあるならその縛りに応じるようにコードを書き直せば良い
個人的にはCでなければ困るというのでなければC++にするし、多少の困りくらいなら回避してC++にする
基本的にC++はCの上位互換
0121115
垢版 |
2019/07/24(水) 20:52:46.78ID:qoUieyoj
私が知りたかったのは、ソースを書くのに何言語を選ぶべきか、でははないです。
知りたかったのは、例えば、
「ソースが c -> gcc 。ソースが c++ -> g++」
をしないで
「一切合切どちらも常に g++ 」でも良いのか?でした。
0122デフォルトの名無しさん
垢版 |
2019/07/24(水) 21:07:11.23ID:0jLIOgkf
>>121
ダメです。兄弟はもう袂を分かちました。
30年前の仕様しか使わないと心に決めているならお好きに…
0123115
垢版 |
2019/07/24(水) 22:28:11.62ID:tRuObC3H
>>122
>>121
>ダメです。兄弟はもう袂を分かちました。
>30年前の仕様しか使わないと心に決めているならお好きに…

どうもです。そうなのですね。
「一切合切 gcc 」はダメでも「一切合切 g++ 」なら大丈夫かと思ってしまいました。
なにぶん始めたばかりでして、この辺りの常識がないのです。
0124デフォルトの名無しさん
垢版 |
2019/07/24(水) 23:59:42.77ID:7wBUx5ir
良い悪いじゃないけど
実質的にCのプログラムでしかないなら純粋なCのプログラムとして書き直して
Cコンパイラとの組み合わせで使っていた方が幸せだと思うよ
0125115
垢版 |
2019/07/25(木) 13:26:54.50ID:A3AJFf0Q
その方がサイズも小さく速度も速いですかね。
トライしてみます。
0126デフォルトの名無しさん
垢版 |
2019/07/27(土) 08:53:41.05ID:zR8v2AWF
>>125
ブロック変数宣言の位置だけがブロックの冒頭ではないというだけなら、通常、
速度低下は全く無く、それをブロックの冒頭に書き直しても速くなることは
有りません。

また、コンストラクタ、デストラクタ、仮想関数、STL、コンテナなどを使わない限り
通常、C++がCより遅くなるということは有りません。
0128デフォルトの名無しさん
垢版 |
2019/08/05(月) 22:51:14.97ID:DMRdHfR+
これからC++勉強しようと思うのですが、
開発環境は何を入れるのがおすすめですか?

Visual Studio Communityが無料で良いのでしょうか
他におすすめあれば御紹介願います

あと、C++勉強に当たっておすすめ定番の本あれば
ご教示ください
0129デフォルトの名無しさん
垢版 |
2019/08/05(月) 22:55:30.85ID:vqN4pUkV
今時ならUbuntu入れてatomなりvs codeなり入れりゃいいんじゃないかな
純粋にc++の勉強したいなら

VCは独自仕様が酷すぎるから言語学習には不向き
0130デフォルトの名無しさん
垢版 |
2019/08/05(月) 23:01:28.37ID:nblSLoEW
VCの独自仕様が気に入らんのならVS2019で対応したLLVMツールセットを使えばいい
初心者にIDEなしはモチベ維持が困難
0131デフォルトの名無しさん
垢版 |
2019/08/05(月) 23:18:05.24ID:f20npl5p
独自仕様ならGCC、未実装ならVCってかんじだがどちらも独自仕様はオプションで制御できる
まあWindows環境でやるならVisualStudio使わないのはマゾ

おすすめできる定番の本についてはどれも一長一短だし
テンプレートの利用くらいまで扱ってればとりあえずなんでもいいと思う
0132デフォルトの名無しさん
垢版 |
2019/08/05(月) 23:29:17.63ID:vqN4pUkV
vcのは独自と言っても、なぜかコンパイルが通らない
なぜかコンパイルが通る
なぜかリンクエラーが起こる
みたいなあまり明文化されていないのだから面倒
structとclassがリンカで別物ってのは酷すぎる
0135デフォルトの名無しさん
垢版 |
2019/08/06(火) 00:52:13.35ID:pONItBAd
コマンドライン引数ってのが何を出来るものなのか全く分からないのですが、何が出来るものなんでしょうか?
書き方はまー分かったんですけど、空のメモ帳をドラッグ&ドロップすると意味あるみたいなこと書いてあるけど何も起こりません…

使用環境Visualstudio2019 で見ているサイトhttp:ああwisdom.sakura.ne.jpあprogramming/c/c32.htmlです
0136デフォルトの名無しさん
垢版 |
2019/08/06(火) 11:26:59.34ID:qIlFvc4N
std::optionalが内部に値を保持する仕組みについてお聞きしたいことがあります
現在いくつかのサイトを巡り、値を保持するためにstd::aligned_storageで確保した領域に配置構文newで値を書き込んでいることがわかりました
このaligned_storageを使った場合に、std::vectorなどのサイズが可変な値が格納されるとどういった挙動になるのでしょうか
vectorの要素数が増えてサイズが大きくなると、alinged_storageで確保したサイズを超えてしまったりしないのでしょうか
0137デフォルトの名無しさん
垢版 |
2019/08/06(火) 14:04:02.23ID:AX25/xXa
根本的な部分の理解が足りていない気がするが直接の答えとしてはvectorのサイズは増えないので問題ない。
vectorが管理しているバッファのサイズは増える。
vectorはポインタを持っているだけ。
0139デフォルトの名無しさん
垢版 |
2019/08/07(水) 00:38:52.58ID:pFHPYbJE
VS2019でchar* name="ABC"みたいにやると
cont char*値を使用してchar*のエンティティを初期化することはできません。とエラーが出るんですけど
どうしたら実行できます?
ググったらcharの前にconst付けると直るみたいですけどこの例だと治りませんでした
http://ideone.com/YyFypJ
0141デフォルトの名無しさん
垢版 |
2019/08/07(水) 04:58:05.08ID:pFHPYbJE
>>140
それはやったんですけど出来ませんでした
paizaとかはconstとか付けなくても付けても出来ましたけどVSでは出来ないのでしょうか?
0146デフォルトの名無しさん
垢版 |
2019/08/07(水) 10:45:14.88ID:9Ff0DYo3
>>139
C/C++の言語仕様的には
const char *name="ABC";
で行ける可能性は高いんですが、分かりやすさのためには、
static const char szName[] ="ABC";  // szName[4] という配列を "ABC",0 で初期化。
const char *name =&szName[0];
とするものお勧めです。
0147デフォルトの名無しさん
垢版 |
2019/08/07(水) 11:36:34.89ID:Io4EJaZl
少なくとも>>139のリンクにあるコードはchar*にリテラルを入れようとしてるのでNG
constをつけても駄目なのは生成後に代入しようとしてるから
てか意味もなくグローバルスコープの構造体とかやめろ
0148デフォルトの名無しさん
垢版 |
2019/08/07(水) 17:26:37.26ID:Io4EJaZl
あと特に理由がないなら文字列はstd::stringを使うべき
C言語じゃないんだから
0150デフォルトの名無しさん
垢版 |
2019/08/08(木) 08:01:13.41ID:kZ+216R/
>>147
構造体メンバに
const char *name;
と書いていて、構造体を生成後に後から name メンバに
Cの文字列リテラルの先頭アドレスを代入することは、
C/C++の言語仕様的にはいけるはずです。
なぜなら、xxx.name のように書いた場合、コンパイラの内部的には
const char* 型の左辺値(代入先)が有るのと同じように扱われるので、
ローカル変数に const char *aaa; aaa = "xxx"; と書いた場合と変わらなく
なるはずですから、C/C++ の言語仕様的には。
0151デフォルトの名無しさん
垢版 |
2019/08/08(木) 16:00:04.26ID:uMVCdDWb
独自のクラスに比較演算子==を実装する時、クラス内に定義するのとグローバルで定義するのとでは、実装の仕方以外に違いがあるのでしょうか?

また、例えば独自クラスとintの比較演算子==を実装する場合は、左辺にintがある場合と右辺にintがある場合の二つを用意する必要があるのでしょうか

ちなみに使用しているのはC++11です
0153デフォルトの名無しさん
垢版 |
2019/08/08(木) 16:35:41.72ID:uMVCdDWb
>>152
これって自分でやったところで解決できる質問なのでしょうか?
もちろん既に自分で実装していますが、自分で使ってみた感じではクラスでもグローバルでも一切の違いがないと「思います」
左辺と右辺のintについても、わざわざ2つの演算子を定義するしか方法がないと「思います」
0154デフォルトの名無しさん
垢版 |
2019/08/08(木) 23:38:32.45ID:gitRBAeC
クラス内に定義するのとグローバルで定義するのとってどういう意味でだ?
クラスのメンバ関数と普通の関数として定義するのとってこと?
あるいはクラスのstaticメンバ関数と普通の関数?
そういうのとは違ってクラス定義の中にメンバ関数の定義も書くのと
クラス定義の中では宣言だけで外に定義を書くのとってこと?
0155デフォルトの名無しさん
垢版 |
2019/08/09(金) 01:10:13.49ID:QHhCdgXb
>>151
クラス内に定義すると当然メンバー関数扱いなるのでprivateメンバーにアクセスできるが、左辺を自クラス、右辺をintにoperatorしか定義できない。
クラス外に定義すると、そのままではprivateメンバーにアクセス出来ないが、左辺、右辺どっちでも自由に定義できる。
0156デフォルトの名無しさん
垢版 |
2019/08/09(金) 01:23:46.70ID:QHhCdgXb
>>151
相手がintの場合はわざわざoperator==を定義しなくても、intへの型変換operatorを定義すれば勝手に変換してくれるので、そっちの方が楽だと思う。
0158デフォルトの名無しさん
垢版 |
2019/08/09(金) 11:09:20.14ID:0rjrOlB6
>>155
大きな違いとして出てくるのは実装面の都合になってくるわけですね
>>157 の方の言う通り楽な方で実装しようと思います

>>156
型変換のオペレータを実装するのは思いつきませんでした
確かにそれが一番手っ取り早いですね
教えていただきありがとうございます
0159デフォルトの名無しさん
垢版 |
2019/08/10(土) 01:46:44.99ID:07GKNAvB
質問ですがリフレクションってのは何ナノですか?
これがないのがC++の欠点って言われてるそうですが
0160デフォルトの名無しさん
垢版 |
2019/08/10(土) 02:13:52.05ID:0AyH8q+k
ググって何がわからなかったのか書けよ
そういう気配り謙虚さがないからお前は伸びないんだよ
0164デフォルトの名無しさん
垢版 |
2019/08/13(火) 00:33:44.36ID:DG2S/APd
T[]は配列、Tなものが並んだもの
T*はポインタ、Tなものを指すもの
Tは、Tそのものとしか
配列は随所でポインタに変換されるから混同するのもわからんでもないが
0165デフォルトの名無しさん
垢版 |
2019/08/13(火) 01:11:53.36ID:7xRhzmxz
じゃあ配列を関数の実引数で与えるときに[]…って書かないで*ってするのはなんで??
0167デフォルトの名無しさん
垢版 |
2019/08/13(火) 05:41:26.72ID:DG2S/APd
配列を関数の実引数で与えるときに*なんてしない
int arr[NUM] = 0; func(arr, NUM);
普通こう書く

cでは、配列は構造体とは違い「満足なオブジェクト」ではないんだ
関数に配列そのものを渡すには構造体で包むなりしないとならない
面倒なんで普通はそんなことはしなくて、先頭要素へのポインタとサイズを渡す
上記func(arr, NUM);も、本当は配列そのものを渡したいんだけどできないから
そういう意味だと解釈される
0168デフォルトの名無しさん
垢版 |
2019/08/13(火) 07:20:08.26ID:j44aRWG6
つまり、めんどくせぇし表現乱立するくらいならvectorなりarray使えってことだな
0169デフォルトの名無しさん
垢版 |
2019/08/13(火) 16:33:08.61ID:qE6XkMY1
mallocした配列なら*
二次元配列なら**
三次元なら***

すんごく分かり易いじゃん
0170◆QZaw55cn4c
垢版 |
2019/08/13(火) 16:50:37.78ID:RSblMGL3
>>167
>cでは、配列は構造体とは違い「満足なオブジェクト」ではないんだ
私にいわせると、C の配列の扱い方こそ正義であり、まるまま渡せるという構造体の方が正義に反するやりかただと考えています
構造体の扱いに関しては、K&R1 のままの方が良く K&R2 は改悪だったと思っています
0173デフォルトの名無しさん
垢版 |
2019/08/14(水) 10:53:25.60ID:K0s/BHfQ
Cだけだといろいろ物足りないから
C++ をちょっと便利な C として
手を付けるのは あり?
0175◆QZaw55cn4c
垢版 |
2019/08/14(水) 16:51:47.26ID:tpn/GSyz
>>173
みんなそうやって C から C++ に移ってきたのだと、私は思います
0177◆QZaw55cn4c
垢版 |
2019/08/14(水) 20:13:46.55ID:tpn/GSyz
>>176
どんなところが「まともに使えていない」と感じられるものだったのでしょうか?
0178デフォルトの名無しさん
垢版 |
2019/08/14(水) 21:53:50.90ID:xRZNaRgT
いや、もうc言語とかいいじゃん、 c++使おうよ
配列で悩むのめんどくさくね?
配列のサイズ渡せないとか欠陥だからマジで
0182デフォルトの名無しさん
垢版 |
2019/08/15(木) 23:28:39.14ID:/raW50Q0
メタプロなんてできない方がかえって生産性あがるわ。
カスが使うと無駄にモジュラリティーの低いもの作るだけ。
0183◆QZaw55cn4c
垢版 |
2019/08/16(金) 15:30:12.59ID:s6h04g1l
>>182
貴重なお言葉恐悦至極に存じます、メタプロとかは私は一生理解できないと思っていますが、それでもいい、というお言葉ですよね…
0184デフォルトの名無しさん
垢版 |
2019/08/16(金) 17:52:44.76ID:WXGx/ZZ4
>>182
> 「カスが使うと」無駄にモジュラリティーの低いもの作るだけ。
よくわかってるじゃないかw
0187デフォルトの名無しさん
垢版 |
2019/08/16(金) 22:52:38.68ID:Y5iyjQTU
>>177
何か指摘するとまたイチャモンつけて否定するだけだろ
俺がまともに使えてないと感じた
理由は自分で考えな
0188◆QZaw55cn4c
垢版 |
2019/08/16(金) 23:02:28.12ID:s6h04g1l
>>187
>何か指摘するとまたイチャモンつけて否定するだけだろ
そうでもないと思いますよ…実感では 3% くらいしか使っていないかと
0190◆QZaw55cn4c
垢版 |
2019/08/17(土) 00:55:09.12ID:ToRIVhzM
>>189
そうですか、でも、それはそれで興味深いですね
センスの問題、ということは非言語領域的テーマだろうか、と推察しますが、
コンピューター言語という極めて形式的=言語的な領域の話にて非言語的概念が語られる、いや、それが最重要であるというところに奥の知れない「恐ろしさ」を予想します
0191デフォルトの名無しさん
垢版 |
2019/08/17(土) 02:40:02.84ID:MepC3sRG
(どうもコンパイル時最適化が効くからテンプレートメタプログラミングするって人がいないように思う)
0193◆QZaw55cn4c
垢版 |
2019/08/17(土) 11:22:38.89ID:ToRIVhzM
>>192
リンク時に最適化するのですか?単にリンカがリンクするだけだと思っていましたが
0195デフォルトの名無しさん
垢版 |
2019/08/17(土) 14:11:42.12ID:0hT5zrAG
テンプレートのコンパイル時最適化なんてのはマクロ展開的な最適化をしてるだけ。
そんな最適化が必要な部分はもっと慎重に関数化するわ。
ただドヤリたいだけのバカがありがたがってるってのがよくわかる。
0197デフォルトの名無しさん
垢版 |
2019/08/17(土) 15:22:51.03ID:mvKCT7Z2
これまで何も考えずにC++で配列を使ってたんですけど
もしかしてC++で配列を使うのってナメられますか?
arrayやvectorなどでないとやはりコードのクオリティが下がることになってしまうのでしょうか?
0198デフォルトの名無しさん
垢版 |
2019/08/17(土) 15:52:09.37ID:BZ3r0cTp
newからdeleteまでの間の例外処理に不備がないと自信があるなら生配列で構わん
0199デフォルトの名無しさん
垢版 |
2019/08/17(土) 16:56:59.91ID:kME64/ZP
>>197
静的配列なら生配列もありかと思う
静的配列でもarrayのメソッド使いたいとか引数で他の関数等に渡すとかあるならarray
動的配列なら他に理由がない限りvector一択
0200デフォルトの名無しさん
垢版 |
2019/08/17(土) 17:14:22.35ID:WCU4L4CL
>>197
生配列とarrayやvectorのメリットデメリットや使い分けを理解せずに何も考えずにarrayやvectorにする方がいいらしいなんて理解の仕方ならクオリティは低いままだよ。
0201デフォルトの名無しさん
垢版 |
2019/08/17(土) 18:13:22.13ID:1UQd730E
>>195
その表現もおかしいけどな
テンプレートによってマクロ展開的に生成されたコードにも等しく最適化がかかるだけであって

>>197
コードのクオリティとか良いコードとかより、最終的にどちらがユーザーの利益になるかどうかを考える方が健全だと思うけど
0202デフォルトの名無しさん
垢版 |
2019/08/18(日) 00:09:06.82ID:XCKtcmfj
>>201
マクロ展開で実行評価される必要のない部分が削られるって話なんだが
あんまり理解してないでしょ?
まあ別に理解してないならしてないでほとんどの場面で使わなくていいものではあるが。
0203デフォルトの名無しさん
垢版 |
2019/08/18(日) 08:44:15.16ID:vyOg2WJ0
>あんまり理解してないでしょ?
こっちの台詞だよ
必要とされたときに初めて実体化されるの
必要ないのに全ての型全ての組み合わせ用意してから削ってると思ってたのか
0204デフォルトの名無しさん
垢版 |
2019/08/18(日) 09:58:09.36ID:S9bN8HAf
>>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
0205デフォルトの名無しさん
垢版 |
2019/08/18(日) 12:05:15.42ID:XCKtcmfj
>>203
やっぱ変数評価の問題とマクロの関係を全く理解してないんだな。
>>196
そういう型マッチングシステムに依存しまくったものの危険性を全く理解してないのが
問題なんだよ。
SFINEとか型マッチングシステムのデバッグしずらいものに頼る問題を
全く意識していない輩が多すぎる。
0206デフォルトの名無しさん
垢版 |
2019/08/18(日) 12:24:08.36ID:vyOg2WJ0
変数(というよりテンプレート実引数)を特殊化なりオーバーロードなりで評価した結果コードが生成されない(テンプレートが実体化されない)のは最適化でも何でもない
0207デフォルトの名無しさん
垢版 |
2019/08/18(日) 12:27:17.01ID:vyOg2WJ0
ただし、よくわかりもせずにテンプレートを持て囃したりC++歴数年でテンプレートに首突っ込む(しかも生産性ガン無視で)初心者が増えたのは俺も問題だと思う
0209デフォルトの名無しさん
垢版 |
2019/08/18(日) 12:52:38.69ID:rJ9LPM9I
>>205
君の用語の使い方が独特で、君の思ってることを読み取れるエスパーは少ないって話だと思うよ。

マクロ展開の「実行評価」って何なの?
具体的な問題を挙げずに危険とかいうのは単なるFUDってやつじゃないの?

理解させるために言葉を工夫するつもりが無いなら黙ってくれていい。
0210デフォルトの名無しさん
垢版 |
2019/08/18(日) 18:15:25.68ID:XCKtcmfj
>>209
理解してないならそういえばいい。
とりあえずcommon-lispでも勉強することをオススメする。
少しは見識が広がると思うよ。
0211デフォルトの名無しさん
垢版 |
2019/08/18(日) 22:22:43.25ID:4oEGaRbg
>>210
common lispで実行評価って、evaluationのことを言いたいのだろうか?それなら「評価」と訳されると思うけど、実行評価はググっても見当たらない。PDCAの用語と混同してるのではないかと思えてしまう。
0215デフォルトの名無しさん
垢版 |
2019/08/19(月) 11:27:33.54ID:icNxZHqv
まずはダイナミックとスタティックの違いがある
静的なものは未来永劫不動なので、一度作ったら未来でも一切変わらない
動的なものは「未来は不定である」「未来は誰にも分からない」という哲学あるいは神学から作られたので、未来に挙動が変わる

決定論的な未来の世界観では一度作ったらそれきり、静的なものが出来上がる
ここでいう決定は本当に神学で、全知全能の神を指している
未来の事柄があらかじめ全部分かっていれば、ダイナミックなことはしなくて良くなる、というのが、彼ら西洋人の究極の理想論

今分かることは動かす前に全部決め打ちすりゃーいい、ってのが静的だ
0216◆QZaw55cn4c
垢版 |
2019/08/19(月) 18:55:20.55ID:D6AI5dRa
>>215
>未来の事柄があらかじめ全部分かっていれば、ダイナミックなことはしなくて良くなる、というのが、彼ら西洋人の究極の理想論
ラプラスの悪魔、という語句をご存知ですか?西洋人ですら「未来の事柄をあらかじめ」予測することはできない、と観念しているようですよ…
0217入門
垢版 |
2019/08/19(月) 20:35:59.98ID:aCo9z6Zb
色んなサイトを見てC言語の文法を学習中なのですが構造体の自己参照のやり方がどうも分かりません。
かんたんな短いサンプルコードを使って教えてほしいです
よろしくお願い致します😪
0218蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/08/19(月) 20:40:39.17ID:GYeBbzEk
構造体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を呼ばないといけない。
0219蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/08/19(月) 20:48:42.67ID:GYeBbzEk
ただし、同じ実体に対して2回free関数を呼ぶことはできない。
また、解放した実体のメンバーは参照することができない。
参照すると、不正読み込みでプログラムが異常終了するかもしれない。

ということでパズルのように解放方法のアルゴリズムを考案しないといけない。
C言語というのは、そういうややこしさをはらんでいる。
0220蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/08/19(月) 20:56:19.12ID:GYeBbzEk
1個追加したいときに、このようなコードをいちいち書くのは大変なので、
普通は「1個追加する」という動作を行う関数を用意する。

void add(A *a, int value)
{
A *b = (A *)calloc(1, sizeof(A));
b->next = NULL;
b->value = value;
a->next = b;
}
0221デフォルトの名無しさん
垢版 |
2019/08/19(月) 21:05:52.16ID:thJnfNrr
テンプレートの話題でlispの話題ならマクロの話ってピンとくるもんだと思ったが
結構バカが多いんだな。
0223入門
垢版 |
2019/08/19(月) 22:29:52.38ID:OunjwQY3
>>218
かなりコンパクトに纏めていただきありがとうございます
ただまだcallocとポインタ型のキャストがいまいち分からなくて😪
すいません
0224さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/08/19(月) 22:45:30.60ID:5pda5jNo
calloc(1, sizeof(A))は、1*sizeof(A)バイトのメモリーブロックを確保し、ブロックをゼロでクリアする。そして先頭アドレスとしてvoid*型を返す。リファレンスをちゃんと読もう。全部書いてある。
0225デフォルトの名無しさん
垢版 |
2019/08/20(火) 13:31:20.80ID:iQfxCe91
c++でanimal, dog, catなどのクラスを作ってオブジェクト指向の勉強してます.
dogとcatはanimalを継承するよくある例です.
適当にa[]という配列を切って,a[0]はdogのクラスでa[1]はcatのクラスで…
というようにしたいのですが,この配列a[]の型やaのクラスを指定するやり方が
分かりません.
最終的にはa[i].barkというようなことをやりたいです.
よくある質問だと思うのですが,適切な検索ワードが分からず困っています.
どうやったら良いかor適切なキーワードを教えてください.
0226デフォルトの名無しさん
垢版 |
2019/08/20(火) 13:45:18.40ID:XxGMpj+X
animalの配列にdog, catをアップキャストしてぶち込む
animal, dog, catのunionを作り、そのunionの配列を作る
0228デフォルトの名無しさん
垢版 |
2019/08/20(火) 13:58:30.55ID:J42ZId0L
>>226
さっぱり分かりませんがありがとうございます.これでgoogle先生に質問できます.
0230sage
垢版 |
2019/08/20(火) 15:46:52.82ID:5Gd7p9P4
>>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>());
0231デフォルトの名無しさん
垢版 |
2019/08/20(火) 15:47:51.55ID:KtaU4TpY
基底クラスの実体配列じゃ多分無理で
基底クラスのポインタ配列しかないと思うわー
0232225
垢版 |
2019/08/20(火) 16:04:10.66ID:5Gd7p9P4
ポインタの配列を作ったつもりだったんですが違うんですね....
誰か簡単なコード書いてくれませんか?
0239デフォルトの名無しさん
垢版 |
2019/08/20(火) 20:23:10.77ID:QkieET4w
つか、エラー貼るまでもないだろ

std::unique_ptr

コイツはmovしかできないから、コンテナに格納できる条件に合わない。

スマートポインタをコンテナに入れたかったらsharedポインタを使う

常識じゃなかったのか
0242デフォルトの名無しさん
垢版 |
2019/08/20(火) 23:47:14.68ID:ehCs1rOT
>>239
std::unique_ptrはコンテナに入れられるぞ
std:auto_ptrをコンテナに入れた場合に起きるCOAPという問題は起きないんだぜ
0243230
垢版 |
2019/08/21(水) 20:14:24.97ID:tFOQQ8LH
質問者です。すいません。
コンストラクタのエラーでした。
無事コンパイルできました。
ありがとうございました。
0244デフォルトの名無しさん
垢版 |
2019/08/26(月) 16:42:54.84ID:LypwkFGf
人の書いたプログラム読んでるですが,#includeとclassの定義の間に入ってるclassの意味が分かりません.
下の例で言うとHogeのところです.
これは何ですか?

#include <string>
class Hoge;
class Foo : public Bar
{
protected:
...
0246デフォルトの名無しさん
垢版 |
2019/08/26(月) 17:01:32.76ID:LypwkFGf
ありがとうございます.ググって勉強しまう.
0247デフォルトの名無しさん
垢版 |
2019/08/26(月) 19:18:54.68ID:YVFaeJ51
class TA{
 static public int a;
}
があって、

int b = TA::a ;
のようにするのと、

TA A;
int b = A.a;
のようにするのは、bに読み込む速度は違うんですかね。
0249デフォルトの名無しさん
垢版 |
2019/09/08(日) 17:10:16.42ID:eAq/jxOF
wavファイルなどの外部の別ファイルを読み込んで使いたいのですが、どのようにやればいいのでしょうか…?
バイナリデータにして読み込む、みたいな方法を見かけたのですがファイルのサイズが大きすぎるとヒープの領域を使い果たしました的なエラーが出てしまって行き詰まっています
0250デフォルトの名無しさん
垢版 |
2019/09/08(日) 17:38:17.62ID:46Wp6heU
mallocを使う
まずは音ではなく画像、bmp読み込みから練習する

数百MBの音声ファイルよか数MBのbmp画像読み込みの方が気がラク
0251デフォルトの名無しさん
垢版 |
2019/09/08(日) 19:18:59.59ID:MtO5EQx1
>>249
一度に全データを読み込むのでなく、固定サイズのバッファに、必要な分だけ少しずつ読み込めばいい。
読み込み済みデータを再生するスレッドとは別に、もう一つのスレッドで再生にあわせてデータを先読みで読み込んでいけばいい。途切れなく再生するにはリングバッファとかを使う。
0252デフォルトの名無しさん
垢版 |
2019/09/08(日) 21:28:55.65ID:eAq/jxOF
malloc・リングバッファ、詳しく調べて挑戦してみようと思います!
あとスレッドの概念もちゃんと理解できてない気がするのでそこも勉強しようと思います。
ありがとうございます!
0253デフォルトの名無しさん
垢版 |
2019/09/09(月) 10:46:06.36ID:QoBVzNSJ
>ファイルのサイズが大きすぎると
積んでるメモリぐらいでかいファイルなのかな?
どういった読み込みで失敗してるんだろう?
0254デフォルトの名無しさん
垢版 |
2019/09/09(月) 10:54:14.51ID:MF4WMKe5
> ヒープの領域を使い果たしました的なエラー

これからまず連想したのは、VCで巨大ファイルをリソース化しようとしたときに出るコンパイルエラーだな
どのタイミングで出たエラーか書いてないからわからんけど
0255デフォルトの名無しさん
垢版 |
2019/09/09(月) 11:17:30.78ID:QoBVzNSJ
実行ファイル中にリソースとして埋め込み
リソースからバイナリ列を引き出して(読み出して)
再生コードに渡す

音声を実行ファイルに埋め込みたかったのかな?
0256249
垢版 |
2019/09/09(月) 13:17:02.59ID:4LFzbPos
もう少し詳しく書くと、とあるプラグインを作りたくて、それ用のプロジェクトファイルのジェネレーターとVisual studio 2019 を使っています。

そのジェネレーターを通してwavファイルをバイナリデータ化しているのですが、wavファイルのサイズが一定以上になると「error C1060 ヒープの領域を使い果たしました」っていうエラーが出てビルドが通らない状態です。

10MBぐらいのwavファイルだと普通に通って、18MBぐらいになるとエラーが出ます。
0257デフォルトの名無しさん
垢版 |
2019/09/09(月) 13:19:41.05ID:By40c52C
ソース貼れ
0259デフォルトの名無しさん
垢版 |
2019/09/09(月) 13:27:52.11ID:FLVXg6p/
タレこめ
0260デフォルトの名無しさん
垢版 |
2019/09/09(月) 14:06:32.05ID:QoBVzNSJ
プラグイン本体にバイナリデータ埋めまず、エンドユーザーにはプラグインと音声ファイルを配布
音声ファイルのパスだけうまく帳尻あわせてファイル開いて、メモリ確保して、ファイル読んで、etc
って設計するかな
0263デフォルトの名無しさん
垢版 |
2019/09/12(木) 12:49:41.16ID:J5GPib5U
スレチのような気もするんですが,ここが一番適切な回答がありそうなんで,質問させて下さい.
iPadでc++のコード(複数のファイルでつくられている)を読みたいんですが便利なビューワーありますか?
関数名やクラス名クリックしたら定義してるところまでジャンプしてくれるようなやつを探してます.
emacsで言うetagsみたいな機能のことです.
0265263
垢版 |
2019/09/12(木) 13:56:43.03ID:Ng4JTS7f
>>264
後出しですいません.キーボードは使わないのでemacsはないです.あと,iPadのemacsはけっこうがっかりだった記憶が….
タッチでジャンプできると嬉しいのですが….
便利そうなエディタは何個かあるみたいなんですが,ジャンプ機能がないんですよね.
0266225
垢版 |
2019/09/17(火) 22:40:09.17ID:iQJ8U52u
以前 >>225 で質問させてもらったものです。
>>230 で書いたようなプログラムを作ってるんですが、
DogやCatだけでループを回したいんですがどうしたら良いですか?
Dogだけの配列とCatだけの配列作ってから、Animalのポインタでそれらの配列を
参照すれば出来るのかなと思ってるんですが、考え方はあってますか?
0268蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/09/17(火) 22:52:04.49ID:vrvr50SL
>>266
ポリモーフィズムがうまくできていればAnimalのポインタの配列にDogやCatのポインタを突っ込めるはず。
0270デフォルトの名無しさん
垢版 |
2019/09/17(火) 23:00:14.32ID:iQJ8U52u
>>268
ポインタ突っ込む方法を具体的に教えてくれませんか?
ポインタがよく分からないです…。
0271蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/09/17(火) 23:04:06.26ID:vrvr50SL
Animal *array[10] = {NULL};
array[0] = new Cat(2, 3);
array[0]->walk();
delete array[0];
0272デフォルトの名無しさん
垢版 |
2019/09/17(火) 23:08:52.42ID:4Zel//hf
>>270
一旦オブジェクト指向のことは忘れてポインタを先にしっかり学んできた方が近道かもよ。ここで小さなサンプル教えてもらって真似しても近い将来嵌まって行き詰まりそう。
オブジェクト指向の勉強が目的なら他の言語で始めた方が余計なところで躓かないと思う。
0275デフォルトの名無しさん
垢版 |
2019/09/17(火) 23:12:50.50ID:iQJ8U52u
DogやCatのインスタンスも複数あって、
Dog だけでループとかCatだけでループとかしたいんです。
animalだけでループするなら書いていただいたので良さそうなんですが。
0278デフォルトの名無しさん
垢版 |
2019/09/17(火) 23:19:18.73ID:Ps8IF7R/
DogやCatに自身のタイプを返す機能をつけるか、typeidを使ってループをフィルタすればいい
0279蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/09/17(火) 23:20:21.52ID:vrvr50SL
dynamic_castでダウンキャスト失敗すればNULLが買える。一個800円。
0281デフォルトの名無しさん
垢版 |
2019/09/17(火) 23:20:52.26ID:iQJ8U52u
初心者スレだし、解答欲しいです。
0283デフォルトの名無しさん
垢版 |
2019/09/17(火) 23:22:25.46ID:iQJ8U52u
>>278
何言ってるか不明ですがキーワードありがとうございます。
とりあえずググります。
0286蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/09/17(火) 23:24:00.17ID:vrvr50SL
dynamic_cast<Cat>(array[0]) == NULLだったらarray[0]はネコではない
0287デフォルトの名無しさん
垢版 |
2019/09/17(火) 23:24:31.61ID:f5N3Fp86
          || ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄||
          ||. =ねらー三原則=  ||
          || 1.助けない      ||
          || 2.教えない 。    ∧_∧  いいですね。
          || 3.関わらない\ (゚Д゚,,)
          ||________⊂⊂ |
  ∧ ∧    ∧ ∧    ∧ ∧    | ̄ ̄ ̄ ̄|
  (  ∧ ∧ (   ∧ ∧ (  ∧ ∧ |      |
〜(_(  ∧ ∧ __(  ∧ ∧__(   ∧ ∧ ̄ ̄ ̄
  〜(_(  ∧ ∧_(  ∧ ∧_(   ∧ ∧  は〜い、先生。
    〜(_(   ,,)〜(_(   ,,)〜(_(   ,,)
      〜(___ノ  〜(___ノ   〜(___ノ
0288蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/09/17(火) 23:24:40.10ID:vrvr50SL
dynamic_cast<Cat*>(array[0]) == NULLだったらarray[0]はネコではない
0289デフォルトの名無しさん
垢版 |
2019/09/17(火) 23:27:47.60ID:iQJ8U52u
>>284
理解しました。
そのif文つかうとOpenMP使うときにロードが均等に分散されないので、
dogだけの配列欲しいですね。
0290デフォルトの名無しさん
垢版 |
2019/09/17(火) 23:41:03.11ID:4Zel//hf
>>289
それなら条件に該当するエントリのポインタを抜き出した配列を作ってループすればいいんじゃないか?
ループ内の処理が並列化する価値があるくらいコストかかるなら、ポインタを抽出してコピーするコストは無視できるかと思われる。
0291デフォルトの名無しさん
垢版 |
2019/09/18(水) 00:08:00.90ID:yNiXaOMn
>>290
ありがとうございます。
それやってみます。
0292デフォルトの名無しさん
垢版 |
2019/09/18(水) 12:06:57.92ID:L8SHYgAR
>>266
C#スレでマルチしてないかお前
0293デフォルトの名無しさん
垢版 |
2019/09/18(水) 20:26:23.65ID:yNiXaOMn
>>292
してないやでー
0294デフォルトの名無しさん
垢版 |
2019/09/22(日) 11:43:54.30ID:LQCFANDg
> Animal *array[10] = {NULL};

20年以上前に配列要素を一つ以上書かないといけない処理系があったな
タイムスリップでもしてきたか
0295デフォルトの名無しさん
垢版 |
2019/09/22(日) 11:53:00.80ID:y42gsAly
Animal *array[10] = {p0, p1, p2};
だとすると
array[0] 〜 array[2] は p0〜p2 になるが
array[3] 以降は全部 NULL で FA?
0297デフォルトの名無しさん
垢版 |
2019/09/22(日) 16:45:05.27ID:zrmuC8G0
char *array[10] = {p0, p1, p2};
だとすると
array[0] 〜 array[2] は p0〜p2 になるが
array[3] 以降は全部 NULL で FA?
0301デフォルトの名無しさん
垢版 |
2019/10/01(火) 17:46:09.39ID:yQHk6Pyq
Windows の普通のソフトのインストーラは Program Files 以下に適当なフォルダを作ってそこにファイルをまとめて入れるけど、
コマンドラインアプリの場合ってどうしてる?
GUI アプリと同じようにフォルダに突っ込んで環境変数 PATH を設定するってのが標準的なやり方だと思うけど、
そういうのが増えてくると PATH が長大になって嫌な感じなので、なんかうまい方法ってないもんかな?

C/C++ とは直接の関係がなくてスマソ。 どのスレがベストかわからんかったもんで。
0303デフォルトの名無しさん
垢版 |
2019/10/01(火) 19:48:41.05ID:yQHk6Pyq
>>302
フルパスを前提にすると連携しづらい場合が出てくるんよ。
「このバッチファイルを実行するにはこのソフトとこのソフトを入れてね!」
みたいなことをやろうとすると、想定してたのと違うフォルダにインストールしてるだけで破綻してしまう。

32bit のアプリケーションって 32bit 版の Windows だと Program Files に入るけど
64bit 版の Windows だと Program Files (x86) 入るようにするのが基本的な作法じゃん?

それだけでも違ってしまうけど
システムドライブとは違うドライブにアプリケーションをインストールしたりする運用をやってる人は意外にいるので、
インストール先を選択させずに固定するってのも縛りが強いかなぁと思うし。

どこにインストールしてでも同じように使えるようにするには PATH くらいしか選択肢がなくなる。
でも嫌。 っていう話。
0304デフォルトの名無しさん
垢版 |
2019/10/01(火) 20:00:47.20ID:gawiB1ps
20年以上前からある問題だな
Windowsではその辺は未だにグダグダだと認識している
0305デフォルトの名無しさん
垢版 |
2019/10/01(火) 22:13:00.30ID:sghBprd5
>>303
設定でその外部アプリへのパス指定できるようにすれば?
インストール先固定、環境変数追加、レジストリ追加よりユーザーに指定させるほうが個人的には好き
というかこの三種のような方法をとるアプリはそもそもインストールを躊躇する
0306デフォルトの名無しさん
垢版 |
2019/10/01(火) 23:27:11.07ID:D6lr/hhZ
コマンドラインアプリでコンソールから起動 バッチファイルから呼び出し etc
実行ファイルの検索順位に依存しまくるからにゃぁ
0308デフォルトの名無しさん
垢版 |
2019/10/02(水) 12:47:26.92ID:55+aQRnY
>>301 >>303
C:\bin
0309デフォルトの名無しさん
垢版 |
2019/10/02(水) 12:49:56.03ID:55+aQRnY
> 32bit のアプリケーションって 32bit 版の Windows だと Program Files に入るけど
> 64bit 版の Windows だと Program Files (x86) 入るようにするのが基本的な作法じゃん?

> それだけでも違ってしまうけど

違わない
32bitアプリケーションからは
Program Filesしか見えない
実際はProgram Files (x86)をアクセスしてる訳だが
そんなことは32bitアプリケーション側は知らなくて良いし知らない方が良い
0310デフォルトの名無しさん
垢版 |
2019/10/16(水) 18:22:59.77ID:imXCztCz
class A{
public:
B b
}

class B{

}

の時、Aのコンストラクタなどで b = new B; とすると、
このbはAのクラス内で使えますが、Aのデストラクタが走る時に、
bも一緒に消えるのでしょうか。
それとも別途に delete b が必要なのでしょうか。
0312デフォルトの名無しさん
垢版 |
2019/10/16(水) 18:27:03.37ID:imXCztCz
一緒に消えないのですか。どうもありがとうございました。
0313はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/10/16(水) 18:36:34.82ID:d1R3XcHH
>>310-312
A のコンストラクタ内で例外が送出されると delete b が実行されない可能性があるのでなるべくならスマートポインタを使うのが望ましいし楽。
0314デフォルトの名無しさん
垢版 |
2019/10/16(水) 18:43:49.83ID:6mvmnwRf
B b; と定義したなら、b = new B;が不要で、Aのデストラクタ実行時にbも一緒に消える。
B* b; と定義したなら >>311 だが、わざわざポインタで定義するのは
コピーコンストラクタ等々自前で定義しなきゃならんのでお勧めしない。
スマポならAのデストラクタ実行時にbも一緒に消えるけど、
shared_ptrはコピー時に共有されてしまうし、unique_ptrはコピーできなくなる。
0315310
垢版 |
2019/10/16(水) 18:53:13.17ID:imXCztCz
なるほど。B* bで書いたつもりが間違ってました。
しかしA内でbを使い回すなら、B b の方が良さそうですね。
どうもありがとうございました。
0317デフォルトの名無しさん
垢版 |
2019/10/23(水) 00:02:04.30ID:FSIo0WLO
多分スレチな話題だけど
高速化目的で固定小数点数クラス作って満足してた所に、コンパイラの設定で浮動小数点モデルをfastにしたら何倍も速度差つけられたんだが
どういう原理でそうなるのかわからない 調べても中々資料出てこないし
誰か教えて下しい
0318はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/10/23(水) 01:44:13.82ID:GER+FSVM
>>317
現代では浮動小数点はハードウェア (CPU) のサポートがあるので丸め方の一貫性とか捨ててめいっぱいに CPU の機能を利用したら速いよ。
0319蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/10/23(水) 02:19:12.55ID:DFr4VJRt
昔、インテルの一部のCPUにfloating pointの処理に不具合があって、それで高い精度が求められるプログラムでは、ソフトで対応できるようなコンパイラが作られたらしい(要出展?)。
0324蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/10/23(水) 13:01:09.43ID:bxABcYeD
SSDは早い。400MB/sec近い。
HDDは遅い。100MB/secくらい。
音声に加えて画像も出力することを考慮すると、音声出力の実際の性能は50MB/sec以下だろう。
音声を最高の品質にすると、10msecごとに音声データがおよそ3900バイトあるようだ。1秒では390000バイト、390KB/secになる。余裕のよっちゃんだ。
0325蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/10/23(水) 13:08:27.27ID:DFr4VJRt
記憶媒体やOSはときどきフリーズすることがある。0.5秒フリーズしても耐えられるようにするには、390KB*0.5==195KB。
少なくともこれだけのバッファが必要になる。余裕を持って事前にリングバッファ400KBを用意することにする。
0326蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/10/23(水) 13:12:48.38ID:DFr4VJRt
一度にファイルに書き込むデータは100KBにする。このデータ量は小さすぎても性能が下がるし、大きすぎると流れが止まってしまう。
0327蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/10/23(水) 13:25:45.62ID:bxABcYeD
アプリ起動時に音声消費スレッドを起動する。イベントハンドルで音声データが車で待つ。イベントが来たら、音声データを少しずつファイルに吐き出して、消費する。全部消費したら再びイベントを待つ。これの繰り返し。
0329デフォルトの名無しさん
垢版 |
2019/10/23(水) 14:54:53.56ID:JzA6/vMp
引っ越したんなら質問も引っ越せよ
0331蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/10/24(木) 20:49:36.30ID:hL+vNXS/
長く録画してると、画像と音声のタイミングがずれる。
WM_TIMERのせいか?
0332蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/10/24(木) 21:21:54.34ID:ZzyW2UAB
WM_TIMERの精度が低いから音ずれが起きている。
QPCと別スレッドで書き直し。
0334デフォルトの名無しさん
垢版 |
2019/10/24(木) 22:48:01.86ID:se7EzpzH
何のタイミングを作ろうとしてる?
リアルタイムに録画したデータをストレージに保存するんだよね?
0336蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/10/24(木) 23:14:06.35ID:ZzyW2UAB
どうもタイミングの累積誤差があって、ゲームのWinDepthで試すと動画では音が遅れるみたいなんだ。
0337デフォルトの名無しさん
垢版 |
2019/10/24(木) 23:17:05.32ID:se7EzpzH
録画した後、それを再生するとずれていくといこと?
それとも狙った時間でスクショをキャプチャできないという意味?
0339蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/10/25(金) 13:15:44.76ID:OgTxIR48
Visual Studio 2017だと音ズレはなくなった。
MSYS2のデバッグバージョンでは少しずつ音がずれる。
WinDepth のSTAGE 2にいくと0.5秒ほどずれる。
0340蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/10/25(金) 13:28:08.21ID:OgTxIR48
MSYS2のリリースバージョンでも音ズレなくなった。
ありがとうございます。

https://github.com/katahiromz/YappyCam/blob/master/YappyCam.cpp#L75
これがPictureConsumerThreadProc (映像消費スレッド)。

https://github.com/katahiromz/YappyCam/blob/master/YappyCam.cpp#L158
これがPictureProducerThreadProc (映像生成スレッド)。

次はパフォーマンスを出来る限り高めないといけない。
0341蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/10/25(金) 14:06:51.29ID:OgTxIR48
CreateThreadはCRTと一緒に使っちゃいけないらしいから、_beginthreadexで書き直しだ。
0344蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/10/25(金) 17:01:41.65ID:OgTxIR48
PT_SCREENCAPにBITMAPチェックを入れたら直った。

画面にごみが残るのはどうにかならないかなあ?
0345蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/10/25(金) 18:50:20.70ID:VkouAEbH
フレーム落ちはしてないから、性能の問題ではない。たぶんフレームと音声のタイミングの違いだろう。音声の方が長い場合は音声を削ることも検討する。
0347蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/10/25(金) 19:06:40.11ID:OgTxIR48
>>346
なんか意味あるの?

当たり前だが、フレームレートに枚数をかけ算すると、動画の時間が求まる。これを音声の長さと比較して音声が長ければ音声の先頭を削除。これでいってみるか。
0348デフォルトの名無しさん
垢版 |
2019/10/25(金) 19:36:22.67ID:q8W1xqeq
あらかじめMediaPlayerを起動しておくと
あら不思議なぜか動作が軽い
っていうのは昔から有名な検証方法の一つ
0351デフォルトの名無しさん
垢版 |
2019/10/25(金) 22:23:03.54ID:MULKQLsl
>>347
Windowsのタイマーはmsecのオーダーは出ない(Linuxもだ)
それしかビデオのタイミング作る手段がないならタイムスタンプ管理すべきだ
またPCではそもそもハードウェア的にビデオとオーディオは同期してる保証がない
その前提を踏まえてつくる必要がある
オーディオもビデオもキャプチャしたタイミングでタイムスタンプを取得して同様にファイルに保存する
再生するときにそのタイムスタンプを比較してビデオが±0.5フレームずれてきたら
フレームをスキップかリピートして調整する
オーディオを基準に考えるのがポイントだ
最後にWindows10では画面録画は標準機能だ
0356蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/10/26(土) 14:53:06.64ID:Q5f3+aYX
これで終わり、、、じゃないよ。
プラグインで時刻表示と猫耳ができるまで終わらないぞ。
0358蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/10/26(土) 15:30:57.98ID:Q5f3+aYX
プラグインを実装するには自作のPluginFrameworkを参考にする。
これもC++/Win32で書かれている。

PluginFramework
https://github.com/katahiromz/PluginFramework

拡張子は.yapでいいだろう。拡張子こそ違うが、プラグインファイルの中身はDLLファイルと同じ。LoadLibraryで読み込めるはずだ。
0360デフォルトの名無しさん
垢版 |
2019/10/26(土) 22:31:16.45ID:Gui6HX0l
クラスの中の処理を別のプロセスのプログラムに行わせたいんですけどどのような方法があるでしょうか
64bit環境のプログラムにインターフェースのみを提供するクラスがあって、中の処理を32bitのプログラムに行わせたいです
クラスは状態を保持する必要があるので呼び出す度にプログラムを実行することはできません
0366蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/10/26(土) 23:43:30.80ID:0HLEEd3+
コマンドライン引数経由でファイルマッピングハンドルの値を受け取る、もしくはPostMessageでハンドルの値を受け取る。
クリップボードを使ってもいいし、ファイルを経由してもいい。
0368デフォルトの名無しさん
垢版 |
2019/10/27(日) 17:20:04.24ID:IkTaChA0
自由に変更できるならsocket使ってTCP(UDP)portで待機
0369デフォルトの名無しさん
垢版 |
2019/10/27(日) 17:20:36.84ID:IkTaChA0
ANTさんはNimやってない訳?
0371蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/10/27(日) 19:33:52.69ID:irXhIBVc
最近はRustとElixirがブームらしいが、私は相変わらずC++。
0372蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/10/27(日) 22:03:41.19ID:cNZwDfUU
カメラアプリのプラグインを設計しないといけない。要件定義から。

OpenCVのcv::Matを受け取り、何らかの画像処理をする。今考えているのはフィルタープラグインと監視役プラグイン。
時刻表示フィルターと猫耳フィルターは必ず実装する。監視役は、何かが発生したら、管理者権限で保護されたコマンド列(Command*.bat)を実行する。
フィルターは処理の順序が大事だから、プラグインを順序付けしないといけない。
プラグインは自作のPluginFrameworkをチューニングして使用する。
0373蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/10/27(日) 22:11:26.78ID:cNZwDfUU
読み込んだプラグインは有効か無効かを選べる。プラグインの順序も変えられる。そこでプラグインを管理するダイアログが必要だ。
そのダイアログはメインメニューからアクセスできる。ダイアログからプラグインの名前やバージョン情報にアクセスできるようにリストビューを使用する。
読み込んだ全てのプラグインが有効であるとは限らない。有効なプラグインは、プラグインを表す文字列のリストで記録する。高速にアクセスするためにさらにプラグインのインデックスのリストを使用する。
0374蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/10/27(日) 22:34:37.57ID:cNZwDfUU
順序の変更には上・下ボタンを使用する。
有効・無効の切り替えはリストビューのチェックボックスを使用する。
時刻表示にはcv::putTextを使用する。
拡張子は.yapで決まり。exeと同じ場所に置く。
0377デフォルトの名無しさん
垢版 |
2019/11/11(月) 09:09:46.18ID:TRmuSqs3
完全初心者です
苦しんで覚えるC言語という初心者サイトを終わらせたら
次になにかおすすめサイトor本をやるべきなどありますか?

とりあえず義務教育に組み込まれるということで
何か作れるという体験をしてみたいのですが
0379デフォルトの名無しさん
垢版 |
2019/11/11(月) 12:29:24.77ID:bjD92kdR
Rust, Elixir は、小さめのサイズの本が出たから、簡単に読める。
その代わり、情報は少ない

Rustプログラミング入門、酒井 和哉、2019/10/13

小さめのサイズの本で、初心者向け。
簡単すぎるから、たぶん、かなり情報が少なそうw

プログラミングElixir、2016

著者は「プログラミングRuby」のDave Thomas

Elixir = Ruby + Rails + Erlang VM
Elixir は関数型言語で、状態を持たず、並行処理が得意

Elixir で並列に動く、小プロセスはデータを共有しない。
10万の小プロセスを、0.6秒で起動できて、すべてのCPUコアを使いつくす

これで、スレッドと状態を持つ地獄から、おさらば!
0380デフォルトの名無しさん
垢版 |
2019/11/11(月) 12:32:20.68ID:2oMqNNOD
>並行処理が得意

そんなもん今どきの言語なら皆そうなんだが?
いい加減スレ違いの書き込みはやめろ
ここはC/C++スレだ
0381デフォルトの名無しさん
垢版 |
2019/11/11(月) 13:44:52.51ID:dWj5v9Wo
>>377
終わってから考えろ
0382デフォルトの名無しさん
垢版 |
2019/11/11(月) 16:13:50.62ID:JcIJLOOR
義務教育を受けてる若者なのか、教える立場の教師なのか、
はたまた我が子の勉強を心配する教育ママか。
とりあえず義務教育でCは使わないと思うよ。

しかし、このスレッドも意外に見てる人がいるのね。
0384デフォルトの名無しさん
垢版 |
2019/11/11(月) 17:08:28.39ID:rlOgmRK8
それでいいよ
問題を分解して論理立てて解決する力
が必要なのであって構文とかどうでもいい
だから擬似言語でも良いし図だけでもいい
0385デフォルトの名無しさん
垢版 |
2019/11/11(月) 17:12:08.97ID:dWj5v9Wo
パヨチン教師に論理的思考ωを教えさせるのは無理やろ
0387デフォルトの名無しさん
垢版 |
2019/11/11(月) 21:28:40.68ID:+nZ+GxSE
>>377
完全初心者で作ってみるのがまず目標ならscratch辺りが無難じゃないかな?取っつきやすくプログラミングの基本に触れられると思うよ。

初心者がCから始めても作る喜びを見つける前に細かなところで躓きを繰り返して挫折する率が高いと思う。
入門書一冊読んだ時点でその知識を組み合わせてなんか試してみようと自発的に思い付くとか、文字だけの画面で入力した数字を並び替えただけで喜びを感じられるとかなら、向いているとは思うけど。
0388デフォルトの名無しさん
垢版 |
2019/11/12(火) 09:36:03.48ID:uG6HIbdY
>知識を組み合わせてなんか試してみようと自発的に思い付く

コピペしか出来ないkidsには無理
0393デフォルトの名無しさん
垢版 |
2019/11/13(水) 10:20:21.80ID:OceCV+VL
馬鹿には無理
0394はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/11/13(水) 15:20:35.33ID:B91T1gla
本格的にやる気はないやつにも最低限の知恵を与える (義務教育) ってのと
学ぶ意欲があって学ぶってのは別物だよ。
0395デフォルトの名無しさん
垢版 |
2019/12/20(金) 17:01:42.60ID:mI5I/WU7
これからc++に手を出そうという人間に、江添氏の入門サイトもしくはその書籍化本は向いてますか?
いきなりヘッダファイルまとめて、コンパイルオプションに設定してて、たしかに記述減るけどありなのかがよくわかりません
0396デフォルトの名無しさん
垢版 |
2019/12/20(金) 17:32:42.71ID:VlcbOuJw
これか
https://ezoeryou.github.io/cpp-intro/
別に自由だろ
悪い意味でも良い意味でもC++の自由なところ
0397デフォルトの名無しさん
垢版 |
2019/12/20(金) 17:42:09.99ID:mI5I/WU7
>>396
ありがとうございます
楽なのは事実だし、そこよりもまずは中身がまともに使えなきゃ無意味でしたね
0398デフォルトの名無しさん
垢版 |
2019/12/20(金) 17:47:54.25ID:VlcbOuJw
Java で import *;
0399はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/12/20(金) 18:50:13.84ID:smtL92ik
>>395
意味がわかってるならやりたいようにやっていいよ。
「プラグラマがやりたいことをさまたげない」という意味のことは D&E に書いてある。
言語仕様としてはさまたげないという意味なのでやった結果がクソになっても自己責任だけど。
そのあたりは言語仕様がどうこうよりも設計の話になるんじゃないかなぁ。

まあまずは言語を理解しないことにはどうにもならんので、
いい感じの作法は後回しでもいいでしょ。
(そういってずっと後回しにし続けるのはよくある話なのでちゃんと計画を立てて学習しような!)
0401はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/12/21(土) 01:13:26.24ID:hBrPM7yJ
>>400
俺は >>399 で江添氏による C++ 入門書については何も言ってないよ。
「作法は後回しにして言語 (C++) の入門書を読め」ってだけ。

言語の入門書っていうのは特に限定しないけど、江添氏のでも別にいいんじゃね。
俺は読んだことないから知らんけど。
0402デフォルトの名無しさん
垢版 |
2019/12/21(土) 21:42:45.92ID:r9u4FEpO
>>401
正にその入門の本探しで迷宮入りしてるところに、江添氏の本を見たので、そういうのもありなのかと思っての質問でした
作法にこだわって肝心な部分を落としてたら意味がない(作法を無視して良いというわけではなく)のは確かなので、本読み手を動かしていきます
アドバイスありがとうございます
0403デフォルトの名無しさん
垢版 |
2019/12/21(土) 21:53:38.39ID:Pmk2U2LB
別にそこまで言語文法と作法がバッティングするわけでもないし、両方やったらいいとしか言いようがない。
何を心配してるんだか。
0405はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/12/22(日) 16:56:47.47ID:0CTeJT4Z
だいたいの作法にはそれなりの理由があるけど、
言語を理解せずに作法を学んでもただそうするということだけが頭に残って教条的になりやすい気がするんだよね。
完璧に言語を理解する必要はないけどほどほどには理解してから作法に入った方が良くない?
0407デフォルトの名無しさん
垢版 |
2019/12/22(日) 17:30:35.07ID:WxFIsXHD
とりあえずこうする!じゃなくて
自分が納得して辿りついた方法はこれ
の方がいいよね
0408はちみつ餃子 ◆8X2XSCHEME
垢版 |
2019/12/22(日) 18:00:49.87ID:0CTeJT4Z
>>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
その前提をわかってなかった。 すまぬ。

わかってる人からするとこれは説明の便宜のためであって作法を示すものではないことがわかるけど、
入門書の冒頭でやっちゃうのは思い切りが良すぎるな。
0409デフォルトの名無しさん
垢版 |
2019/12/23(月) 12:35:08.34ID:sEnpgkKc
禿添を擁護する気は無いが
そもそも他の入門書だって
#include はおまじないとか言って
お茶を濁してるレベルなのを考えれば
(見た目のインパクトは知ってる人が見てそう思うだけで)
初心者には大した違いは無い
0415デフォルトの名無しさん
垢版 |
2019/12/23(月) 20:38:42.86ID:Dm8g2GT6
gotoが悪とか言ってるやつの脳は
武器があるから戦争がおこるんだ!
っていうパヨク脳と同じ構造
0416デフォルトの名無しさん
垢版 |
2019/12/23(月) 21:29:45.76ID:kZpvALBe
>>413
スパゲッティは困るのが本人限定でない限りは非でいいだろう。問題はgotoのどんな使い方までがスパゲッティにならないかだけど合意を得られる共通認識はないから、組織のルールに合わせるくらいしかないかも。
0418デフォルトの名無しさん
垢版 |
2019/12/23(月) 23:42:38.10ID:qDrReXNq
プロは使うぞ goto
0419デフォルトの名無しさん
垢版 |
2019/12/24(火) 01:18:53.63ID:qpZ25SUC
switchとgoto組み合わせてステートマシン作るのよくやってる。
0420デフォルトの名無しさん
垢版 |
2019/12/24(火) 03:33:33.92ID:4c9jV6+e
何重にもネストしたforの真っ只中にぶっこんでくgotoとかじゃない限り
そこまで可読性が悪くなるってことはないかな。
0422◆QZaw55cn4c
垢版 |
2019/12/24(火) 18:02:52.32ID:Kb/HLSFP
所詮 goto は関数内でジャンプするだけだから、たいしたスパゲッティにはならないのでは?
むしろ setjmp()/longjmp() 大好き人間のほうが怖い…
0424デフォルトの名無しさん
垢版 |
2019/12/24(火) 18:39:15.66ID:IBUEMR4t
setjmp/longjmpって具体的に使われてるプロジェクト今ある?
0426デフォルトの名無しさん
垢版 |
2019/12/25(水) 16:23:59.62ID:Jr8g24A7
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です。
0428デフォルトの名無しさん
垢版 |
2019/12/25(水) 16:34:37.50ID:ZI663GBY
まず、端末とFinder は、異なる!

Windows のExplorer で言えば、拡張子に対して、開くアプリが関連付けられている。
漏れの場合、.txt なら、TeraPad で開く

関連付けられていないと、どのアプリで開きますか? と聞いてくる
0429デフォルトの名無しさん
垢版 |
2019/12/25(水) 20:11:17.23ID:Jr8g24A7
>>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、他はバイナリエディタで開けます。
0430デフォルトの名無しさん
垢版 |
2019/12/25(水) 20:28:55.00ID:KX6i+Zbe
>>429
カレントディレクトリの概念は分かったの?
プログラムを何らかの方法で起動したときに、そのプログラムはどこかのディレクトリを「現在位置」として処理を行う。
だからプログラム中でファイルを指定するときに絶対パスではない書き方、つまり相対パス(point.vertや./point.vertという書き方)で指定すると、それは現在位置から見てその名前の場所にあるファイルを指す。
macの環境は詳しくないけど、terminalから実行したならカレントディレクトリはterminal上のカレントディレクトリだろうし、finderから実行したらプログラムの実行ファイルがある場所だろう。
そこと、開きたいファイルの位置関係を確認して、適切な相対パスを指定してみて。
0431デフォルトの名無しさん
垢版 |
2019/12/25(水) 20:45:23.56ID:ZI663GBY
>>429
loadProgram と言う名前から想像すると、
特定のディレクトリだけから、ファイルを探すとか?
カレントディレクトリ内からは、探さないとか?

絶対パスなら読めるのなら、絶対パスへ変換すれば?

例えば、ruby -e 'puts $:'
と、Ruby でライブラリの探索パス・ロードパスを表示すると、
その中に、カレントディレクトリは入っていない

他には、エラーの前後で、カレントディレクトリがどこにあるか、確認すれば?
0433デフォルトの名無しさん
垢版 |
2019/12/25(水) 21:06:23.06ID:KX6i+Zbe
>>430
質問者はC++のifstreamで目的のファイルを開くと言ってるだろ。
的外れなことを言って混乱させるのはやめれ。
0435デフォルトの名無しさん
垢版 |
2019/12/25(水) 22:03:46.49ID:R9J1PIns
iOSのシミュレータで実行するアプリ??(IOSとか書いてるから
それだったらfstreamには絶対パスを渡すしかなかったはず
あんま自信ないので違ってたらすまん
0438デフォルトの名無しさん
垢版 |
2019/12/25(水) 23:47:22.85ID:Jr8g24A7
>>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対応しなきゃいけないんでしょうか…?


後遅いかもしれませんが長文&多レスと先ほどのお礼を言い忘れててすみません。
非常に稚拙な文章ですが、質問に答えてくださってありがとうございます。
0439デフォルトの名無しさん
垢版 |
2019/12/26(木) 00:25:36.72ID:qMazsM0J
すまんそれならiOS関係無いな
カレントディレクトリがどうなってるか、MacOSのAPIで取って
それを表示してみてターミナルとFinderでどう違うか確認した方がいいかと
0440デフォルトの名無しさん
垢版 |
2019/12/26(木) 00:44:53.30ID:mIZi4PgB
MacってBSDらしいじゃん
多分じゃなくて、getcwd()すればいいんじゃ

>カレントディレクトリに移動して
どこにいても、今いるところがcurrentなのだが
0441デフォルトの名無しさん
垢版 |
2019/12/26(木) 00:51:48.47ID:aYxazJyl
ファイル読み込みをそのまま生成に変更してみ
カレントディレクトリちゃんと考慮してないよ相対パスと絶対パスでファイル生成される場所かわるよ
0442デフォルトの名無しさん
垢版 |
2019/12/26(木) 01:09:15.00ID:uS8pvwi2
>>438
Finder上でダブルクリックで起動する場合はカレントディレクトリはホームディレクトリだったように思うよ。
ダブルクリックで起動したいなら、
#!/bin/sh
cd "$(dirname "$0")"
./program
と書いたprogram.commandをprogramと同じ場所に作ってchmod +xし、それから起動するとよい。
program.commandのあるディレクトリに移動してからプログラムを移動するシェルスクリプトだから、確実に
カレントディレクトリをprogramのあるディレクトリに変更できる。
0443デフォルトの名無しさん
垢版 |
2019/12/26(木) 01:14:40.83ID:T0QuicHn
Ruby なら、File.expand_path で、相対パスを絶対パスへ変換できる

相対パスでエラーになるなら、それを絶対パスへ変換すれば?
0445デフォルトの名無しさん
垢版 |
2019/12/26(木) 01:18:31.55ID:hx3t0oVF
>>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
0446デフォルトの名無しさん
垢版 |
2019/12/26(木) 04:42:31.39ID:T0QuicHn
Ruby なら、あちこちに、p Dir.pwd
って書けば、その時点のカレントディレクトリがどこか、すぐわかる

それに、File.expand_path で、相対パスを絶対パスへ変換できるし

何でも、p を付けるだけで、分かるから!
エラーを解決する速さが、桁違い!

C/C++ とかは、ポインターもあるし、1週間ぐらい解決できないのも、ザラ。
効率が悪い
0448430
垢版 |
2019/12/26(木) 06:51:13.58ID:CYmUjjjA
>>445
finderから起動したときのカレントディレクトリについて誤った情報を書いてすまんかった。正しくは>>442が書いた通り(=445で自分で確認した通り)だね。

ついでに、知ってるかもしれないけど補足情報。
「Rubyでは〜」といってる奴はこの板の有名な荒しなのでスルー推奨。どこかで聞き齧った上辺だけの知識と構ってちゃん精神によって、的外れな情報や誤った情報を垂れ流す困り者。いくら周りが指摘しても改まる気配がない。
書き方が特徴的だからすぐに分かると思う。
0449デフォルトの名無しさん
垢版 |
2019/12/26(木) 09:04:48.57ID:cN+Hl7PN
>>438,445
解決したみたいだけど一応補足

>>432 > まず相対パスを絶対パスに変換して
これはハードコードで絶対パスを指定するって意味ではなく
指定している相対パスそのものを関数を使って絶対パスに変換してみれば?って意味ね
0450デフォルトの名無しさん
垢版 |
2019/12/26(木) 11:32:31.02ID:qmNoWNu8
CどころかOSすらまともに使えないような香具師は
まずpythonで練習汁
話はそれからだ
0451426
垢版 |
2019/12/26(木) 11:47:02.89ID:hx3t0oVF
>>442,448,449
(安価打ちすぎると書き込めないらしいのでひとまとめになります)
ありがとうございました、書き忘れてましたが無事解決しました!
とりあえず442さんのやり方と449さんのやり方両方で成功しました、
430さんのレスがきっかけでカレントディレクトリについて考えることになったのでありがとうございます!
長文&稚拙な説明で長い間付き合わせてしまいましたが、
懇切丁寧に解説してくださった皆様方にはただただ感謝の極みですm(_ _)m
0453デフォルトの名無しさん
垢版 |
2019/12/26(木) 14:08:21.39ID:AOHRGRKj
clが全く対応してないのは知ってる。
0457デフォルトの名無しさん
垢版 |
2019/12/27(金) 14:23:56.07ID:eT+8Od/E
コンセプト使おうと思ってgccビルドしたけど、ビルド成功に満足して結局何もしてない
0460デフォルトの名無しさん
垢版 |
2019/12/28(土) 08:02:42.09ID:YMDBWz/J
gccは真っ先に規格に対応するけど、
コード品質が糞すぎて結局商用には使えない
0461デフォルトの名無しさん
垢版 |
2019/12/28(土) 14:03:33.98ID:YMDBWz/J
ubuntuでapt install clangをさっきインストールしてみた。
gccで正常に動くプログラムが動作しないんで調べてみると
#pragma omp parallel
で使ってるomp_get_thread_num()がスレッドidを0しか返してない。
スレッドそのものは指定した数だけ、立ち上がってるのにどのスレッドも0しか返してないんだけどなんで?
0465デフォルトの名無しさん
垢版 |
2019/12/28(土) 17:13:12.18ID:YMDBWz/J
#pragma omp parallel num_threads(16)
{
#pragma omp critical
{
cerr << "thnum = "<< omp_get_thread_num()<"\n";
}
}

単にこれだけ。
gccは問題ないのに
clangが 0 しか返さない。
clangのエラーメッセージがよさげなんで乗り換えたいんだけど
0469デフォルトの名無しさん
垢版 |
2020/01/01(水) 11:25:57.89ID:EQq3rigy
Win10上のVS2019でもParallel Studio2020でも、
ubuntuのgccでもコンパイル&実行できる、コンソールプログラムを書きました。
標準で勝手にリンクされるライブラリ以外にライブラリの指定などは一切行っていないのですが、
Parallel Studioでコンパイルしたものだけ、実行直後すぐに終了されてしまうので、
デバッガで実行させると、

序数270がダイナミック ライブラリから見つかりませんでした

と表示されます。
どなたかこの件で情報お持ちじゃないですか?
ちなみにVSでもネイティブ/WSL ubuntuのgccでは正しく実行できています
0471デフォルトの名無しさん
垢版 |
2020/01/01(水) 11:40:01.97ID:tqBP4ADq
.def 使えば解決するはず
0472デフォルトの名無しさん
垢版 |
2020/01/01(水) 12:17:27.05ID:EQq3rigy
>>470
今コンパイルして動かないので、dllのチェックはしてるんだろうと思いましたが、
void
main(){
cout << "Hello World\n";
}
はインテルでも何の問題もなく動いたのでdllが足りないんだと思います
0473デフォルトの名無しさん
垢版 |
2020/01/01(水) 12:54:53.74ID:kPvcajv8
いまさらながら、std::vector::swap がC++14までnoexceptじゃなかったことに気付いた。
今までvectorをメンバに持つクラスのmoveコンストラクタ/代入の中でswapを使って
しれっとnoexceptを付けてたけど、C++11では本来どうすべきだったんだろう。
0475デフォルトの名無しさん
垢版 |
2020/01/01(水) 15:11:33.16ID:kPvcajv8
>>474
実際に例外が発生する処理系はまずないんだろうけど、規格の上ではnoexceptがついていない以上
それに備えなければならないわけで。
0476デフォルトの名無しさん
垢版 |
2020/01/01(水) 15:40:05.94ID:MYEeMeEE
noexcepつける理由ってほぼ自己満足だよな
unwindの最適化気にするぐらいなら例外禁止にするわ
0477デフォルトの名無しさん
垢版 |
2020/01/01(水) 16:29:22.59ID:kPvcajv8
>>476
つまり、>>473のようなケースではそのままnoexceptを付けないmoveコンストラクタにするということかな。
例外禁止というのがどこのことを言っているのかよくわからないが。
0478はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/01/01(水) 17:53:46.55ID:6jqQqgz1
C++17 からは noexcept 指定は型の一部ってことに変更されてる。
(noexcept から非 noexcept への型変換は有りだが逆は駄目。 まあ無理にキャストすればできなくはないだろうけど……。)
型が合わなきゃコンパイルエラーだ。

各種ライブラリとの組み合わせの関係で否応なく気にしなきゃならんってこともあるんじゃないの?
0482デフォルトの名無しさん
垢版 |
2020/01/04(土) 11:34:30.60ID:fWyFLqKp
mkl2019というか
インテルコンパイラツール 2019なんかをインストールすると
Visual Studio16.4環境を破壊するよ
単にコンパイラ環境だけでなくプルダウンメニューの内容とかも破壊してしまう。
VS 16.4以降はParallel Studio 2020以降じゃないと対応しない
0487デフォルトの名無しさん
垢版 |
2020/01/08(水) 16:50:37.82ID:3hPXf+vV
>>486
parallel Studio 2020えコンパイルに必要なライブラリ一式がすべてそろってるのに
わざわざ別途mklなんか必要あるかよ。わかってんのか馬鹿たれ。
しかも今,mkl2019しか入手できない中、
最新VSにインストしたら不具合起こすことわかってる2019ツールのインストすすめてどうすんだアホ
死ね情弱ゴミ
夢でも見てんのか?
0490デフォルトの名無しさん
垢版 |
2020/01/13(月) 12:28:29.10ID:Tr5rZ1p8
テンプレートテンプレートパラメタに関する質問です。
こういうのはどう書けばいいのでしょうか?
以下はコンパイラできないんですが、
意図としては
テンプレート引数の型を関数引数として使いたい。
そして、テンプレートテンプレート引数の型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;
}
0491デフォルトの名無しさん
垢版 |
2020/01/13(月) 12:49:13.64ID:Tr5rZ1p8
コンパイラできないじゃなく
コンパイルできない
です

L<X>の部分をどう書けばいいのかわからないんです。
ところで、
clangってデフォルトテンプレート引数を正しく処理できないんですね

template< typename T = int>
class C{
};
・・・・
C x;

がエラーになってしまう。
C<> x; と書けばokです
gccは<>がなくてもokです
0493デフォルトの名無しさん
垢版 |
2020/01/13(月) 13:00:00.75ID:A/MByXKy
template<template<typename X> L>
はtemplate<template<typename> L>と同じでXはなんの意味も持たない
0495デフォルトの名無しさん
垢版 |
2020/01/13(月) 13:33:15.28ID:Tr5rZ1p8
>Xが型ならtypename Xを<>の中に付け足すべし

Func(const L<teypename X> & l, const R<teypename X> & r)

ってこと???

テンプレート引数の X の型を返すのはどうすればいいんですかね?
0496デフォルトの名無しさん
垢版 |
2020/01/13(月) 13:38:01.62ID:A/MByXKy
template<typename X,
template<typename> class L,
template<typename> class R>
X Func(const L<X>& l,const R<X>& r)
0497デフォルトの名無しさん
垢版 |
2020/01/13(月) 13:44:12.54ID:Tr5rZ1p8
>>492
>Xが型ならtypename Xを<>の中に付け足すべし

Func(const L<double> & l, const R<double> & r)

と具体的にXを書く必要があるってことでしょーか?
0499デフォルトの名無しさん
垢版 |
2020/01/13(月) 14:26:44.12ID:Tr5rZ1p8
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になりますね。
0500デフォルトの名無しさん
垢版 |
2020/01/13(月) 15:21:33.84ID:Tr5rZ1p8
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の型情報を埋め込むにはどうすればいいのか?
ってことになると思うんですが。
0503デフォルトの名無しさん
垢版 |
2020/01/14(火) 12:53:30.61ID:KjTpusiu
Vector内にtype持たせるなりget_type構造体作って特殊化で取るなりして合わないものをenable_ifで弾くなり
operator +の特殊化を書くなりいくらでもやり方はある
0504デフォルトの名無しさん
垢版 |
2020/01/14(火) 13:00:30.38ID:Sh3SY+TQ
簡単に描けないと意味が無い
0506デフォルトの名無しさん
垢版 |
2020/01/14(火) 17:54:11.46ID:3su9tm6y
>>500
そのサイトをちょっと読んでみたんだけど、LとRがすでにfloatやdoubleの型情報を持っているように思うのですが。
0508デフォルトの名無しさん
垢版 |
2020/01/15(水) 09:17:00.06ID:kgDFfipS
>>506
完成形はサイトの一番最後にある
Expression , Plus , operator+
で、operator+ -> Expression -> Plusの順で呼ばれる、
operator+ に演算型(floatやdouble)がないので、ExpressionとPlusのfloatが自動的に選択されてしまう。
一番はじめのoperator+にデータ型を識別する仕組みを入れてそれを引き継いでいくか、
ExpressionとPlus内部でデータ型を認識することが必要だと思うんだけど?
2項演算でなければ3つの型を並べれば済むのにと思ってました。


>>507
using valu_type か
めっちゃ参考になります。
てかこれでほぼ解決です。
聞いて良かった。ありがとうございました
0509デフォルトの名無しさん
垢版 |
2020/01/15(水) 15:44:09.21ID:0mJheqXR
なんでこの子そんなに上からなんだろ。
0513503
垢版 |
2020/01/16(木) 10:42:26.08ID:CVktcrTk
>>510-512
自分もちょっと偉そうだな、と思ったけどな
>>506に対するレスとかね
答え教えてもらってて経験不足で理解できてないのに言い返してる
読んでてわからんなら同レベルってことだろ
0514430
垢版 |
2020/01/16(木) 11:28:05.62ID:0X0XQobn
もしかすると文字でのコミュニケーションが下手なだけかも。直接対話しているならイントネーションやニュアンスで伝わるものが文字では伝わらない、誤解され得る、ということが分かってないとか。
「〜思うのですが。」ではなく「〜思うのですが、どうでしょうか?」と書けば言い返しているのではなく疑問点を質問していると明確になるのにね。
0516デフォルトの名無しさん
垢版 |
2020/01/16(木) 11:36:45.85ID:N6AzyVRW
int main() {
while(1) {
if (kbhit()) return -1;
}
}
0517デフォルトの名無しさん
垢版 |
2020/01/16(木) 13:18:13.07ID:lpjDYSs5
環境は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/以下にあるファイル群がなんなのか分かりません、
どうすれば良いのでしょうか。
0518蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/01/16(木) 13:27:47.37ID:xhLhfq9D
>>517
シンボルが重複している。
たぶんinline指定を忘れてるか、変数の定義が重複している。
0519デフォルトの名無しさん
垢版 |
2020/01/16(木) 14:34:35.42ID:vo+Ub67N
>>513
オマエ何様のつもりだ。
匿名掲示板でいったいどんな言葉使いを期待してるんだアホww
だいたい>>507のレスにしても大概だろ
using valu_type= T
とかww
こんな回答もらってよろこんでるほうもアレだが、

auto
operator[](std::size_t i) const{
return Op::Apply(l_[i], r_[i]);
}
ですむ話
レベルの低い奴に相応の応対したんだろww
0520デフォルトの名無しさん
垢版 |
2020/01/16(木) 14:39:29.98ID:vo+Ub67N
>>513
>答え教えてもらってて経験不足で理解できてないのに言い返してる

その答えのレベルのわからんおまえも同レベルって乞田ww
0521デフォルトの名無しさん
垢版 |
2020/01/16(木) 14:50:56.26ID:sHruIOmX
乞田川
乞田型
乞田首
0522513
垢版 |
2020/01/16(木) 16:00:48.56ID:CVktcrTk
>>519
質問者が聞いてるのは内部で使ってる型に応じて実装を変えたいって話なんだが
お前何もわかってないアホだろ、autoにしても何も変わらねーんだよ
0524デフォルトの名無しさん
垢版 |
2020/01/16(木) 16:21:00.89ID:vo+Ub67N
>>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" をどう渡せばいいのか困っています。
0525デフォルトの名無しさん
垢版 |
2020/01/16(木) 16:21:26.81ID:vo+Ub67N
>>522
つづき

内部に
type持たせるも何も

auto
operator[](std::size_t i) const{
return Op::Apply(l_[i], r_[i]);
}
として、
struct Plus{
struct Plus
{
template <typename T>
とするだけで、
質問者のやりたいことはいくらでも出来ますがなにか。
お前自身低レベルの極みなんだよ馬鹿たれ
0526デフォルトの名無しさん
垢版 |
2020/01/16(木) 16:23:29.03ID:vo+Ub67N
>>522
お前は
Op::Apply(l_[i], r_[i]); の型がvalu_typeの型そのものってことがわかってない
アホは死にな。
0527デフォルトの名無しさん
垢版 |
2020/01/16(木) 16:27:23.02ID:CVktcrTk
質問者は型情報を渡したいと言ってるだろうが
お前のやり方だと要素ごとのbitwise orとか実装するときに困るんだよアホ(多分他にも困る場面あるはず
整数だろうが浮動少数点数だろうが表記が同じ演算ならお前の言うそれでいいけどな
0528デフォルトの名無しさん
垢版 |
2020/01/16(木) 16:28:28.38ID:CVktcrTk
あと
>オマエ何様のつもりだ。
>匿名掲示板でいったいどんな言葉使いを期待してるんだアホww
そっくりそのまま返すわキチガイが
0529デフォルトの名無しさん
垢版 |
2020/01/16(木) 16:33:49.27ID:vo+Ub67N
>>522
言ってることがわからなければ>>507
のコードで
typename L::value_type →auto に置換
using value_type = T; → 削除
Vector<int> →Vector<double>に置換

とでもして実行してみろ低脳
0530デフォルトの名無しさん
垢版 |
2020/01/16(木) 16:39:34.67ID:CVktcrTk
>Op::Apply(l_[i], r_[i]); の型がvalu_typeの型そのものってことがわかってない
お前の言ってるそれは>>506そのもの

そういや俺operator +の特殊化とか書いてたけど
Applyの方だな
あとオーバーロードが抜けてた
0531デフォルトの名無しさん
垢版 |
2020/01/16(木) 16:40:27.48ID:vo+Ub67N
>>527
はぁ?文盲か低脳
>>500
ex template をVector内部に持たせるんじゃなく、独立させて、
t= x+y+z;
演算型をfloat double int に汎用性を持たせたいといってるんだろうが。
だれが"要素ごとのbitwise orの実装"の話なんかしてるんだ。お前の勝手な妄想だろが馬鹿たれ
>多分他にも困る場面あるはず

を、妄想の自己弁護か?www
夢でも見て寝ぼけてんのかアホ

テメエみたいな低脳ごときが俺様に対して言葉の使い方気をつけろ
0532デフォルトの名無しさん
垢版 |
2020/01/16(木) 16:42:45.67ID:vo+Ub67N
>>530
はぁ?
Op::Apply(l_[i], r_[i]); が型情報もってるのにわざわざクラス内部に不要なtype実装させてどーするつもりだと言ってるんだよ低脳
日本語わからんのかアホ
お前は日本語の勉強からやり直せ
0533デフォルトの名無しさん
垢版 |
2020/01/16(木) 16:44:58.53ID:vo+Ub67N
アホさらしあげ

>>522
>autoにしても何も変わらねーんだよ
>autoにしても何も変わらねーんだよ
>autoにしても何も変わらねーんだよ
>autoにしても何も変わらねーんだよ
>autoにしても何も変わらねーんだよ
>autoにしても何も変わらねーんだよ
>autoにしても何も変わらねーんだよ

変わるんだようすらバカ
autoにするだけで質問者の解決だ。ばかたれ
0534デフォルトの名無しさん
垢版 |
2020/01/16(木) 16:47:00.45ID:CVktcrTk
まじめんどくせぇこいつ
俺はtypeだのvalue_typeだの余計な要件増やすことを良い実装だとは思ってないぞ
>>506を挙げてそれに言い返してるのを批判的に言ったのはそれが理由
お前がドヤ顔でautoとか言い出す前からな
0536デフォルトの名無しさん
垢版 |
2020/01/16(木) 17:42:18.71ID:ZhNhElM8
で、ID:vo+Ub67N は逃げたの?
いつものイチャモンつけるしか能が無いクズだろうけど
そんな暇があったら最初からちゃんと答えてやれよゴミが
0538デフォルトの名無しさん
垢版 |
2020/01/16(木) 19:24:24.34ID:J+/qaxiI
>>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
申し訳ありません、無知だったので色々調べたのですがエントリポイントという物が
よく分かりませんでした。気がつかないうちに何かまずいところ弄って他のプログラムと
開始アドレスが被ったとかそんな感じでしょうか?
0539蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/01/16(木) 19:36:20.45ID:AwrKlCOf
*.cppにより、エントリポイントのmain関数を2つコンパイルしたんではないか?
0540蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/01/16(木) 19:38:26.02ID:AwrKlCOf
1つのフォルダには1つのプロジェクトにした方がいいのかも。
0541デフォルトの名無しさん
垢版 |
2020/01/16(木) 19:38:35.95ID:ZhNhElM8
>>538
エントリポイントっていうのはそこでいうmain関数のことね
それが複数作られてるとエラーになる
そのソースコードをヘッダファイルに書いててそれを複数のファイルでインクルードしてるとか
あるいは他にもmain関数を定義してる余計なソースコードがあるとかそういうのが原因だとおも
0543デフォルトの名無しさん
垢版 |
2020/01/16(木) 20:19:17.16ID:J+/qaxiI
>>539>>541
とりあえずファイル内にmain関数を持つc.cppとd.cppがある状態だったので、
試しに適当なディレクトリを作ってそこにc.cppを移してみたらコンパイル成功しました!
ずっと詰まっていたので感謝します、お二方とも本当にありがとうございます!!

恐らく原因である runFiles=`ls *.cpp` の部分が以前どうなっていたか
覚えていないのですが、前は同ディレクトリにmain文複数あっても成功しているんですよね…
VScodeの自動更新等でビルドの設定が変わったとかでしょうか…?
0544デフォルトの名無しさん
垢版 |
2020/01/16(木) 20:26:56.83ID:J+/qaxiI
申し訳ありません、今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
エントリポイントに関しては大変参考になりました。
0545デフォルトの名無しさん
垢版 |
2020/01/17(金) 10:27:22.98ID:fMuYUnvE
>>522
戻り値の型をテンプレートにするのってどうするの
0547デフォルトの名無しさん
垢版 |
2020/01/17(金) 14:18:21.61ID:fMuYUnvE
戻り値Tで関数オーバーロード出来る?
0549デフォルトの名無しさん
垢版 |
2020/01/17(金) 14:39:16.16ID:GiayRj2a
あ、戻り値だけ指定させる関数テンプレートならオーバーロードしなくても
その関数テンプレート一つでいける
ただし推論できないので呼び出すときにテンプレート引数の指定は必須
0550デフォルトの名無しさん
垢版 |
2020/01/17(金) 18:48:04.18ID:PzZl0Asa
autoと型指定で同じコードに落ちるとは限らないというか、おそらく同じコードにならないので、よく考える必要があると思います。
0557デフォルトの名無しさん
垢版 |
2020/01/20(月) 13:19:51.66ID:0GX6odYx
int_ptr
INT_PTR
*int
全部違う型?
0558デフォルトの名無しさん
垢版 |
2020/01/20(月) 13:20:08.19ID:0GX6odYx
int *
ですすんまそ
0559はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/01/20(月) 15:13:06.58ID:UOBRzIUl
>>557
INT_PTR は Windows SDK で定義されてるやつのことだと思うけど、
標準で言うところの intptr_t に相当するやつ。
int のポインタじゃなくて、ポインタを格納できる (のに充分な幅がある) int っていう意味。
0560デフォルトの名無しさん
垢版 |
2020/01/20(月) 15:46:05.19ID:UDU8umXR
>>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{
・・・
}

では何の問題もない。
0562デフォルトの名無しさん
垢版 |
2020/01/20(月) 15:58:55.44ID:UDU8umXR
一応
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のコードはコンパイルすら通らない間違いコードだ。
0563デフォルトの名無しさん
垢版 |
2020/01/20(月) 16:08:08.21ID:UDU8umXR
コンパイル通らないってのは
以下を追加したときの話ね

Vector<int> w{ 5, 4, 3 };
v = l + r +w;

2項間では通るが3項間以上の式では通らない。
ex-templateを使うメリットが全くないコードが>>507
0564デフォルトの名無しさん
垢版 |
2020/01/20(月) 17:26:42.62ID:UDU8umXR
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{
・・・
}

で多項間でも問題なくいけるはず。
0565デフォルトの名無しさん
垢版 |
2020/01/21(火) 18:43:12.30ID:of4oLLe2
>>563
3項以上でなければメリット無くなるわけではないぞ
というかまぁ今どきはETより先にSIMD使えって話だけど
0566デフォルトの名無しさん
垢版 |
2020/01/21(火) 22:39:57.57ID:jv9UY41A
>>565
2項迄の演算では式テンプレートに何のメリットもない。
デバッグを困難にするだけの糞コーディングだ
バグに気づくことも出来なかった一知半解の口だけウスノロはすっこんでな

そもそも、質問者は
>>500
>t= x+y+z;
>という計算ができるようにしたい。

と希望を述べているのに>>507のコードは要求仕様を満足できてないゴミコードということだ。
0567デフォルトの名無しさん
垢版 |
2020/01/21(火) 22:42:13.76ID:jv9UY41A
>>565
>というかまぁ今どきはETより先にSIMD使えって話だけど

能力不足をHWに補ってもらわないとなww
その分電力無駄に食ってることは覚えとけ
0568デフォルトの名無しさん
垢版 |
2020/01/21(火) 23:33:50.08ID:oeYN0gBf
え?
SIMDで並列化できたら電力あたりのパフォーマンスはあがるぞ
ETと比べるものとは思わないが
0569デフォルトの名無しさん
垢版 |
2020/01/22(水) 10:04:13.26ID:RE1hbZ/o
>>566
お前大して攻撃的でもない書き込みにすぐ喧嘩売ってイキるの辞めたほうがいいよ
俺はETとSIMD両方使って自作の線形代数ライブラリ(4行4列まで限定だが)作った上で言ってる
恥書く前に謝っとけよ

>能力不足をHWに補ってもらわないとな
アホだろお前、ETがSIMD以上に速度上がると思ってんの?


>ETと比べるものとは思わないが
確かに速度が目当てと勝手に限定してたね
0570デフォルトの名無しさん
垢版 |
2020/01/22(水) 10:18:16.91ID:s6VTVCIo
最近のコンパイラならETできれいに展開しておけば
勝手にはSIMD化してくれんじゃない?
0571デフォルトの名無しさん
垢版 |
2020/01/22(水) 10:27:28.86ID:RE1hbZ/o
Intelのは使ったことないんで知らんけど、VCだと基本そういうのは期待できないよ
(最適化かけたEigenのコードの逆アセでも見てみればわかる)
単一の要素の計算にxmmレジスタ使ってはくれるけど並列にやってくれることは無い
SIMDに収まる範囲のベクトルなら、手動できっちりSIMD使いつつ
インターフェースを使いやすくするのは普通に出来るから先にそうした方がいい
0572デフォルトの名無しさん
垢版 |
2020/01/22(水) 12:20:19.61ID:mLtdNNMm
>>569
言うだけ無駄
意図的に絡んでるのが大半だから
自然体だったら残念な性格としか

ソースは無い
0577デフォルトの名無しさん
垢版 |
2020/01/29(水) 13:23:40.81ID:zE4LbE2k
>>575
:q!
0580デフォルトの名無しさん
垢版 |
2020/01/31(金) 16:53:29.94ID:Hjj/uk/N
g++やclangで-std=c++17オプションをterminal、VScode共に一括で
デフォルトにしたいのですが何か良い方法ってありませんか?
環境はMac OS Mojaveです
0581デフォルトの名無しさん
垢版 |
2020/01/31(金) 22:24:21.02ID:I/eJOw0W
>>569
それがどうした?
4x4?それが自慢か雑魚野郎
こっちは自由にサイズ変更可能な行列演算ライブラリを20年以上前から仕事で使ってる。
そして一定サイズ以上の行列乗算では式テンプレートではまったくパフォーマンス向上できないこともわかってる。
土下座すんのはテメエなんだよ一知半解の低脳野郎
ちなみに>>500のサイトにあるBlitzの有名なコードだが、operator=内部で =r(i.j)などとして、行列乗算(each productではなく)に拡張した場合、
式テンプレートを使用しない方式と比べて100x100行列なら1000倍以上の速度低下を引き起こす

>アホだろお前、ETがSIMD以上に速度上がると思ってんの?


はぁ? 異なるHW条件持ち出してきて速度向上ほざいてアホの極みか低脳
0582デフォルトの名無しさん
垢版 |
2020/01/31(金) 22:45:37.50ID:I/eJOw0W
>>569
あぁ
言い忘れてたわ式テンプレートは一時領域コピー時間の削減と言う意味で3項以上と書いてるわけだが、
一時領域の必要ない2項でメリットがあるというなら挙げてミロよ低脳www
寝ぼけんな雑魚野郎
0584デフォルトの名無しさん
垢版 |
2020/01/31(金) 23:56:24.08ID:I/eJOw0W
>>479
#pragma omp critical
使ってるコードで同じエラー出たわ
criticalセクションが無ければこのエラーは出ない
無くしたら動かんけどww
19.1のバグやね
まだ、気づいてない人多いんだろな検索してもヒットしない
0585デフォルトの名無しさん
垢版 |
2020/02/01(土) 04:58:28.47ID:sDMEFbxi
>>581
ずいぶん反論に時間がかかったなw

>20年以上前から仕事で”使ってる”
作った側ではないなら実装時の問題とかには疎いんじゃねーの?
>Blitzの有名なコード
Blitzのコードとかどっかに書いてたか?
Blitzのソース読んだことないんで具体的にどのヘッダか示してくれるか
というかあんなクソ単純な説明のためのサンプルと同等のコードとは考えにくいが

>100x100行列なら1000倍以上の速度低下を引き起こす
へー。で??
俺別にETを絶賛などしてないんだが
質問者の話もそういう可変要素のやつじゃなかったよね

>異なるHW条件持ち出してきて
お前が
>能力不足をHWに補ってもらわないとなww
とかアホなこと抜かしたからだろ
0586デフォルトの名無しさん
垢版 |
2020/02/01(土) 05:17:20.41ID:sDMEFbxi
>>582
>一時領域の必要ない2項でメリットがあるというなら挙げてミロよ低脳www
2項で一時領域が必要ないのはRVO前提にしてんだろうけど
お前コンストラクタしか頭に無いだろ

あと、よっぽど自信がおありのようだから質問してやるが
上に挙がってたコード例のようなやり方でバカ正直に行列の乗算のような計算を
仮に3項以上でやると重大な問題が起きるわけだが、それが何か即答できるよな?
0587デフォルトの名無しさん
垢版 |
2020/02/01(土) 07:35:36.44ID:tav2AwxI
最適化、高速化は具体的な用途とセットじゃないと語っても意味がない

要素ごとに演算すれば良い巨大ベクタと
1個の結果を得るのに広範囲にアクセスしなきゃならない巨大行列の乗算
全然違う話
0588デフォルトの名無しさん
垢版 |
2020/02/01(土) 07:57:11.83ID:sDMEFbxi
大きな行列の場合、高速化手法なんて他にいくつもあるからね(詳しくはないが

それ以前になぜ遅くなるのかも分かってない&ET以前にSIMDと言われて
「能力不足をHWに補ってもらわないとなww」とか(ライブラリ実装したことある立場ではないにもかかわらず)
平気で言える時点で、20年仕事でってのは嘘だろう
C++かじっただけのどこかの暇な学生だろ
0589デフォルトの名無しさん
垢版 |
2020/02/01(土) 08:20:06.35ID:tav2AwxI
HWを使わない最適化(高速化)なんてあり得ないからね

SIMD、スレッド、キャッシュ、(GPU、FPGA、...)
これらを有効に使うのが最適化
0592デフォルトの名無しさん
垢版 |
2020/02/01(土) 13:49:03.18ID:eXUHWthh
「ソフトウェアに対して本当に真剣な人は、独自のハードウェアを作るべきだ。」
アラン・ケイ
0594デフォルトの名無しさん
垢版 |
2020/02/03(月) 08:23:47.39ID:Ns1a0i+O
>>593
具体的にどの段階?
ハードウェアに依存したアルゴリズムの最適化って何?
例えばロックフリーでCASが前提とかはあるけどあれも具体的なハードではないだろ
0596デフォルトの名無しさん
垢版 |
2020/02/03(月) 12:02:25.38ID:62FLJlST
触ったこと無い人には説明しても判らんやろて
0597デフォルトの名無しさん
垢版 |
2020/02/03(月) 12:33:05.83ID:n2ny0GIb
極端なこというと、量子コンピュータ向けアルゴリズムはHWが量子コンピュータであることが前提
HWとSW合わせて1つの装置だから
0601デフォルトの名無しさん
垢版 |
2020/02/03(月) 17:13:32.87ID:Si1aHG26
ビッグオーが変わるようなのはアルゴリズムの違いだろうけど
ビッグオーがそのままで計算量だけが変わるのはどっちとも言いがたい
0602デフォルトの名無しさん
垢版 |
2020/02/03(月) 17:33:31.72ID:MWPuXKWI
>>600
より除算回数の少ないアルゴリズムを選択することは現状のCPUは除算が遅いことに対応するわけだからHW依存と言えなくもない
この主張に対してそういった選択はアルゴリズムでもなければオーダーもかわらないと反論しているのですか?
0604デフォルトの名無しさん
垢版 |
2020/02/03(月) 23:33:51.85ID:e9E2NTEb
計算量のオーダーが変わらないアルゴリズム的最適化なんていくらでもあるよ
0605デフォルトの名無しさん
垢版 |
2020/02/04(火) 00:20:58.43ID:mQynHgib
有限の並列度の並列化ってオーダー変わらないけどワザワザ並列化可能なアルゴリズム使うよね
0607デフォルトの名無しさん
垢版 |
2020/02/04(火) 00:37:14.93ID:mQynHgib
と言うか最適なオーダーのアルゴリズムなんて殆んど既知だから、オーダー変わるような最適化ってあんまりないよね
0608デフォルトの名無しさん
垢版 |
2020/02/04(火) 12:35:39.06ID:SyKO2BA6
車輪の再発明は良く批判されるけど
素数を列挙するプログラムなんて
既に判ってる素数はテーブル参照するのが最適なのに
なんで毎回計算して地球環境破壊に貢献してる訳?
0612デフォルトの名無しさん
垢版 |
2020/02/04(火) 16:52:46.33ID:t6zt27Qb
>>608
素数の話はどっから出てきた?
アルゴリズムの例として挙げたのかも知れんが、
別のスレッドで最近見た気のする話題なので投稿する場を間違えたのかと。

実用プログラムでは「車輪の再発明」は上手いやり方じゃないけど、
低レベルの部分から組み上げたほうが理解が深まるって面はあるでしょ。
0618デフォルトの名無しさん
垢版 |
2020/02/05(水) 13:53:11.70ID:rzfrqein
バイナリデータを、文字列に変換して保持しようとした場合、素直に16進数表記にするのがよい?
データ量倍になるけど
0621デフォルトの名無しさん
垢版 |
2020/02/05(水) 14:32:42.49ID:rzfrqein
>>620
あーそんなのありましたな
ちょっとググったらライブラリも出てきたしよさそう
ありがとうございます
0623デフォルトの名無しさん
垢版 |
2020/02/05(水) 16:07:18.33ID:ImPcpEtv
それでいいなら%Xで出力するのでも良い気がするね
base64にすると単純な16進表記よりデータ量増えるし、%Xなら余分なライブラリもいらないし
まぁどっちでもいいんだろうけど
0624デフォルトの名無しさん
垢版 |
2020/02/05(水) 16:08:34.43ID:ImPcpEtv
嘘言ったわ、base64は6ビットごとに1文字だからデータはこっちのほうが小さいか
0625デフォルトの名無しさん
垢版 |
2020/02/05(水) 16:54:58.67ID:2rKdW1Ec
8bit→HEX2桁→2倍
8bit→Base64→4/3倍
やろ
一定数以上桁が必要なのでpaddingとかあるし100%ではないが
0626デフォルトの名無しさん
垢版 |
2020/02/05(水) 18:52:50.41ID:hYuejzNd
base64なんかビットシフトとテーブルだけで簡単に実装できるし依存ライブラリ増やす必要もないのでは
0628デフォルトの名無しさん
垢版 |
2020/02/05(水) 19:23:50.17ID:2rKdW1Ec
データ量にもよるけど
"\x00\x00\x00\x00..." が一番楽じゃね
0629デフォルトの名無しさん
垢版 |
2020/02/05(水) 19:35:11.50ID:hYuejzNd
何のためにテキストに変換したいのかがわからんとなんとも言えんな
目的によって使える文字種も違うからな
0631デフォルトの名無しさん
垢版 |
2020/02/05(水) 23:15:38.55ID:NEouxGwD
Base64 は、HTML でもよく使う

Base64の文字列で、PNG/JPEG画像を、HTMLファイルに直接埋め込める

<img src="data:image/png;base64,xxxxx..." />
0632デフォルトの名無しさん
垢版 |
2020/02/06(木) 00:01:41.26ID:7WdfZf7H
base64って7bit通信路通すためのもんでしょ?
textにするならヒューマンリーダブルにするのが無難だと思うけど
そうじゃなけりゃバイナリでいいじゃん
と思った
まぁ好きにしなよ
0637デフォルトの名無しさん
垢版 |
2020/02/06(木) 10:19:44.96ID:s0z6ZqT0
テキストファイルを結合してishでデコードしてえっちなMAGファイルを見てた人は手をあげなさい
0638デフォルトの名無しさん
垢版 |
2020/02/06(木) 13:08:45.50ID:sNihMBVC
ishはBase64と違って誤り訂正あるやん?
0640デフォルトの名無しさん
垢版 |
2020/02/07(金) 02:44:46.72ID:FDFOp562
boost::serializationがお手軽にシリアライズできて便利だなと使いまくってたら、
map系コンテナがあると一気に性能落ちるっぽいんですが、これって当たり前ですかね?
protocol buffersなどの他のシリアライザに替えて解決するものでもなさそうだし、どうしたもんかな…
0641デフォルトの名無しさん
垢版 |
2020/02/07(金) 11:04:33.34ID:j3f+aFgv
>>637
here!
0642デフォルトの名無しさん
垢版 |
2020/02/07(金) 11:15:10.05ID:0A6dyGR7
独学で組み込みやりたいんだが…
0643デフォルトの名無しさん
垢版 |
2020/02/07(金) 11:40:38.84ID:PWhN+bN7
圧縮してからBase64すればbitチェックも出来てサイズも減って一石二鳥
0648デフォルトの名無しさん
垢版 |
2020/02/07(金) 12:47:59.75ID:0A6dyGR7
Arduinoでいい?
0651デフォルトの名無しさん
垢版 |
2020/02/07(金) 13:31:27.53ID:0A6dyGR7
制御的な知識は多少あるから今更Lチカやってもなぁって感じだ
0653デフォルトの名無しさん
垢版 |
2020/02/07(金) 13:51:42.69ID:PWhN+bN7
条件後出しするなとあれほど
板チ
0654デフォルトの名無しさん
垢版 |
2020/02/07(金) 14:39:32.66ID:aI41PDC9
>>642
SPRESENSE、Arduinoよりスペックが高いからあまり制約を考えずに触れるからいいよ
0655デフォルトの名無しさん
垢版 |
2020/02/07(金) 18:25:14.52ID:tbpxydmI
組み込みって難しそうなのに年収は総じて低めだよね
オラオラ系Webプログラマとかのほうがマシだったりするし
なんか世知辛い
0656デフォルトの名無しさん
垢版 |
2020/02/07(金) 20:39:09.61ID:Dpv8aBJv
組み込みで出来る人は多分大企業メーカーのR&Dに転職してっちゃうんじゃないかな。
なんとなくのイメージだけど、組み込みプログラミングが必要な製品の品質管理を考えると、
請負組み込みの会社に開発を頼める範囲ってごく簡単な部分に限られそうだから、
単価が低い仕事が多くなっちゃうのかも。
0658デフォルトの名無しさん
垢版 |
2020/02/08(土) 00:46:23.22ID:Q7LgS8OA
オラオラ系というよりウェーイ系というほうが表現が適切だろう
ホームページ見ただけでウェーイって叫びながら意識高い開発してる姿が容易に想像できる
0660デフォルトの名無しさん
垢版 |
2020/02/08(土) 13:16:27.70ID:v1IBJgnW
京セラも陶器だったんやな
0661デフォルトの名無しさん
垢版 |
2020/02/11(火) 18:11:48.90ID:poOKFhcK
そもそもここで質問するのが適切か分からないのですが
とりあえず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 が機能するように環境を設定するにはどうしたら良いでしょうか。

よろしくお願い致します。
0662661
垢版 |
2020/02/11(火) 18:13:22.88ID:poOKFhcK
貼り付けるエラー文言間違い得ました。

```
略/filesystem.hpp:52:9: error: redefinition of 'path'


```

です。
0663デフォルトの名無しさん
垢版 |
2020/02/11(火) 18:30:48.12ID:GpQNLMm4
>>661-662
とあるライブラリとか言わずにそのライブラリを示して。
初心者はどんな情報が必要か判断する能力がないので、情報を選別してはいかん。
情報を小出しにされるとイライラゲージが上昇しやすいから、
状況を再現可能な情報を提示することを心掛けて。
0664デフォルトの名無しさん
垢版 |
2020/02/11(火) 18:38:14.46ID:poOKFhcK
>> 663

すみません、おっしゃる通りですね。
このライブラリのインストールになります。

github.com/WonderMediaProductions/Maya2glTF
0666デフォルトの名無しさん
垢版 |
2020/02/26(水) 11:09:35.39ID:wiEfavJ1
見ないで答えるけど
include path の順番がまずいんじゃね
0667デフォルトの名無しさん
垢版 |
2020/02/27(木) 10:57:15.88ID:RXnANkEf
-----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に追加するしかないですか?
0671デフォルトの名無しさん
垢版 |
2020/02/27(木) 15:19:56.24ID:G6pyHvdg
Icon とか継承したクラス造ろうとしたら protected 観たいなエラー出るのですが
無理やり継承する方法はありますか?
0672デフォルトの名無しさん
垢版 |
2020/02/27(木) 21:56:32.66ID:nCyLO+2A
Ruby では、Forwardable モジュールで、
継承ではなく、包含を使って、インスタンス変数に委譲できる

使えるメソッドも、限定できる。
配列のメソッド中、指定した2つのメソッドだけが使える

@ary = [ ]
def_delegators( :@ary, :push, :pop )
0673デフォルトの名無しさん
垢版 |
2020/02/27(木) 22:15:25.36ID:IR/jNZBp
組み込みプログラマになりたいんだけどオススメの本とかあったら教えてください
0674デフォルトの名無しさん
垢版 |
2020/02/27(木) 22:20:30.25ID:dsi+r0l9
組み込みって言っちゃうと範囲が相当広いと思うんだけど具体的に何か目指してるのとかあるの?
0675デフォルトの名無しさん
垢版 |
2020/02/27(木) 22:22:34.36ID:IR/jNZBp
機械メーカーで製造やってるんどけどいつか組み込みシステムの部署に行きたいのです
0676デフォルトの名無しさん
垢版 |
2020/02/27(木) 22:28:28.18ID:IR/jNZBp
C言語は学生の頃少しやった程度ですが、苦Cや新明解C言語などの本で勉強し直しているところ
0678デフォルトの名無しさん
垢版 |
2020/02/27(木) 22:33:26.60ID:IR/jNZBp
>>677
いきなり難易度が高そうだ…
0679デフォルトの名無しさん
垢版 |
2020/02/27(木) 22:44:47.37ID:R9m18Hk4
>>675
先に異動してしまってそこで学ぶ方がいいのでは?
若いなら可能だよ
おっさんならそもそも実務経験なしのスキルは評価されないと思う
0680デフォルトの名無しさん
垢版 |
2020/02/27(木) 23:05:06.65ID:IR/jNZBp
>>679
29歳は若手ですか?
0681デフォルトの名無しさん
垢版 |
2020/02/27(木) 23:12:49.02ID:R9m18Hk4
>>680
転職で考えればまだポテンシャルで採ってもらえる年齢
まぁ30前半までだと思うけど
企業文化にもよるけど可能性はあるんじゃない?
だめもとでいってみて、ダメでもそれが将来のコネになるかもしれないのだから
情熱あるなら動いてみるのが正解だと思うよ
0682デフォルトの名無しさん
垢版 |
2020/02/27(木) 23:19:52.21ID:IR/jNZBp
>>681
ありがとう。
上司にはいつかは異動したいとは言ってる。後は組み込みやってるところにアピールする必要もあると思うんだ。
だから基礎でもいいから勉強しときたい。
0683デフォルトの名無しさん
垢版 |
2020/02/27(木) 23:24:42.92ID:dsi+r0l9
異動先の想定があるなら異動先の人間に聞くのが一番良いんじゃないかな?
話できる機会を作ってもらえるならポテンシャルやモチベーションを見せるチャンスにもなるし
組み込みって業種や企業で文化がだいぶ違うイメージだから自社内異動想定なら自社に目標合わせるのが一番だと思う
0684デフォルトの名無しさん
垢版 |
2020/02/27(木) 23:29:18.61ID:IR/jNZBp
>>683
聞いたことあるんだけど、プログラミングできなくても設計書読めたらなんとかなりますよーって言われたなぁ。
0686デフォルトの名無しさん
垢版 |
2020/02/27(木) 23:43:07.61ID:dsi+r0l9
>>684
個人的にはプログラミング的なことなんざ実務やってりゃ嫌でも身につくんでそんな気にしない
素養とか基礎知識はあったほうがそりゃいいけどね
どれくらい部署間の関係性が強いかわからんが他部署出身者はその部門のことをケアした提案とかができるからむしろ重宝するくらい
やる気ある人間にやらせたほうが結果的に効率上がるからそういうのは積極的に対応する

まぁとは言っても企業文化次第ではあるけどねー
0687デフォルトの名無しさん
垢版 |
2020/02/28(金) 00:06:09.61ID:bgqQewMR
>>682
勉強するのはもちろん構わない
でもしっかり勉強してから異動とか思ってたら機を逃すから注意ね

上でも言ってるとおり組み込みといっても千差万別で幅広い
組み込みlinuxかRTOSかぐらいは絞らないと
0689デフォルトの名無しさん
垢版 |
2020/02/28(金) 23:31:02.28ID:KhVuQUrV
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;
0690デフォルトの名無しさん
垢版 |
2020/02/28(金) 23:53:01.56ID:bgqQewMR
>>689
簡単に言うと浮動小数の中身は2進数の小数
なのでもともと0.0002を正確に表せない
表示する際に人にわかりやすくするために10進数の小数に変換するが
そのとき何桁まで計算するかで変わってるように見える
0691デフォルトの名無しさん
垢版 |
2020/02/29(土) 00:56:43.52ID:WzbNfV7+
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
どうやれば出来るという簡単なものではないのでちゃんとした専門書で学ばないといけないと思う。

浮動小数点で計算するのは諦めて速度も諦めるなら
十進小数ライブラリを作るか導入してもいいだろうし、
計算の内容によっては有理数型を導入するとか
まあ出来ることは色々とあるよ。
0694デフォルトの名無しさん
垢版 |
2020/02/29(土) 08:19:49.16ID:WjxTYPok
>>690-693
ありがとうございます。
現時点では理解できてないのですが、厳密に表現出来ない値があるという認識で良いでしょうか。
宣言時にdoubleで0.0002とする場合はその後の積和演算の誤差が問題にならないのですが、こちらの制約上でfloat入力しかできないのでキャストしています。
0695デフォルトの名無しさん
垢版 |
2020/02/29(土) 08:23:33.95ID:a4Xwg1lT
厳密に表現出来ない値があるのは当たり前
floatやdoubleで表現出来る値は有限通りなんだから
0696デフォルトの名無しさん
垢版 |
2020/02/29(土) 08:32:37.79ID:a4Xwg1lT
floatの中身が元々10進数で簡単に表せる数という事がわかってるなら
doubleにするときに単純なキャストではなく
そういう補正を加えれば良い
10進7桁までならdouble精度に復元出来る
0697デフォルトの名無しさん
垢版 |
2020/02/29(土) 14:00:46.61ID:3sltTQiA
>>693
>>689 のは既にfloatの時点で0.0002じゃないんだよなω
0698デフォルトの名無しさん
垢版 |
2020/02/29(土) 17:13:36.11ID:VpO1O9GW
>>694
許容できる誤差の閾値がどうやって決まってんのか謎だけど
0.0002を救いたいなら例えば入力は10000倍しておくという運用にして
doubleにするときに10000で割るとかね
0699デフォルトの名無しさん
垢版 |
2020/02/29(土) 23:21:10.14ID:6IdZMwnf
浮動小数点は、非連続・飛び飛び。
数値の間が、ものすごく小さいこともあるし、大きい事もある

よく起こるバグは、ソフト・サーバーなどは、連続して3日しか動かないというもの

float に、1ずつ足していくと、3日後には数値間が、1以上になって足せなくなる。
組み込みプログラマーは、こういう基礎的なことを、知らない香具師が多いw

しかも発見するのに、3日も掛かるから、テストで発見できないので、こういう製品が多いw
0700◆QZaw55cn4c
垢版 |
2020/02/29(土) 23:26:17.95ID:c0ztbNyQ
>>699
えーと、組み込みの人なら、そもそも float/double は昔は劇的に遅かったという名残があって最初から float/double を使わないんじゃないかな?
最近はそうじゃないのですか?
0703◆QZaw55cn4c
垢版 |
2020/02/29(土) 23:51:06.93ID:c0ztbNyQ
>>701
ジジイ、ジジイか…
それじゃお前はなんだ、この餓鬼が
おれはお前さんがこの世に落っこって来る前からバグつくってんだ
0704デフォルトの名無しさん
垢版 |
2020/03/01(日) 00:15:22.67ID:QmxFkZ5G
1ずつ足していく単純なカウンターにfloatを選ぶヤツがいるとも思えんが
組み込みだと特に
0705デフォルトの名無しさん
垢版 |
2020/03/01(日) 00:23:59.37ID:2kmwzB0g
>>704
>>699は例のRubyバカだろうから、まともに考えるだけ無駄だと思うよ。
初心者スレで嘘や意味不明なことを垂れ流して周りに迷惑かけるのやめて欲しい。
0706◆QZaw55cn4c
垢版 |
2020/03/01(日) 01:17:16.77ID:7ZOlNSWM
>>705
決心しました
私も ruby で逆襲粉砕してやろうじゃありませんか
ruby のいい教科書を教えてください…
0707デフォルトの名無しさん
垢版 |
2020/03/01(日) 13:19:26.60ID:WMkrI5AG
706
https://www.尼損.co.jp/dp/B00QR4JST2
0710デフォルトの名無しさん
垢版 |
2020/03/04(水) 09:42:13.15ID:hHbt2ovK
マスゴミもトイペ買えずに困ってる一般庶民(それもあやしいが)の家訪問して
もうこの一本しかないの?今日一日持たない!とか取材してる暇あったら
本社ビルの在庫数本でも持って行って渡してやればいいんだよ
災害報道のときもいつも思うわ

マスゴミが本気で心配するなら新聞紙で尻ふけばいいとか本当の事言えば良いのにな
0713デフォルトの名無しさん
垢版 |
2020/03/05(木) 04:17:48.51ID:E3z3OjjV
自作クラスのインスタンスを大量に作成したのち破棄したのですが、Linuxのtopコマンドで見ると
メモリを掴んだままでどれだけ待っても解放してくれません。これはいわゆるメモリリークでしょうか?
作成したインスタンスのデストラクタが全て走っていることはプリント文をかまして確認してますが、
「デストラクタが走ったからそのインスタンスのメモリは解放される」と思うのは間違いでしょうか?
0714デフォルトの名無しさん
垢版 |
2020/03/05(木) 06:42:53.16ID:cV+8pcak
>>713
そのプログラムは動きつづけてるのかな。
プロセスが生きてるなら、そのプロセス自身で再利用できるように
OSに返さないで、と言うかOSが取り戻さないで残してることはあるでしょ。

いよいよ他のプロセスで使うメモリが減ってきたところで
「あのプロセスから返却されたメモリがあったはず」と
OSが本当に取り立てる、と。

変な擬人化をした、厳密とは言い難い説明だけど。
0716デフォルトの名無しさん
垢版 |
2020/03/05(木) 10:32:20.81ID:ZZWMeQXX
>>714
プログラムは全インスタンス解放後にstd::chrono::secondsでスリープかけていて
2GBほど掴んだメモリが半日経ってもそのままでした
こういうのもシステム起因の挙動なのでしょうか?
0717デフォルトの名無しさん
垢版 |
2020/03/05(木) 11:03:11.50ID:2gUuzrSw
>>716
心配なら Valgrind とかで調べてみれば?
Linux はなるべくメモリを使い切る方針だったはず (※) なので、 >>714 のようなことは普通にあると思う。

※ 空いているメモリがある状態というのは要するにメモリを無駄にしている状態ってこと
0720デフォルトの名無しさん
垢版 |
2020/03/05(木) 16:41:49.18ID:ZZWMeQXX
713=716ですが、malloc_trim関数を呼んだらメモリが空きました
>>714さんの仰るようにOSに返していないのが原因のようです

>>719
すみません、自社内のかなり複雑で汚いコードなので晒せませんでした
厄介なことにスクラッチから同じ程度のメモリを使うテストコードを書いたら現象は再現しませんでした
0721デフォルトの名無しさん
垢版 |
2020/03/05(木) 17:13:53.55ID:ywFWHxIm
OSからのリクエストと返却はコスト高だから
ランタイムのアロケーターが握ったままでOSには返さない
OSへ返すタイミングはプロセスが終わるとき、という実装は割りとありえそう
0725デフォルトの名無しさん
垢版 |
2020/03/06(金) 23:01:27.31ID:+gnSZkOM
CとC++ってなんで一緒にされていることが多いの?
0727デフォルトの名無しさん
垢版 |
2020/03/07(土) 08:11:04.10ID:bdrHDbLb
他の言語同士に比べて類似してる部分が多いだけに、
Cでの動作はこう、しかしC++では違う、みたいな情報の有用性が高いから、かも。
少なくとも、こういう質問と回答のようなスレッドでは。
0728デフォルトの名無しさん
垢版 |
2020/03/07(土) 08:55:37.01ID:gWhxXX2s
ならC言語勉強するならC++もやれってことか?
0729デフォルトの名無しさん
垢版 |
2020/03/07(土) 10:45:02.41ID:XLWmxUUx
c++の方ではcとの互換性を大きな要素として挙げてるからな。
元々cの前処理での言語拡張が始まりだし。
cの方はもう切り離して一緒にされたくないだろうが。
0730デフォルトの名無しさん
垢版 |
2020/03/07(土) 16:29:47.82ID:jUFqUInS
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 の側も是としている。
0731デフォルトの名無しさん
垢版 |
2020/03/07(土) 16:53:11.21ID:wgBH55a3
いや、コンストラクタやデストラクタが暗黙で動く時点で全然違う言語でしょ。。
解釈を 2、3層入れてやっと表面上は同じように動くみたいな状況なわけでさ。
その辺誤魔化すからロクでもないことが起きるんだよ。
0732デフォルトの名無しさん
垢版 |
2020/03/07(土) 17:26:14.19ID:jUFqUInS
>>731
いや、もちろん違う言語だよ。 >>729

> cの方はもう切り離して一緒にされたくないだろうが。

に対して、仕様の策定では連携していく方針があるってことを言ってるだけ。
0733デフォルトの名無しさん
垢版 |
2020/03/07(土) 18:33:23.15ID:RZgTMQsN
>>728
Cを使える人は(C++知らない状態からでも)C++もそこそこすぐ馴染む
C++を使ってる人(C知らない人)はCだと使えないことが多いと思う
0734デフォルトの名無しさん
垢版 |
2020/03/07(土) 18:38:46.76ID:RZgTMQsN
C++2017の電子本が無料らしい
Embarcaderoからメール来た
0735デフォルトの名無しさん
垢版 |
2020/03/07(土) 20:21:56.03ID:V3yrok8D
Cから始めてC++に移行した時は
クラス・継承(仮想関数)・例外・new,deleteをもっと早く知りたかったわ
0736デフォルトの名無しさん
垢版 |
2020/03/08(日) 06:17:37.40ID:OioMZJ5n
=0
0737デフォルトの名無しさん
垢版 |
2020/03/10(火) 21:03:25.71ID:4I7RYXwm
組み込みシステム部に転属したくてC言語の勉強してたんだけど、使ってる言語はC++とJAVAって聞いて萎えてる。
0739デフォルトの名無しさん
垢版 |
2020/03/10(火) 21:35:56.80ID:3+CC2Qsy
C言語が出来るってのが最低条件なんだろう
ついでにその部署には「この門をくぐる者は一切の希望を捨てよ」とか書いてないか?
0740デフォルトの名無しさん
垢版 |
2020/03/10(火) 21:38:36.13ID:4I7RYXwm
>>738
無駄ではないが遠回りしたような…
>>739
その部署の新人教育見てたらJAVAとC++しかやってなかった。
0741デフォルトの名無しさん
垢版 |
2020/03/10(火) 21:39:52.01ID:ez/DBx9r
まあ確かに、例えば変数の宣言がいちいちスコープの最初とか今更考えられんな
0742デフォルトの名無しさん
垢版 |
2020/03/10(火) 21:40:37.65ID:4I7RYXwm
JAVAとC++ならどっちからやるべきなのだろうか
0743デフォルトの名無しさん
垢版 |
2020/03/10(火) 21:47:57.73ID:3+CC2Qsy
一か月でJavaをやりその次の一か月はC++をやる
さらに5月からはもう一度Javaをやって六月からはC++をやる
そして7月にはC言語をやる
0744デフォルトの名無しさん
垢版 |
2020/03/10(火) 21:50:37.20ID:808QYtU8
>>742
どういう組み込み機器なんだ?
javaならjavaでsmartcard制御するのか、gui作るのかでかなり違う
0745◆QZaw55cn4c
垢版 |
2020/03/10(火) 21:50:59.61ID:7t0MtDjq
>>742
両方書いている者としては、java は virtual 付きで、C++ なら p = new XXX, p->property, p->method() と書く気持ちと思想で p.property, p.method() と書いておれば間違いないです
それと、コンストラクタの書き方、基底クラスの呼びかたは毎回お手本をみています
両方同時にやって混乱するようではセンスを疑います
0746デフォルトの名無しさん
垢版 |
2020/03/10(火) 21:59:27.15ID:EBgJJlCp
C++対応してるプロゲートみたいなサイトってないの?
0747デフォルトの名無しさん
垢版 |
2020/03/10(火) 22:01:39.03ID:rLdwFfVF
俺、変数宣言は関数の頭じゃないとコンパイル通らない環境なんだがw
GUIつうかOSからして無いんだがw
組み込みってひとまとめに言っても範囲広すぎるからもう少し具体的な情報無いとアドバイスしづらいよね
0749デフォルトの名無しさん
垢版 |
2020/03/10(火) 22:18:40.36ID:HIU8QCM9
>>747
C99 に対応してないコンパイラってことか。
理屈の上では実際のメモリの確保は関数の頭にまとめてしまえばいいから
実行時のリソースが限られていても関係なく出来るはずなんだが、
マイナーな環境だとコンパイラもまともなものがなかったりするんだよな……。
0750デフォルトの名無しさん
垢版 |
2020/03/10(火) 22:20:49.11ID:808QYtU8
>>743
おれとしてはc++から始めることをおすすめするな
javaから入るとc++でもjavaの作り方をずっと引きずる
そういう人数多く見てる
それだと組み込みでつらい場合が考えられる
ただしc++極めるのはまず無理なので
適当なところで打ち切る必要はある
0751デフォルトの名無しさん
垢版 |
2020/03/10(火) 22:22:24.15ID:EBgJJlCp
C++勉強するなら江添亮のやつがいいのか?
0752◆QZaw55cn4c
垢版 |
2020/03/10(火) 22:37:05.22ID:7t0MtDjq
>>751
かつては、旧版独習C++ でstd::string を再実装する練習問題に出会うまで黙々と読んでいくことを薦めていましたが、確かに今となっては旧版独習はC++が古過ぎるでしょうね
江添さんは、私も今読んでいる最中です、もう少ししたらお勧めできるかどうかわかるかと思います
0753デフォルトの名無しさん
垢版 |
2020/03/10(火) 22:58:14.28ID:4I7RYXwm
ありがとう
0754デフォルトの名無しさん
垢版 |
2020/03/10(火) 23:02:41.52ID:rLdwFfVF
>>749
コストのためにハードが固定化され、ハードが決まってるからCPUも固定でコンパイラもそれに依存
ハードの更新なんて5年に1回あるかどうかだし、更新されてもROM容量が16MBに増えました!程度とかだしねぇ

ツール類はPC上で動けばいいからそっち方面触ってないと技術的に取り残される
つっても未だにMFCで新規ツール作るような人もいるけどねw

まぁ業界によってはこんな組み込みだって居るんだよって程度で
0755デフォルトの名無しさん
垢版 |
2020/03/10(火) 23:27:10.68ID:EBgJJlCp
江添亮VS柴田望洋
0757デフォルトの名無しさん
垢版 |
2020/03/11(水) 00:14:52.72ID:EKM5ywjJ
>>751
江添亮の本は、勉強用じゃないw
プロが見て、あれこれ議論する土台になる本

10年以上やっていないと、まず読めないw

どの言語でも、勉強用は「Effective 何々」
0758デフォルトの名無しさん
垢版 |
2020/03/11(水) 00:27:33.10ID:FbH1Tm9+
>>757
それはひょっとして「江添亮の詳説C++17」と混同してない?

「江添亮のC++入門」は初心者が基本的なツール (make やコマンドライン) の使い方さえわかってないからってんで、
そのあたりから記述している上にクラスの継承を説明しないという思い切った簡略化をしてる本だぞ。
0759757
垢版 |
2020/03/11(水) 02:06:23.50ID:EKM5ywjJ
C++11/14 コア言語、江添 亮、2015

この神の書と勘違いしたw

江添は、素人向けの本も、出しているのか
0760デフォルトの名無しさん
垢版 |
2020/03/11(水) 02:43:05.64ID:zwwCe0yv
hageで安全靴履いてリュック背負ってると職務質問される的なスキルが身に着く
0761デフォルトの名無しさん
垢版 |
2020/03/11(水) 09:42:39.53ID:QiiPQnMP
江添のあれ、糞本だろ。。
初心者はそんなとこでつまづかねーよってところにばかり無駄な記述を付け加えてるっていう。。
センスねーわ。
0762デフォルトの名無しさん
垢版 |
2020/03/11(水) 10:20:19.09ID:f25IEtU6
炎上商法に釣られてると売り上げが伸びちゃいますよ?
0763デフォルトの名無しさん
垢版 |
2020/03/11(水) 13:07:41.95ID:EKM5ywjJ
江添は職務質問で、大勢のポリ公に囲まれて、その場で監禁されたとかで、
今、警察を訴えているのだろ

警察はボーナスが欲しいから、誰でも犯人に仕立て上げるから、危険!

漏れも昔やられた。
パトカーに止められて、アルコール検知器に息を吐いても、ランプが点かなかったのに、
ポリ公がクルッと後ろを向くと、ランプが点いた!

何のことは無い。
そのポリ公が酔っ払いで、息を吹きかけていたw
後輩の若いポリ公も、グルだった
0765デフォルトの名無しさん
垢版 |
2020/03/29(日) 00:51:11.45ID:yk11UhYR
何を作ったら一番C++の勉強になるんだ?
0766デフォルトの名無しさん
垢版 |
2020/03/29(日) 00:56:17.78ID:c4x4s1tb
ビットマップ画像のファイルパスを入力したらそれにブラー処理を施して出力するコンソールアプリ
0767デフォルトの名無しさん
垢版 |
2020/03/29(日) 01:24:25.56ID:GFdzppn9
C++使いのみなさんはC++以外だったら何の言語が好きなんですか
もしくは次何覚えたいですか
0770デフォルトの名無しさん
垢版 |
2020/03/29(日) 02:37:01.61ID:tSgWoZoj
競技プログラミング界隈だと #include<bits/stdc++.h> とか using namespace std; が普通になってるのが本当に嫌なんだよな。
AtCoder がそれを推奨しているのは「そこでつっかえて先に進まないよりは良い (競技の上では問題ないことが多いし)」みたいな
ニュアンスだし、ちゃんと理解してちゃんと書くならそれに越したことはないはずなんだよ。
0771はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/03/29(日) 02:53:17.00ID:tSgWoZoj
>>767
ワイは Scheme が好きで日常的には C++ より使うなぁ。
興味があるのは Rust。 入門書を読みながら色々といじって遊んでる。
0774デフォルトの名無しさん
垢版 |
2020/03/29(日) 10:05:56.36ID:vg0TAzW0
二重言語であり真顔で「わたくしはC言語を極めました」と言えるのが第一関門
0775デフォルトの名無しさん
垢版 |
2020/03/29(日) 12:55:27.64ID:Kzf4aDfw
>>771
Rustの入門書はどれがお勧めですか。
Box<T>や、Option<Box<T>> の代入や参照について詳しいものがあれば幸いです。
0776デフォルトの名無しさん
垢版 |
2020/03/29(日) 15:54:38.44ID:7B/pleQ/
>>765
そういう視点より自分が何を造りたいかを考えろ
0777デフォルトの名無しさん
垢版 |
2020/03/29(日) 15:55:46.75ID:7B/pleQ/
>>767
Python
C#
D
Go
Nim
0778◆QZaw55cn4c
垢版 |
2020/03/29(日) 16:08:26.57ID:GnieE+99
>>767
>C++使いのみなさんはC++以外だったら何の言語が好きなんですか
C です

>もしくは次何覚えたいですか
classpath を C++ に移植したいです
0781デフォルトの名無しさん
垢版 |
2020/03/30(月) 14:36:39.18ID:cpVmKDV2
C/C++ で OpenGL とか Tck/Tk とかやるとオブジェクト指向ωの有難さωωが判るωωω
0782デフォルトの名無しさん
垢版 |
2020/03/30(月) 19:25:06.14ID:Oymj8mf6
>>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は使いにくいと思ってしまっている。
0784デフォルトの名無しさん
垢版 |
2020/03/31(火) 01:07:28.66ID:Yt3qMdaP
>>783
逆、昔のが使い易いから人気が出て標準の座を勝ち取った。
当時、OpenGL は、3Dを凄くよく理解している人が設計したといわれていた。
ところが、OpenGL 2.0 は高速だが使いにくくされた。
0785デフォルトの名無しさん
垢版 |
2020/03/31(火) 09:24:13.17ID:Ow5tuxOJ
ハードウェアの種類が減ったんだよね。
その分だけ低レイヤまで踏み込ませても互換性が維持できる……
かと思いきや割とそうでもないな? みたいな闇が出来てしまった。

元から低レイヤを触る人にとってはハードウェアに近いところまで触れる方が使いやすいってのは
普通にあることなので、 API が綺麗なのが使いやすいというのは思い込み。
その人の経歴による。
0786デフォルトの名無しさん
垢版 |
2020/03/31(火) 10:06:09.54ID:vx6/o4d4
例のRuby君のことだから、自分で理解的ないものは難しい、使いにくい、汚いと非難の対象にしているか、もしくはどこかで聞き齧った意見をそのまま受け売りで垂れ流すだけ。
いずれにせよ聞くに値しない。
0788デフォルトの名無しさん
垢版 |
2020/03/31(火) 15:44:37.42ID:uFliupP+
機械工学部なんですが、授業で扱うレベルが初歩の初歩のみで
独学するにもどういうところから勉強すればいいのかわからず困っています
将来的にロボットを動かしたりするための知識を学ぶおすすめの教材とかありますか?
0789デフォルトの名無しさん
垢版 |
2020/03/31(火) 16:11:50.19ID:uDSFrRRV
電気・電子板へgo!
0792デフォルトの名無しさん
垢版 |
2020/03/31(火) 18:09:22.14ID:fXRU3fg2
>>785
いや、書き方に夜がOpenGL 2.0以後は初期設定だけで200行を超えるくらいある。
それに比べて、OpenGL 1.0は、最初、お決まりの数行の初期化のあとは、
glBegin();
glVertex3f(x1,y1,z1);
glVertex3f(x2,y2,z2);
glVertex3f(x3,y3,z3);
glEnd();
glFlush();
程度でポリゴンが1枚書ける。
このコードを見ればマニュアルを見なくてもなんとなくやってることが分かるだろう。
それと、行列計算がとても判りやすくできるようになっている。
0793デフォルトの名無しさん
垢版 |
2020/03/31(火) 18:33:37.31ID:aMyLRkM9
hello world的なプログラムなら1.0が楽だが、まともなアプリやゲーム作ろうとしたら、一々頂点定義していくのは面倒なだけ
しかも性能落ちる
0794デフォルトの名無しさん
垢版 |
2020/03/31(火) 18:36:35.46ID:chhHfIYK
一見簡単に見えるだけ
問題だらけのAPIデザインだよ
とにかくそんな遠い過去の技術どうでもいいから
0795デフォルトの名無しさん
垢版 |
2020/03/31(火) 18:46:15.18ID:fXRU3fg2
>>793
2.0 は初期化時の
glBindBuffer(), glBufferData(), gl.bufferSubData()
が特に難しい。
STATIC_DRAW, DYNAMIC_DRAW
の違いや、glBufferData(), bufferSubData() の違いとか。
0799デフォルトの名無しさん
垢版 |
2020/03/31(火) 19:12:17.41ID:chhHfIYK
使い物になるだけD3Dの方がまし
OpenGLは初期のAPIデザインひきずって最後までマルチスレッド対応できなかった
拡張性が高いとか言われてるけど
ベンダ依存多くて互換性なんかほとんど期待できない
初心者が一ヶ月学んで卒業するための
教育用の価値しかない
こんなのにしがみついてどうする
0801デフォルトの名無しさん
垢版 |
2020/03/31(火) 20:19:39.98ID:Sf1iuZK0
>>792
glBegin/glEndがdeprecatedになって、VBOを使うようになってわかりにくい、という主張はわかるけど、
2.0だと初期設定だけで200行必要というのと1.0は初期化の後はglBegin/glEndでポリゴンが書けるというのは、
対応してないところを比較している気がしてしまう。

それに、GLFWなんかを使わずに素のOpenGL APIを使って初期化するなんてこと今どきある?
2.0になってややこしくなったのは、世界が複雑になったのだから仕方のないことだと思うんだけど。

OpenGLの一番良くないところは、ハンドラが引数になくて、操作されるコンテキストがどれかということが
見えない状態になってしまっていることじゃない?
0802デフォルトの名無しさん
垢版 |
2020/03/31(火) 20:21:22.12ID:1hnfAhIg
シェーダーとかなしで
グラフを書くだけの用途だから OpenGL1.0でごりおしだな

※ glBegin の対の glEnd を忘れて頂点バッファ漏らすのを ラッパークラスで回避する程度
0805デフォルトの名無しさん
垢版 |
2020/03/31(火) 23:22:06.63ID:hFZHkIvl
つーか昔はフレームバッファに書きこんだところにドットが表示されてすっきりしてわかりやすかった
今は全部GPUにふくざつなめいれいを送らないとドットひとつ打つのも大変だから昔のほうが良い
みたいな議論
0806デフォルトの名無しさん
垢版 |
2020/03/31(火) 23:25:55.16ID:vx6/o4d4
できることが増えただけで今でも昔のやり方をしたいなら(それで事足りるなら)、昔ながらのやり方をすればいいだけだと思う
0807デフォルトの名無しさん
垢版 |
2020/03/31(火) 23:28:34.45ID:L/5UA51D
imx6でframebuffer上にcv::Mat作って直接弄ったら表示されたときはなんかすごく懐かしかったよ
0808デフォルトの名無しさん
垢版 |
2020/04/01(水) 10:16:21.36ID:5VJq6KKK
>>801
>OpenGLの一番良くないところは、ハンドラが引数になくて、操作されるコンテキストがどれかということが
>見えない状態になってしまっていることじゃない?

ほんそれ

python の matplotlib にも同じ違和感を感じる(重箱)
0809デフォルトの名無しさん
垢版 |
2020/04/01(水) 10:18:19.76ID:5VJq6KKK
>>804
オレオレルール上は glut までですね判ります
0810デフォルトの名無しさん
垢版 |
2020/04/01(水) 11:06:09.53ID:15FH3/nz
>>808
さすがにそういう30年ぐらい前のAPIデザインはいけてないってことで
direct state accessが導入されたんだけど、中途半端でぐだぐだ
0811デフォルトの名無しさん
垢版 |
2020/04/01(水) 16:12:02.61ID:bFLEHtBu
教えてください。
三項演算子

auto a=1;//なんでもいい
a?return 0:return -1;

なんでコンパイルエラー?
0816デフォルトの名無しさん
垢版 |
2020/04/07(火) 22:24:30.92ID:lImlsKaR
windows環境でC++のスタティックライブラリを作りたいんだけど、公開するシンボルを選択することって出来ます?
0820デフォルトの名無しさん
垢版 |
2020/04/08(水) 12:25:08.81ID:lWfV0IAd
公開する気が無いものまでexternしたらだめだぞ
0823デフォルトの名無しさん
垢版 |
2020/06/12(金) 08:44:01.32ID:DgWPkv47
pow関数が遅いというのは今もそうで今後も変わらなさそうで
できるだけ使うべきではないですかね?
0824デフォルトの名無しさん
垢版 |
2020/06/12(金) 09:22:33.18ID:M5MGuP1h
>>823
何も前提条件を定めず「遅い」とか「使うべきか」とか議論しても無意味だよ。
例えば他の関数と比べて100倍遅い関数があったとして、それを使ったプログラムの実行が1msで終わるものなら、通常は別に問題ないだろう。
その遅い関数がどのくらいの回数呼ばれるのか(数回、数万回、数億回)、許容される時間はどれだけなのかによって異なってくる。
とりあえず使っとけ、問題が起こりうるケースならそのとき考える。

そもそもpow関数が必要ならそれを使うしかないんでないの? それに変わる同等な処理を自前で実装できるとは思えないから、powの頻度を減らした別のアルゴリズムを考えるか、同じ計算が繰り返し行われるなら覚えておくかするしかないと思う。
0825デフォルトの名無しさん
垢版 |
2020/06/12(金) 09:46:09.57ID:F8A7CVPb
元の式で数学的に最適化してしまえるケースは多い
何も考えずにコーディングだけしてると無駄な計算量が増える
0827デフォルトの名無しさん
垢版 |
2020/06/12(金) 10:49:20.19ID:6ZYMCXZR
整数回のべき乗なら最適化も可能だしこだわるならやってみればええ
でも数値演算ライブラリはFPU使って並列処理させてるだろ
わざわざCPU資源使って計算させるほどでもない
無駄なことして他の処理が遅くなることもあり得るからの
0828デフォルトの名無しさん
垢版 |
2020/06/12(金) 11:01:15.15ID:HKvMu5uJ
>>823
pow(a,b)

aが同じ値でbのみ変わる事が多いなら
log(a) をとっておいて exp(log(a)*b) とする
取りうる値がわかっていて多くないなら
log(a)をテーブルにしておく

bが整数なら乗算や除算を組み合わせる
bが整数+0.5ならsqrtを組み合わせる

大量にpowを計算する必要があるなら
SIMDやGPUを使う

なと色々と工夫の余地はある
0831デフォルトの名無しさん
垢版 |
2020/06/12(金) 15:39:43.80ID:7ERtrFf+
速い遅いは実際に書いてるコードの中での相対的なものによるから自分のコードで観測しろ ってことだ
0832デフォルトの名無しさん
垢版 |
2020/06/12(金) 15:45:39.23ID:6Yfh5mGy
すみません
他スレでJavaでdirectXやるにはCをやれといわれてココに来ました
CでdirectX出来るそうなので始めたいんですが
何をインストールすれば良いのですか?
Windows10Pro64bitですよろしくお願いします
0833デフォルトの名無しさん
垢版 |
2020/06/12(金) 15:50:05.68ID:1pXOSbLZ
Goスレ池
0835デフォルトの名無しさん
垢版 |
2020/06/13(土) 04:51:37.44ID:JTDnVNgN
ウソってことはないはずだけど、よう分からん。
DirectX のスレッドなら確実じゃないかな。

【C++】 DirectX初心者質問スレ Part41 【C】
https://mevius.5ch.net/test/read.cgi/tech/1521786252/

ってのが見つかった。たらい回しにするみたいで気が引けるが。
なお、そちらのスレッドは見てないので紹介が適切かも分からない。
0836デフォルトの名無しさん
垢版 |
2020/06/13(土) 19:12:26.60ID:Q06gyfKt
>>835
すみません
マルチプラットフォームで3Dやる言語には
JavaでCを呼び出してdirectXをいじるのではなく
UnityでJavaScript言語という結論にいたりました。
ありがとうございました。
0838デフォルトの名無しさん
垢版 |
2020/06/13(土) 20:25:12.63ID:Q06gyfKt
よくわからないですけど
Unityの内部で使う動作スクリプトがC♯記述一択で
ゲームパッド入力はDirectXのC++で
AndroidスマホのタッチイベントはJavaだし
書き出すときはWebGLだからJavaScriptに変換されるという事かな〜意味不明だ
0840デフォルトの名無しさん
垢版 |
2020/06/14(日) 06:59:24.45ID:fieD7Z6G
powは内部的にはexp(log(a)*b)
当然環境次第だけど
おおよそ半分くらいかな

もちろんlog(a)のテーブル検索に時間がかかるようだと
素直にpowを使う

>>828
powがパフォーマンスに影響を与えているという前提のチューニングの話で
ほとんどの場合はそんな事はないので
ほとんどの場合はそのままpowを使うべき
0842デフォルトの名無しさん
垢版 |
2020/06/14(日) 22:50:07.68ID:OziIXX0s
そりゃ^演算子が使えないからクソコードに見える
0845デフォルトの名無しさん
垢版 |
2020/06/15(月) 00:27:20.94ID:y+ohQOA8
速度、精度、見やすさ、コードサイズ、ライブラリ使用
全ての面で糞コード

pow(x,y)が電源ボタンxをy回押す
という別の関数だということは無いとして
0847デフォルトの名無しさん
垢版 |
2020/06/15(月) 06:03:37.82ID:6Rk/ljNV
元の数学的な式を素直にコードに落とし込んだ感じはあるけどな。
「xの3乗」を「pow(x, 3.0)」と「x * x * x」との
どちらで書くのを自然に感じるかという話だが。
0848デフォルトの名無しさん
垢版 |
2020/06/15(月) 11:50:24.26ID:6B2IPoD1
クリティカルでないものならどう表記しようが別にどうでもいいがな
1億回計算したところで時間差は感じないだろうよ

んなことよりべき乗扱う上で大事なのは桁あふれと有効桁数の処理
必要精度のはっきり定義された科学計算用のライブラリ使ったほうがマシ
0849デフォルトの名無しさん
垢版 |
2020/06/15(月) 12:09:05.38ID:XCtiekxI
精度的には加減乗算の方がはっきりしてる
普通は無限精度で求めた後に丸めたのと同じ値になる
つまり誤差最小
0851デフォルトの名無しさん
垢版 |
2020/06/15(月) 12:16:59.98ID:6B2IPoD1
>>849
たとえばJIS規格に則った計算方法てのもある
測定値を足し合わせるだけでも±有効桁/2を混ぜ込まなきゃならなかったり計算ごとに有効桁に丸めこまなきゃならなかったり
乗算の場合は有効桁を減らしたりとかまあいろいろ

無限精度で計算して最後に丸め込んだら×もらう仕組みになってたりする
0856デフォルトの名無しさん
垢版 |
2020/06/15(月) 13:24:20.56ID:iqqqiJ5Y
>>841
y = ((a * x + b) * x + c) * x + d;
0857デフォルトの名無しさん
垢版 |
2020/06/15(月) 13:30:19.41ID:5rULqijg
いわゆるスパコンなんかだと式の変形してがんばらずとも pow そのままで速かったりするのかな?
0859デフォルトの名無しさん
垢版 |
2020/06/16(火) 05:58:44.90ID:ehL8QS9+
c++使う理由ってなんですか?
2dゲームにおいてもc++が必要でしょうか?
0861デフォルトの名無しさん
垢版 |
2020/06/16(火) 06:29:18.93ID:ehL8QS9+
ゲームと言うよりゲームエンジンでした
すみません
テクスチャの描写にすらC++は必要なのかなと
ポリゴンならもちろnC++一択でしょうけど
0862デフォルトの名無しさん
垢版 |
2020/06/16(火) 06:41:12.27ID:MpRAah0t
必要=必ず要る
という意味なら答えは分かってそうな気がするが
別の意味ならもっと日本語をうまく使った方が良い
0864デフォルトの名無しさん
垢版 |
2020/06/16(火) 07:13:44.64ID:ehL8QS9+
可能かどうかで言えばテクスチャの描写はすべての言語でできると思います
ただRPGメーカーやウルフエディタはC++です
ここに理由はあるのかなと疑問に感じました

2dでもopenglなどを使うのですか?
0865デフォルトの名無しさん
垢版 |
2020/06/16(火) 07:26:08.75ID:JnjsQYAt
奥の方では2dでも使ってるよ
今どきのコンピュータならインタプリタでも速度は足りるけどc++を使うのはまあそれが一般的で資産があるからだと思うよ
0868デフォルトの名無しさん
垢版 |
2020/06/16(火) 08:00:15.69ID:TW5yPVrb
ライフゲーム「•|•/•-•\•|•/•-•\」
7行テトリス
7行オセロ
10行ぷよぷよ
はじめてのゲームプログラム「荷物君」
0870デフォルトの名無しさん
垢版 |
2020/06/16(火) 09:08:39.67ID:6qjQ65l0
>>864
RPGメーカーもウルフエディタもさわったこと無いけど、RPGツクールみたいなものでしゅ。つまりただの2Dゲームではなく、ユーザが作成した(場合によっては膨大な大きさの)データを編集するツールと、そのデータを読み込んで処理しながら2D RPGとして動かすプレイヤ(仮想ゲーム機)のセットみたいなもの。
ただの2Dの描画ならマシン性能は大して求められないけど、膨大なデータを効率的に保持して動的な変更に耐えうるような仕組みを作るなら、処理速度が速くメモリ効率も良いC++を使うメリットはあると思う。特にスイッチや変数、イベントなどをユーザが定義して処理するなら、処理速度が遅いとかなり厳しいと思う。

で、結論を言えば、マップエディタが作りたいだけならわざわざ学習コストの高いC++に手を出して挫折する可能性を高める必要はない。他の使いやすい言語やフレームワークを使っとけ。
0874デフォルトの名無しさん
垢版 |
2020/06/16(火) 09:22:41.63ID:6qjQ65l0
>>872
おお、またやってしまった。
以前会社の上司にも似たような誤字を送ったことがある。いまだにスマホのフリック入力は慣れない...
0875デフォルトの名無しさん
垢版 |
2020/06/16(火) 09:25:37.05ID:ehL8QS9+
>>870
何の言語が適切でしょうか
0876デフォルトの名無しさん
垢版 |
2020/06/16(火) 10:11:49.65ID:ZzQUhJK1
Unityスレにもいた人だけどなんでこんな少ない情報で最適な言語を求めるんだろうか?
別にC++でもC#でもjsでも実現可能だし、大差ないと思うけど
COBOLとかならやめとけって言えるけど
0877デフォルトの名無しさん
垢版 |
2020/06/16(火) 10:50:58.86ID:ehL8QS9+
答えというか、一般論を知りたいです
例えばエレクトロンでピクセルの操作は出来ますか?
0878デフォルトの名無しさん
垢版 |
2020/06/16(火) 11:13:05.91ID:zfRgO9so
一般論なら、Unity

他には、Electron, React Native

サーバー側が、Ruby なら、Rails もある。
ただし、GUI は、HTML, CSS/SASS, JavaScript になる
0879デフォルトの名無しさん
垢版 |
2020/06/16(火) 11:14:52.80ID:ehL8QS9+
ゲームではなく、タイルエディタでもunityという選択なんですか?
0880デフォルトの名無しさん
垢版 |
2020/06/16(火) 11:21:02.46ID:ZzQUhJK1
一般論なら使い慣れた言語でいいんじゃね?程度だと思うよ
実現したい機能の実装が不可能で無い限り関係ない
利用者の多い言語のほうがフレームワークやライブラリの面で開発は楽になるかもしれない

electronは言語ではなくフレームワークだけどなんで言語と比較してるの?
electronの質問は該当スレへ
今の質問もスレからずれてると思うけど
0881デフォルトの名無しさん
垢版 |
2020/06/16(火) 11:26:32.29ID:ehL8QS9+
すみません。
既存のエディタがなぜc++なのか知りたかったのです。
0882デフォルトの名無しさん
垢版 |
2020/06/16(火) 11:52:06.13ID:ZzQUhJK1
いや、unityスレでも言われてたけど作った人に聞け以外に答えは無いよ
ウルフエディタを触ったことは無いがやってることはC++でもC#でもjavaでもできるはず
他言語は俺じゃわからんが画像を任意座標へ表示するようなことができる仕組みさえあれば大抵のことはできるだろう
0883デフォルトの名無しさん
垢版 |
2020/06/16(火) 11:55:46.30ID:HRUNOXRJ
初学者なら兎も角、熟練者が少人数で使う分には言語による開発効率の差なんて大差ない
手足となるライブラリが一通り揃って使い方知っていれば、c++だろうがサクッと作れる
0884デフォルトの名無しさん
垢版 |
2020/06/16(火) 12:27:02.09ID:ehL8QS9+
ごめんなさい
じゃあpyqtでやります
比較的pythonに慣れているので
0886デフォルトの名無しさん
垢版 |
2020/06/16(火) 18:18:34.27ID:zj4kqDkW
>>882
>任意座標へ表示

ここでポインターが便利ってことになるんだよな
線引いたり塗りつぶしたりといったプリミティブなことを自分でやるならポインター使えなきゃやってられない
ここまでくるとアセンブラの威力まざまざと見せつけられるわけだけども次点でC/C++
0887デフォルトの名無しさん
垢版 |
2020/06/23(火) 21:41:19.55ID:zFVhfcF5
競技プログラミング始めたいんだけど、どうやってcpp勉強すれば良い?
Cはある程度わかるからcpp特有の文法を勉強したい
変数みたいなのに>>みたいなのいっぱいついてて何がなんだかわからん
0889デフォルトの名無しさん
垢版 |
2020/06/23(火) 22:41:51.81ID:Oi2DUy0P
とりあえず解いて他人の回答をみる
知らない内容があればググる
これの繰り返し
0891デフォルトの名無しさん
垢版 |
2020/06/24(水) 10:48:10.17ID:6+kkBVmV
>>887
細部を観る前にまずオブジェクト指向を理解するべき
0893デフォルトの名無しさん
垢版 |
2020/06/25(木) 00:55:35.66ID:Dxq2c9AW
あくまで競技プログラミングありきで C++ を導入したいってことならオブジェクト指向の考え方はそれほどいらんわな。
ただ、競技プログラミングで書かれてる C++ のコードってかなり汚いのばかりなので、
そこに特化しちゃうのはあまりオススメしないよ。
頻繁というほどではないが using int = long long; くらいのクソはちょいちょい見かける。

まともな書き方をわかった上で割り切り方を考えるとか、言語のトリッキーな部分に踏み込んでみるとか、
逆に言語はどうでもよくてアルゴリズムだけが大事とか考えてるなら競技プログラミングでスタートするのもありかもしれんが、
ちょっと C に毛の生えたくらいの C++ で競技プログラミングを始めると変なクセが付いちゃう。
0895デフォルトの名無しさん
垢版 |
2020/06/25(木) 07:59:46.82ID:XUZZkb7Y
競技プログラムに特化
いいじゃない

何からはじめても
どうせ将来業務や集団でコーディングすることになったら
文法以外に色々と勉強しなきゃならん
0896デフォルトの名無しさん
垢版 |
2020/06/25(木) 11:07:09.88ID:2XRewe5U
どうせ勉強するならへんな癖ついて手遅れになる前に
初めてやるときからオブジェクト指向やっとけって話だろ
急がば回れ
0897デフォルトの名無しさん
垢版 |
2020/06/25(木) 12:58:11.49ID:yb+enRFi
クローズドな場所でレースがしたいって人に
まず道路交通法を学べっていう感じ

トンチンカン
0898デフォルトの名無しさん
垢版 |
2020/06/25(木) 13:34:16.40ID:RBMnjR2N
いや道路交通法っていうよりサイドブレーキの使い方とか駐車の仕方って感じじゃね
0900デフォルトの名無しさん
垢版 |
2020/06/26(金) 13:00:51.86ID:PjbtVFt+
愚者は経験に学ぶ
賢者は歴史に学ぶ
0902デフォルトの名無しさん
垢版 |
2020/06/26(金) 17:38:59.84ID:twdaurbq
賢者と愚者から学ぶのか
0904◆QZaw55cn4c
垢版 |
2020/06/27(土) 03:53:16.94ID:5JNhQ0LT
>>900
誰の言葉なんでしょうか?大概は誰(チャーチルとかルーズベルトとか)という情報とセットで引用されるものなんですが、この言葉はそういうのがあまりないのはどうしてなんでしょうか?
0905デフォルトの名無しさん
垢版 |
2020/06/27(土) 07:12:11.81ID:cFqQOOIi
>>904
普通にググって出て来るけど?ほんまかどうかは知らん

https:/www.firstlogic.co.jp/blog/lab/aizawa/6243
>
「愚者は経験に学び、賢者は歴史に学ぶ」
鉄血宰相と呼ばれたオットー・フォン・ビスマルク(1815年−1898年)の言葉です。
0906デフォルトの名無しさん
垢版 |
2020/06/27(土) 07:29:38.76ID:QI4OAUXK
ちょいちょいC++関連スレで見かけるけど、実際に書いたり経験したりもしてない聞きかじりの知識で
マウント取りたいだけ、ってのを正当化するために使われてる気がする
0913デフォルトの名無しさん
垢版 |
2020/06/27(土) 08:59:57.53ID:DRe2glKb
つーかこの手の格言て日本語の意訳が過ぎるせいで
元の意味が失なわれてる事がちょいちょいあるけど
この「愚者は経験に・・」もそれで元のビスマルクの文言の意味はまんま >>907 の意味で
要するに「自分の経験のみで考えずに常に他者の経験を見聞きしてそこから学べ」という
意味だった
この他者の経験の集合の事を「歴史」なんつーて壮大な単語に集約しちゃったせいで
なんか「経験論で判断したらあかん、歴史書にあるような高尚な理論を学べ」
みたいな話になっちゃってるっていう
0914デフォルトの名無しさん
垢版 |
2020/06/27(土) 09:35:19.65ID:TsX0h7IG
ああやっぱり
そんなことだろうと思った

ムーアの法則もそんな感じ
違う意味で使われてしまった例
0919デフォルトの名無しさん
垢版 |
2020/06/27(土) 09:52:27.76ID:TsX0h7IG
経験が無い言い訳をするために
偉い人の言葉を変造して使う

経験の無い文系にありがちなこと
0920デフォルトの名無しさん
垢版 |
2020/06/27(土) 09:54:04.58ID:twDHZDh4
>>913
意訳が悪いというより、金言を字面通りにしか解釈できない奴が増えた(もしくは元から多い)ということが問題なんでないの?
例えば>>917みたいに。

>>900の意味を考えたら、愚者は「自分自身の」経験だけから学ぶのに対し、賢者は歴史というこれまでの多数の人間による経験の積み重ねからも学ぶという対比であることは分かりそうなものなのに、字面通りにしか受け取らない。

だから>>910みたいな頓珍漢なことも言い出す。
新たな技術を産み出すのは過去の積み重ねの上に、それをさらに発展させたり新たな発想などが必要になるだろうけど、この金言は別に学ぶことだけしていろと言う話をしているわけではない。ただ学ぶ対象は広い方が良いという話をしているだけなのに、何でわざわざ>>910のようなことを言い出すのだろう。
0925デフォルトの名無しさん
垢版 |
2020/06/27(土) 11:46:58.91ID:h6eax6A3
名言・格言・故事成語は枝葉や細部を切り捨てた理想的な空間だろ
その場その場に合わせたすっからカンのいいくるめだ
だから欧州も誰が言ったかに矢鱈と拘る

こういうのはマジで作り話で都合のいいことしか書いてない
虚偽のお話を信じさせられてるんだから虚構と現実のズレが生じる
0928デフォルトの名無しさん
垢版 |
2020/06/27(土) 15:49:00.82ID:QSLeN3Uh
>>921
むしろ
----vc2019.h----
#include <vc2017.h>
----
----vc2017.h----
#include <vc2015.h>
----
----vc2015.h----
#include <vc2013.h>
----
----vc2013.h----
#include <vc2010.h>
----
みたいなものを想像した
0929デフォルトの名無しさん
垢版 |
2020/07/03(金) 09:37:34.50ID:DB1hQWD+
表紙に一休さんみたいな男が写った専門書を見つけたのだけど、買うのためらった
0930デフォルトの名無しさん
垢版 |
2020/07/03(金) 11:41:58.59ID:OljhRJZm
UNIX公案なるものが存在するのでプログラミングを理解するには禅をやるのが早い
GEBでも公案の論理分解が行われてるくらいに当時のアメリカ西海岸では大麻と禅とLSDが流行った
0933デフォルトの名無しさん
垢版 |
2020/07/03(金) 17:54:47.73ID:6268sYfp
これで安全靴でミリタリー服でうろついてたら職務質問される罠
0934デフォルトの名無しさん
垢版 |
2020/07/05(日) 22:48:53.64ID:9WS3R3Fj
江添のやつはわかりにくくない?
0935◆QZaw55cn4c
垢版 |
2020/07/05(日) 22:58:40.95ID:UizTuhh+
>>934
私は好きです!
while (), do while (), for () をやる前に goto を導入し、「if () と goto があれば何でも出来る!」という潔さ!
0936デフォルトの名無しさん
垢版 |
2020/07/05(日) 23:00:31.75ID:9WS3R3Fj
include省略されるとちょっと
0937デフォルトの名無しさん
垢版 |
2020/07/06(月) 10:32:47.31ID:tZQ4aODX
include をおまじないと称してすっとばす解説は大抵糞
0941はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/07/06(月) 16:52:45.31ID:Js6m+wFY
俺はアセンブリから入ったタイプだからよりプリミティブな機能の
組み合わせとして理解するという方法論は結局のところわかりやすいというのはわかる。

でも展開形を意識してしまうようになると抽象化の感覚が育たないような気もしていて、
あらゆる意味で万能ってことはないので色んな本があることが大事なんだと思う。

江添亮のC++入門は継承すら取り扱わないレベルの入門という位置づけなので、
不足する分はより本格的な本を読む前提だろうし、まあこんなもんじゃないの。
0943デフォルトの名無しさん
垢版 |
2020/07/06(月) 19:04:52.45ID:Xx+iWxrn
結局どういう順序で勉強していけばいいんだろう
0944デフォルトの名無しさん
垢版 |
2020/07/06(月) 20:43:39.12ID:SSQMtz9B
>>943
一本道で過不足なく必要な物を順序通りに学べるような都合のいい方法なんてないから、ある程度は分からないものを保留して先に進んでから後戻りして理解したり、逆に順調に進んでると思ったら壁に突き当たって後戻りして不足部分を地固めし直してからまた先に進むなんてこともある。
それが当たり前だと思って最初は苦労するしかないと思うよ。ある程度なれてくれば、経験と勘で補いながら効率が上がっていくはず。
0945デフォルトの名無しさん
垢版 |
2020/07/06(月) 20:54:22.43ID:fLXZOc4N
二章からポインタの説明が始める入門書で勉強した。今思えば酷いサディスティック教本だったと思う。
タイトルが思い出せない…
0946◆QZaw55cn4c
垢版 |
2020/07/06(月) 21:27:01.83ID:YRpfyW1U
>>943
独習C++レベル、accelerated C++ レベル → C++98 STL本 レベル → 結城さんのデザパタを C++ に書き直す訓練 →C++11レイターを本格的に → テンプレートマジック本(今ここ) →積読している effective C++ とその兄弟たちはいつか読みたいものだ
0950デフォルトの名無しさん
垢版 |
2020/07/06(月) 22:57:43.86ID:juxBVe1k
アナルに挿入しながら「まだ・・まだ本体には挿入していないっ!
だからこれはセックスではない!」とか言うのと似てるなそれ
0952デフォルトの名無しさん
垢版 |
2020/07/07(火) 07:56:58.77ID:bJbvn87/
>>949-950
「大丈夫、パイプカットしてるから」みたいな感じかも。
break や continue を「去勢されたgoto」って喩えるじゃない。

if のネストが深くなるのは嫌だし、
関数からの早期returnも(デバッガで追うのが面倒になるので)ダメ、
goto なんかもっての外、という時に do {} while(0); でゴニョゴニョと。

で、コンパイラさんに「常に偽となる条件式です」とか警告されるの。
0953デフォルトの名無しさん
垢版 |
2020/07/07(火) 12:13:10.64ID:bEGKo5iM
>>951
はい、もちろん。
でもそれが2章でなくてもいいのかな、と。
出鼻くじく気満々やん、みたいな
0954はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/07/07(火) 13:48:51.21ID:tzlORGl2
>>953
選択肢があることが大事なんだって。

C の理屈だとビットパターンが並んだメモリ空間が広がっていてそこにオブジェクトを配置していくというモデルだから
ポインタを通してそこらを理解させるというのもひとつのやり方としてアリでしょ。
きちんとした理屈を後出しされると「先に言えや!」って気持ちになる人は少なくないと思う。
0955デフォルトの名無しさん
垢版 |
2020/07/07(火) 19:09:26.79ID:v3ijliVb
ポインターの何がそんなに難しいと感じるのかわからん
コンピューターの処理なんてアドレス操作ばっかりじゃん

コンピューターの仕組みがわかってないからなのかな?
ならば言語学ぶ前にコンピューターの仕組みを学ぶのが先じゃね?
0956デフォルトの名無しさん
垢版 |
2020/07/07(火) 19:39:25.64ID:aaXFzUCt
テスト問題にはポインタパズルとでもいうべきゴミみたいな問題が多いからね
わざわざ難しくして間違えるように幾重にも罠を張ったヤツ
そういうのでポインタ嫌いが増える
0957デフォルトの名無しさん
垢版 |
2020/07/07(火) 21:02:20.63ID:yByKJQAn
サイズ100を100個用意するより
サイズ10000を1個用意してアドレス割り振るとか好き
ポインタ変数分サイズ増えるのは目をつむる確保速度重視
0958◆QZaw55cn4c
垢版 |
2020/07/07(火) 21:28:33.53ID:7uEBIb8C
>>945
私は ** を使うくらいなら *& の方がマシだと思っているのですが、 *& で書いた本はまったくないですね…
0963はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/07/07(火) 23:17:48.32ID:tzlORGl2
>>962
そういうデザインのプログラムがあっても不自然だとは思わないが、
初心者向けでポインタの説明をする段階という前提を置くと参照と混ぜて示すのは混乱の元ちゃう?
& という記号の多義性がアレなのが根本原因ではあるんだが……。
0964◆QZaw55cn4c
垢版 |
2020/07/07(火) 23:21:02.99ID:7uEBIb8C
>>963
>初心者向けでポインタの説明をする段階という前提を置くと参照と混ぜて示すのは混乱の元
そうかもしれませんね

>& という記号の多義性がアレなのが根本原因
まあ、そうですよね…
0965デフォルトの名無しさん
垢版 |
2020/07/08(水) 08:50:17.72ID:sJ2uy93A
>>947-948
同じ人からの連続投稿、ひとつの質問だと気づかなかった。

マクロの実体を do {...} while (0) で囲む定型については
「#define do whole false」でネット検索すると色々出てくる。
この場で説明するには少々分量が多いのだ。
0966デフォルトの名無しさん
垢版 |
2020/07/08(水) 09:23:35.50ID:hADFKHgu
そのうち
#define HOGE(FUGA) do{...FUGA...}while(0);
と描いてしまって失敗する
0967965
垢版 |
2020/07/08(水) 18:00:01.90ID:sJ2uy93A
あ、もちろん whole は誤り while で検索してくれ。

× 「#define do whole false」
○ 「#define do while false」
0968デフォルトの名無しさん
垢版 |
2020/07/09(木) 20:13:12.08ID:gJQJWBxs
テキストファイルに文字列を書き込みしたいのですが

ofstream ofs("test.txt",ios::ate | ios::in);
ofs << "hoge" << endl;

これだと動いているんですが
最後のendlを無くして"hoge"のみを書き込もうとすると動作しません
どういった理由なんでしょうか?
0970蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/09(木) 20:22:54.18ID:2UhyUN9n
読み書きは時間がかかる処理だから、読み書きの前に、小さなデータは一時的にバッファという記憶域にまとめて
貯めておき(まあ、キャッシュと似たようなものだ)、改行などがあれば、押し流す(flush)という処理をする。
この場合はendlがflushの役割をする。
0972デフォルトの名無しさん
垢版 |
2020/07/11(土) 00:06:30.27ID:87hwO6K6
ポインタを初心者に完璧に理解させる方法分かったわ。
ポインタ=ショートカットアイコンと教えればいいんだ。

メモ帳に文字書いて保存して、ショートカットアイコン作って「これがポインタだよ」って言えばいい。
メモ帳の容量見てごらん?100kbでしょ?ショートカットアイコンの容量見てごらん?1kbしかないね。
ショートカット開いて。文章変えて。ほら1kbのデータで本体が変わった。これがポインタの仕組みだよ。

完璧
0976デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:03:46.07ID:J0INoyBc
ポインタの躓き処ってそういう場所じゃないから
0978デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:20:02.10ID:fm8o+adg
嬉々として大量に出題されるポインタパズルが難易度を無駄に押し上げてる
この時のアドレスは何か、変数は何かと、無駄に凝った問題を作り易いのがポインタの難点

テストのための問題を作る必要があって、そこではふるい落とす必要がある
全員100点じゃマズいと思ってる教師がいるからね
でも教育が成功したと言われる全員100点だとダメ
ここに現行教育の限界点がある
すると、問題難易度は加速しつつ急上昇する

しかも大して面白くもなんともない問題が製造される
穴埋めよりも酷いのが
0980デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:45:57.83ID:J0INoyBc
自称「教科書」が間違ってたりするからな
そういうミスリードが初心者をさらに混乱させてる
0982デフォルトの名無しさん
垢版 |
2020/07/11(土) 11:49:05.50ID:60oNEnIZ
高校生の教科書に
ニュートン力学は間違ってるとか
幾何光学は間違ってるとか
この世はユークリッド空間ではない
とか書いても混乱するだけ
0983デフォルトの名無しさん
垢版 |
2020/07/11(土) 12:12:13.44ID:J0INoyBc
>>981
百歩譲って厳密じゃないのを許すとしても
明らかな間違いは遺憾
0986デフォルトの名無しさん
垢版 |
2020/07/11(土) 16:23:26.53ID:60oNEnIZ
& * の多義性
複合型の記述方法
メモリ確保解放
ポインタの型と演算の結果の違い
const, volatile
0987デフォルトの名無しさん
垢版 |
2020/07/11(土) 20:36:15.52ID:87hwO6K6
わかってさえしまえば簡単至極なのに、これほど初心者に教えるのが難しいこともそうはないなw
配列や関数の戦闘アドレスの渡し方をわかりやすく出来てれば難しいと思えることもなかったかもしれない。
0990デフォルトの名無しさん
垢版 |
2020/07/11(土) 21:29:54.59ID:sGHMgavQ
チートコードはベースアドレスからの距離
ベースアドレスが変わってもチートコードは変わらない
ゲーム好きにはこんな感じか
0993デフォルトの名無しさん
垢版 |
2020/07/12(日) 10:26:26.21ID:NK7E+AG5
pythonのctypes使うときに役に立ってる
ctypes.POINTERとか謎仕様過ぎた
0994デフォルトの名無しさん
垢版 |
2020/07/12(日) 21:37:47.68ID:PErY82OB
C++って団塊ジュニアまでの言語って感じがする
これから爆発的に需要が伸びていく可能性なんてないよね?
0995デフォルトの名無しさん
垢版 |
2020/07/12(日) 21:51:26.17ID:dmFXGwc3
伸びるとかよくわからんが
今時のウェーイってしている言語にしたって、大抵コア部分のライブラリやらランタイムやらはcやc++で書かれているのだから

その言語のお客様で済む用途を越えて何かしようとしたら、出来ないと困るだろ
0996◆QZaw55cn4c
垢版 |
2020/07/12(日) 22:14:41.38ID:YoHAyY/u
>>994
世に存在する計算機言語の半分以上は C/C++ で記述されていたりするのです
0997はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/07/13(月) 02:47:06.70ID:vJz2FqxN
陣取り合戦をしているわけでもなし、
需要が伸びればいいってもんでもない。
重要なのは居場所を見つけるかどうかって話だと思う。

C++ が適切とは言えないけど C++ が比較的マシという理由で C++ が使われている
というのはよくあることで、新しい言語が出現してそういう分野を奪っていくこともある。
もともと C++ がイマイチだったところが消えるだけで、
どんどん衰退して消える運命ってほどのもんではない。
0998デフォルトの名無しさん
垢版 |
2020/07/13(月) 06:38:36.94ID:17o/9bhC
そろそろ次のスレッド…このスレッドが終わる前に告知を…。
俺は…ダメだ(がっくし)。
0999デフォルトの名無しさん
垢版 |
2020/07/13(月) 07:37:30.49ID:/O+2Yaja
1000なら次スレなし
1000デフォルトの名無しさん
垢版 |
2020/07/13(月) 07:53:41.77ID:V+zIL/Eb
のとおり
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 445日 0時間 59分 3秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況