- 1 名前:デフォルトの名無しさん mailto:sage [2018/12/28(金) 06:04:52.38 ID:ufThBpcD.net]
- エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう 半角空白やタブでのインデントはスレに貼ると無くなります コードを貼れる所 codepad.org/ https://ideone.com/ 前スレ 【初心者歓迎】C/C++室 Ver.103【環境依存OK】 https://mevius.5ch.net/test/read.cgi/tech/1530384293/
- 577 名前:デフォルトの名無しさん mailto:sage [2019/02/25(月) 17:39:50.14 ID:ubojwQhV.net]
- 確かに、関数内で作ったローカル変数だけデフォルト変更可能、
他所から持ちこんだ、ポインタの先や参照、グローバル変数へのアクセスは 基本的に読み出しのみ許可で、明示した場合だけ変更できる、なら 「勝手に書き換えたのは誰だ!?」ってバグは減りそうだね。
- 578 名前:デフォルトの名無しさん mailto:sage [2019/02/25(月) 18:51:13.68 ID:y5m/9TYH.net]
- >>577
ああ、それなかなかいいかも
- 579 名前:デフォルトの名無しさん mailto:sage [2019/02/25(月) 20:42:12.40 ID:lqvZQt+c.net]
- そうそう、だから普通にC++書いてる人は
とりあえず引数に全部 const つけるでしょ それはそういうことだよ
- 580 名前:デフォルトの名無しさん mailto:sage [2019/02/25(月) 20:44:41.85 ID:x+rkal0w.net]
- 引数じゃなく method の const は後悔することがちょいちょいと
class foo { public: void method() const; };
- 581 名前:デフォルトの名無しさん mailto:sage [2019/02/25(月) 20:50:25.72 ID:1EOktSCH.net]
- constつけときゃいいってのもなんか胡散臭い印象しかないな。
そんなことよりも変更や生成を行う場所、タイミングを局所化するってのが本質だと思うが。
- 582 名前:はちみつ餃子 mailto:sage [2019/02/25(月) 20:56:50.13 ID:LzC1voP1.net]
- const が必要なところに付けるって考えるよりは
const では駄目なところでは外すという考え方の方が 安全っぽいという話であって、 適切に使い分けろというのは大前提のことだってことは補足しておく。 const が当たり前だって気持ちになると 変更が必要な個所は自然に局所化されるでしょ。
- 583 名前:デフォルトの名無しさん mailto:sage [2019/02/25(月) 21:58:02.00 ID:rMTHv0xs.net]
- const連鎖くらったらほどほどでいいやと思うようになる
- 584 名前:デフォルトの名無しさん mailto:sage [2019/02/25(月) 22:14:33.44 ID:1EOktSCH.net]
- なんというかもう修正が一切されないコードしか想定してない印象を受ける。
- 585 名前:デフォルトの名無しさん mailto:sage [2019/02/25(月) 22:37:43.55 ID:rMTHv0xs.net]
- やりすぎオブジェクト指向といっしょで
事故起こりにくいとこでこだわっても変更に弱くなるだけ
- 586 名前:デフォルトの名無しさん mailto:sage [2019/02/25(月) 22:51:58.14 ID:ki6l711j.net]
- 複雑怪奇で理解不能にしておくと、
変な改造されないで済む
- 587 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 00:51:25.18 ID:wcHiR3Ib.net]
- 初心者で申し訳ないんですが、c/c++を学ぶため何か作りたいのですが、cで作る意味のあるいいお題はないでしょうか。JavaやC♯、rubyは一通りかける感じですがcはmallocなど知ってはいても使ったことはないレベルです。よろしくお願いします!
- 588 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 01:02:30.50 ID:Ujo6lghI.net]
- >>587
ビットマップ画像を読み込んでブラーをかけてビットマップ画像として出力
- 589 名前:はちみつ餃子 mailto:sage [2019/02/26(火) 01:30:28.38 ID:azIRgqwp.net]
- >>587
いきなり「実務的な」プログラムを書くのはオススメしないよ。 C/C++ には歴史的経緯によってクソな落とし穴と「未定義」がたくさんあるので、 たとえ期待通りに動いたとしても正しくないプログラムであることは多い。 初心者向けのしょうもない (他の言語でやる入門と大差ないような) 題材で小さなプログラムを書いて ブログとか Qiita とかに書いておけばベテランがよってたかって指摘してくれるさ。 そういうので基本的な落とし穴くらいは理解してから進んだ方が良いと思う。
- 590 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 01:35:07.18 ID:F6jD76wH.net]
- HDDの中を検索するプログラムとか、整理するプログラムとか
こういうのがあったら便利だなっていう物を考えて作ってみる 途中分からなくなったら、ここに相談に来ると良い 親切な人が教えてくれる、かもしれない あてにはしないこと
- 591 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 01:49:53.01 ID:2prSgTvN.net]
- おっさんらジイさんらの世代だと
「こういうのあったら便利だよな」と思って作りはじめるパターンは有効だったけど 今はそういうの探したらほとんどあるからある意味不幸だよな しかも自分で作ってたらとてもここまで作ってるヒマないっていうぐらい高機能なのが多いし
- 592 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 01:50:17.99 ID:wcHiR3Ib.net]
- >>588
>>589 >>590 ありがとうすごく参考になりました。デスクトップランチャーとかほしいと思って作るならWPFだし、Cで実用的なほしい物ってむつかしいんですよね。初心者向けの小さなプログラムは上記のブラーとかでしょうか?Cで書く意味がある題材ってわからなくて。。。
- 593 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 01:59:04.98 ID:H+xdnOpD.net]
- >>592
そもそも自分がC/C++を身につける意味があるかというとこらから見直した方がいいのでは? 直ちに必要な訳ではないが将来的に身に付けたいというなら、先に他の人が言っていたようにいきなり実用的なプログラムから入るより練習問題レベルの小品をコツコツ作っていった方がいいと思う。
- 594 名前:はちみつ餃子 mailto:sage [2019/02/26(火) 02:00:19.43 ID:azIRgqwp.net]
- どうしても自分が欲しくて既存のものがないってケースでも、
既存のものをバッチファイルで繋げればできるって程度のものだったりするもんな。 そういう意味じゃ、日常ではスクリプト言語の方が使うことが多いとは思う。 俺が一番最近に書いた C のプログラムもスクリプト言語の拡張パッケージだし。
- 595 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 02:19:19.20 ID:F6jD76wH.net]
- >>592
例えば容量の大きなHDDだと、同じファイルが複数場所にあったりするじゃない? そういうのを見つけて、チェックした後削除すれば容量節約という実利もあるよ
- 596 名前:はちみつ餃子 mailto:sage [2019/02/26(火) 02:22:08.89 ID:azIRgqwp.net]
- >>592
C/C++ で書く意味ということに最初は拘らなくてよいと思う。 こだわらなくてもプログラムの構成の仕方、書き方には確実に違いがあるから、 むしろ比較しながら学んだ方がいいかもしれない。
- 597 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 02:40:55.07 ID:OTQ63qDn.net]
- C/C++使う必要性がわからないならやらないのが正解
今だにこんなクソ言語使ってるのはそれしか選択肢がないから あるいは物好きな言語マニアか
- 598 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 03:33:39.99 ID:belfWXD5.net]
- 先に他の言語やらんとC++の必要性はわからんと思う
- 599 名前:588 mailto:sage [2019/02/26(火) 08:48:58.01 ID:+14u2RP+.net]
- こんなにレスもらえると思いませんでした、他の言語スレや板だともっと殺伐としてます。。。ありがとうございます。
低レイヤを高速で処理できるのが魅力だと思うので最終的には任意のパケットを送受信できるデーモンを作りたい。ので、>>595のいう同名ファイル検索デーモンから始めようと思います。
- 600 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 09:06:06.17 ID:OTQ63qDn.net]
- ならechoサーバーから入ってhttpサーバーという定番ソケットプログラミングコースもおすすめ
まぁでもその検索デーモンとやらでファイルの扱い勉強してからでいいだろうな 高速化に興味あるならC/C++の標準ライブラリでなくOSのnativeのapiを積極的に使うのもいい ファイルならメモリマップドファイルを使ったり(ファイル名調べるだけなら不要だけど) 他には検索アルゴリズムに凝る方向とかね
- 601 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 11:48:20.70 ID:9FjD9aLm.net]
- >>599
同じファイルというのをどう判定するかだな ファイル名なのかハッシュ(中身)なのか
- 602 名前:デフォルトの名無しさん [2019/02/26(火) 14:41:46.79 ID:8+7ktUtN.net]
- globalに宣言されてる変数と同じ型同じ名前で
関数内にlocalに宣言されたものがあるとき 警告出してくれるオプションって何だっけ
- 603 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 16:05:20.40 ID:5MxkS3P7.net]
- >>599
なんで、そんな面倒くさい事をしなきゃならないんだ? Ruby なら、PowerShell から、1-liner で、 Rubyで作られた遅いウェブサーバー、WEBrick が起動する ruby -run -e httpd . -p 8080 そのフォルダに、index.html があれば、 何も考えなくても、これでブラウザからアクセスできる localhost:8080
- 604 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 16:39:31.27 ID:2RZ4BMiv.net]
- >>603
お前は相手の意図を理解する気がまったくなく、人とのコミュニケーションができないことをさっさと理解して、巣にかえって閉じ籠っていてくれ。 ここはお前に用がある奴は一人もいない。
- 605 名前:588 mailto:sage [2019/02/26(火) 17:33:10.46 ID:+14u2RP+.net]
- みなさんありがとう
今日は会社で暇だったのでコピペベースながらUDPで任意のメッセージ送受信出来るようになった ヘッダでincludeする構造体って宣言済みのクラスみたいな感じで使えることを理解しました。(udphdrを使わずにsendしたからか、送れたけどudpチェックサムは自動で計算されなかった) tcpは、というかhttpサーバは難しそうですが頑張ります!
- 606 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 17:44:16.64 ID:MNG9zBp3.net]
- >>602
gcc/clang だと -Wshadow だな。 -Wall -Wextra とは別に指定する必要があるようだ。 細かいことを言えば、同じ型でなくても、名前が隠される場合は警告が出る。 今ネットで調べて確認、これからオイラも使うことにする。
- 607 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 23:22:44.06 ID:8Je4SUY+.net]
- 同じ意味だけど型が違うときの変数名ってどうされてますか?
いつも困ってます。 例) float2 fPos( 1.0f, 2.0f ); XMFLOAT2 fPos( fPos.x, fPos.y ); ←当然同じ名前は×
- 608 名前:デフォルトの名無しさん mailto:sage [2019/02/27(水) 07:11:30.50 ID:tay7IMIk.net]
- >>607
float2でfPosって付けてるならXMFLOAT2ならxPosとかでいいと思うが…
- 609 名前:デフォルトの名無しさん mailto:sage [2019/02/27(水) 07:53:03.71 ID:3Jl+ieqT.net]
- >>607
よくシステムハンガリアンは悪と言われるけど、この例のように同じ内容で型名の違いに意味がある場合は、型名に関するプリフィックスをつければいいんでない? とあるライブラリに渡す境界部分ならそのライブラリ名に関するプリフィックスとか。
- 610 名前:デフォルトの名無しさん mailto:sage [2019/02/27(水) 19:12:35.49 ID:8imVoWCJ.net]
- 初心者ですみません、こんなコードをみたのですが2点わかりません。
char packet[1500]; memset(buf, 0, sizeof(buf)); ether_header *eh; eh = (struct ether_header *)packet; たぶん、1500byteのメモリを確保して0埋め、ether_header構造体のポインタを宣言してpacketのアドレスを渡す、としたいのだと思います。 分からないのは0埋め対象が宣言されていない変数bufであること、packetのアドレスを渡すのにわざわざether_header型のポインタにキャストしている2点です。よろしければ教えてください。 https://qiita.com/marufeuille/items/81f323a52a6fd3bd530c
- 611 名前:さまよえる蟻人間 mailto:sage [2019/02/27(水) 19:18:47.40 ID:AjY/hWvK.net]
- bufはpacketの間違いか? 多分。
- 612 名前:デフォルトの名無しさん mailto:sage [2019/02/27(水) 19:25:41.76 ID:uRVYM9rZ.net]
- キャストしてるのはwarning回避じゃないか?
- 613 名前:デフォルトの名無しさん mailto:sage [2019/02/27(水) 19:41:57.94 ID:vHAcjSp1.net]
- >>610 の引用元を見るとコード片だから、実際にはコンパイルしてないんだな。
char packet[1500]; memset(buf, 0, sizeof(buf)); は、packet と buf が同じもので、正しくは char packet[1500]; memset(packet, 0, sizeof(packet)); なんだと思う。最初は両方とも buf と書いてあったけど 「もっと自ら語る変数名にしよう」と packet に変えたはいいが、 memset() の方では直し忘れた、というお話かと。 (struct ether_header *) のキャストは、コンパイラの警告対策だな。 …って言うか、これキャストしないでも警告だけで通るのね。
- 614 名前:デフォルトの名無しさん mailto:sage [2019/02/27(水) 19:48:31.45 ID:cPR259KO.net]
- やってきたパケットのうち 頭のEthernet Header にフォーカスしてる意図でのキャストかな?
最終的には char [1500] で受け取ったパケットの配分を(パディング無しで) struct TCPpacket { Ethernet_Header eth; IP_Header iph; TCP_Header tcph; char* TCP_payload[]; /* 末尾可変サイズ */ }; に配分したいんだろうけど、手を抜くなら union にしそうだわ union Packet { struct TCPpacket tcp; char* packet[1500]; };
- 615 名前:603 mailto:sage [2019/02/28(木) 00:25:33.39 ID:OS/9xoBt.net]
- >>608
>>609 ご提案ありがとうございます! 何らかのプリフィクスで識別が妥当そうですね。 ローカル名前空間みたいな概念があると便利そうですが・・・。 local namespace XM { XMFLOAT2 fPos; } float2 fPos( 1.0f, 2.0f ); XM::fPos = { fPos.x, fPos.y };
- 616 名前:デフォルトの名無しさん mailto:sage [2019/02/28(木) 09:35:29.75 ID:KtBFXYBy.net]
- どうせ長ったらしい関数書いてんだろ
それがそもそもの間違い
- 617 名前:デフォルトの名無しさん mailto:sage [2019/02/28(木) 12:25:31.13 ID:o9FaNCnF.net]
- >>611
>>612 >>613 ありがとう、cがとんでもなく難しい言語かと誤解するところだった。
- 618 名前: mailto:sage [2019/02/28(木) 20:15:42.34 ID:FII1Vkt+.net]
- >>587
https://mevius.5ch.net/test/read.cgi/tech/1549160513/ にお題がいっぱい転がっています…
- 619 名前:デフォルトの名無しさん mailto:sage [2019/02/28(木) 22:42:25.23 ID:chn/XevV.net]
- いやーCは簡単な言語だけどC++はとんでもなく難しい言語だと思うぞ
解説本が電話帳より分厚いなんてな自然言語超えてる
- 620 名前:デフォルトの名無しさん mailto:sage [2019/02/28(木) 22:46:25.10 ID:UN7NGNSN.net]
- そんな解説本あるのかw
- 621 名前:デフォルトの名無しさん mailto:sage [2019/02/28(木) 23:11:49.78 ID:LM7UlKO7.net]
- それはあいつが悪いだろ‥
- 622 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 00:09:02.27 ID:TIzWjpCx.net]
- しかも、言語仕様の改訂が3年ごとと早すぎて、
邦訳解説本はもちろん、原書でもリリースがおいつかず、 仕様改訂を繰り返すたびについてこれないユーザーをふるい落とす恐るべき言語 仕様改訂の世代を重ねるごとに中国以上の人口減少率でユーザー数が減少する既に終わった少子化言語ww
- 623 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 01:01:16.39 ID:SPEgyt6t.net]
- なんか皆C++はむずかしいむずかしいっていうが、そんなむずかしいか?
俺的には今時のECMAScriptと各種フレームワークの使い方のほうがよほどむずかしい。 2、3年もすると何だかイノベーションがどうのこうのいってまるっきり別物のコンセプトのがでてくるし・・。 C++なんて基本概念はもう何十年もかわらんだろ。あとはその都度必要なstlとかの機能覚えればいいだけ。 楽なもんだよ。
- 624 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 01:51:54.22 ID:ejlMN09K.net]
- 今何も見ずにラムダ式書ける?
- 625 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 01:55:24.44 ID:aAd1thXX.net]
- 有名所のライブラリでラムダ式使ってるの見たことない
- 626 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 06:22:49.33 ID:TGgsjFNR.net]
- 『プログラミング言語C++』第4版は電話帳より厚いね。
あれは解説書だよな。1300ページ以上ある。 ちょうど新しい電話帳が届けられたばかり。 田舎住まいだから都市部に比べて電話帳が薄いってこともあるけど。
- 627 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 07:01:09.26 ID:TGgsjFNR.net]
- C++は新しい言語仕様が次々に追加されるせいで、
同じ細かな処理をするにも人によって書き方が色々になって、 「同じ言語で同じ処理をしてるはずなのにソースは似ても似つかない」 「自分で書くには便利だけど、他人の書いたプログラムは読み解けない」 てな状況になってるんと違うかな。 わざわざストラウストラップ先生が「言語の全部を知らなくても、 徐々に理解しながら使えばいい」と書いてくれてるけど、 他人のソースを読む際には役に立たないアドバイスだよね。
- 628 名前:デフォルトの名無しさん [2019/03/01(金) 13:03:30.11 ID:ozM8zBQ9.net]
- >>619
CもC++も仕様は簡単 ライブラリやアルゴリズム考えるのが面倒で生産性が低いだけ それを難しいと勘違いしてるだけ
- 629 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 13:21:26.51 ID:5w/5u0Tx.net]
- こういうc++の危険さをまったく認識できてないやつが一番困る
std::forwardの意義を誰にでもわかるように説明してみろよ
- 630 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 15:52:20.02 ID:3z2kkMi4.net]
- C++11以降とそれ以前で違い過ぎるのが問題では?
- 631 名前:はちみつ餃子 mailto:sage [2019/03/01(金) 16:02:10.84 ID:Vq7maKYR.net]
- >>627
「徐々に理解しながら」は、 C を既に知っている人を明らかに想定していて、 今では C がそんなに支配的でもないという状況を思うと適切な動線とは言えないという意味でも あまり役に立たなくなってきていると思う。 ただ、追加された機能を見ると、 新しい書き方の方が間違い難くて綺麗で一貫していることが多いので、 肥大化するから追加するのをやめろとも言い難いんだよな……。
- 632 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 16:17:07.89 ID:yZJ4Zkhu.net]
- 皆、ドワンゴ江添亮の本を読んでいないから、C++ の恐ろしさがわからないのだろう
詳細を突っつくと、無限にややこしいものが出てくるw だから江添でさえ、詳細は省略しますって書いてあるw >>614 1バイトずつ、check sum を計算するような場合は、そういうように、union にするのが定番
- 633 名前:デフォルトの名無しさん [2019/03/01(金) 17:25:35.13 ID:tC4m5Wn4.net]
- ●ワンゴ倒産の危機わろすω
- 634 名前:588 mailto:sage [2019/03/01(金) 17:56:26.55 ID:VPz6Y2H0.net]
- udpパケットを送れるようにはなったのですが、wiresharkで確認するとudpフレームのchecksumが未定義となっていました。。。
そこで1からやりなおしたいのですが、ソケットはrawで開くべきなのでしょうか。いまはudpなのでdgramで開いてsockaddr_inのインスタンスをつかってsendtoしています。
- 635 名前:デフォルトの名無しさん [2019/03/01(金) 18:11:15.15 ID:a4IFMTFx.net]
- checksum計算して値入れてから送れよ
- 636 名前:デフォルトの名無しさん [2019/03/01(金) 18:18:10.83 ID:6LDVvTwi.net]
- enumについて教えてください
enum { ..\..\VAL1, VAL2 }; このような書き方でコンパイルが通る環境はありますか? case ..\..\VAL1: というのも許される環境はありますか? c/c++
- 637 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 18:57:53.08 ID:p6eROYwf.net]
- よくわからんが、識別子の定義を変えたいということか?
- 638 名前:632 mailto:sage [2019/03/01(金) 19:04:29.12 ID:6LDVvTwi.net]
- どこかで見た覚えがあります
- 639 名前:588 mailto:sage [2019/03/01(金) 19:14:27.70 ID:VPz6Y2H0.net]
- >>635
調べた方が足りませんでした、NICのTCP offloadingという機能が有効になっていたせいで、NICより手前でキャプチャするとunverifiedとなっているようです。大変失礼しました。
- 640 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 19:23:28.99 ID:HVxvwZsK.net]
- >>623
>今時のECMAScript いや、ハードウェアに固定されたバイナリーですらなく、ソフトウェア上で決められた決め事になんら意味を見出せないのですが、それでも javascript とかに熱意を抱けるコツがあったら教えてください
- 641 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 19:25:06.34 ID:HVxvwZsK.net]
- >>633
いいかげんにニコ動をなんとかしてほしいです、昔も重かったけれども今も重い、これはなんとかならないのですか?
- 642 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 19:27:08.91 ID:YTopxKYT.net]
- >>640
>>623の書き込みのどの部分を読んでその質問がでてきたんだ?なんかバグってね?
- 643 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 21:35:36.90 ID:Y8fj+4tW.net]
- 引数のmove受け一つとってもrustの3倍くらい難しくなってるわな。
シンタックスが特殊だし、オーバーロードはされるわ、特殊な右辺値に対してのみ動作するとか 根本からおかしい。
- 644 名前:デフォルトの名無しさん mailto:sage [2019/03/02(土) 09:08:32.90 ID:NYNVQHNm.net]
- 物作った事の無い人の重箱の隅つつき+詳細未記載本なんて
時間の無駄だというのが良くわかった。 石田晴久の通信プログラムとか技術書展の方がマシ
- 645 名前:デフォルトの名無しさん mailto:sage [2019/03/02(土) 11:46:55.44 ID:jZcAiOx4.net]
- ソース書くときに気を付けるのはとにかく引き継ぎしないといけなくなったときに楽になるようにって点かな。
上から読み下していったときにわかりやすければなんでもいいと思ってる。
- 646 名前:デフォルトの名無しさん [2019/03/02(土) 12:38:56.25 ID:+L4gK20K.net]
- 構造体で例えば
struct POINT{ int x, y; }; があるとき struct POINT p = {1, 2}; と定義と代入を同時に出来ますが 一度代入したものを後から書き換えるとき p = {3, 4}; と書くとエラーになるみたいで p.x = 3, p.y = 4; と書かないといけないのが面倒です 先生なんとかなりませんか?
- 647 名前:デフォルトの名無しさん [2019/03/02(土) 12:45:48.83 ID:+L4gK20K.net]
- ああできた
p = (struct POINT){3, 4}; これでいけました
- 648 名前:デフォルトの名無しさん mailto:sage [2019/03/02(土) 13:27:28.31 ID:NYNVQHNm.net]
- 構造体一括代入はANSI以降の機能だからOS/9とかCP/M68K
のC言語では当然のように動かない
- 649 名前:デフォルトの名無しさん [2019/03/02(土) 13:49:52.82 ID:+L4gK20K.net]
- C++だと
p = POINT(3, 4); もいけるかな
- 650 名前:デフォルトの名無しさん [2019/03/02(土) 13:50:54.37 ID:+L4gK20K.net]
- >>648
たぶんそうだったと思います ありがとうございます
- 651 名前:はちみつ餃子 mailto:sage [2019/03/02(土) 14:04:36.97 ID:tMatklv8.net]
- >>649
C++11 以降なら p = {3, 4}; でもいけるよ。
- 652 名前:デフォルトの名無しさん [2019/03/02(土) 14:07:27.41 ID:kDivPjLV.net]
- 片山さんは何で改名したんですか?
- 653 名前:デフォルトの名無しさん mailto:sage [2019/03/02(土) 16:04:24.12 ID:uz1yhwTy.net]
- C の p = (struct POINT){3, 4}; は、構造体の一括代入に違いないけど、
(struct POINT){3, 4} の部分が「複合リテラル」compound literal だから 使えるのは C99 以降だね。
- 654 名前:デフォルトの名無しさん mailto:sage [2019/03/02(土) 16:10:37.25 ID:EmfZa2jP.net]
- >>647
理由が"面倒"だったのに、文字数増えてるよねそれ
- 655 名前: mailto:sage [2019/03/02(土) 16:12:43.27 ID:Ud+LwFnR.net]
- >>653
これは、C++ に合わせてほしかったな、と思うのです
- 656 名前:デフォルトの名無しさん [2019/03/02(土) 21:57:47.90 ID:nqwTLRnH.net]
- >>654
要素数によるやろ
- 657 名前:デフォルトの名無しさん mailto:sage [2019/03/03(日) 10:43:47.19 ID:lzyzpNmU.net]
- C++の規格で使いたいならC++使えで
- 658 名前:デフォルトの名無しさん mailto:sage [2019/03/03(日) 10:52:31.28 ID:BbxzBxVK.net]
- c++の規格って言ってもその辺、c++のいつの規格だよって話になるんじゃないの?
- 659 名前:デフォルトの名無しさん mailto:sage [2019/03/03(日) 12:23:44.49 ID:eB5he6fi.net]
- >>633
会社の売り上げに貢献せず、警察を提訴するような キチガイ高卒社員が資産食い潰してるんじゃね?wwww
- 660 名前:デフォルトの名無しさん mailto:sage [2019/03/03(日) 12:30:17.98 ID:eB5he6fi.net]
- >>626
すでに3版でも電話帳より厚いよ まともに読む気になるのは2版までだな。 熱意あるうちはともかく、ふと我に返ると俺何してんだろって。 そんで、言語覚えただけじゃプログラムてかけないしな。
- 661 名前:デフォルトの名無しさん mailto:sage [2019/03/03(日) 12:36:20.23 ID:0vjeZZiI.net]
- C++でまともなWebサービス作れるエンジニアなんて相当単価高そう
もうオワコン動画の便所掃除やりたがる奴なんていないだろうし
- 662 名前:デフォルトの名無しさん [2019/03/03(日) 14:17:56.07 ID:ilhG1tLW.net]
- オワンゴとは良く言ったものだな
- 663 名前:はちみつ餃子 mailto:sage [2019/03/03(日) 14:31:57.32 ID:XzFmXWmd.net]
- サービスを書くのに C++ の比率は高くないかもしれんが、
サービスを支えるインフラには C++ を使うことだってあるだろう。
- 664 名前:デフォルトの名無しさん [2019/03/03(日) 15:36:52.66 ID:WlpYxc7g.net]
- 普通はJavaじゃなかろうか。
- 665 名前:デフォルトの名無しさん [2019/03/03(日) 15:58:13.68 ID:E4UxtVYi.net]
- Javaは糞
- 666 名前:デフォルトの名無しさん [2019/03/03(日) 16:24:07.50 ID:D2G4oQ9F.net]
- 副業解禁で激変する若者世代とマネージャー世代のキャリア観
https://www.businessinsider.jp/post-107782 フリーランスの職種20個の仕事内容と平均年収をわかりやすく解説 https://www.proof0309.com/entry/shokushu 時給1万円のバイトも。会社員向きのプチ副業を、“バイト芸人”が教える https://headlines.yahoo.co.jp/article?a=20190226-00127948-bizspa-bus_all 副業が「会社にバレる人」と「バレない人」の大差 https://headlines.yahoo.co.jp/article?a=20190303-00268007-toyo-bus_all 正社員の10%以上が副業 中には過重労働で体調崩す人も https://headlines.yahoo.co.jp/hl?a=20190227-00010000-wordleaf-bus_all 「副業で年2000万円稼ぐ男」に学ぶキャリア戦略 https://headlines.yahoo.co.jp/article?a=20190221-00266856-toyo-bus_all 加速する「副業社会」正社員の4割が「副業したい」 気になる収入はどれくらい? https://headlines.yahoo.co.jp/hl?a=20190218-00010001-danro-life おすすめ副業22選を現役フリーランスが解説【在宅も可能】 https://www.proof0309.com/entry/zaitaku-hukugyou 会社を辞めてフリーランスで働きたいあなたが知っておくべき10のこと https://www.businessinsider.jp/post-165731 フリーランスと会社員、働き方の根本的な差 広がる「雇用されない働き方」の課題とは何か https://toyokeizai.net/articles/-/263055 フリーランス人口は増える!今後は仕事もプロジェクト単位になる!? https://freelance.mts-career.com/population/
- 667 名前:デフォルトの名無しさん mailto:sage [2019/03/03(日) 16:40:10.01 ID:QDmbu/k4.net]
- 言語を使う側なのに、大声でJavaは嫌い()
- 668 名前:デフォルトの名無しさん mailto:sage [2019/03/03(日) 23:12:33.70 ID:PvgSI+1g.net]
- >>633
焼そば屋?
- 669 名前:デフォルトの名無しさん [2019/03/04(月) 04:52:56.59 ID:DAN4+o0x.net]
- 「困った」と
「助けたい」をマッチングする 新たな出会い系アプリか?
- 670 名前:デフォルトの名無しさん mailto:sage [2019/03/04(月) 21:58:39.97 ID:jKyydNU9.net]
- 最近はスノボにご熱心。
- 671 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 04:05:49.01 ID:/9uzsfIc.net]
- まあJavaは糞これは間違いない
Java使うぐらいならC#使うほうが10倍まし
- 672 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 06:49:23.03 ID:O5wD/kWC.net]
- そんなことあるわけない
100倍は違う
- 673 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 06:58:59.78 ID:kisxcMe6.net]
- Javaはコボラーと同じく湿った猫のような臭いがします
- 674 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 14:00:13.11 ID:CkJINn0N.net]
- Java並に大規模な開発事例ってC++にはあるの?
- 675 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 15:25:41.23 ID:fIhIM0AX.net]
- Windows
- 676 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 17:12:45.41 ID:YmAHbq9k.net]
- >>674
人月商売をやってるだけで大規模()とは言わない Linuxカーネルほど大規模なのはJavaではない
- 677 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 17:33:37.15 ID:/9vlYliD.net]
- LinuxカーネルってCじゃないのか?
- 678 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 17:42:59.75 ID:zQd5qKqX.net]
- javaって大規模なの?
- 679 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 18:51:08.44 ID:t42KPL8W.net]
- unreal engineとかクッソ大規模に見えるけどどう?
- 680 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 19:03:00.43 ID:fIhIM0AX.net]
- 工数でいえばそんなもんクフ王のピラミッドには遠く及ばないだろう
- 681 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 19:03:04.57 ID:VOhJ9aa0.net]
- そもそもjreの基幹部分とかc++だろ
- 682 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 19:33:34.31 ID:5rQQuIbo.net]
- クフ王のピラミッドがなんか関係あるのか?
- 683 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 19:57:12.64 ID:RSECco33.net]
- 甘い
甘いなぁ 人月換算だと同じだよ 死者数すらも一致してる
- 684 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 22:23:27.02 ID:kisxcMe6.net]
- 20年前で70万ステップぐらいでビルドに1Hぐらいだったなあ
- 685 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 00:39:47.70 ID:oR6mPeK7.net]
- むしろ>>674が思う大規模なjavaプロジェクトを知りたい
- 686 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 00:47:13.50 ID:URVwFrjm.net]
- 人数かけて、webページの遷移ごとに別人が開発して、似たような処理をするコードが100倍くらいに膨れ上がって収集つかないようなのが大規模なんじゃね
- 687 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 02:24:32.10 ID:bd8igJ/M.net]
- そう言われると、それまさにコボルだなw
- 688 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 09:21:38.79 ID:Bk9kaTOY.net]
- コボル島ってどっかになかったっけ
- 689 名前:デフォルトの名無しさん [2019/03/06(水) 09:50:15.63 ID:mg6kC0Yg.net]
- c++じゃなくてcでnamespaceって使えますか?あるいはnamespace相当の機能ってどうすれば実現出来ますか?
- 690 名前:デフォルトの名無しさん [2019/03/06(水) 09:53:13.16 ID:mg6kC0Yg.net]
- 重力波を検出するのに世界中の電子望遠鏡を接続してリアルタイムに通信してるようだけど
ああいうシステムのコードって何で書かれてるの? FORTRAN ?
- 691 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 10:10:00.89 ID:TjQtzcPT.net]
- >>689
cでは使えない ほぼ上位互換だからc++使えばいいじゃん
- 692 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 11:25:59.41 ID:1+PBsWw4.net]
- >>690
マジレスすると、ああいうのはファイルに落として時々バッチ処理してるだけ 言語はだいたいFortranかC++が多いだろうね
- 693 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 13:12:20.46 ID:+Sk++sfs.net]
- C++だけは絶対にないな
- 694 名前:はちみつ餃子 mailto:sage [2019/03/06(水) 13:15:53.62 ID:7/fqDaVy.net]
- そうか。
- 695 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 23:36:07.84 ID:rIL6SiiZ.net]
- std::chronoにnanoseconds取り扱う型があるけど
これってwindowsでもナノ秒の精度ちゃんと取り扱えるの?
- 696 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 23:39:51.80 ID:NglcYyrq.net]
- c++11以降はあれ明らかに生産性下がってんだろ。。
誰か本当のことを言ってやれよ。。
- 697 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 23:41:05.32 ID:ARyk7IvZ.net]
- 構造化束縛はありがたい
- 698 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 23:42:11.68 ID:TjQtzcPT.net]
- >>695
自分で試してみたら?
- 699 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 23:52:49.64 ID:07omsi5c.net]
- >>695
表現できるだけ 計測できるとは言っていない
- 700 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 04:25:32.55 ID:hEEon6In.net]
- じっさいにやったらわかるが、結局 Windows API の持ってる精度までしかでない
あたりまえっちゃーあたりまえだが
- 701 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 05:42:28.93 ID:mVKClUMz.net]
- >>698
試そうと思ったらどう試すのがいいんだ?
- 702 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 06:28:12.40 ID:beHWBAJY.net]
- 短時間、というか連続で何度も時刻の値を入手して、
値の下の方の桁がかならずゼロ並びになってるとか、 時刻同士の差を取って、ある値より小さな数が出ないことから、 解像度の見当を付けるくらいかな。 もっと良いやり方を知ってる人は教えてください。
- 703 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 09:17:09.23 ID:0XBNAuOg.net]
- 差をとってその偏差を見ればいいんでは
高解像度タイマーならたぶんcpuのクロック程度の解像度じゃないの パフォーマンス測定に普通使うし 個人的にはchrono使わずにosのapiかコンパイラの組み込み関数使う そっちの方が信頼できるし、chronoは型がガチガチすぎて面倒くさい
- 704 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 09:44:34.06 ID:MJ46GSxE.net]
- アナログ出力してオシロで確認
- 705 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 19:42:23.39 ID:41TL6wBf.net]
- std::vectorの最初の要素数は
std::vectro<foo> bar(12); みたいにコンストラクタで指定できますが、同様に std::vector<std::vectro<foo>> bar のように入れ子になったvectorの両方の要素数をコンストラクタで指定する方法はありますか?
- 706 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 20:10:03.40 ID:rioBJ/QG.net]
- 結構難しいと思うがね。
最近のCPUはターボブーストいうてサボるし、命令順序入れ替えるし、キャッシュの乗り方でnano秒程度は簡単にズレるだろうし。
- 707 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 20:45:12.44 ID:xMxnKQAI.net]
- >>705
std::vector<std::vector<foo>> a(100, std::vector<foo>(200));
- 708 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 20:50:20.24 ID:pnI3L7PU.net]
- >>706
最近のは対策入ってる
- 709 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 22:54:09.91 ID:qMT9Q04c.net]
- >>707
ありがとござます!
- 710 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 07:43:53.39 ID:L5yO1DTL.net]
- Cで書かれたライブラリから来た構造体にスマポをあてる方法はありますか?
- 711 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 09:00:25.13 ID:jz9xUaFa.net]
- どうなんだろ?
普通に考えたらデストラクタでfreeを呼べばいいから、それ用のライブラリがありそうな気はするけど。
- 712 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 10:46:03.96 ID:ABNsWlsO.net]
- >>710
スマポ弄ってアロケートだけしないようにすればいいんじゃね?
- 713 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 11:36:20.07 ID:4ewQpv+T.net]
- 「来た」というのが構造体へのポインタをfree責任ごと渡されたという意味ならカスタムデリータだろうな。
- 714 名前:706 mailto:sage [2019/03/09(土) 12:16:02.29 ID:L5yO1DTL.net]
- ありがとうございます
カスタムデリータは知りませんでした Cで書かれたライブラリにmallocしたポインタを返してくる関数があって生ポいやだなあと思っていたところでした
- 715 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 14:06:24.90 ID:YAm1zwse.net]
- 最近スマポ使えスマポ使えってうるさい割にはカスタムデリータ指定出来ることも知らなかったりするんだな
自分が使ってるもののリファレンスすら読んでない奴が安全性とかどの口で言ってるんだろう
- 716 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 15:07:55.58 ID:23Hi4jvz.net]
- わかってない奴ほど、声がデガイんだよ。
- 717 名前:デフォルトの名無しさん [2019/03/09(土) 17:13:56.74 ID:kfZA3URW.net]
- codecvt_utf8
codecvt_utf16 codecvt_utf8_utf16 こいつらの糞加減に
- 718 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 17:33:22.12 ID:anJ4ej+i.net]
- 最近カスタムデリータ知ったから嬉しがってる奴がいるなw
- 719 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 17:49:56.48 ID:23Hi4jvz.net]
- >>715
すいませんね、リファレンスなんかそっちのけで、ネット情報だけで、プログラム組んでます。
- 720 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 19:59:53.92 ID:YAm1zwse.net]
- >>718
図星だったか、すまんな というかマウント取るための屁理屈考えてる暇あったら手動かした方がいいよ
- 721 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 20:10:27.73 ID:eJu7ZZw8.net]
- 図星しとか意味分からん
ひょっとして>>715 disってるのか? w
- 722 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 20:14:07.94 ID:9vZTtl18.net]
- 最近図星って言葉を覚えたので使いたいんだろう
察してやれ
- 723 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 20:21:16.84 ID:YAm1zwse.net]
- >>715で言ったことが図星だったか?という意味なんだが
アホが多いインターネッツですね
- 724 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 20:32:45.58 ID:kU0Uws1z.net]
- 今度はインターネッツという言葉を覚えたのか
どんどん賢くなっていくな
- 725 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 20:39:00.33 ID:ABNsWlsO.net]
- カスタムデリータごときでよくそこまでドヤれるもんだなw
- 726 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 20:46:58.79 ID:YAm1zwse.net]
- それ俺に言ってんの?w
- 727 名前:デフォルトの名無しさん [2019/03/09(土) 21:23:16.03 ID:jx9iLAiD.net]
- そもそもSTLの基幹部分とかJavaだろ。
- 728 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 21:36:18.70 ID:jz9xUaFa.net]
- 実際c++やるやつのほとんどの動機がマウントとりたい以上のものではない。
- 729 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 22:31:55.52 ID:u5Pk3KZw.net]
- > 俺に言ってんの?
意識しまくりすぎだろw
- 730 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 22:41:21.04 ID:Tm/Y9JxW.net]
- 大学四年かけてC++と機械学習学べば年収1000万とか本気で言ってる奴らだからな()
- 731 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 22:26:31.27 ID:QlHozVZM.net]
- 相談なのですが
テキスト形式のライセンスファイルへのファイルパスを渡さないと使用できないライブラリA そのライブラリAを使用するライブラリB 私が作成しているのはライブラリBです。お客さんに使ってもらうものなんですが、「ライセンスファイルをセットで提供して適切な場所に置いて使ってもらう」という手間を省きたくてライセンスファイルをライブラリBに埋め込めないかと思案しています。 とりあえずライセンスファイルの中身をソースにベタ書きし、実行時に一時ファイルとして作成しライブラリAにそのパスを渡すことで上手くいっているのですが、もっとスマートな方法はないでしょうか? ファイルパスを渡さないといけないので無理ですかね…
- 732 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 22:57:10.81 ID:9rO3q8tQ.net]
- 納入時にファイル一つなんか?
実体なんやねん
- 733 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 23:06:05.03 ID:zGphoT2G.net]
- ライブラリAが要求するのは
ファイルシステムに認知されるファイルの形式でないといけない だから中間ファイルに書き出して、そのファイルパスを渡すしかない つかライセンスを埋め込んだ場合何がしかの事情で ライセンス変更の必要が迫られた場合ライブラリBを構築しなおすことになるんだが そういう管理でいいのけ?
- 734 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 23:06:05.25 ID:CMHDEYzk.net]
- >>732
ヘッダーと共有ライブラリのセットです。
- 735 名前:デフォルトの名無しさん mailto: sage [2019/03/11(月) 23:11:06.21 ID:CMHDEYzk.net]
- >>733
やっぱ他にないですよね… 継続的にバージョンアップ重ねて提供してるんですが、ライブラリAについては今後も使い続けるか微妙なんでお客さんに〜のように運用してくださいってお願いするのはまだやめておきたいんですよ。 まあその面倒ごとを避けようとするスタンスが一番よくないのかもしれませんね。
- 736 名前:デフォルトの名無しさん mailto: sage [2019/03/11(月) 23:14:01.28 ID:CMHDEYzk.net]
- というか自分がお客さんの立場にたってみれば、「カレントディレクトリにライセンスファイル置いて使ってください」と言われたら「はいOKです」ですむ問題ですよね。
やはりちゃんとライセンスファイル提供して使ってもらうべきかと思ってきました。
- 737 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 23:20:45.86 ID:9rO3q8tQ.net]
- >>734
どう配布すんのかしらんけど 共有ライブラリと同じとこに置いて固めるなり、インストーラー書くなりすれば十分やろ たいして報われん努力やと思うわ それよりライブラリAは何がしたいんか気になるわ 意味あんのかそれ
- 738 名前:デフォルトの名無しさん mailto: sage [2019/03/11(月) 23:23:05.53 ID:CMHDEYzk.net]
- >>737
ライブラリAはwebAPI叩くからその時にアクセス権限チェックでライセンスファイルを使うようです。
- 739 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 23:36:41.67 ID:9rO3q8tQ.net]
- >>736
ロードされてる共有ライブラリのパスはとれるはずやから、 そこにライセンスファイル置いておく手はある
- 740 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 01:51:07.02 ID:xlgLjh5J.net]
- 変数と型についてなんだがメモリは2進数でデータを記録していて、それを何byteで区切って、どういう意味を持つか(正の整数のみとか)を型で決めてるんだよね?だとしたらポインタに型があるのはなぜ?どれもアドレスを示すんだからある意味int型でいいと思うんだけど
- 741 名前:はちみつ餃子 mailto:sage [2019/03/12(火) 02:03:10.03 ID:tBEUjULM.net]
- >>740
そういう言語もあったよ。 でも、ポインタを経由しただけで型がわからなくなるんじゃ、 型システムが意味を成さないだろう。 元と違った型としてアクセスしようとしたときに、 型情報がなけりゃコンパイラが捕捉しようもない。 それはプログラマの責任で正しく扱うってのならそれでもいいし、 実際、 C/C++ はプログラマがやりたければポインタを整数に型変換することも出来るけど、 (言語仕様としてはほとんど保証はないが。) 人類は間違うのでな。 型が合わないエラーなんてたびたび出しちゃうもんだろ。 もし型がなければそれはスルーされてわけのわからない挙動をするプログラムになるんだぞ。 そういうのはもうやめようって話。
- 742 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 02:06:26.71 ID:i1gu3hXZ.net]
- >>740
ポインタに格納されるアドレス値は32bitとか64bitとかの整数でそれ自体は同じ型として扱えるとしても、そのポインタの指す先にある物の型が分からないと色々困るでしょ。 ポインタ型としてvoid*だけでプログラムを書こうとすればその必要性がわかるはず。 同じバイト表現だからといって同じ型で表さなければならない道理はない。用途や演算結果が異なるのだから別の型として扱うのはある意味自然なことだと思うよ。
- 743 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 07:03:19.32 ID:1t7NN+JI.net]
- >>740
参照はずし、つまり*演算子で「ポインタの指す内容」を取り出すときに そのポインタがどんなデータを指すポインタか分からないと困るでしょ。 構造体を指すポインタで p->menber とかする場合も同様。 >>742 の「void*ポインタだけ使って書いてみる」ってのは、 ポインタに型のある有り難さを実感できる良い課題だね。
- 744 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 07:35:06.24 ID:nPeHxcg9.net]
- Cのポインタ型はK&Rのプログラミング言語Cに書いてある通り、単なるアドレスを保持する型じゃなくて配列の仲間なのよ。
例えば char *cp =“abc”; で *(p+1)の様に書くと、ちゃんとcharサイズ分ずらしたアドレスを指してくれる。 その本には (当時の)優れたプログラマたちがやってた事を言語仕様として取り込んだと、という様な事が書いてあったと思う。 ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。
- 745 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 07:35:25.54 ID:nPeHxcg9.net]
- Cのポインタ型はK&Rのプログラミング言語Cに書いてある通り、単なるアドレスを保持する型じゃなくて配列の仲間なのよ。
例えば char *cp =“abc”; で *(p+1)の様に書くと、ちゃんとcharサイズ分ずらしたアドレスを指してくれる。 その本には (当時の)優れたプログラマたちがやってた事を言語仕様として取り込んだと、という様な事が書いてあったと思う。 ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。
- 746 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 07:37:59.58 ID:nPeHxcg9.net]
- >>745
>>745 >*(p+1)の様に書くと、ちゃんとcharサイズ分ずらしたアドレスを指してくれる。 *(cp+1)の間違い
- 747 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 08:23:28.38 ID:xHFKV8QO.net]
- >>741
>>742 >>743 >>744 ヒューマンエラー防止 型のないポインタを宣言すると中身のbyte長が不明 ってことかありがとう 740のコードを見て疑問に思ったんだけど*cpは一つのアドレスしか記録できないから配列の先頭(文字a)のアドレスを記録するよね。このとき配列の長さが3だという情報はどこにあるの?(脱線するけどNULL終端も数えて長さ4?)
- 748 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 08:29:27.03 ID:i1gu3hXZ.net]
- >>747
ポインタが指す先にいくつ分の領域があるか(いくつ分を参照してよいか)は記録されてないから、プログラマが自分の責任で管理するしかないよ
- 749 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 08:41:29.44 ID:7SPfMi3X.net]
- >>747
直接長さを示す情報はどこにもないよ だから、cの「文字列」は単なる文字の配列だけではなく、0終端が必要 >(脱線するけどNULL終端も数えて長さ4?) その通り (NULLはnullptrとしてのみ使ったほうがいいよ 混同してないならいいんだけどね)
- 750 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:29:32.99 ID:nPeHxcg9.net]
- >>744
>>745 >ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。 サイズって型のサイズでした、すみません。 配列長さは sizeof(*cp) / sizeof(型)で取ってねって書いてあったよね?
- 751 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:32:06.13 ID:u0RxZCyH.net]
- \0終端が来るまで確保されていると想定して受け取り側は動作する
だから終端記号がないと色々まずい (ので、バッファ長も指示する関数が後から増えた)
- 752 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:32:15.05 ID:xVickGeK.net]
- 便乗質問でごめんやけど
delete [] p; この場合deleteはどうやってサイズ調べてんの?
- 753 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:33:32.91 ID:i1gu3hXZ.net]
- >>750
char *cpで宣言してるならその計算じゃ配列サイズはとれないよ。
- 754 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:33:42.86 ID:u0RxZCyH.net]
- 要素数の算出は
sizeof(配列) / sizeof(配列[0]) または sizeof(配列) / sizeof(*配列) ではなかろうか?
- 755 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:47:35.09 ID:Nd0ou12Q.net]
- 除算は遅いからなぁ
- 756 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 10:18:57.28 ID:u0RxZCyH.net]
- コンパイル時に確定する値だから
実行時には定数として埋まってるんでないの? (ほんとんどの環境で インタープリターはしらんw
- 757 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 10:22:41.05 ID:Nd0ou12Q.net]
- sizeof(配列)は動的でしょう
- 758 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 12:15:07.37 ID:7lezZ5hH.net]
- sizeofは演算子だから動的じゃないかな
最適化で消し飛ぶ可能性はあるのかもしれんけど
- 759 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 12:42:52.96 ID:Gedrqwi7.net]
- >>752
実装依存だと思うけど、p[-1]とかに長さが書いてあったりする
- 760 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 12:45:54.40 ID:xHFKV8QO.net]
- アンカー長くなるから省略するけど
みなさんありがとう
- 761 名前:デフォルトの名無しさん [2019/03/12(火) 13:32:00.51 ID:6Uu2j9Xc.net]
- インクリメントするときに困る
- 762 名前:752 mailto:sage [2019/03/12(火) 14:52:24.67 ID:u0RxZCyH.net]
- VLAのこと完全に忘れてた sizeof(配列) は動的だわ
- 763 名前:はちみつ餃子 mailto:sage [2019/03/12(火) 15:09:12.69 ID:tBEUjULM.net]
- sizeof の結果は動的な判断が必要な場合 (いわゆる VLA) を除いて整数定数であることは保証される。
C++ には VLA は無いので sizeof が動的であるかどうかを心配する必要はないんだけど、 それは置いといて、 C++ で配列の大きさを知りたいときは std::extent の方がよくない?
- 764 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 15:29:35.28 ID:xWv5Y9zk.net]
- >>760
>>748-759 というアンカー表示方法も、知っておいてね。
- 765 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 22:48:56.35 ID:SU/8eF4+.net]
- 昔はstd::extent持ち出したりしたが今はstd::sizeだな
- 766 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 23:05:04.16 ID:/eUnUFro.net]
- uint8_t *addrb =(uint8_t *)0x00F00000;
uint16_t *addrw =(uint16_t *)0x00F00000; *addrb = 0x10; *addrw = 0xF0F0; 0x00F00000番地に0x10と0xF0F0を書き込むコードらしいのですが、最初の2行がよく分かりません。アドレスが4バイトなのにポインタはそれより小さくて問題ないのでしょうか。右辺のキャストは何を行っているのでしょうか。 よろしくお願いします。
- 767 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 23:29:55.31 ID:RU0tEwI6.net]
- >>766
・整数だから昇格するよ ・整数即値をポインタ型に変換してるよ ポイント先のデータは多分、バイト型だよ マップドIO系のCPUではよく見るパターンだね
- 768 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 23:37:26.58 ID:y5WX6T5u.net]
- >ポインタはそれより小さくて問題ないのでしょうか。
*addrb = 0x10; *addrw = 0xF0F0; この文を見て上の疑問に到達したのかな? ポインタは addrb や addrw で その変数の器の大きさはアドレスを格納できる大きさ *addrb で アドレスにさされた先の内容を示す 内容の大きさはその型による *addrb は uint8_t 型でおそらく1バイト (1オクテット) *addrw は uint16_t 型でおそらく2バイト (2オクテット)
- 769 名前:デフォルトの名無しさん mailto:sage [2019/03/13(水) 18:31:26.55 ID:yPp5BeL1.net]
- ありがとうございます。
理解できました。 そもそもアドレス自身のサイズがあるものと勘違いしてました。
- 770 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 06:41:14.61 ID:SGfhnH0M.net]
- アドレス自身にもサイズはあるけどね。
sizeof(*addrb) == たぶん 1 (8bit) sizeof(*addrw) == たぶん 2 (16bit) sizeof(addrb) ... 近頃のPCでは 4 (32bitアドレス) か 8 (64bitアドレス) かのう。
- 771 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 12:20:30.31 ID:Yw9IVRaM.net]
- メモリ消費についてききたい。
8byteのa,b,cっていう変数と、それを結合した24byteのdっていう変数をクラス内で扱いたいんだけど、素直にやると48byteメモリ消費だよね? 代わりに24byteのdと、8byte型のポインタ(4byte)3つ宣言したら36byteのメモリ消費で12byte/オブジェクトの節約になると思うんだけど、最適化したければ意識するべき? あるいはコンパイラがその辺は上手にやってくれて最小限のメモリ消費になる?
- 772 名前:さまよえる蟻人間 mailto:age [2019/03/14(木) 12:26:16.05 ID:1+g2CCuw.net]
- >>771
ポインタ先をチェック・確保するのにヒープメモリーと計算コストが掛かる。
- 773 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 13:52:59.75 ID:M+miX7Aw.net]
- >>771
宣言次第ですね。 メモリ節約だとdを配列にしておくといいかなとおもいました。
- 774 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 14:39:59.26 ID:3EvgP48J.net]
- >>771
それ実体の24byteが別に要るだろ…
- 775 名前:デフォルトの名無しさん [2019/03/14(木) 14:43:45.46 ID:q8OuUl64.net]
- 下のソースをコンパイルしてコマンドプロンプト(cmd)で実行すると「鷗」の字が出力されません
int main(int ac, char **av){ setlocale(LC_ALL, ""); fwprintf(stdout, L"[%c]\n", 0x3042); // [あ] と表示される fwprintf(stdout, L"[%c]\n", 0x9dd7); // [?] と表示される return 0; } 同じコマンドプロンプト(同じwindowsインスタンス上)で python3 からだと(スクリプト経由でもIDEでもどちらも) print(f'[{0x3042:c}]') # [あ] print(f'[{0x9dd7:c}]') # [鷗] 表示されます setlocale(LC_CTYPE, "en_US:utf8"); にしても同じでした python3 からだと表示出来るということは fwprintf に問題があるということでしょうか?
- 776 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 14:57:23.81 ID:tsxAqnNH.net]
- Windows は、Visual Studio だろ
TCHAR マクロで、sjis/Unicode を切り替える。 Windows用の環境を揃えないと、無理だろ
- 777 名前:デフォルトの名無しさん [2019/03/14(木) 15:10:14.13 ID:q8OuUl64.net]
- UNICODE
_UNICODE とかは定義してあります それに[あ]の方は表示されてるので TCHAR が char と誤認識とかめっちゃ的外れな指摘だと感じます
- 778 名前:デフォルトの名無しさん [2019/03/14(木) 15:25:54.72 ID:s2YvJJWc.net]
- fwprintf
ワイド文字を書き込む場合、ファイルはバイナリー・モードでオープンするか、 o_ccsid または codepage パラメーターでオープンする必要があります。 これにより、ワイド文字に対して変換が発生しないことが保証されます。
- 779 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 17:04:07.47 ID:DMc/T5SW.net]
- >>771
もしかして windows で 24bitカラーを取り扱いたい話? union で楽する #pragma pack(push,1) typedef union { BYTE e[3]; struct { BYTE B, G, R; }; } BPP24_t; #pragma pack(pop)
- 780 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 19:02:32.98 ID:wP1B/x23.net]
- >>772-774 >>779
ありがとう説明不足だった 厳密にはL2フレームを実装したくて DMAC6byte SMAC6byte TYPE2byte とかを結合して送りたい。 んだが、結合用の変数を用意するとメモリ消費二倍な気がしていやだなと。 で、それぞれはポインタにして結合用の変数の0、6、8byteめを指定してやればいい気がして聞いてみた
- 781 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 19:26:19.44 ID:lcdumzgu.net]
- >>780
プロトコルスタックでそういうデザインはよくある nicにわたすときのdmaもそんな感じ しかしその数バイトの処理はこだわるところじゃない
- 782 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 20:21:10.72 ID:2vbDdJqi.net]
- 規格で標準ライブラリ中のメソッドがconst指定されていない場合これをconst指定するのは規格違反ですか?
具体的にはuniform_int_distributionのconstなインスタンスを生成してoperator()(URNG& g)を呼び出すとMSVC(VS2017)のみ通り、gcc4.3.2とclang4.0ではコンパイルエラーになりました N4140及びN4659を参照した限り、上記のオペレータはconst指定されていませんでした
- 783 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 20:28:14.30 ID:gIuDI0vP.net]
- >>780
フレームの組み立ては迷うことなくstructでいいと思うのですがどうでしょう。ちなみにpingではは素直にstructで組み立ててあります。
- 784 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 20:30:26.12 ID:V4l0GHvB.net]
- >>781
確かに数バイトなんだけどね >>783 cppで書いててクラスのプライベート変数として持ってます 結合どうするかだけ悩ましい
- 785 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 21:00:14.82 ID:gIuDI0vP.net]
- >>784
ああ、なるほど。structでガワ作っておいて、ペイロード書き換えてバッファに溜めていくって感じでしかやった事しかないですけどケースバイケースなんでしょうね。
- 786 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 21:58:48.11 ID:VY0DZD81.net]
- コンソールがSJISだから無理
- 787 名前:デフォルトの名無しさん [2019/03/14(木) 23:31:25.66 ID:u00Rfoqy.net]
- C++難しすぎねえか?
こんなの新機能を網羅してる人どんだけいるんだか・・・
- 788 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 23:39:23.56 ID:CLlwPgIu.net]
- 奥義を究めると尊敬されます(カモ)
- 789 名前:はちみつ餃子 mailto:sage [2019/03/14(木) 23:47:20.81 ID:mXS2OKIJ.net]
- >>787
別に網羅せんでも使えるところだけ使えば良い。 常に新しい機能を把握しておく必要はない。 使わない方が良い機能というのは有るので、駄目な部分を把握する方が大事だと思う。 (その結果として新しい機能に行きつくこともあるけど。) 新しい機能を使わないと回りくどくなるだけだが、 駄目な機能は致命傷になる (という可能性をコンパイル時にエラーに出来ない) こともあるので。 今の C++ で nullptr でなく NULL を使う理由は全然ない、みたいなのとか。
- 790 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 23:49:54.51 ID:Gk3KilXE.net]
- てかコンセプトが待ち遠しい
templateの黒魔術っぷりが大幅に改善されるよね エラーメッセージが分かりやすくなるのが大きい
- 791 名前:はちみつ餃子 mailto:sage [2019/03/15(金) 00:08:50.55 ID:q2a9nFaz.net]
- コンセプトとモジュールは C++er の悲願って感じだからな……。
今まで土壇場での延期を繰返した経緯を考えると次も本当に入るのか 疑わしい気はするけど。
- 792 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 02:19:09.67 ID:f+LcC8HT.net]
- 配列のアドレスが表示できません。何が悪いのでしょうか。結果はからになります。
unsigned char a[100]; cout << hex << &a[5] << endl;
- 793 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 02:52:40.51 ID:nvk7uoI+.net]
- a+5
- 794 名前:さまよえる蟻人間 mailto:age [2019/03/15(金) 04:49:34.55 ID:CgPhXsZt.net]
- (void *)
- 795 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 06:53:21.47 ID:F3jqlZHF.net]
- >>792
&a[5] は「unsigned char を指すポインタ」なので cout << では「'\0'で終端する文字列」として表示しようとするのよ。 なもんで >>794 の通り void* にキャストして、 具体的なデータを指さない「単なるアドレス」扱いしてくれと指示。 ちなみに >>793 は効果ないでしょ。 でも C++ の作法としては static_cast<void*>(&a[5]) と 長々しい名前付きキャストを使うべきなんじゃろか。 個人的には static_cast<const void*>(&a[5]) まで書きたいけど。 inline const void *to_voidptr(const void* p) {return p;} てな具合に、字数を減らすための変換用の関数でも使うか。 …何か標準的で短い書き方があったりするのかしら。
- 796 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 08:07:08.74 ID:fLDhqMRG.net]
- 文字はcharだけでsigned/unsignedは整数扱いするとかしてくれりゃよかったのにな。
- 797 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 09:38:53.54 ID:MV2geWC9.net]
- coutなんて使うのが悪い
printf()でおk
- 798 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 10:50:58.56 ID:nvk7uoI+.net]
- qDebugばっか使ってたからcoutの使い方なんて忘れてたわw
- 799 名前:デフォルトの名無しさん mailto:sage [2019/03/17(日) 06:21:33.06 ID:Q6jWm6hE.net]
- そういえば「cout << &a[5] でアドレス値が表示されない」ってのは
char 系の配列やポインタの場合だけで起きる特殊例なのかな。 ユーザーが operator<<(ostream&, T*) の再定義をしない標準の状態で、 オブジェクトのアドレス値を送ったらアドレス値以外の何かが表示される型って 標準か有名どころのライブラリで、何か知ってる?
- 800 名前:デフォルトの名無しさん [2019/03/17(日) 12:02:02.30 ID:ZVJiTVd1.net]
- operator<<(ostream&, T*) の再定義をしないライブラリで
オブジェクトのアドレス値を送ったらアドレス値以外の何かが表示される型を定義しているものは? という質問に置き換えてみた
- 801 名前:デフォルトの名無しさん mailto:sage [2019/03/17(日) 13:17:40.49 ID:4LIjOkKH.net]
- gccのiostreamのソース辿れば全部書いてあるよ。
- 802 名前: mailto:sage [2019/03/17(日) 14:11:06.99 ID:8PHb1ymW.net]
- >>801
ほう、どこに書いているのかわかってそう言っているのですね、それはすごいですね
- 803 名前:デフォルトの名無しさん [2019/03/17(日) 14:22:23.04 ID:rD0zueCH.net]
- https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/ostream
- 804 名前:はちみつ餃子 mailto:sage [2019/03/17(日) 14:50:03.46 ID:aA4z/LNt.net]
- ライブラリのソースコードを辿っていくとビルトイン関数だったりして萎えることもあるので、
まずは仕様をちゃんと読もうな。
- 805 名前:795 mailto:sage [2019/03/17(日) 15:05:24.52 ID:Q6jWm6hE.net]
- >>803
ostream のヘッダ単独は意外に分量少なくて一通り見られたよ。 char系以外には... operator<<(nullptr_t); // #if __cplusplus >= 201703L で条件コンパイル operator<<(__streambuf_type* __sb); があるみたい。本当にこれだけか確実ではないけど。 nullptr_t の方は「nullptr が送り込まれたら "nullptr" と表示しろ」だと思うが __streambuf_type* __sb は分からん(定義は別ファイル、みたいだし)。
- 806 名前:デフォルトの名無しさん [2019/03/17(日) 15:17:33.67 ID:9G7IgbIM.net]
- 痛レータが呼ばれるんじゃね
- 807 名前:デフォルトの名無しさん mailto:sage [2019/03/17(日) 19:25:05.63 ID:wQNvtjPu.net]
- 現在アルゴリズムの勉強をしています
ソートアルゴリズムで有名な基本挿入法で与えた5つの整数を小さい順に並べるプログラムがうまく動きません 基本選択法、基本交換法(バブルソート)は書けるのですが… ソートアルゴリズム、アルゴリズムそのものは図で正しく書けるとは思うのですが、コードに落とし込むのがうまくいきません 書いたコードは稚拙ですが以下のものです おかしな点を教えてくだされば幸いです #include<stdio.h> //基本挿入法 int main(void){ int temp=0,j,i; int ary[5]={9,6,1,5,2}; for(i=1;i<=4;i++){ temp=ary[i]; for(j=i-1;j>=0;j--){ if(ary[j]>ary[i]){ puts("aaa"); ary[j+1]=ary[j]; }else{ puts("jais"); j--; break; } } j++; ary[j]=temp; printf("a[%d]は%d a[%d]は%d¥n",j,ary[j],i,ary[i]); } for(i=0;i<=4;i++){ printf("%d¥n",ary[i]); } return 0; }
- 808 名前:デフォルトの名無しさん mailto:sage [2019/03/17(日) 19:26:08.56 ID:wQNvtjPu.net]
- puts(“aaa”)やputs(“jais”)はprintf(“a[%d]は%d 〜”)の3つは、プリントデバグのために書いたものです…消し忘れました
すみません
- 809 名前: mailto:sage [2019/03/17(日) 21:48:00.62 ID:8PHb1ymW.net]
- >>807
https://ideone.com/gIcJzp 納得がいくまで printf() を仕掛けるのはいいことだと思います。
- 810 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 21:33:07.89 ID:iIi946R+.net]
- class C
{ public: void f(){} }; C* pc= new C; pc.f(); コンパイルエラーが出るってことは、コンパイラはpcがポインタであることを 知ってる なのになぜ、->と記述させるの?
- 811 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 21:44:58.77 ID:32G7a9z6.net]
- std::invoke使え
- 812 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 21:52:40.40 ID:7SOsx0TI.net]
- ClassAのメンバにClassBがあってコンストラクタかsetterで外部から与えたいんだけど、
ClassBが大きくてできるだけコピーしたくない場合はどうするのがベストですか? コピーコンストラクタが呼ばれた場合に初めてコピーされるようにしたいです unique_ptr<ClassB>型にするとスコープを外れるときに落ちました Class ClassA{ public: ClassA(ClassB &b) { m_b.reset(&b); }; ClassA(const ClassA a) : m_b(new ClassB(a.m_b)){}; ・・・ private: unique_ptr<ClassB> m_b; } main(){ ・・・ { ClassB b; ClassA a(b); } // ここで落ちる ・・・ }
- 813 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 22:09:12.99 ID:oZ4uWA1m.net]
- > m_b.reset(&b);
ヒープオブジェクトじゃないものをunique_ptrに突っ込んだらダメ。 カスタムデリータ用意するなら別だけど。
- 814 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 22:22:19.12 ID:7SOsx0TI.net]
- >>813
この場合にスマートポインタは違うようですね メンバは実体にして渡すときにムーブすればコピーは発生しないという認識は正しいですか?
- 815 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 22:30:43.95 ID:0T+gZcjq.net]
- ClassAはClassBそのものを所有するのか
それとも外部のClassBへの参照を保持するだけなのか? そのものを所有するなら外部から与えるのではなく ClassAの中でClassBを構築するのも検討してみれば // ClassAのコンストラクタ // 11以降ならムーブとかも ClassA(ClassBの構築に使う引数) : m_b(前記の引数) {}
- 816 名前:さまよえる蟻人間 mailto:sage [2019/04/01(月) 22:30:51.94 ID:OIWsA4Np.net]
- >>814
スマホ使う前にオブジェクトの所有権を明確にせよ。
- 817 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 22:51:52.32 ID:7SOsx0TI.net]
- ClassBの構築に使う引数も大きいためコピーを避けたいところです
基本的には参照を保持するだけにしたいところですが、ClassBがスコープを外れて破棄される場面ではClassAに実体をコピーできるようにしたいです
- 818 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 22:59:26.12 ID:oZ4uWA1m.net]
- なんでそこでわざわざコピーしたいの?
最初からnewでヒープに確保すりゃコピー必要ないのに。
- 819 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 23:35:23.75 ID:32G7a9z6.net]
- AにB*とunique_ptr<B>を作って
AがBを使うときは常にB*経由でアクセス Bを所有させたいときだけunique_ptrにヒープ管理だけさせる
- 820 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 23:37:44.29 ID:7SOsx0TI.net]
- 2つ持つという発想はありませんでした
試してみます
- 821 名前:デフォルトの名無しさん mailto:sage [2019/04/04(木) 17:56:45.10 ID:4dlKQxP/.net]
- 昔、openGLを使ってC++出遊んでたんですけど、また最近触りたくなりました
皆さんC++で何作ってますか? 個人開発規模でお願いします
- 822 名前: mailto:sage [2019/04/04(木) 19:24:27.16 ID:+9gozOKQ.net]
- >>821
昔作ったツールがひょんなことで役立っています… あるディレクトリを別のドライブにコピーするだけのことなんですが、いや、まあ、Windows はなかなか御しがたく、path 文字列長が一定範囲を超過すると止まってしまう変てこなコマンドラインツールが未だに現役だったりするのです… https://mevius.5ch.net/test/read.cgi/tech/1434079972/53
- 823 名前:デフォルトの名無しさん mailto:sage [2019/04/04(木) 20:14:39.57 ID:vPLFSwkc.net]
- >>822
システムコールってやつですか? オブジェクト指向と並列処理を勉強したいと思ってるのでQtもいいかなと思ってます どうでしょうか?
- 824 名前:デフォルトの名無しさん mailto:sage [2019/04/04(木) 20:22:00.68 ID:USs/shwk.net]
- Qtのデメリットはライセンスだけだから個人でやる分には良い選択
- 825 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 11:39:32.60 ID:K5RuTlhq.net]
- オブジェクト指向を学ぶのにRubyあたりを使うのは
どういうデメリットが? Pythonは「バージョン違いによる仕様変更」に 入門書レベルのコードが影響されるのであれば「良い選択とは言えない」ことになりそーだけど
- 826 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 12:37:54.42 ID:oOSdboOz.net]
- >>825
せっかく新しい言語を学ぶなら、近い将来役に立たなくなる言語より他の役に立つ言語を選んだ方が合理的だと思う
- 827 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 13:47:38.12 ID:+CDO09PL.net]
- pythonて破壊的な変更があったのは20年近く前なのに、未だに古い仕様で書かれた入門書が出回っているなら、オブジェクト指向学習に最適化どうかとは別に、問題な気が。
- 828 名前:デフォルトの名無しさん [2019/04/12(金) 14:05:10.56 ID:VR9mZ4dF.net]
- rubyは古い言語
- 829 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 14:50:54.53 ID:K5RuTlhq.net]
- Qt5.12.2はLGPLライセンスでインストールしとけばok?
他のライセンスは初見
- 830 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 14:56:36.82 ID:rTBxcnf6.net]
- 追加パッケージを使わないのならLGPLでおk
- 831 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 15:06:17.42 ID:K5RuTlhq.net]
- "Qt Creator 4.8.2 CDB Debugg..." と "MinGW 7.3.0" 64-bit" 入れたら Hello World の窓が表示できるようになったけど、
練習ならそんなかんじでok?
- 832 名前:デフォルトの名無しさん [2019/04/12(金) 15:28:10.39 ID:VR9mZ4dF.net]
- しばらく正常に動いてるように観えてても
あとで問題が顕在化して困るパターン
- 833 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 15:38:10.46 ID:K5RuTlhq.net]
- どのような問題が発生しうるのでしょう?
もっぱら個人用の練習用とする予定
- 834 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 15:54:14.03 ID:rTBxcnf6.net]
- Qt始めるならとりあえずこのシリーズ読もう
https://blog.qt.io/jp/category/getting-started-with-qt/
- 835 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 17:06:12.27 ID:K5RuTlhq.net]
- 私の場合は、インストール〜 "Hello World" については
https://qiita.com/yasumodev/items/399ec89b7205e3c0bab1 https://qiita.com/yasumodev/items/104446261114e9a7352c を参考にしました。続きについては、御提示のリンク先を試してみますね
- 836 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 12:09:38.16 ID:r7SUy1hn.net]
- ID:K5RuTlhq です
>>830 https://www3.sra.co.jp/qt/licence/index.html を見て『グラフ作成パッケージQt Charts入れておいた方が便利かも』と思い いったんアンインストールしてみたのですが、 [Qt 5.12.2 のセットアップ] の画面で Qt Charts Qt Data Visualization Qt purchasing Qt Virtual Keyboard Qt WebEngine Qt Network Authrozation Qt WebGL Streming Plugin にチェックを入れたとしても LGPL が選べるようです サードパーティーの追加パッケージで問題となりうる…?
- 837 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 12:11:50.81 ID:r7SUy1hn.net]
- >>832
具体的に「どのような問題が顕在化」し「どのように困る」ことになるのでしょうか クラスとメンバ関数のみの指摘でも構わないので、示していただけませんか? また、その問題を回避する方法は何なのでしょうか?
- 838 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 13:57:08.11 ID:TvmgiEsJ.net]
- >>836
LGPLを選べたとしてもQt Chartsを使っていればGPLv3 GPLと非互換のライセンスのライブラリを使うなら問題になる だがそもそも練習段階ならライセンスなど気にせずどんどん書け
- 839 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 20:47:38.59 ID:r7SUy1hn.net]
- 昔は知らんが5.12.1ならQt ChartsはLGPLで許諾されるよ?
- 840 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 20:48:56.62 ID:r7SUy1hn.net]
- 5.12.2だった
- 841 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 23:19:58.42 ID:TvmgiEsJ.net]
- はっきりとGPLv3と書かれてる
https://www.qt.io/download Open Source->Additional features->Data visualization の?を参照
- 842 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 00:04:08.34 ID:El+pt49w.net]
- 条項はこれから確認する
>>841 インストールの操作手順からしたら 不意打ちも良いとこだなあ Qt Charts をチェックした状態で[次へ(N)]ボタンを押したときに 「修正を受けたGPLv3」以外のラジオボタンが無効になってないと UIとしておかしくねえか あと「100%GPLv3と一致で修正条項なし」なん? そうだとしたら、なおさらおかしい
- 843 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 00:07:28.45 ID:El+pt49w.net]
- そういえば
LICENSE などと大文字ファイル名にしないと効力が発生しないとする「糞判例がある」と聞いたことがあるけど、日本の裁判所? ググっただけでは見つからなかった 最高裁判例なら検索結果の判決文をPDFで読める訳だがなあ そのようなケースを敷衍すると、帰結として、Qt chartsはLGPLとなりうる GPLv3 については逐条解説もあるから、そっちの内容も確認してみてちょ(あくまで「解説」)
- 844 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 00:54:57.43 ID:El+pt49w.net]
- 純粋に「Qt のライセンス」の話なのでスレチ?
copyright notice の表示方法の適切性について、GPLv3って基本的には明確には記載してなくね ただし今回のケースだと、「インストーラが LGPL によるライセンスを表示した状態」で先に進める以上 0. Definitions. の第8パラグラフ(1) 反対解釈により、「GPLv3は適用されない」と読む余地がある 実際、GPLv3 につき "displays an appropriate copyright notice" してないもの
- 845 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 00:56:08.63 ID:El+pt49w.net]
- 書き込み制限受けたので続き。多分コレで終わり。
あのインストーラが表示している著作権表示は明確に LGPL だから適用条件満たしてないと解釈する余地がある、と …わたしはただの学習者だから大騒ぎすることでもねえんだがねえ…
- 846 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 21:39:53.28 ID:L7qqGgg7.net]
- int& a;
int &a; どっちにすべきでしょうか
- 847 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 21:52:39.66 ID:zTAvdEPs.net]
- 好きな方で書け
- 848 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 21:56:00.71 ID:dimPC8Ge.net]
- 「すべき」というのは規格表での『shall』のことですか?
それとももっと別の意図がありますか?
- 849 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 22:02:16.06 ID:1nT5zSFt.net]
- int & a;
int * b;
- 850 名前:はちみつ餃子 mailto:sage [2019/04/15(月) 23:26:36.86 ID:94OTneyx.net]
- std::add_lvalue_reference<int>::type a;
- 851 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 07:00:13.97 ID:xjyBK9QH.net]
- そんなこと気にする前に参照の変数を未初期化で使おうとするなよ。
みたいなツッコミを入れたくなるけど、コンパイル時にエラーが出る 間違いは必ず見落としなく直せるから実際は大きな問題じゃないよね。 「ポインタ宣言の * を型名に寄せるか変数名に寄せるか」と同じで 一貫した書き方をするかぎり、どっちでも構わんでしょ。 個人的には「変数名に寄せる」派だけど。
- 852 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 08:18:02.67 ID:hl7GJiol.net]
- int& a, &b;
int &a, &b; 自分も後者の方がいい
- 853 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 08:20:49.86 ID:GDkTCt4E.net]
- >>851
> 未初期化で使 コレの解釈は揺れそうだが、たとえば int *i; とか、 int *i; int j; i = &j; とかいうかんじのことかしらん
- 854 名前:デフォルトの名無しさん [2019/04/16(火) 11:22:25.45 ID:vZl8q5zB.net]
- >>852
+1 ほんそれ
- 855 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 12:24:17.44 ID:uqcfe1Iw.net]
- わからない事をここで質問しようとレスを書いてる最中に「わかった!」
ってなることが多々あるんだが、この謎の現象は何なんだ・・・
- 856 名前:デフォルトの名無しさん [2019/04/16(火) 12:28:15.56 ID:4RjIOnLA.net]
- 自己解決パターン
質問するときに頭の中が整理される→解決 質問するために再現する必要最小限のコードを書く→問題の切り分けが出来る→解決 いろいろあるが
- 857 名前:はちみつ餃子 mailto:sage [2019/04/16(火) 13:21:34.50 ID:XnNfa6Fy.net]
- >>855
何が駄目なのかわかれば解決法は自明であることが多い。 逆に言えば、解決法がわからないときは問題が何であるかわかってなかったりするんだよ。 だから、きちんとした形に質問をまとめれたなら、それはもうほとんど解答でもあるんだ。 この手法を利用してバグを取り除くやり方としてラバーダックデバッギングというものが知られている。
- 858 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 13:51:09.84 ID:WfxisTJA.net]
- C++erならRust学べって風潮嫌い
なんで学習コストがある言語を2つも学ばないといけないのかと思うし
- 859 名前:847 [2019/04/16(火) 17:31:42.92 ID:xjyBK9QH.net]
- >>853
あんまり大それた意見とではなくて void func() { int &a; ... } と宣言したら、参照先不明の &a を作ろうとしてるから 必ずコンパイルエラーになるじゃろ、程度の指摘。 …ただ、この投稿を書こうとして気がついたんだけど、 class samp { int &a; ... }; てな具合に、クラスのメンバとしての宣言ならエラーにならないね。 ちゃんとコンストラクタで a に参照先を与えるなら許される。 要するに >>851 の前半部分は間違ってた、ということ。 正しい場合もあるけど、常に正しいわけじゃない。
- 860 名前:デフォルトの名無しさん [2019/04/16(火) 17:55:46.56 ID:LqBdGBd1.net]
- その場合でもコンストラクタで初期化してなかったらエラー出るんだから
説明自体は間違ってない
- 861 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 21:38:13.69 ID:5Rly8M3u.net]
- >>857
テディベアをおいておくというエピソードなら有名だね
- 862 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 22:14:36.94 ID:dFuxCqAG.net]
- >>858
難しいことも違った方向から見るとわかりやすくなることもある。
- 863 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 11:24:45.99 ID:qKKG75KJ.net]
- 質問です。
cinの戻り値のistream&がなんでif(cin)みたいに真偽判定に使えるのかが発端です。 https://stackoverflow.com/questions/8117566/why-istream-object-can-be-used-as-a-bool-expression こことか見たんですけど、 1.istreamはbasic_iosを継承してて、 2.basic_iosで型変換演算子explicit operator bool() const;が定義されてる ってとこまでは理解しました ここからが質問なんですけどこの型変換ってのは勝手に行われるもんなんですかね if(something)って書いたらif(bool(something))っていつもやってるんでしょうか
- 864 名前:デフォルトの名無しさん [2019/04/19(金) 11:40:22.57 ID:ymX8VCBl.net]
- intで参照したらEOF
- 865 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 12:05:08.07 ID:r9r2BfdP.net]
- 型変換以前に0やnullポインタを評価するとfalse、0以外の値はtrueと評価されると決まっているからだろ。
あと暗黙の型変換はよく起こる。
- 866 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 12:08:35.86 ID:lgg24wim.net]
- if 文の条件判定部は bool 型を要求してる前提で解釈,翻訳してるんじゃない
- 867 名前:はちみつ餃子 mailto:sage [2019/04/19(金) 12:13:29.89 ID:mypEidUJ.net]
- >>863
yes. 条件部はブールを要求し、もしブールでない場合は常に型変換する。
- 868 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 09:49:03.76 ID:9bTTnEnG.net]
- 前橋和弥さんのC言語ポインタ完全制覇という本で、
PCの環境(CPUの種類など)によってデータのメモリ上の配置は異なる (構造体のパディングをはじめ、ただの単体のintでさえバイトオーダーが異なる(ワークステーションではビッグエンディアン採用だったりする)) ので、メモリの内容をバイナリでディスク上のファイルに出力したデータは別環境で読み込んで使おうと思ってはいけない というような事が書いてありましたが、この話はWindows以外の環境や古い環境を前提とした話なのでしょうか? 同書にWindowsではBMPファイルをfwriteでファイルへダンプしていていかにもWindowsらしいとも書いてあるので、 Windows環境ならゲームのセーブデータとしてクラスをまるごとfwriteでバイナリ出力したファイルを別PCでロードしても問題ないのでしょうか? (Xeonとかワークステーションマザーとか関係なしに、IntelCPU&Windowsの環境ならばリトルエンディアンで統一されている?) (Macではビッグエンディアンになるが、Windows環境のみ対応のゲームを作る上では無視してよい?) という認識は間違っているでしょうか? パディングの違いなどもWindowsやVisualStudioが自動で良きに計らってくれるのならありがたいのですが…
- 869 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 09:54:32.44 ID:gSzU4BUh.net]
- windows間だから「別環境」ではなく「同じ環境」
だからwindowsでも同じ そのbmpデータをmacに持って行っても使えない なので磁気コアをダンプして永続化したようなデータは、他の全ての環境で使えない 60年代くらいから知られている
- 870 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 12:00:13.06 ID:9bTTnEnG.net]
- >>869
Windows環境であれば、別PC(別ハード)でも同環境とみなして良いのですね >>WindowsではBMPファイルをfwriteでファイルへダンプしていていかにもWindowsらしいとも書いてある 読み直したら、違ってましたm(_ _)m 可変長構造体の節で、 WindowsではBMPをfwriteなどで可変長構造体まるごとダンプしていて、 BMPのような他の環境にもっていく可能性が高いファイルを構造体まるごとダンプしているのがWindowsらしい というような内容でした Windows級の一流プログラマーでも構造体まるごと出力を使っているのであれば、 ゲームのセーブデータで構造体やクラスをまるごとバイナリ出力しても問題ないととらえてよいのかな?
- 871 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 12:30:10.75 ID:4KhiFNHT.net]
- >>870
bmpファイルには仕様があるので「Windowsのプログラマがどうたら」なんぞ関係無く仕様に従って読み書きすべし (現実には仕様に従わない入出力をやらかすアプリ毎に対処することはあるが) 自分で定義した構造体でも外部に公開するなら仕様を決めそれに準ずるべし 公開しないならそれこそ構造体丸ごとダンプなり好きにすれば良い 実際にそういう実装は珍しいものじゃない どうせ環境の変化で困るとしてもそれは自分だけだからね
|

|