- 1 名前:デフォルトの名無しさん [2018/08/27(月) 16:02:00.94 ID:vY3QDx2y0.net]
- 次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part137 https://mevius.5ch.net/test/read.cgi/tech/1531558382/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.103【環境依存OK】 https://mevius.5ch.net/test/read.cgi/tech/1530384293/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) ----- テンプレ ここまで ----- VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
- 2 名前:デフォルトの名無しさん [2018/08/27(月) 16:03:04.41 ID:vY3QDx2y0.net]
- すまんスレ番ミスった
- 3 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 16:03:29.14 ID:H/K1FpSE0.net]
- 謝って許されることじゃないね
- 4 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 16:22:40.23 ID:oonIPXiN0.net]
- こういうヤツがプログラミングするとえらいことになる
- 5 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 16:26:27.53 ID:7PWma/MO0.net]
- 1 はクズ
- 6 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 17:22:00.81 ID:TVAO+u4x0.net]
- フェイルセイフ機構として
スレッドを立てて何分間あるいはレス何個までは 立てた人に限りタイトルを修正できる、 みたいな機能があっても良いかも知れ
- 7 名前:。
あるいは事前に「これから立てるスレッドは〜の後継である」 みたいな宣言ができて、重複や番号の間違いをチェックしてくれるとか。 [] - [ここ壊れてます]
- 8 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 17:25:07.23 ID:H/K1FpSE0.net]
- >>6
それいいな。しばらく放置して、正当スレと認められたら 時間ギリギリで>>1の内容を書き換えるのにちょうどいい
- 9 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 18:21:58.03 ID:xvf87VjGa.net]
- 結局どうするん?
ここ使用?
- 10 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 22:39:11.81 ID:oahf+hzU0.net]
- vector<object*>* func()
{ vector<object*>* vect = new vector<object*>; for(int i = 0; i < 10; ++i) { object* obj = new object; vect->push_back(obj); } return vect; } 若干うろ覚えなんですけどこんな関数があります。ポインターを収納したベクターへのポインターを返すというものです。 まず質問なんですけど、関数内でnewして確保したメモリアドレスを返すってこれあまり良くないこと……ですよね?それともよくあることでしょうか。 それともう一つ。仮にmainなりどこかでこの関数の戻り値を受け取って利用したあと、メモリ解放はどうすればよいのでしょう 例えばdelete vectだけか、それともobject*をループで回して全部にdeleteすればいいのか、それとも両方やらにゃならんのか よろしくお願いします。
- 11 名前:デフォルトの名無しさん [2018/08/27(月) 22:45:10.99 ID:X1STgCw40.net]
- どなたか c++でのソケット通信を使った複数人が使えるチャットのサンプルコード持ってる人いませんか?
ネットで色々調べてるんですけど、tcpじゃなくてUDPのやつだったりwindowsじゃなかったりcだったり書いてあることが難し過ぎたり... そもそも1:1のコードばかりで複数人対応のサンプルコードが見つかりませんorz
- 12 名前:デフォルトの名無しさん [2018/08/27(月) 22:46:54.38 ID:X1STgCw40.net]
- 複数人対応にするにあたって、複数のソケットを用意するのとselect関数が必要になると思うのですけど、selectの方はおそらく理解できています。
複数のソケットからアクセプトされるところの流れが全然分からないです。 今自分が書いてみたコードだとスタックオーバーフローというらしい現象が起こってしまってます。
- 13 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 22:47:25.25 ID:CIUWIYCt0.net]
- 難しくないものは存在しないとオモ
- 14 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 22:50:37.52 ID:oonIPXiN0.net]
- >>9
ループで回して解放しないとダメ JAVA脳だと放置するところだけど
- 15 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 22:57:17.24 ID:AuFamtLr0.net]
- >>9
どっちもnewするなら両方deleteしないといけない(もちろんobjをループでdeleteするのが先 何が良い・良くないは自分で考えた方がいいよ >>11 アクセプトされる、ってのは認識がおかしい listenしたソケットに来た接続要求を、acceptで受け入れてクライアントとのセッションを開始する サーバーはlistenで要求待ちするソケットと、acceptでクライアントと通信するソケットを持つ クライアントはconnectでサーバーに接続して通信するだけ(ソケットは1つでよい)
- 16 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 23:00:46.13 ID:CP0MczZVM.net]
- >>11
コードさらした方が話が早いよ それより複数人だとどういうトポロジーで繋ぐの? 例えば4人だとどうなる?
- 17 名前: mailto:sage [2018/08/27(月) 23:09:16.63 ID:W4qvSHyH0.net]
- >>10-11
次の本が、似たような状況(たしかレーシングゲームだったか)のサンプルを載せていたと記憶しています https://www.amazon.co.jp/gp/product/4774117544/ Windows の winsock も UNIX のバークレーソケットと似たようなもので、若干の修正は必要ですが、そこはネットを参考にして書きなおせる範囲だと思います この本は初版が 1992 年頃に出たときから htons()/ntohs() が書いていない、とボロカスだったんですが、私はとっても好きだったのです…
- 18 名前:デフォルトの名無しさん [2018/08/27(月) 23:16:58.65 ID:zX+eejgv0.net]
- listenで待ってるスレッド(もしくはプロセス、こっちならあとでfork()する)がいる
listenで待ってるスレッドやプロセスからacceptして peerと新しいソケットで通信するスレッドを作る もうコレで分かる
- 19 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 23:32:35.96 ID:ba8BcfX30.net]
- >>9
ゲームエンジンの本には、よくメモリープールの実装が載っている。 こういう機能を抽象化した、モジュールを誰かが作っているはず Effective とか、デザインパターンの本も読んだ方がよい
- 20 名前:デフォルトの名無しさん [2018/08/27(月) 23:32:44.53 ID:X1STgCw40.net]
- サーバーが自分用のソケット一つと複数個のユーザー用ソケットを作成し、ユーザー 一人につき一つのソケットが割り振られるイメージでした。
- 21 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 23:52:05.98 ID:H8sSdLfla.net]
- こんな感じにpublicにもmainいてもエラーにならないのはどうしてですか?
Main.h class CMain { public: int main(int argc, char* argv[]); }; Main.cpp int main(int argc, char* argv[]) { return 0; }
- 22 名前:デフォルトの名無しさん [2018/08/27(月) 23:57:35.85 ID:TZo7knfc0.net]
- 一般関数のmainとメンバ関数Cmain::main()は別物だろうよ。
- 23 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 00:05:18.35 ID:04IHxsB70.net]
- >>20
名前空間が違っていて区別がつくから同じ名前のものがあっても大丈夫。
- 24 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 00:18:40.52 ID:wxxo3xcIa.net]
- >>21,22
なるほど、それもそうですね
- 25 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 07:30:50.31 ID:r63k0nU70.net]
- >>13 >>14
ありがとうございました。やっぱ両方なんですね >>18 メモリープール初めて知りましたがこんな方法あるんですね あと上司がおよそ20年に渡って継ぎ足し継ぎ足ししてきたすぱg秘伝のコードなので今更構造変えられんのです……
- 26 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 07:39:23.68 ID:oGnGbrSA0.net]
- スマポつかえよ!
- 27 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 07:44:24.16 ID:BzDdgzNr0.net]
- 上司のコードに文句言いつつデリートも知らん奴がなんか言っとる
- 28 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 07:49:16.32 ID:oGnGbrSA0.net]
- 勇んでデリートするようなコード書きたいか?
- 29 名前:はちみつ餃子 mailto:sage [2018/08/28(火) 08:58:31.81 ID:vCTFJ2QC0.net]
- >>24
リファクタリングの機会を設けないと秘伝が負債になるのがこの業界
- 30 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 08:59:48.56 ID:TEJeUOom0.net]
- auto pointer, smart pointer ?
- 31 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 10:05:03.87 ID:oGnGbrSA0.net]
- rip.auto_ptr.
- 32 名前:デフォルトの名無しさん [2018/08/28(火) 15:32:29.83 ID:2BUW4hJo0.net]
- >>19
1:1のソケットを4つ用意すれば4人でチャットできますよね?送ったメッセージをサーバーサイドが受け取って他の3人のソケットに送るイメージです
- 33 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 15:45:07.84 ID:FmvTK/aC0.net]
- あー、それなら合ってるね
そのままのイメージで書いてみればいける
- 34 名前:デフォルトの名無しさん [2018/08/28(火) 19:28:50.38 ID:2BUW4hJo0.net]
- >>32
それぞれのソケットの中身で違うのはポートだけってことで大丈夫ですかね?
- 35 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 19:45:32.21 ID:FmvTK/aC0.net]
- まぁポートだけ、というかリスニングの処理だけ特殊とは言えるかも
- 36 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 20:36:55.08 ID:jw/yHSMpr.net]
- このスレって競プロerいる?
- 37 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 23:15:21.08 ID:q8rsvszA0.net]
- >>35
いる
- 38 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 00:22:05.79 ID:9tKCPoRq0.net]
- 関数からreturnされる値は必ず自動的にmoveされる?
- 39 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 00:25:41.59 ID:uf5REJu50.net]
- コンパイラと設定によると思う
- 40 名前:デフォルトの名無しさん [2018/08/29(水) 00:26:07.98 ID:zRPnCBM00.net]
- 計算機S 192.168.0.1:40000 ⇔ 計算機A 192.168.0.16:41769
計算機S 192.168.0.1:40000 ⇔ 計算機B 192.168.0.17:61544 計算機S 192.168.0.1:40000 ⇔ 計算機C 192.168.0.18:61568 計算機S 192.168.0.1:40000 ⇔ 計算機D 192.168.0.19:63490 ↑ ↑最初に接続する計算機のポートは通常自動的に空き番が使われるようにする 計算機Sからみてpeerは 計算機Sが受付を待っているポートに 接続する必要がある
- 41 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 01:16:31.78 ID:nUvoSPGm0.net]
- え、TCPいうてたしサーバーのIPとポート指定して接続してつなぎっぱなしを想定してたんだけど違うのか
いちいち切って繋ぎ直すなら別だけど
- 42 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 01:39:42.75 ID:+EFc44O50.net]
- 受付嬢は一人、ご相談は各担当に回す
みたいな
- 43 名前:はちみつ餃子 mailto:sage [2018/08/29(水) 01:56:45.22 ID:iljSGsda0.net]
- >>37
値が rvalue でムーブコンストラクタが存在するならばムーブされる。 (lvalue も状況によっては rvalue になることもある。) ただし、 RVO の適用条件に叶う場合は RVO が適用されるかもしれないのでコピーもムーブもされないことは有りうる。
- 44 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 13:02:14.24 ID:3zmBLDqv0.net]
- Hogeというクラスがあったとして、
Hoge getHoge(); という関数があるときに、 Hoge &hoge = getHoge(); と参照で受けて問題ない?
- 45 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 13:31:26.82 ID:8DgsmGan0.net]
- ダメ
getHoge()の返却値はprvalueなので constのない左辺値参照で受けることはできない 右辺値参照か、 constのついた左辺値参照が必要
- 46 名前:はちみつ餃子 mailto:sage [2018/08/29(水) 15:21:15.25 ID:iljSGsda0.net]
- >>43
getHoge() の返却値は一時的なオブジェクトなので 原則としては完全式の終わりに解体されることに なっているが、 >>44 の述べる通りの方法で参照で受けたときに限って 例外的に寿命が延長される規則がある。 参照のスコープの終わりがオブジェクトの寿命になる。 RVO が発動するだろうから、そもそも参照で受ける意味があんまり無いと思う。
- 47 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 00:25:01.05 ID:kCgj5iLA0.net]
- 書籍スレで聞いたらスレチ(?)と言われたので質問させて下さい(m´・ω・`)m
C++で新し目(出来れば2016年以降に発売したもの)の入門書でオススメがあれば教えていただきたいのですが… よろしくお願い致します。
- 48 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 01:05:42.98 ID:RsXRD1vR0.net]
- ありません( ー`дー´)キリッ
- 49 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 02:11:48.32 ID:0LlXI/R20.net]
- Effective Modern C++は読んどいたほうがいいけど入門書じゃねえな
うーん
- 50 名前:デフォルトの名無しさん [2018/08/30(木) 02:18:12.89 ID:VcrE/h+O0.net]
- >>43
全く問題ない。 規格にもしっかり書いてある。
- 51 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 05:39:20.37 ID:zs5ycFHj0.net]
- >>49
どこに?
- 52 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 07:30:44.91 ID:3T0jr2180.net]
- >>46
あるわけいだろ C++は入門言語じゃない
- 53 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 07:40:22.80 ID:zs5ycFHj0.net]
- >>46
このへん ISBN-10: 4797394633 日本人の著者では柴田氏の作風が俺的にはお奨め 入門だからって抜いちゃいかんことを押さえてる ISBN-10: 4798119598 C++といえばこの人 出版が2011年とやや古めだが プログラミングの地頭を鍛えてくれる
- 54 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 08:03:54.88 ID:ff0XXJ3a0.net]
- そもそも、何も知らない初心者がなんで「2016年以降」とか限定するんだ?
何か根拠があるわけでもないだろう。
- 55 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 08:35:46.61 ID:GbaSH31o0.net]
- 古い本だと古い規格で説明されてるから、初心者には良くないって点はあるね。
#include <cstdio.h> みたいな中途半端な古さは特にやっかい。 『プログラミング言語C++』第4版を読んどきゃええじゃろ、と思ったけど 初版が2015年3月だから「古い本」だな。
- 56 名前:デフォルトの名無しさん [2018/08/30(木) 09:34:44.57 ID:CAfiYqURM.net]
- 2016年に何かあったの?
- 57 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 10:11:29.31 ID:zs5ycFHj0.net]
- > #include <cstdio.h>
こんな時代あったか?
- 58 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 10:17:39.13 ID:ABjDmLki0.net]
- ときどきCがわかってない日本人が入門書書いてたりして余計路頭に迷わせたりする
- 59 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 10:25:15.01 ID:Usgn3Z4yr.net]
- >>48
effective 「modern」 c++ って良いの? ただの effective は良いってほぼ全員認めてるが、more とか modern はあまり勧められないしどうでも良い本なのかと思ってた
- 60 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 10:56:25.83 ID:6+1XpMNpM.net]
- math.hとcmathってどっちがいいの?
そもそもcmathインクルードしてもM_PI使えんしよく分からない
- 61 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 10:58:18.11 ID:OpvYfh8NM.net]
- >>58
effectiveならいいっていう老害なんだろ
- 62 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 11:01:43.96 ID:OpvYfh8NM.net]
- >>52
柴田の本は辞めとけ 初心者には無理 あれは大学の講義でかわされるやつ
- 63 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 11:49:16.45 ID:zs5ycFHj0.net]
- >>61
初心者つーかオマエだろ? 大学の授業についていけない二回転5 難癖ばっかりつけてないで 幼児用のC++の本を出してみな
- 64 名前:はちみつ餃子 mailto:sage [2018/08/30(木) 12:34:40.85 ID:8c0RjkhV0.net]
- >>59
cmath を使うべき。 C のヘッダは互換性のために残されているだけで、積極的に使うようなものではない。 M_PI は C の規格にも C++ の規格にもないマイクロソフト独自の拡張だから、 マイクロソフトがどういう気持ちで用意しているのかは知らないけど、 _USE_MATH_DEFINES マクロを #define しておけば Visual Studio では有効になるらしいぞ。 https://msdn.microsoft.com/ja-jp/library/4hwaceh6.aspx
- 65 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 12:46:26.01 ID:zs5ycFHj0.net]
- C++17でcmathが大幅強化されたね
ISO/IEC29124の特殊関数を取り入れた
- 66 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 12:52:55.39 ID:5ZKhK1u9d.net]
- >>58
modernはC++11以降を使うなら必読だぞ むしろ素effectiveやmoreの方が古くてあんまり役に立たなくなってる
- 67 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 13:14:44.70 ID:ypFQk8hw0.net]
- >>63
gccの独自拡張じゃねえの むしろMSはそれに合わせてる 長いものには巻かれろ、ってヤツだ 長い方はMSじゃなくgcc
- 68 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 13:37:08.32 ID:ZM/Yh9noM.net]
- 柴田の本は昔から悪書扱いされてる
あえて読むことはないと思うわ
- 69 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 13:37:55.22 ID:zs5ycFHj0.net]
- だから読んでないわけか
- 70 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 13:58:51.87 ID:ZM/Yh9noM.net]
- 昔は読んでたよ
20年以上前かな いまでもjavaやc++のやつは図書館でたまにペラペラしてみるけど 読みづらくて全然合わないと感じる 同じジャンルで山田祥寛の本があったらそっちを読む
- 71 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 14:09:38.78 ID:zs5ycFHj0.net]
- つまり読んでないってことだろ
図書館でペラペラってなぜそんなことをするんだ C++を20年以上やってるんだろ
- 72 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 14:38:25.23 ID:A7u5khVs0.net]
- 人にC++言語について教える時に、人口に膾炙した書籍の表現を使うのが無難だからでしょ。
- 73 名前:54 mailto:sage [2018/08/30(木) 15:34:47.96 ID:GbaSH31o0.net]
- >>56 すまん <cstdio.h> は変ね。<stdio.h> と <cstdio> が混ざってしまった。
<cstdio.h> というヘッダが存在する処理系もあるか知れんけど、 #include で使えと教えてる本はないだろうな。 主旨は「半端に古い本だと」で変わらないけど、良い例が出せんわ。
- 74 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 15:49:06.15 ID:zs5ycFHj0.net]
- >>72
それを言うなら <stream.h> //cfront 1.0 <iostream.h> //ARM <iostream> //C++98 じゃね?
- 75 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 16:04:11.38 ID:pLYrs11p0.net]
- 質問なんだがコンパイル時間の観点から見て、ヘッダをインクルードするときは必要でない限りcppファイルでincludeするべき?
- 76 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 16:13:39.13 ID:zs5ycFHj0.net]
- #includeのネストを避けろということか?
そう主張する連中もいるが、俺は反対
- 77 名前:はちみつ餃子 mailto:sage [2018/08/30(木) 16:18:52.75 ID:8c0RjkhV0.net]
- >>74
ちょっと質問の意図がよくわかんないんだけど、逆に言えば 「ヘッダファイル (*.h) が他のヘッダファイルを include するのはコンパイル時間を増大させるか?」という意味? あんまり関係ないよ。 よっぽど大きいプロジェクト (gcc とか) ならちょっとしたことで結構な差が出ることは無いとは言えないけど、 それでもプリコンパイルヘッダとかを活用すればだいぶん時間は短縮できるし、 更に高速化したいならキャッシュサーバを使うコンパイラもある。 https://github.com/yrnkrn/zapcc ・ 小さいプロジェクトでは気になるほどの差はない ・ 大きいプロジェクトではツールで解決しよう
- 78 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 16:23:45.00 ID:zs5ycFHj0.net]
- コンパイラは可能な限り高性能なマシンで使うべし
- 79 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 16:52:55.72 ID:pLYrs11p0.net]
- 例えばstd::stringをhoge.hでは使わずhoge.cppのみで使われている場合
hoge.hで#include<string>と書くと、他のファイルからhoge.hをincludeしたとき無駄が出るはず だからhoge.cppで#include<string>と書いた方がいいのが、それとも些細な差なので全部hoge.hにぶち込んでもいいのかということ
- 80 名前:デフォルトの名無しさん [2018/08/30(木) 16:55:06.24 ID:zs5ycFHj0.net]
- なるほど、実装で使うだけで宣言にはいらないものか
だったらhoge.cppで#includeしたほうがいいね
- 81 名前:デフォルトの名無しさん [2018/08/30(木) 17:19:10.16 ID:X06N8JK80.net]
- www.geekpage.jp/programming/linux-network/select.php
なんかソケットごとに違うポートを割り振るものだと思ってたのですが、 listen(srcSocket, 1);//第二引数はクライアント上限数 この第2因数をいじったら同じポートでも普通に接続できました。 このまま気にせずselect処理書いていっても大丈夫ですかね...? 通信関係あまり知らないのでバグったりするとどうなるか分からずちょっと怖いです。 相手用のソケットは int dstsocket[5]の様な感じで作って中身は全部一緒です
- 82 名前:はちみつ餃子 mailto:sage [2018/08/30(木) 17:49:39.07 ID:8c0RjkhV0.net]
- >>78
その場合だと .cpp に書いた方が当然良い。
- 83 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 18:56:44.69 ID:aIx07XQj0.net]
- プリコンパイル済みヘッダを、いちいち書かなきゃいけなくなるのがあれだから使わない方がいいと言われたことがある
なぜそれでコンパイルが遅いって文句言ってるのか分からない・・・
- 84 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 21:34:38.22 ID:A5r5+/4B0.net]
- https://ezoeryou.github.io/cpp17book/
辞書にするならこれ。役に立ったら書籍版買ってあげよう。
- 85 名前:デフォルトの名無しさん [2018/08/30(木) 22:17:19.27 ID:/0YXnEsV0.net]
- 書いても大丈夫だが、そういうやりかたにするならselectでブロックしないように注意したほうがいい
selectをブロックしたままの状態にすると、当然、そのあと永遠にacceptされない きっとスレッドにしたほうが簡単
- 86 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 23:08:40.56 ID:yw5JoOBN0.net]
- >>78
hoge.hでstd::stringを使ってないのに#include<string>を書く、という発想が理解できない #include<string>はstd::stringを使ってるところに書く、使ってないところには書かない、でいいじゃん 変更があって使わなくなったのに#includeは残ってるのがありがちで嫌なところ 静的解析とかで指摘して欲しい
- 87 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 23:48:27.87 ID:Eu7R++g90.net]
- >>80 ひきすう
- 88 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 14:08:47.35 ID:KIctO/Rq0.net]
- >>80
変な心配せずに書いて覚えた方が早いよ あと最初TCPって言ってたよね? もしTCPで通信ごとにポート変えなきゃいけないなら、Yahoo見に行く時毎回ポート変えてんの? HTTPは80番って決まってるやろ? あと何のためにその第二引数があるの?
- 89 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 19:45:34.91 ID:3sSjwoo80.net]
- 恥ずかしながら char と signed char が違うものだって知りませんでした…(独り言)
- 90 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 19:48:20.37 ID:+YiNyVyB0.net]
- 処理系による
- 91 名前: mailto:sage [2018/08/31(金) 19:53:07.91 ID:saaKamBG0.net]
- >>88
signed char とか unsigned char とか明言されず、ただ char としか書いていない場合、 その char が signed char になるのか、それとも unsigned char なのかは 「処理系依存」・コンパイラ依存だった、という経緯が C の時代からあったのでした 「signed char でも unsigned char でもない『「alternative な char』がある」 という意味ではないのです "alternative char"…なんかだ魅惑される響きだと感じ入ってしまうのは、私だけですか…
- 92 名前:はちみつ餃子 mailto:sage [2018/08/31(金) 20:24:19.94 ID:NWzNDPzW0.net]
- >>90
char は signed char でも unsigned char でもないです。 C でも C++ でも。
- 93 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 20:30:14.89 ID:LcHwdHfr0.net]
- ?
charとsigned charとunsigned charは全部別の型だろ。
- 94 名前:はちみつ餃子 mailto:sage [2018/08/31(金) 20:39:51.15 ID:NWzNDPzW0.net]
- char は (型システム的には) signed char でも unsigned char でもないけど、
符号付きか符号なしのどちらかではあり、 その表現は処理系によって signed char か unsigned char のどちらかと実質的に等しいことになってる。 だいたいは暗黙の型変換が自然にうまいことやってくれるんだけど、 C++ だとオーバーロードの解決にかかわるところとかややこしいな。
- 95 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 20:40:27.43 ID:fKtAGZM00.net]
- std::byteとかいうゴミはどう使えばいいんだ?
- 96 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 20:41:47.58 ID:jQ6ZKbRRM.net]
- >>89-90
そういう話じゃなくて文字列型にはchar, unsigned char, signed charの3つがあるって話じゃないの?
- 97 名前:はちみつ餃子 mailto:sage [2018/08/31(金) 20:50:33.26 ID:NWzNDPzW0.net]
- >>94
数値計算のための演算子が定義されてないのが重要なポイントだな。 なんらかの入力をビットパターンとして処理したいときに使える。 ビット表現に関する C/C++ での規則は未定義の部分もあって、 数値とビット表現の対応付けは処理系 (アーキテクチャ) によるので、 数値としての演算の結果 (の数字をビットパターンとして見た場合) は一意ではない。 std::byte でデータを保持しておけばうっかり数値計算してしまったりしない。 std::byte があることで特にできるようになることがあるわけじゃないけど、 うっかりを防止するために防衛的に使うもんだと思う。
- 98 名前: mailto:sage [2018/08/31(金) 20:57:38.41 ID:saaKamBG0.net]
- >>91
https://ideone.com/5zhQcP …なるほど、そういう風に解釈するんですか!? また一つ賢くなりました
- 99 名前:はちみつ餃子 mailto:sage [2018/08/31(金) 21:21:37.54 ID:NWzNDPzW0.net]
- >>97
もうひとつ面白い点としては、そこから void f(char c) の定義を消すと char c = -12; f(c); という呼出しは解決できずエラーになる。 char, unsigned char, signed char は「順位」が同じなので、 呼出し候補としては同格になってしまい、ひとつに絞れないから。 もしも char が unsigned char か signed char かのどちらかなら、 どちらが呼び出されるにしてもひとつには絞れるのでこういう問題にはならないのだけれど。 ストリームに対する operator<< が char と unsigned char と signed char のそれぞれに用意されているのは、 そういう曖昧さが起こらないようにするため。
- 100 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 22:36:19.33 ID:mXpACRvK0.net]
- >>95
文字列型はchar signed char, unsigned charは小さい数を格納する
- 101 名前:はちみつ餃子 mailto:sage [2018/08/31(金) 23:16:56.24 ID:NWzNDPzW0.net]
- 「文字列型」という言葉を使うと語弊がある気がするぞ。
|

|