C++相談室 part137at TECH
C++相談室 part137 - 暇つぶし2ch2:デフォルトの名無しさん
18/08/27 16:03:04.41 vY3QDx2y0.net
すまんスレ番ミスった

3:デフォルトの名無しさん
18/08/27 16:03:29.14 H/K1FpSE0.net
謝って許されることじゃないね

4:デフォルトの名無しさん
18/08/27 16:22:40.23 oonIPXiN0.net
こういうヤツがプログラミングするとえらいことになる

5:デフォルトの名無しさん
18/08/27 16:26:27.53 7PWma/MO0.net
1 はクズ

6:デフォルトの名無しさん
18/08/27 17:22:00.81 TVAO+u4x0.net
フェイルセイフ機構として
スレッドを立てて何分間あるいはレス何個までは
立てた人に限りタイトルを修正できる、
みたいな機能があっても良いかも知れ�


7:B あるいは事前に「これから立てるスレッドは~の後継である」 みたいな宣言ができて、重複や番号の間違いをチェックしてくれるとか。



8:デフォルトの名無しさん
18/08/27 17:25:07.23 H/K1FpSE0.net
>>6
それいいな。しばらく放置して、正当スレと認められたら
時間ギリギリで>>1の内容を書き換えるのにちょうどいい

9:デフォルトの名無しさん
18/08/27 18:21:58.03 xvf87VjGa.net
結局どうするん?
ここ使用?

10:デフォルトの名無しさん
18/08/27 22:39:11.81 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:デフォルトの名無しさん
18/08/27 22:45:10.99 X1STgCw40.net
どなたか c++でのソケット通信を使った複数人が使えるチャットのサンプルコード持ってる人いませんか?
ネットで色々調べてるんですけど、tcpじゃなくてUDPのやつだったりwindowsじゃなかったりcだったり書いてあることが難し過ぎたり...
そもそも1:1のコードばかりで複数人対応のサンプルコードが見つかりませんorz

12:デフォルトの名無しさん
18/08/27 22:46:54.38 X1STgCw40.net
複数人対応にするにあたって、複数のソケットを用意するのとselect関数が必要になると思うのですけど、selectの方はおそらく理解できています。
複数のソケットからアクセプトされるところの流れが全然分からないです。
今自分が書いてみたコードだとスタックオーバーフローというらしい現象が起こってしまってます。

13:デフォルトの名無しさん
18/08/27 22:47:25.25 CIUWIYCt0.net
難しくないものは存在しないとオモ

14:デフォルトの名無しさん
18/08/27 22:50:37.52 oonIPXiN0.net
>>9
ループで回して解放しないとダメ
JAVA脳だと放置するところだけど

15:デフォルトの名無しさん
18/08/27 22:57:17.24 AuFamtLr0.net
>>9
どっちもnewするなら両方deleteしないといけない(もちろんobjをループでdeleteするのが先
何が良い・良くないは自分で考えた方がいいよ
>>11
アクセプトされる、ってのは認識がおかしい
listenしたソケットに来た接続要求を、acceptで受け入れてクライアントとのセッションを開始する
サーバーはlistenで要求待ちするソケットと、acceptでクライアントと通信するソケットを持つ
クライアントはconnectでサーバーに接続して通信するだけ(ソケットは1つでよい)

16:デフォルトの名無しさん
18/08/27 23:00:46.13 CP0MczZVM.net
>>11
コードさらした方が話が早いよ
それより複数人だとどういうトポロジーで繋ぐの?
例えば4人だとどうなる?

17:
18/08/27 23:09:16.63 W4qvSHyH0.net
>>10-11
次の本が、似たような状況(たしかレーシングゲームだったか)のサンプルを載せていたと記憶しています
URLリンク(www.amazon.co.jp)
Windows の winsock も UNIX のバークレーソケットと似たようなもので、若干の修正は必要ですが、そこはネットを参考にして書きなおせる範囲だと思います
この本は初版が 1992 年頃に出たときから htons()/ntohs() が書いていない、とボロカスだったんですが、私はとっても好きだったのです…

18:デフォルトの名無しさん
18/08/27 23:16:58.65 zX+eejgv0.net
listenで待ってるスレッド(もしくはプロセス、こっちならあとでfork()する)がいる
listenで待ってるスレッドやプロセスからacceptして
peerと新しいソケットで通信するスレッドを作る
もうコレで分かる

19:デフォルトの名無しさん
18/08/27 23:32:35.96 ba8BcfX30.net
>>9
ゲームエンジンの本には、よくメモリープールの実装が載っている。
こういう機能を抽象化した、モジュールを誰かが作っているはず
Effective とか、デザインパターンの本も読んだ方がよい

20:デフォルトの名無しさん
18/08/27 23:32:44.53 X1STgCw40.net
サーバーが自分用のソケット一つと複数個のユーザー用ソケットを作成し、ユーザー 一人につき一つのソケットが割り振られるイメージでした。

21:デフォルトの名無しさん
18/08/27 23:52:05.98 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:デフォルトの名無しさん
18/08/27 23:57:35.85 TZo7knfc0.net
一般関数のmainとメンバ関数Cmain::main()は別物だろうよ。

23:デフォルトの名無しさん
18/08/28 00:05:18.35 04IHxsB70.net
>>20
名前空間が違っていて区別がつくから同じ名前のものがあっても大丈夫。

24:デフォルトの名無しさん
18/08/28 00:18:40.52 wxxo3xcIa.net
>>21,22
なるほど、それもそうですね

25:デフォルトの名無しさん
18/08/28 07:30:50.31 r63k0nU70.net
>>13 >>14
ありがとうございました。やっぱ両方なんですね
>>18
メモリープール初めて知りましたがこんな方法あるんですね
あと上司がおよそ20年に渡って継ぎ足し継ぎ足ししてきたすぱg秘伝のコードなので今更構造変えられんのです……

26:デフォルトの名無しさん
18/08/28 07:39:23.68 oGnGbrSA0.net
スマポつかえよ!

27:デフォルトの名無しさん
18/08/28 07:44:24.16 BzDdgzNr0.net
上司のコードに文句言いつつデリートも知らん奴がなんか言っとる

28:デフォルトの名無しさん
18/08/28 07:49:16.32 oGnGbrSA0.net
勇んでデリートするようなコード書きたいか?

29:はちみつ餃子
18/08/28 08:58:31.81 vCTFJ2QC0.net
>>24
リファクタリングの機会を設けないと秘伝が負債になるのがこの業界

30:デフォルトの名無しさん
18/08/28 08:59:48.56 TEJeUOom0.net
auto pointer, smart pointer ?

31:デフォルトの名無しさん
18/08/28 10:05:03.87 oGnGbrSA0.net
rip.auto_ptr.

32:デフォルトの名無しさん
18/08/28 15:32:29.83 2BUW4hJo0.net
>>19
1:1のソケットを4つ用意すれば4人でチャットできますよね?送ったメッセージをサーバーサイドが受け取って他の3人のソケットに送るイメージです

33:デフォルトの名無しさん
18/08/28 15:45:07.84 FmvTK/aC0.net
あー、それなら合ってるね
そのままのイメージで書いてみればいける

34:デフォルトの名無しさん
18/08/28 19:28:50.38 2BUW4hJo0.net
>>32
それぞれのソケットの中身で違うのはポートだけってことで大丈夫ですかね?

35:デフォルトの名無しさん
18/08/28 19:45:32.21 FmvTK/aC0.net
まぁポートだけ、というかリスニングの処理だけ特殊とは言えるかも

36:デフォルトの名無しさん
18/08/28 20:36:55.08 jw/yHSMpr.net
このスレって競プロerいる?

37:デフォルトの名無しさん
18/08/28 23:15:21.08 q8rsvszA0.net
>>35
いる

38:デフォルトの名無しさん
18/08/29 00:22:05.79 9tKCPoRq0.net
関数からreturnされる値は必ず自動的にmoveされる?

39:デフォルトの名無しさん
18/08/29 00:25:41.59 uf5REJu50.net
コンパイラと設定によると思う

40:デフォルトの名無しさん
18/08/29 00:26:07.98 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:デフォルトの名無しさん
18/08/29 01:16:31.78 nUvoSPGm0.net
え、TCPいうてたしサーバーのIPとポート指定して接続してつなぎっぱなしを想定してたんだけど違うのか
いちいち切って繋ぎ直すなら別だけど

42:デフォルトの名無しさん
18/08/29 01:39:42.75 +EFc44O50.net
受付嬢は一人、ご相談は各担当に回す
みたいな

43:はちみつ餃子
18/08/29 01:56:45.22 iljSGsda0.net
>>37
値が rvalue でムーブコンストラクタが存在するならばムーブされる。
(lvalue も状況によっては rvalue になることもある。)
ただし、 RVO の適用条件に叶う場合は RVO が適用されるかもしれないのでコピーもムーブもされないことは有りうる。

44:デフォルトの名無しさん
18/08/29 13:02:14.24 3zmBLDqv0.net
Hogeというクラスがあったとして、
Hoge getHoge();
という関数があるときに、
Hoge &hoge = getHoge();
と参照で受けて問題ない?

45:デフォルトの名無しさん
18/08/29 13:31:26.82 8DgsmGan0.net
ダメ
getHoge()の返却値はprvalueなので
constのない左辺値参照で受けることはできない
右辺値参照か、
constのついた左辺値参照が必要

46:はちみつ餃子
18/08/29 15:21:15.25 iljSGsda0.net
>>43
getHoge() の返却値は一時的なオブジェクトなので
原則としては完全式の終わりに解体されることに
なっているが、 >>44 の述べる通りの方法で参照で受けたときに限って
例外的に寿命が延長される規則がある。
参照のスコープの終わりがオブジェクトの寿命になる。
RVO が発動するだろうから、そもそも参照で受ける意味があんまり無いと思う。

47:デフォルトの名無しさん
18/08/30 00:25:01.05 kCgj5iLA0.net
書籍スレで聞いたらスレチ(?)と言われたので質問させて下さい(m´・ω・`)m
C++で新し目(出来れば2016年以降に発売したもの)の入門書でオススメがあれば教えていただきたいのですが…
よろしくお願い致します。

48:デフォルトの名無しさん
18/08/30 01:05:42.98 RsXRD1vR0.net
ありません( ー`дー´)キリッ

49:デフォルトの名無しさん
18/08/30 02:11:48.32 0LlXI/R20.net
Effective Modern C++は読んどいたほうがいいけど入門書じゃねえな
うーん

50:デフォルトの名無しさん
18/08/30 02:18:12.89 VcrE/h+O0.net
>>43
全く問題ない。
規格にもしっかり書いてある。

51:デフォルトの名無しさん
18/08/30 05:39:20.37 zs5ycFHj0.net
>>49
どこに?

52:デフォルトの名無しさん
18/08/30 07:30:44.91 3T0jr2180.net
>>46
あるわけいだろ
C++は入門言語じゃない

53:デフォルトの名無しさん
18/08/30 07:40:22.80 zs5ycFHj0.net
>>46
このへん
ISBN-10: 4797394633
日本人の著者では柴田氏の作風が俺的にはお奨め
入門だからって抜いちゃいかんことを押さえてる
ISBN-10: 4798119598
C++といえばこの人
出版が2011年とやや古めだが
プログラミングの地頭を鍛えてくれる

54:デフォルトの名無しさん
18/08/30 08:03:54.88 ff0XXJ3a0.net
そもそも、何も知らない初心者がなんで「2016年以降」とか限定するんだ?
何か根拠があるわけでもないだろう。

55:デフォルトの名無しさん
18/08/30 08:35:46.61 GbaSH31o0.net
古い本だと古い規格で説明されてるから、初心者には良くないって点はあるね。
#include <cstdio.h> みたいな中途半端な古さは特にやっかい。
『プログラミング言語C++』第4版を読んどきゃええじゃろ、と思ったけど
初版が2015年3月だから「古い本」だな。

56:デフォルトの名無しさん
18/08/30 09:34:44.57 CAfiYqURM.net
2016年に何かあったの?

57:デフォルトの名無しさん
18/08/30 10:11:29.31 zs5ycFHj0.net
> #include <cstdio.h>
こんな時代あったか?

58:デフォルトの名無しさん
18/08/30 10:17:39.13 ABjDmLki0.net
ときどきCがわかってない日本人が入門書書いてたりして余計路頭に迷わせたりする

59:デフォルトの名無しさん
18/08/30 10:25:15.01 Usgn3Z4yr.net
>>48
effective 「modern」 c++ って良いの?
ただの effective は良いってほぼ全員認めてるが、more とか modern はあまり勧められないしどうでも良い本なのかと思ってた

60:デフォルトの名無しさん
18/08/30 10:56:25.83 6+1XpMNpM.net
math.hとcmathってどっちがいいの?
そもそもcmathインクルードしてもM_PI使えんしよく分からない

61:デフォルトの名無しさん
18/08/30 10:58:18.11 OpvYfh8NM.net
>>58
effectiveならいいっていう老害なんだろ

62:デフォルトの名無しさん
18/08/30 11:01:43.96 OpvYfh8NM.net
>>52
柴田の本は辞めとけ
初心者には無理
あれは大学の講義でかわされるやつ

63:デフォルトの名無しさん
18/08/30 11:49:16.45 zs5ycFHj0.net
>>61
初心者つーかオマエだろ?
大学の授業についていけない二回転5
難癖ばっかりつけてないで
幼児用のC++の本を出してみな

64:はちみつ餃子
18/08/30 12:34:40.85 8c0RjkhV0.net
>>59
cmath を使うべき。
C のヘッダは互換性のために残されているだけで、積極的に使うようなものではない。
M_PI は C の規格にも C++ の規格にもないマイクロソフト独自の拡張だから、
マイクロソフトがどういう気持ちで用意しているのかは知らないけど、
_USE_MATH_DEFINES マクロを #define しておけば Visual Studio では有効になるらしいぞ。
URLリンク(msdn.microsoft.com)

65:デフォルトの名無しさん
18/08/30 12:46:26.01 zs5ycFHj0.net
C++17でcmathが大幅強化されたね
ISO/IEC29124の特殊関数を取り入れた

66:デフォルトの名無しさん
18/08/30 12:52:55.39 5ZKhK1u9d.net
>>58
modernはC++11以降を使うなら必読だぞ
むしろ素effectiveやmoreの方が古くてあんまり役に立たなくなってる

67:デフォルトの名無しさん
18/08/30 13:14:44.70 ypFQk8hw0.net
>>63
gccの独自拡張じゃねえの
むしろMSはそれに合わせてる
長いものには巻かれろ、ってヤツだ
長い方はMSじゃなくgcc

68:デフォルトの名無しさん
18/08/30 13:37:08.32 ZM/Yh9noM.net
柴田の本は昔から悪書扱いされてる
あえて読むことはないと思うわ

69:デフォルトの名無しさん
18/08/30 13:37:55.22 zs5ycFHj0.net
だから読んでないわけか

70:デフォルトの名無しさん
18/08/30 13:58:51.87 ZM/Yh9noM.net
昔は読んでたよ
20年以上前かな
いまでもjavaやc++のやつは図書館でたまにペラペラしてみるけど
読みづらくて全然合わないと感じる

同じジャンルで山田祥寛の本があったらそっちを読む

71:デフォルトの名無しさん
18/08/30 14:09:38.78 zs5ycFHj0.net
つまり読んでないってことだろ
図書館でペラペラってなぜそんなことをするんだ
C++を20年以上やってるんだろ

72:デフォルトの名無しさん
18/08/30 14:38:25.23 A7u5khVs0.net
人にC++言語について教える時に、人口に膾炙した書籍の表現を使うのが無難だからでしょ。

73:54
18/08/30 15:34:47.96 GbaSH31o0.net
>>56 すまん <cstdio.h> は変ね。<stdio.h> と <cstdio> が混ざってしまった。
<cstdio.h> というヘッダが存在する処理系もあるか知れんけど、
#include で使えと教えてる本はないだろうな。
主旨は「半端に古い本だと」で変わらないけど、良い例が出せんわ。

74:デフォルトの名無しさん
18/08/30 15:49:06.15 zs5ycFHj0.net
>>72
それを言うなら
<stream.h> //cfront 1.0
<iostream.h> //ARM
<iostream> //C++98
じゃね?

75:デフォルトの名無しさん
18/08/30 16:04:11.38 pLYrs11p0.net
質問なんだがコンパイル時間の観点から見て、ヘッダをインクルードするときは必要でない限りcppファイルでincludeするべき?

76:デフォルトの名無しさん
18/08/30 16:13:39.13 zs5ycFHj0.net
#includeのネストを避けろということか?
そう主張する連中もいるが、俺は反対

77:はちみつ餃子
18/08/30 16:18:52.75 8c0RjkhV0.net
>>74
ちょっと質問の意図がよくわかんないんだけど、逆に言えば
「ヘッダファイル (*.h) が他のヘッダファイルを include するのはコンパイル時間を増大させるか?」という意味?
あんまり関係ないよ。
よっぽど大きいプロジェクト (gcc とか) ならちょっとしたことで結構な差が出ることは無いとは言えないけど、
それでもプリコンパイルヘッダとかを活用すればだいぶん時間は短縮できるし、
更に高速化したいならキャッシュサーバを使うコンパイラもある。
URLリンク(github.com)
・ 小さいプロジェクトでは気になるほどの差はない
・ 大きいプロジェクトではツールで解決しよう

78:デフォルトの名無しさん
18/08/30 16:23:45.00 zs5ycFHj0.net
コンパイラは可能な限り高性能なマシンで使うべし

79:デフォルトの名無しさん
18/08/30 16:52:55.72 pLYrs11p0.net
例えばstd::stringをhoge.hでは使わずhoge.cppのみで使われている場合
hoge.hで#include<string>と書くと、他のファイルからhoge.hをincludeしたとき無駄が出るはず
だからhoge.cppで#include<string>と書いた方がいいのが、それとも些細な差なので全部hoge.hにぶち込んでもいいのかということ

80:デフォルトの名無しさん
18/08/30 16:55:06.24 zs5ycFHj0.net
なるほど、実装で使うだけで宣言にはいらないものか
だったらhoge.cppで#includeしたほうがいいね

81:デフォルトの名無しさん
18/08/30 17:19:10.16 X06N8JK80.net
URLリンク(www.geekpage.jp)
なんかソケットごとに違うポートを割り振るものだと思ってたのですが、
listen(srcSocket, 1);//第二引数はクライアント上限数
この第2因数をいじったら同じポートでも普通に接続できました。
このまま気にせずselect処理書いていっても大丈夫ですかね...?
通信関係あまり知らないのでバグったりするとどうなるか分からずちょっと怖いです。
相手用のソケットは
int dstsocket[5]の様な感じで作って中身は全部一緒です

82:はちみつ餃子
18/08/30 17:49:39.07 8c0RjkhV0.net
>>78
その場合だと .cpp に書いた方が当然良い。

83:デフォルトの名無しさん
18/08/30 18:56:44.69 aIx07XQj0.net
プリコンパイル済みヘッダを、いちいち書かなきゃいけなくなるのがあれだから使わない方がいいと言われたことがある
なぜそれでコンパイルが遅いって文句言ってるのか分からない・・・

84:デフォルトの名無しさん
18/08/30 21:34:38.22 A5r5+/4B0.net
URLリンク(ezoeryou.github.io)
辞書にするならこれ。役に立ったら書籍版買ってあげよう。

85:デフォルトの名無しさん
18/08/30 22:17:19.27 /0YXnEsV0.net
書いても大丈夫だが、そういうやりかたにするならselectでブロックしないように注意したほうがいい
selectをブロックしたままの状態にすると、当然、そのあと永遠にacceptされない
きっとスレッドにしたほうが簡単

86:デフォルトの名無しさん
18/08/30 23:08:40.56 yw5JoOBN0.net
>>78
hoge.hでstd::stringを使ってないのに#include<string>を書く、という発想が理解できない
#include<string>はstd::stringを使ってるところに書く、使ってないところには書かない、でいいじゃん
変更があって使わなくなったのに#includeは残ってるのがありがちで嫌なところ
静的解析とかで指摘して欲しい

87:デフォルトの名無しさん
18/08/30 23:48:27.87 Eu7R++g90.net
>>80 ひきすう

88:デフォルトの名無しさん
18/08/31 14:08:47.35 KIctO/Rq0.net
>>80
変な心配せずに書いて覚えた方が早いよ
あと最初TCPって言ってたよね?
もしTCPで通信ごとにポート変えなきゃいけないなら、Yahoo見に行く時毎回ポート変えてんの?
HTTPは80番って決まってるやろ?
あと何のためにその第二引数があるの?

89:デフォルトの名無しさん
18/08/31 19:45:34.91 3sSjwoo80.net
恥ずかしながら char と signed char が違うものだって知りませんでした…(独り言)

90:デフォルトの名無しさん
18/08/31 19:48:20.37 +YiNyVyB0.net
処理系による

91:
18/08/31 19:53:07.91 saaKamBG0.net
>>88
signed char とか unsigned char とか明言されず、ただ char としか書いていない場合、
その char が signed char になるのか、それとも unsigned char なのかは
「処理系依存」・コンパイラ依存だった、という経緯が C の時代からあったのでした
「signed char でも unsigned char でもない『「alternative な char』がある」
という意味ではないのです
"alternative char"…なんかだ魅惑される響きだと感じ入ってしまうのは、私だけですか…

92:はちみつ餃子
18/08/31 20:24:19.94 NWzNDPzW0.net
>>90
char は signed char でも unsigned char でもないです。
C でも C++ でも。

93:デフォルトの名無しさん
18/08/31 20:30:14.89 LcHwdHfr0.net

charとsigned charとunsigned charは全部別の型だろ。

94:はちみつ餃子
18/08/31 20:39:51.15 NWzNDPzW0.net
char は (型システム的には) signed char でも unsigned char でもないけど、
符号付きか符号なしのどちらかではあり、
その表現は処理系によって signed char か unsigned char のどちらかと実質的に等しいことになってる。
だいたいは暗黙の型変換が自然にうまいことやってくれるんだけど、
C++ だとオーバーロードの解決にかかわるところとかややこしいな。

95:デフォルトの名無しさん
18/08/31 20:40:27.43 fKtAGZM00.net
std::byteとかいうゴミはどう使えばいいんだ?

96:デフォルトの名無しさん
18/08/31 20:41:47.58 jQ6ZKbRRM.net
>>89-90
そういう話じゃなくて文字列型にはchar, unsigned char, signed charの3つがあるって話じゃないの?

97:はちみつ餃子
18/08/31 20:50:33.26 NWzNDPzW0.net
>>94
数値計算のための演算子が定義されてないのが重要なポイントだな。
なんらかの入力をビットパターンとして処理したいときに使える。
ビット表現に関する C/C++ での規則は未定義の部分もあって、
数値とビット表現の対応付けは処理系 (アーキテクチャ) によるので、
数値としての演算の結果 (の数字をビットパターンとして見た場合) は一意ではない。
std::byte でデータを保持しておけばうっかり数値計算してしまったりしない。
std::byte があることで特にできるようになることがあるわけじゃないけど、
うっかりを防止するために防衛的に使うもんだと思う。

98:
18/08/31 20:57:38.41 saaKamBG0.net
>>91
URLリンク(ideone.com)
…なるほど、そういう風に解釈するんですか!?
また一つ賢くなりました

99:はちみつ餃子
18/08/31 21:21:37.54 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:デフォルトの名無しさん
18/08/31 22:36:19.33 mXpACRvK0.net
>>95
文字列型はchar
signed char, unsigned charは小さい数を格納する

101:はちみつ餃子
18/08/31 23:16:56.24 NWzNDPzW0.net
「文字列型」という言葉を使うと語弊がある気がするぞ。

102:デフォルトの名無しさん
18/08/31 23:21:39.46 R+q9F3xyM.net
現在時刻(またはPCやexe起動からの経過時間)をmillisecondsで取得する方法ってありますか?
mm-dd-yyみたいな形式ではなくて全部数字で取得したいです

103:デフォルトの名無しさん
18/08/31 23:24:08.56 4ZfpOo1s0.net
exeだからwindows
つまりGetTickCount()

104:
18/08/31 23:59:05.22 saaKamBG0.net
>>101
URLリンク(ideone.com)

105:デフォルトの名無しさん
18/09/01 00:01:43.12 eGvEpu9E0.net
なんでCの頃にcharを符号付きを許したのかが謎
文字は負の値にならないとかいうルールまで定めながら
charをunsignedと定義することを頑なに拒んだ古代の連中は一体何を守ろうとしたのか

106:デフォルトの名無しさん
18/09/01 00:06:54.80 eGvEpu9E0.net
charのsignedとunsignedの処理系依存の混乱さえなければ今でもmalloc()はchar*(サイズ1の型のポインタ)を返してくれて便利だったかもしれんのに、

107:デフォルトの名無しさん
18/09/01 00:09:21.94 /wwW4VSs0.net
asciiは7bit
いまでもC++はどんなオブジェクトでも(char*)でキャストすることは
仕様で許されてる

108:デフォルトの名無しさん
18/09/01 00:09:26.78 Lo8welT80.net
>>99
そうであればよかったんだけどstreamsでの扱いは全部文字型なんだよな。
おかげでuint8_tをstreamに出力したら文字が出てくる羽目に。

109:デフォルトの名無しさん
18/09/01 00:15:47.63 eGvEpu9E0.net
>>106
E B C D I C は 8 b  i  t  じ ゃ わ !
>>106
キ  ャ  ス  ト  し  た  だ  け  で  は  c h a r *  か  な  に  か  の  中  間  変  数  に  代  入  せ  ね  ば  
標  準  の  言  語  規  格  で  は  + +  や  - -  が  で  き  ん


110:デフォルトの名無しさん
18/09/01 00:21:54.31 eGvEpu9E0.net
スマン訂正;
誤: キ  ャ  ス  ト  し  た  だ  け  で  は  c h a r *  か  な  に  か  の  中  間  変  数  に  代  入  せ  ね  ば  
正: v o i d * 引  数  は  キ  ャ  ス  ト  し  た  だ  け  で  は  c h a r *  か  な  に  か  の  中  間  変  数  に  代  入  せ  ね  ば  


111:デフォルトの名無しさん
18/09/01 00:24:45.17 /wwW4VSs0.net
知見が狭い低学歴知恵遅れの世界では
伝統的なテキストがacsiiをさしてることすら
わかってないらしいわ
普通に古代のネットワークで7bitのネットワークとかあったからな
char*の変数に代入しないと
ポインターをインクリメントできないとかあたりまえやんけ
C++とか関係ない
相変わらず低学歴知恵遅れはなにをいってるのか意味不明

112:デフォルトの名無しさん
18/09/01 00:28:15.78 /wwW4VSs0.net
昔、なんでメールがiso-2022-jpしかかたくなにダメといわれてたか
きっとその理由も分かってない

113:デフォルトの名無しさん
18/09/01 00:36:37.58 eGvEpu9E0.net
>>110
えっっつ!?
伝統的なテキストの7 bitの文字コードはISO 646のことじゃないの;
ていうかASCIIが7 bitで表現できることはなんでCの頃にcharを符号付きを許したのか(>>104)を完全には説明しない
charをunsguned charにキめとけばアドレス全般を現す型としてのvoid*なんてものを別途作り出す必要も無く全員ニッコニコー☆だったかもしれんのに…

114:デフォルトの名無しさん
18/09/01 00:37:24.15 gChyprIt0.net
>>106
「どんなオブジェクトポインターでも」の間違い?

115:デフォルトの名無しさん
18/09/01 00:42:50.43 /wwW4VSs0.net
MSBに1がたってるオクテットが1つでも入ってたら
それはバイナリだ
オブジェクトを(char*)を普通にキャストできる
低学歴知恵遅れのどうでもいい感想やどうでもいい願望なんか関係ない
そういう仕様だからな
安全なPODは普通にキャストされることがある

116:デフォルトの名無しさん
18/09/01 00:44:26.13 /wwW4VSs0.net
オブジェクトポインターなのは
あたりまえ

117:デフォルトの名無しさん
18/09/01 01:14:05.21 xvCOhCpk0.net
7ビットでも8ビットでも表現できる言語の数は変わらないから

118:デフォルトの名無しさん
18/09/01 06:51:29.42 QGdL6q/H0.net
acsiiってなあに?低学歴知�


119:b遅れさん



120:デフォルトの名無しさん
18/09/01 07:13:19.96 hKSBbo0T0.net
>>117
涙拭けよ老眼

121:デフォルトの名無しさん
18/09/01 07:40:58.94 /JMJVp6oa.net
>>110

122:デフォルトの名無しさん
18/09/01 07:48:51.59 vnjaDev80.net
情報系大学3年生
恥ずかしいことに今までやっていた言語がC++じゃなくてCだったことを知った…
(だってVisualStudio起動するときにC++開発モードを選ぶように言われたんだもの)
そういうわけでC++はどんなもんかなと本屋でちらっと明解C++を手に取ってみたら全く別物じゃねえか…
わかんねえよ……ネットで調べてみたら複雑らしいし
Cならatcoderで緑色になるくらいは書けるけど、でも就活のときCしか書けませんC++わかりませんってかなり致命的?

123:デフォルトの名無しさん
18/09/01 08:00:36.94 np0z0HoI0.net
>>104
単なる char を int に変換する時に、符号拡張でも0拡張でも、
そのCPUで都合の良い(速く動作させることのできる)命令を使っていいよ、
っていう部分を重視したんじゃないかな。
文字コードは負にならないから、どっちで拡張しても結果に違いは生じない、
という保証が先にあっての話ということで。
MSBが1になる可能性がある8bit値なら signed/unsigned を明示しろと。
>>112
俺はむしろ「値を格納することを目的としない、抽象的な void* ポインタ」が
総称ポインタとして追加されたのを好ましいと思うけど。
「char* には他のどんなポインタもキャストして代入可能、そのポインタを介して
メモリアクセスすることも許す」の方が苦し紛れな気がする。
もちろん、このルールがないと本当に苦しい、ないと困るものだけど。

124:デフォルトの名無しさん
18/09/01 08:15:34.02 Pcb6gvc+0.net
>>120
C++は、Cの後置インクリメントという名のとおり
最初はCのつもりで使ってよく
次から少しずつCに対する拡張を憶えていけばよい
Cをマスターしている人にとって
ごく自然に入っていける言語だから
慌てないでじっくりやってみそ
C++の発案者(通称、禿)が書いている有名な本が
まさしくCがわかる人のための論調だ
ISBN-10: 4797375957
就活では何言語が使えるかより
何を作ったかが大事
C++使えます、なんて新人が自称してても
たいていすぐボロが出るし

125:デフォルトの名無しさん
18/09/01 08:45:34.91 np0z0HoI0.net
>122
書籍の紹介をする際にAmazonさんのページへのリンクを貼る人は多いけど、
ISBNだけでタイトルも書かないパターンは初めて見たよ。
『プログラミング言語C++』第4版だね。
おかげで ISBN-10 と ISBN-13 という2種類のISBNがあることも知った。

126:デフォルトの名無しさん
18/09/01 10:57:23.80 yZa51HUHa.net
uint8_tとint8_tを使う。
移植性が良くなる。

127:デフォルトの名無しさん
18/09/01 11:04:56.69 o5EcbkDPa.net
んだ
cstdintとかcinttypesとか使えば良いじゃん

128:
18/09/01 11:30:44.62 xvMvXv+W0.net
>>120
私はC++を覚えるのに20年くらいかかっています、アマチュアベースなので

129:デフォルトの名無しさん
18/09/01 12:18:34.89 Pcb6gvc+0.net
みんなそうだよ
C++はC with Classesから30年以上経っているが
未だに発展途上の言語で
新しい機能がどんどんできているから

130:デフォルトの名無しさん
18/09/01 12:35:41.52 +BAvd4bna.net
文法覚えてもそこがスタート地点
推奨される最先端の実装例を見てみたいがどこにそういう例があるのかも知らない
だれかしらないかなあ

131:デフォルトの名無しさん
18/09/01 12:51:44.34 Pcb6gvc+0.net
cl /std:c++latestや
clang-cl -Xclang -std=c++2aとかか?

132:デフォルトの名無しさん
18/09/01 13:05:09.71 eGvEpu9E0.net
レス㌧クス今全てがつながったわC++完全に理解した!
char→signed int変換を符号拡張でやっても良いという余地を残しておけば、
char→signed int変換を0拡張でやる命令が無いアーキテクチャーであっても、
(たまたま)使う文字コードセットがcharのMSBまで使わないやつ(acsiiとか)であれば
(運よく)変換を1命令で済ませられる
しかしcharをunsigned charとする案に対するアドバンテージはそれだけ…
我々は滅び去


133:った腸古代のアーキテクチャーの痕跡を毎朝目の当たりにしているわけや



134:デフォルトの名無しさん
18/09/01 13:20:25.67 eGvEpu9E0.net
>>130は、>>121へのレス
痕跡というのは、C++において(オーバーロードとの絡みで)charがsigned charでもunsigned charでもない別の型である件のこと。
>>127
職業的に使う言語とアマチュアベースで使う言語は接する時間が違うから、上達の速度も違う
C++はCに擬態することで職場でも家でも継続的に新規の機能を試せたから成功した
D言語は職場で12時間C/C++を触った後に家に帰ってD言語脳に切り替えねばならなかったからめんどくさがられて失敗した
この反省を踏まえ、Pythonはいつでも初心者モードでも問題なく使える簡単言語になったそうな
(ちな職場でこっそり使い倒せる言語はやっぱPerlとJavaScrip(ゲフンゲフン

135:デフォルトの名無しさん
18/09/01 14:18:13.49 kUpkBQ3x0.net
Linux プログラミング・インタフェース、Michael Kerrisk、2012
翻訳者・千住治郎
C++11/14 コア言語、江添 亮、2015
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006
これらが、神の書!
膨大なOK・NG パターンを列挙している
これらの本を持って、数年山籠もりすべし!w
初心者用の文法書なんて、一部分しか書いていない。
氷山の一角
ドワンゴ江添の本でも、詳細には切りがないので省略しますとかw
無限に出てくるw
こういう本を書ける、Kerrisk・千住・江添は、頭がおかしくなってるはず!w

136:デフォルトの名無しさん
18/09/01 14:22:45.69 xvCOhCpk0.net
上の本高いな

137:132
18/09/01 15:18:22.65 kUpkBQ3x0.net
「Finnegans Wake」の著者、James Joyce も、
翻訳者の柳瀬尚紀も、頭がおかしいと思ったけど、
132 の本は、まさにそう
頭がおかしくないと、これだけ書けないw

138:デフォルトの名無しさん
18/09/01 16:12:55.71 wj4q5AyAd.net
vcのwriteFileとかの関数って非同期の時戻り値とかどう処理すべきもんなの?
waitforsingleobjectでまつのはセオリーっぽいが
そこにたどり着くまでに非同期の処理が終了とかまだ終わってないとかいろんなケース想定されるじゃん?

139:デフォルトの名無しさん
18/09/01 16:31:40.14 sbs5rSlN0.net
MSDNのWaitForSingleObjectのページ読んだ?
実際に書いてみた?

140:デフォルトの名無しさん
18/09/01 16:45:34.07 JqoAQjEz0.net
>>135
WaitForSingleObjectまでに非同期処理が終わってたらWaitForSingleObjectからすぐに抜ける
非同期処理が終わってなければ終わるまでWaitForSingleObjectで待つ
要するにWaitForSingleObjectから帰って来たら非同期処理は終わってる

141:デフォルトの名無しさん
18/09/01 17:05:45.30 /wwW4VSs0.net
いまだにメールで昔半角カナを使ってはいけないといわれてた理由すらわかってないのが
よくわかったわ
EBCDICは8bitとかいってるぐらいだからな
そんなもん意味不明なバイナリだからな
当然utf8も意味不明なバイナリ
頭悪い知恵遅れでも分かったふりしてテキトーなこと書けるのが
2ちゃんねるだからな
2ちゃんねるは頭の悪さを自白するのに最適

142:デフォルトの名無しさん
18/09/01 17:09:37.10 wj4q5AyAd.net
>>136
書いてみた
パイプを使ったデータのやり取りをしようとしていて
writeFileだけでなくConnectNamedPipeだったりの非同期処理の異常系で困っている
通常の操作はおそらくできてると思うんだが.


143:... >>137 やっぱりそういうことで良いんやね



144:デフォルトの名無しさん
18/09/01 17:46:30.13 C1azqw0O0.net
>>130
>C++完全に理解した!
小悟を経て大悟に至る長大なステップのほんの一段に過ぎない・・・

145:デフォルトの名無しさん
18/09/01 18:01:58.23 QGdL6q/H0.net
C++erは3種類しかいない
C++を理解せずに書いている素人、C++を理解したと勘違いしてる素人、いつか人類はC++を理解できるのだろうかと日夜考え続けている素人だ

146:デフォルトの名無しさん
18/09/01 18:06:49.23 IaxL4QGW0.net
C++はわしが育てた。

147:デフォルトの名無しさん
18/09/01 18:20:12.88 TMvFd8Nda.net
>>141
.0.5%ぐらいは真のC++プログラマーがいると信じたい
今まで出会ったことがない

148:デフォルトの名無しさん
18/09/01 19:13:37.84 np0z0HoI0.net
>>141
「完全な理解」に到達できないようゴールを動かしつづける黒幕、
てのがいそうな感じね。
日々の学習が新規格に追いつかないヘボの愚痴だけど。

149:デフォルトの名無しさん
18/09/01 19:30:28.67 YT761AP20.net
実際これ本物じゃないかと思うよね
URLリンク(www.kh.rim.or.jp)

150:デフォルトの名無しさん
18/09/01 20:34:01.15 IaxL4QGW0.net
>>145
Javaで読み替えてみ。

151:デフォルトの名無しさん
18/09/01 20:50:59.81 z2qK7ugE0.net
javaに必要だったのはGCじゃなくてデストラクタだったりして。
噂によると、参照切るために使い終わったらオブジェクトにNULL入れてるらしい。
それってfreeと違うんかい?

152:デフォルトの名無しさん
18/09/01 20:53:31.39 xvCOhCpk0.net
今使われてるあらゆる言語に置き換えられそう

153:デフォルトの名無しさん
18/09/01 23:46:43.62 IaxL4QGW0.net
進撃の巨人、エンドオブザワールド見たら、ミカサがいきなり不倫してて子供までいる設定に代わっててびっくりしたわ。
原作ではそんな子じゃなかったのに。

154:120
18/09/02 07:00:47.93 HcdhtgGT0.net
>>120です。レス少し遅くなっちゃったけどレスくれたみんな詳しくありがとう
とりあえずじっくり勉強してみることにするわ
このご時世、就活を意識するならPythonのほうが優先度は高そう感じがするけど…
就活についてのアドバイスしてくれた人がいるけど、納得した。
「できます」「つかえます」って基準が不明瞭だからさして効果はないか。
ちなみにどんなものを作れば有利に働くかな?
趣味でプログラミングをしているけど何か作りたいものがあってはじめたんじゃなくて競技プログラミングが面白そう、という理由ではじめて競技プログラミングをメインにやってた
Cでならシューティングゲームを作ったことはあるけどこれはあまり就活では役に立ちそうにないかな

155:デフォルトの名無しさん
18/09/02 07:15:15.45 fnBlw2CS0.net
>>150
査読論文
100万PVを超えるwebサイト
アプリのレビュー経験
上記以外はマイナスになるだけ

156:デフォルトの名無しさん
18/09/02 07:18:34.72 T+JOOtu00.net
会社によるし何したいかによる
言語仕様やコンパイラに強い人が欲しい会社もあるし
ハードウェアやアセンブリレベルに強い人が欲しい会社もあるし
CGとか映像処理に強い人が欲しい会社もあるし
Windowsのことなら任せろって人が欲しい会社もあるし
OSS界隈の事情に詳しい人が欲しい会社もあるし
コード土方なんかよりパワポのプロが欲しい会社もある
頑張って

157:デフォルトの名無しさん
18/09/02 08:54:14.95 5WqNet320.net
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006
日本の大企業から、C の専門家、数十人が集まって、この本を書いたけど、
規格について詳しい人は、いなかった
規格書の条文を組み合わせたときに、どういう現象が起こるかわからない。
このレベルの人では、その恐ろしさをよく知っている
ルールの組み合わせ爆発が起こるから、無限!
だから規格を保証できない
よく、わからなかったから規格書を読めっていう奴がいるけど、
そういう奴は、組み合わせ爆発の恐ろしさを、何もわかっていない

158:デフォルトの名無しさん
18/09/02 10:18:27.88 5WqNet320.net
言語の入門書を読んで、文法だけを知っている人なんて、いらない。
文法だけじゃ、仕事はできない。
仕事とは、システムを作る事だから
だから企業は、コンピューターリテラシーのある人が欲しい。
OS の知識。システムの運用構築。
デザインパターン・アルゴリズム・データベースなど、すべての範囲
大量の勉強・資格も必要。
その人が到達したレベルの証明書
Ruby が出来たら、Python もわかる。
Rubyよりも面倒くさいのに、なにも、Pythonで書く理由がない
AI・数学系の仕事があって、初めてやるもの
float 変数にずっと、1を足し続けていくと、どうなるでしょう?
ちょっとした質問をされても、勉強していないと答えられないだろ

159:デフォルトの名無しさん
18/09/02 10:55:34.36 T+JOOtu00.net
>float 変数にずっと、1を足し続けていくと、どうなるでしょう?
答えてどうぞ
ちょっとした質問なんだろ?答えて

160:デフォルトの名無しさん
18/09/02 11:00:46.35 AnLHGx5M0.net
突然ケンカ売り始めてワロタ

161:154
18/09/02 11:38:28.02 5WqNet320.net
120 みたいな「入門書を読んで、出来ます」っていうような奴は、よくいる。
文法をかじったのと、システムを作るって言うのは、全く違う
コンピューターリテラシーが無いと話にならない。
文法よりも、情報処理資格を取った方が、よほど使える
8進数の637 を、16進数で表示しろとか、こういう問題
文法よりも、システムを作るための基礎体力がある人。
登山するのにも、まず基礎体力だろ

162:デフォルトの名無しさん
18/09/02 11:40:33.24 T+JOOtu00.net
>>157
逃げんな答えろ
>float 変数にずっと、1を足し続けていくと、どうなるでしょう?
正確に答えて

163:デフォルトの名無しさん
18/09/02 12:11:20.54 d5Sj8H4uM.net
>>158
プログラムで実行すればいいじゃん
馬鹿?

164:デフォルトの名無しさん
18/09/02 12:52:47.96 GR8jnF/50.net
>>158
環境による、以上!

165:デフォルトの名無しさん
18/09/02 14:37:45.13 5hf5Gg6np.net
>>150
>Cでならシューティングゲームを作ったことはあるけどこれはあまり就活では役に立ちそうにないかな
そっちの方が大きいと思うが・・w
ソフト一本作ったかどうか、ってのは大きいよ

166:デフォルトの名無しさん
18/09/02 14:52:19.54 4Jf6YH6e0.net
>>150
> Cでならシューティングゲームを作ったことはあるけどこれはあまり就活では役に立ちそうにないかな
そうかなあ?何処に就職しようとするかで変わると思うんだが、しかし、そこまでできるなら結構有利なネタになると思うんだけど。

167:はちみつ餃子
18/09/02 15:50:29.01 vK23Frpo0.net
とにもかくにも何かを「完成させる」ってのは強いと思うよ。
プログラミングに関する色んな理屈は研究されているけれども、
現実の問題に対して適用できる能力はまた別問題だからね。
深く知っているやつよりも目的を達成できるやつが偉い。
もちろん深く知っている方が色々な問題に対して出来ることは多いはずだけど、
実際にやったという見える実績がないと評価しようがないもの。
評価基準は評価する側のことだから、
ひょっとするとあまり気にしない評価者もいるかもしれないし、
高く評価するかもしれないということはある。
でも、無かったら何にも無いだけ。

168:
18/09/02 17:18:56.14 oSO4LvdH0.net
>>163
>とにもかくにも何かを「完成させる」ってのは強い
強いですね…
ある程度できてしまうと、情熱が失せるというか妥協するというか手を抜くというか
それを完成形に持っていくのには知性ではなく意志が必要だとおもいます、そして現在は知性(主知主義)よりも意志(主意主義)を評価する時代かと
私についていえば直近は
スレリンク(tech板:795番)-796
に執心していたのが、α版
スレリンク(tech板:52番)
ができてしまうと、ある意味どうでもよくなって、β版
スレリンク(tech板:53番)
を書き上げた頃は、変てこな義務感だけでいわば青息吐息で動いていた感じです、たぶんこれ以上手をいれることはないでしょう、全然未完成なんですけれども…

169:デフォルトの名無しさん
18/09/02 17:40:53.37 d5Sj8H4uM.net
ゲームってプログラムより素材でしょ

170:デフォルトの名無しさん
18/09/02 17:43:17.01 HUwXytGW0.net
まるでプロには知性が足りないとでも言わんばかりだな
君の書いたソレは売り物になるレベルのソフトなの?

171:デフォルトの名無しさん
18/09/02 17:44:50.35 HUwXytGW0.net
>>165
アホぬかせ

172:
18/09/02 17:56:52.92 oSO4LvdH0.net
>>166
どこを縦読みすれば?

173:デフォルトの名無しさん
18/09/02 18:21:41.50 4Jf6YH6e0.net



174:デフォルトの名無しさん
18/09/02 19:11:21.08 p4iMlD/t0.net
>>165 の意図を正しく読み取ってないかも知れんけど…。
プレイヤーにとっては、凄いプログラムで動いてるゲームより
~さんがキャラクタ描いてる、~さんが声アテている、の方が
購入の理由や評価の基準になってる、という面では
「プログラムより素材」と言えるかも。
テトリスやぷよぷよが売れたときは、
また別の意味で「プログラムより素材」だったんだけど。
現在ではマインクラフトなどかな。

技術的にスゲーって感じたゲームはPS2の「大神」だったかな。
それ以後あんまり遊んでないし。

175:デフォルトの名無しさん
18/09/02 19:17:19.67 KDgwy3t20.net
君らいっぺん3Dのゲームがどういう技術で成り立ってるか調べたらいいよ
全く想像つかないのに適当こいてるだろ?

176:デフォルトの名無しさん
18/09/02 19:26:28.00 fUkDgbHp0.net
>>171
しらべてみたら監督技術、プロデュース技術、ディレクション技術なんだな。
一番重要なのは資金調達技術だって。
思ってたのと全然違うわ。

177:デフォルトの名無しさん
18/09/02 19:29:29.85 KDgwy3t20.net
アホだろお前

178:デフォルトの名無しさん
18/09/02 19:32:57.27 fUkDgbHp0.net
ゲーム業界ではパワポを使いこなせないと会議で発言権を得られないって聞いたことがあるな。

179:デフォルトの名無しさん
18/09/02 19:35:22.26 fUkDgbHp0.net
そういえばジョブス氏も皆さんの前でお話しするときはパワポ使ってたよね。
WindowsよりOSXというお話をするときでさえ、スクリーンにはパワポが映ってた。

180:デフォルトの名無しさん
18/09/02 19:36:03.23 4Jf6YH6e0.net
話がいつの間にか売れるゲームの話になってる?
元の話は学生が就活時にCでゲーム作った事が役に立つかって話だったと思うが。

181:デフォルトの名無しさん
18/09/02 19:37:22.81 4Jf6YH6e0.net
>>175
Macで動くやつではなく?

182:デフォルトの名無しさん
18/09/02 19:55:02.00 KDgwy3t20.net
>>176
なってないw
QZと165に釘さしたかっただけ
別に趣味グラマを否定したいわけじゃないけど、一本人が使いたがるようなレベルのソフトを作ろうとすると、言語の知識だけではない様々な現実的な問題に直面するだろ
それを乗り越えたかどうかってのは採用担当の評価に大きく関わってくると思うけどね
はっきり言うと、QZのレスは、それを乗り越えるのは意志だけ(つまりソフトを作り上げるために必要になってくる知識など、言語の知識以外には無い)と暗に決めつけてる
最近そういう傲慢な趣味グラマがC++界隈でよく見受けられるけど、そういうの良くないよマジで

183:デフォルトの名無しさん
18/09/02 20:08:55.68 Tb3tt8fk0.net
それでコードはもうすでに自分は書けるもんだと勝手に思い込んで
まともな教育を受けてない低学歴知恵遅れのアホなくせに思い上がってるウンコが
この板にはわんさかいる
視野が狭いとそうなる
低学歴知恵遅れはどうしても視野が狭くなる
知見の範囲が限られるからな

184:
18/09/02 20:09:48.00 oSO4LvdH0.net
>>178
>QZのレスは、それを乗り越えるのは意志**だけ**
>>164 ではそうはいっていませんよ、意志の重要性を主張していますが、知性(=知識)が不要とはいっていない、ちょっと言葉が足りなかったのは認めますが
知性がなければ、そもそもプログラムを記述することすら出来ないでしょう?
文脈としては >>150 を応援している内容です
「根性論」の気配を感じて反感をもたれているのだろうとは推察しますけれども

185:デフォルトの名無しさん
18/09/02 20:12:17.71 Tb3tt8fk0.net
質問してるヤツ未満のとにかく程度の低いウンコが
この板で幅をきかせてるのが一番の問題

186:デフォルトの名無しさん
18/09/02 20:30:49.80 fUkDgbHp0.net
質問者のほうが詳しいもんな。

187:デフォルトの名無しさん
18/09/02 20:32:00.95 ZRAAplmr0.net
暗にマウンティングしようとしすぎなんだよ、聞かれたことだけ答えてろ

188:デフォルトの名無しさん
18/09/02 20:40:57.55 x4is64QR0.net
>>167
いや、俺はゲームプログラムは作れるが
絵や音楽は無理だわ

189:デフォルトの名無しさん
18/09/02 20:42:56.80 fUkDgbHp0.net
絵や音楽を作るAIをプログラミングすれば。

190:デフォルトの名無しさん
18/09/02 22:53:04.36 fUkDgbHp0.net
gperfをconstexprで実現するライブラリない?

191:デフォルトの名無しさん
18/09/02 22:54:40.74 fUkDgbHp0.net
>>153
数十人も集まったら臨界起こる。
危険。

192:デフォルトの名無しさん
18/09/03 14:05:29.69 oGMLPH120.net
>>170
ぷよぷよにしろテトリスにしろ完全に動くから売れるんだぞ
数年前に家庭用機に動きもっさりバグだらけのテトリスがあったが発売数日で誰もやってなかったよ

193:デフォルトの名無しさん
18/09/03 20:11:20.95 e/XZidXx0.net
数年て
30年近く前の話だろそれ…

194:デフォルトの名無しさん
18/09/03 20:23:04.08 JI8nhEFS0.net
何言ってんだこいつ・・・w

195:デフォルトの名無しさん
18/09/03 20:23:26.23 CjQwreEv0.net
無論コレですな
URLリンク(koty.wiki)

196:デフォルトの名無しさん
18/09/03 20:45:30.49 e/XZidXx0.net
てっきり任天堂のファミコンテトリスの話かと

197:デフォルトの名無しさん
18/09/03 20:54:01.67 oGMLPH120.net
xboxoneだぞ

198:デフォルトの名無しさん
18/09/03 20:57:10.35 E2St7m4+0.net
テトリスごときでcなんか不要
javascriptで十分
URLリンク(codepad.org) ← コレでできあがり
このコードをメモ帳にコピペしてaho.htmlで保存
 ↓
aho.htmlダブルクリック
 ↓
テトリス起動

199:
18/09/04 00:05:00.11 lJV/Mb/R0.net
以前の話
スレリンク(tech板:942番),943
やりたいこと
スレリンク(tech板:713番)
質問
一つの bitset または vector<bool> に対して、異なるスレッドから集中してビットをオンしまくる、ということをして矛盾が発生することはありますか?
やりたいことはエラトステネスのふるいなので、この場合オンしたあとオフすることはありません
こういうことをして大丈夫かどうか調べてみたけれどもよくわかりません
bitset URLリンク(ideone.com)
vector<bool> URLリンク(ideone.com)
付随しての質問
biset や vector<bool> というのは、一つの物理バイトに対して複数の bool を詰め込んだ作りとして実装されているのでしょうか?
この場合
bitset[index] = boolean,
とか
vector[index] = boolean
(operator[] が「bool の参照」


200:?を返す、みたいな感じ) は実際にはどのように記述されているのでしょうか?



201:さまよえる蟻人間
18/09/04 00:09:11.92 I66W1B5fd.net
See source by your IDE.

202:はちみつ餃子
18/09/04 00:37:21.78 f5HJ/2BD0.net
>>195
> 異なるスレッドから集中してビットをオンしまくる、ということをして矛盾が発生することはありますか?
矛盾というのがどういう状況を想定しているのかわからないけど、
言語仕様上はデータ競合が起こりうると解釈できる場面だと思う。
要するに未定義動作に突入する可能性がある。
mutex でロックすることで簡単に回避は出来るが速度を考えるならば
操作するデータが atomic であるようにデザインするとなんとかなるかも?
> biset や vector<bool> というのは、一つの物理バイトに対して複数の bool を詰め込んだ作りとして実装されているのでしょうか?
される。
> bitset[index] = boolean,
> とか
> vector[index] = boolean
> (operator[] が「bool の参照」?を返す、みたいな感じ) は実際にはどのように記述されているのでしょうか?
「1 ビットを表す型」のオブジェクトを返すことで対応する。
そのせいで、 std::vector<bool> は bool 以外を格納する std::vector よりも出来ることに若干の制約がある。

203:はちみつ餃子
18/09/04 03:10:23.32 f5HJ/2BD0.net
テトリスの素材を用意したぞ
URLリンク(dotup.org)

204:デフォルトの名無しさん
18/09/04 05:42:55.53 4a01gUXa0.net
惜しい、もうちょっと工夫すれば
「テトリス」だけでなく「○○トリス」としても使えるのに。

205:デフォルトの名無しさん
18/09/04 06:42:41.96 Nt/zN6W10.net
URLリンク(i.imgur.com)
むぅ…

206:デフォルトの名無しさん
18/09/04 07:24:16.79 FJBPHmlLM.net
>>195
アーキ依存だが、同一バイトアライメントを参照しない限り問題ないってエロい先輩が言ってた
大人しくmutexつかえ、mutexのコストよりスレッド切り替えのコストを気にしろ、とも言われた

207:デフォルトの名無しさん
18/09/04 09:34:15.28 W1MTXd47M.net
>>201
何のアライメントのことかわからないけど
キャッシュライン同じだとだめじゃないの

208:デフォルトの名無しさん
18/09/04 17:05:52.60 QK+jEBGl0.net
こういう待ち時間が僅少なものはスピンロックの方がいいぞ

209:デフォルトの名無しさん
18/09/04 18:06:05.25 W1MTXd47M.net
というよりこの場合CASが成功するまで繰り返せばいいだけ

210:デフォルトの名無しさん
18/09/04 18:43:17.89 QK+jEBGl0.net
bitset 位なら自分でcasで実装するのが最善か

211:デフォルトの名無しさん
18/09/04 20:32:54.12 j0Ybv1km0.net
C++に標準で画像を表示する方法がないと聞いたけど
どんな方法で出来るのか教えてくれないか?
openGLとダイレクトX以外にないものなのか

212:さまよえる蟻人間
18/09/04 20:35:12.07 I66W1B5fd.net
GDIならウィンドウに画像表示できるよ。

213:デフォルトの名無しさん
18/09/04 20:40:18.08 j0Ybv1km0.net
そんなものがあるのか 調べてみるわ

214:さまよえる蟻人間
18/09/04 20:44:23.36 I66W1B5fd.net
他にもgtkmmとかQtというのも、ウィンドウに画像表示できる。

215:デフォルトの名無しさん
18/09/04 20:47:51.19 j0Ybv1km0.net
3つだけじゃないんだなw
ありがとうそっちのほうも調べてみるよ

216:
18/09/04 21:01:31.49 lJV/Mb/R0.net
>>197 はちみつさん、>>201,203-205
コメントありがとうございます。
>>204,205
初めて atomic を使ってみました
URLリンク(ideone.com)
そのままでは atomic を vector の要素にはできないようで、stackoverflow 由来の変てこな回避策をとっています
URLリンク(stackoverflow.com)
マルチスレッドでの評価はこれからとりかかりますが、
こんな感じで CAS できてますでしょうか

217:デフォルトの名無しさん
18/09/04 21:44:16.54 rJd6gmxFM.net
なんとなくだけど、
vector<bool>でなくてよいのなら、複数スレッドからビットをonにしまくったところでそもそも問題にならないのでは?

218:デフォルトの名無しさん
18/09/04 22:20:34.19 gG5zqknwd.net
windowsでのパイプでのやり取りに詳しい人助けてくれませんか
あとで一部ソースコードは載せます
パイプ処理を非同期で行いたい
1. CreateNamedPipeで名前つきパイプを作成
2. CreateEventでオーパーラップ構造体にシグナル用のイベントをひもづける
3. 「非同期」でConnectNamedPipeを行う
4. WaitForSingleObjectでタイムアウトか接続が来たらパイプのコネクトをする
この流れで処理を作ろうとしてる
ただ、非同期な設定にすると上手く繋げず困ってます
そもそも名前つきパイプで非同期処理はできない..??
msdnにはCreateNamedPipeの第3引数にPIPE_WAITかPIPE_NOWAITかあるが、
PIPE_NOWAITは使用しないでくださいとあるのでPIPE_WAITを指定すると同期処理で待機することはできました
ただし、接続が来なかったらタイムアウトみたいなことができないので、ためしにPIPE_NOWAITにするとGetLastErrorによると218のエラーを返してくる
オーパーラップ構造体を指定したらConnectNamedPipeは非同期云々掛かれてるけどもできないのかな..?

219:デフォルトの名無しさん
18/09/04 22:34:45.20 Nt/zN6W10.net
どうやっても無理

220:デフォルトの名無しさん
18/09/04 22:41:49.50 GmxIRs0ad.net
dirty とか使わず単に
set
T e;
while (!_v[q]. _a.compare_exchange_weak(e, e|(1<<r)) {}
reset
T e;
while (!_v[q]. _a.compare_exchange_weak(e, e& ~(1<<r)) {}
じゃないのよく分からんけど

221:デフォルトの名無しさん
18/09/04 22:47:11.82 gG5zqknwd.net
>>214
それまじすか....

222:デフォルトの名無しさん
18/09/04 23:05:32.40 Nt/zN6W10.net
>>216
待たないでデータ読むにはPeekNamedPipeの第五引数cbAvailでサイズ判定してcbAvailが0以外ならデータ読んでも止まらない
これ以外の方法は何やってもダメ
Linuxみたいにすんなり行かんね

223:デフォルトの名無しさん
18/09/04 23:07:37.86 gG5zqknwd.net
>>217
そうなのか
今読めてるのは全部同期処理してるのか...
今からそのAPI調べてみる
読み込むのはそれでよかったとしてコネクトも同じ考え?

224:デフォルトの名無しさん
18/09/04 23:07:51.12 b2qgijeQr.net
sort に渡す比較関数って、たとえば
sort(A.begin(), A.end(), [](int a, int b){return a > b;});
としたら、降順になるのか昇順になるのかいつも分からなくなるんだが、どうやって覚えたら良いの
不等号の向き、つまり return で返る真偽とコンテナの要素番号の大小がどう対応してるのか分からない

225:デフォルトの名無しさん
18/09/04 23:59:12.10 IwUdbTOo0.net
a, bで順序がわからなくなるのなら、
first, secondとかleft, rightとかにすればいいんじゃね?
first < secondが昇順でなかったらクレーム続出だろ

226:デフォルトの名無しさん
18/09/05 00:07:00.10 p8WqhzKed.net
サーバー側だけどこんな感じです。
スマホで打つの限界がある...
{
HANDLE handle = CreateFileName(" \\\\.\\pipe\\"sample ,
PIPE_ACCESS_DUPLEX,
// ここの | って意味あるのかな?
// 両方とも0なので
PIPE_TYPE_BYTE |PIPE_READMODE_BYTE | PIPE_WAIT,
1,
0,
0,
0,
NULL );
OVERLAPED over = {0};
over.hEvent = CreateEvent(NULL, TRUE, FALSE, "sampleEvent");
BOOL result =ConnectNamedPipe(handle, &over);
DWORD error = GetLastError();
if( ( 0 == result) &&
( ( ERROR_SUCCESS == error ) || ( ERROR_PPE_CNNECTED != error ) || ( ERROR_IO_PENDING != error ) )
{
WaitForSingleObject(); //本当はここで待ってほしいが、ConnectNamedPipeで止まる
}
}

227:デフォルトの名無しさん
18/09/05 00:13:10.80 9rSvLDak0.net
>>213
何がいいたいのかよく分からんな。
4のwaitforでタイムアウトか接続されたか分かるよね?
普通に問題なく動くよ。

228:デフォルトの名無しさん
18/09/05 00:18:10.89 VENvGGw0d.net
>>222
理想の流れは1-4の流れにしたかった
ただ実際は非同期処理が上手くできておらず3のConnectNamedPipeで捕まる
クライアント側が居なかった場合ずっと待機し続けることになる
そうなっているのが現状
ソースは思い出してかいたのが>>221

229:デフォルトの名無しさん
18/09/05 00:30:09.32 +wARDt+J0.net
ココにサンプルコードがある
URLリンク(eternalwindows.jp)
FILE_FLAG_OVERLAPPED を追加する
よく分からんがコレとはまた違うのか

230:デフォルトの名無しさん
18/09/05 00:37:34.35 ABz0W8sZd.net
>>224
FILE_FLAG_OVERLAPPEDの使用はまだ試してないので明日試してみますありがとう
FILE_FLAG_OVERLAPPEDに関しては持たないときの条件を使ってたんだけどだめだったんかな...
これをしたかったのだが...
URLリンク(msdn.microsoft.com)
hNamedPipe ハンドルが FILE_FLAG_OVERLAPPED フラグを持たないとき、かつ、lpOverlapped パラメータで有効なポインタを指定したときは、この関数は非同期的に実行されます。
制御はすぐに返り、戻り値は 0 になります。GetLastError 関数は、ConnectNamedPipe 関数を呼び出す前にクライアントプロセス側が接続されていたときは
ERROR_PIPE_CONNECTED を、そうでないときは ERROR_IO_PENDING を返します。

peekNamedPipe読んでるけど難しい

231:デフォルトの名無しさん
18/09/05 01:24:39.22 BafBBEgt0.net
peekで調べるのはcbAvailだけ
データは読まなくていい
読むときはReadFile

232:デフォルトの名無しさん
18/09/05 02:51:54.52 n3z3O06I0.net
C++関係無いよね
Win32APIスレに行くべきだと思う
URLリンク(msdn.microsoft.com)(v=vs.85).aspx
こっちにはその部分に相当する箇所が無いようにみえる
FLAG_OVERLAPPEDの有無で非同期/同期は決まるんじゃないのかなぁ
>If hNamedPipe was not opened with FILE_FLAG_OVERLAPPED, the function does not return until a client is connected or an error occurs.
ってあるし

233:デフォルトの名無しさん
18/09/05 12:47:17.08 TWmx8fnR0.net
>>223
>クライアント側が居なかった場合、ずっと待機し続ける
パイプって、パイプラインにデータが流れてくるまでは、ブロックされるものだろ。
データも流れて来ないのに、先へ進んだら、バグるだけ
その際、非同期なら、データ無しで、即座に返答が返ってくるのでは?

234:デフォルトの名無しさん
18/09/05 13:15:20.01 mkiFi/5o0.net
入力が「まだ来んからちょ待っとれ」なのか
「来るわけないやろアホかおまえ」なのかは
別の手段で判断せにゃならん

235:はちみつ餃子
18/09/05 15:48:09.73 QNa0Ltxl0.net
まあ常識的には適当な時間でタイムアウトするようにするくらいのものかな。

236:デフォルトの名無しさん
18/09/05 16:08:15.65 Nag0NR3Rd.net
>>221
URLリンク(stackoverflow.com)
PIPE_NOWAIT を使えば ERROR_PIPE_LISTENING だの ERROR_IO_PENDING が即座に返されるが
WaitForSingleObject は発火しない
PIPE_WAIT だと当然ブロックする
PIPE_NOWAIT はlan managerとの互換性のために残されているだけで使用は推奨されていない
面倒でも FILE_FLAG_OVERLAPPED を使うしかない

237:デフォルトの名無しさん
18/09/05 16:09:55.39 Nag0NR3Rd.net
と書いたけどカッコつけずに後先考えず PIPE_NOWAIT でポーリングしてもいいか

238:デフォルトの名無しさん
18/09/05 18:53:58.76 H6UyuApwM.net
void hoge(int x, int *returnint){
returnint = int * 2;
}
int hoge(int x){
return int * 2;
}
これって内容同じですか?

239:デフォルトの名無しさん
18/09/05 19:15:02.29 BafBBEgt0.net
どっちもコンパイルエラー出る点では同じ

240:デフォルトの名無しさん
18/09/05 19:32:27.66 YeNc+rPy0.net
>>233 C言語に対して重大な勘違い、または質問レスに些細な打ち間違い、
どちらかだと思うが、どちらかは分からない。

241:235
18/09/05 19:33:03.57 YeNc+rPy0.net
C言語じゃなくてC++だね、ここ。

242:デフォルトの名無しさん
18/09/05 22:59:59.06 yXdlNP4XM.net
selectしろや

243:
18/09/05 23:22:24.89 juRrGCxW0.net
>>215
内容をみてくださり感謝いたします、とても考えさせられました
まず >>211 に二点誤りがありました
・コンストラクタ引数に与える bit 数から、内部 vector<atomic<int>> の確保容量を計算する方法に誤りがあった
・CAS 後にスピンロックするかどうかの判断にあやまりがあった
修正 URLリンク(ideone.com)
>>215
>while (!_v[q]. _a.compare_exchange_weak(e, e|(1<<r)) {}
>while (!_v[q]. _a.compare_exchange_weak(e, e& ~(1<<r)) {}
>(e は未初期化状態でも構わない)
>>195 「やりたいことはエラトステネスのふるいなので、この場合オンしたあとオフすることはありません」
に範囲を限定するのならば >>215 はうまくいくと思います。これには「なるほど!!」と思いました。
ビットセットの最中は別スレッドのビットリセットやビットテストをスピンロックさせたい、
とかの排他制御をやるのならば、dirty-bit(というか1ビットセマフォ)を作らないといけないと考えています

244:デフォルトの名無しさん
18/09/06 02:04:16.57 Gt7E2PT1M.net
>>234,235
すみません
C++にあまり詳しくないのでわからないのですが、どこがおかしいのでしょうか?
これなら内容等しいですか?
void hoge(int x, int& ret){
ret = int * 2;
}
int hoge(int x){
return int * 2:
}

245:デフォルトの名無しさん
18/09/06 02:08:35.51 itCyrIVk0.net
それはギャグで言っているのか?
void hoge(int x, int& ret){
ret = x * 2;
}
int hoge(int x){
return x * 2:
}

246:デフォルトの名無しさん
18/09/06 02:15:35.03 Ev1vpWJGM.net
>>240
すみません素でボケてました…
それなら同一ですか?
returnする場合と参照渡しする場合の違い(速度など)があるのか知りたかったです

247:デフォルトの名無しさん
18/09/06 02:38:44.74 itCyrIVk0.net
えーっと、
上段の参照渡しは呼び出し時に渡した変数そのものがやってきて書き換える。
下段のやつはコピーを返すので一手間ある。
理論的には下段の方がちょっと遅い。
まぁ、コンパイラが頑張ってきえるかもしれんし、
デルタ時間的に差はあるかもしれないが最近のコンピュータならあまり問題にならない。
それよりも速度を気にするなら採用しているアルゴリズムを精査したほうが効果的。
ちょっと変な文になった。

248:デフォルトの名無しさん
18/09/06 05:45:03.77 UQb09hzL0.net
厳密なところはアセンブラ出力を個別に見ないと分からない、
という前提はひとまず措くとして…。
int x, ret1, ret2; // x が未初期化ってところは見逃してくれ
hoge_ref(x, ret1); // void hoge(int x, int& ret)
ret2 = hoge_val(x); // int hoge(int x)
上は第2引数に参照を渡す手間が必要な代わりに返り値の処理は不要
下は引数1個で済む代わりに呼出側で返り値を別の変数に代入しなきゃいけない
相殺してどっこいどっこい大差なし、じゃないかな。
計算結果を変数に入れる必要がない場合、等はまた別のお話。

249:はちみつ餃子
18/09/06 05:49:16.79 IzfX8EX20.net
>>240
後者の末尾がコロンになってるのがそのままやで。

250:はちみつ餃子
18/09/06 05:59:16.76 IzfX8EX20.net
仮に差があったとしてもナノ秒レベルの話やん

251:デフォルトの名無しさん
18/09/06 07:14:55.98 3Sjg8sdP0.net
速度どうこうは1兆回回すループの中にあるとか1マイクロ秒以内に完了しないと原子炉が爆発するとか
プロファイラでクソ時間がかかってることが判明したとかした時だけ気にしよう

252:243
18/09/06 08:27:46.68 UQb09hzL0.net
実際のところ「別のお話」と切り捨てた部分が大切でね。
元の質問から逸れてしまうけど。
関数が計算する結果の値だけが欲しい(別の変数に格納する必要がない、
格納すべき変数そのものが存在しない)場合とか、
返り値に相当するのがint等の単純なデータでなく大きなクラスの場合とか、
その辺りを基準に比較すべきなんだよ。

253:はちみつ餃子
18/09/06 08:44:12.19 IzfX8EX20.net
早すぎる最適化は諸悪の根源っていうもんな。

254:デフォルトの名無しさん
18/09/06 08:51:51.10 j/wx9LUv0.net
同意。固定長オンリーなどの最適化を最初から入れ込むとロクなことがない。

255:デフォルトの名無しさん
18/09/06 09:29:04.75 mrWZ3sxKM.net
そーそー
尻拭く時間だけ早くしてもンコが早く出なきゃしゃーない

256:デフォルトの名無しさん
18/09/06 10:29:33.35 c/F3wcvdM.net
>>242
何言ってんの、逆でしょ
差が観測できるかは別にして下の方が速い(効率的)
int返すならレジスタ返しなんだから
メモリアクセスよりずっと速い

257:はちみつ餃子
18/09/06 10:57:52.18 IzfX8EX20.net
>>251
関数単独を見るとそうだが、
レジスタで返してもそれを結局は変数に書き込むじゃんという >>243 の話と合わせて考えると
レジスタを経由する分だけ遅くなり得るっしょ。
ただ、この関数を実行した結果を長期には保存しない (式の途中でこの関数を使うとか) のだと
後者の方が速かったりもするだろうし、まあ、状況によるよな。

258:はちみつ餃子
18/09/06 10:58:36.13 IzfX8EX20.net
実際のところ、インライン化されて更に他の最適化とコンボが起こったりすると
普通の人間にはどうなるか予測がつかんので考えるだけ無駄。

259:デフォルトの名無しさん
18/09/06 11:15:06.66 c/F3wcvdM.net
>>252
なんで呼び出し側の話がはいってくるんだよ
そっちの話を含めるとしても
呼び出し側もレジスタのまま処理が行われるのが普通だし、
メモリに書き出されるとしても、
参照と同程度になるってだけ
このABIを理解するのはc/c++使う上で基本
無意味と思うのは結構だがそれはお前の関心がないってだけ
レスしなけりゃいい

260:デフォルトの名無しさん
18/09/06 12:11:07.39 uRta3OIBM.net
intの場合は速度差は特に考慮しなくて良いんですねありがとうございます
それと、関数内でOpenCVで画像をゴニョゴニョして、結果の画像をリターンしたい場合は、どちらが良いのですかね?
特にメモリリークを起こしたくない(今現在起きてるので改善したい)ので、もし何か重大な違いがあるなら知りたいです
void hoge(cv::Mat x, cv::Mat ret){
ret = x + cv::Scalar(100);
}
cv::Mat hoge(cv::Mat x){
return x + cv::Scalar(100);
}

261:はちみつ餃子
18/09/06 13:28:43.07 IzfX8EX20.net
>>254
呼出し側の状況によっても変わりうるから呼出しの状況を含めるってのがそんなにおかしな話かね。
あと、あくまでもこれは C++ という言語を中心にした一般原則としてどうコンパイルされることも「有りうる」ということを述べているのであって、
特定のアーキテクチャやコンパイラや ABI を想定したものではないよ。
多くの (あるいは主要な) 処理系であなたが言うような結果になるというなら、
それはそうかもしれないが、そこには単に私の関心がないのも確か。

262:はちみつ餃子
18/09/06 13:34:38.93 IzfX8EX20.net
>>255
前者のコードの cv::Mat ret は cv::Mat& ret の間違い?

263:デフォルトの名無しさん
18/09/06 13:53:20.00 c/F3wcvdM.net
>>256
それはお前の間違った理解であって一般とは言わない
だいたい呼び出し側も含めて反論されてんのになにぼけたレスしてんだよ
お前の理屈だとレジスタの返しが無用となるじゃないか
x64ならraxでaarch64ならx0で返り値を返す
32bitのレガシーならいざしらず64bitでもabiはそう決められてるわけ
お前の興味のない低いレイヤーではそういうのを最大限活用して効率的にcpu回してんだよ

264:はちみつ餃子
18/09/06 14:06:16.01 IzfX8EX20.net
>>258
> だいたい呼び出し側も含めて反論されてんのになにぼけたレスしてんだよ
それは >>254 のことだろ?
それは特定の命令セットや ABI でないと成り立たないから、
そうでない一般論としてはどうともなりうると私は言っているので論点が違うし、
私はそっちの論点は気にしてなかったという話じゃないか。

265:デフォルトの名無しさん
18/09/06 14:09:29.47 c/F3wcvdM.net
>>259
現実のはなししようぜ
成り立たないシステムあげてみなよ

266:はちみつ餃子
18/09/06 14:11:05.68 IzfX8EX20.net
>>255
知らんな。
関心は無い。

267:はちみつ餃子
18/09/06 14:27:25.26 IzfX8EX20.net
>>255
前者については & の脱字だと仮定して答えるけど、
その脱字が無ければ、前者でも後者でも最終的な結果に差はないと思う。
特にメモリリークにつながりそうな要素もない。
ただ、単純に、局所的に考えるならば後者の方が効率的と言えると思う。
前者だと呼出し側では結果を受け取るための cv::Mat 型の変数を用意しなければならないが、
そのときにデフォルトコンストラクタが走ってから結果は operator= で格納するという形になる。
後者だとコピーコンストラクタ一発で済むので簡単。 場合によっては RVO が適用されるかもしれない。
一度作った変数を何度も結果格納用に使いまわすのならば、
前者の方がメモリアロケーションの回数を抑制できる (効率的になる) 可能性も有るけど、
Mat の実装次第ではそうならないかもしれないし、
そこらへんは実際にやってみないとわからない。
ところでメモリリークが起きていると判断したのは何かツールを使って検証したの?

268:はちみつ餃子
18/09/06 14:31:00.99 IzfX8EX20.net
あっ、 >>261>>255 にアンカーを付けちゃったけど、これは >>260 の間違いね。
現実の話というなら、インライン化や最適化が入れば ABI もクソもねぇし、
そんなの考えたらキリがないやろ。

269:デフォルトの名無しさん
18/09/06 18:25:26.14 c/F3wcvdM.net
>>263
関数内の最適化のみで考えればいいだけなんだからきりはあるだろ
つまりインライン展開なし、LOTなし
ABIを意識するのは全然特殊じゃない
言語間のよびだしはざらだし、
クラッシュダンプにスタックトレース残すためにあえてインライン抑制したりする
お前が経験不足なだけだよ

270:はちみつ餃子
18/09/06 18:41:01.02 IzfX8EX20.net
>>264
そっちの脳内でどんな前提を置いてるかなんて知らんがな。

271:デフォルトの名無しさん
18/09/06 19:48:52.61 c/F3wcvdM.net
>>265
コテハンの割に薄いやつだ
もとの質問は関数から値の返し方についてどちらが速いかという質問なんだから、
関数のインライン展開がないと仮定すれば、定性的に答えられる問いだ
かつその仮定は別に現実ばなれしてるわけでもない
それをお前はその知識が有用であることも知らずに考えるだけ無駄とかぶったぎってるわけだ
このスレは相談室
無駄なのはそういうお前の存在ではとおれは思うわけ

272:デフォルトの名無しさん
18/09/06 20:12:24.70 64ZwjQvb0.net
malloc()したヒープはfree()解放するのは当然
ウンコしたあと水で流さないぐらい行儀が悪い

273:デフォルトの名無しさん
18/09/06 20:23:27.14 itCyrIVk0.net
メモリーリークは基本的に自分でNEWすることで起こる。
最近のC++では基本的に自分でNEWすることはほとんどない。
動的なメモリが欲しければvectorを使う。
後は、ポインタにインスタンスを確保しないで関数に投げるとかもやってはいけない。メモリを破壊することになる。
あと、どうしてもnewが必要だったりGCが必要な時はスマポを使う。
そういう作法でやると、ユーザーコードでnewすることはほぼない。

274:デフォルトの名無しさん
18/09/06 20:47:20.81 itCyrIVk0.net
えーっと、関数にポインタを投げる時はその関数の仕様を精査して扱わないとほんとやばい。

275:デフォルトの名無しさん
18/09/06 21:04:04.33 bw6Oo6uj0.net
newとdeleteを使いこなせない補助輪付C++グラマってのも問題だけど

276:デフォルトの名無しさん
18/09/06 21:10:02.71 iyjSCMca0.net
スマポはGCじゃねえよ ぼけ

277:デフォルトの名無しさん
18/09/06 21:14:09.31 itCyrIVk0.net
shared_pointerは参照カウントっていうGC機構ですよ?

278:デフォルトの名無しさん
18/09/06 21:17:21.85 itCyrIVk0.net
>>270

279:デフォルトの名無しさん
18/09/06 21:18:00.66 itCyrIVk0.net
おっと。
>>270
補助輪があろうがバグ出すよりマシだと思うよ。それと保険的な意味もあるし。

280:デフォルトの名無しさん
18/09/06 21:18:22.90 iyjSCMca0.net
CGってそもそも何だ?
アプリが「今、解放しろ」というタイミングで動くのをGCというならfreeもGCだぞ

281:デフォルトの名無しさん
18/09/06 21:20:24.16 64ZwjQvb0.net
いつ解放されるか分からないとか
そもそもオブジェクトの外部でポインタの生存期間を制御できてないコードがヤバイわ

282:デフォルトの名無しさん
18/09/06 21:24:58.09 itCyrIVk0.net
>>275
そういう、広義解釈は話題が滅茶苦茶になるのでやめましょう。
GCはガベージコレクションだよ。freeは解放関数だよ。
シェアードポインターの解放タイミングは普通コントールしないのでGCだと思ってます。
というか、開放タイミングが未定だからシェアードポインタ使うんじゃないですか?

283:デフォルトの名無しさん
18/09/06 21:27:59.96 itCyrIVk0.net
それは全能でないとバグが出ちゃうのでこういう機構が発明されました。
書くときは大まかには寿命は把握しているとは思うのですが、細部までは精査しないことが多いんじゃないでしょうか。
自分のクローンに共有オブジェクトを持たせるときとか普通に書くと滅茶苦茶大変ですよ?

284:デフォルトの名無しさん
18/09/06 21:37:24.49 iyjSCMca0.net
>>277
広義解釈してるのはおまえだよ
シェアードポインタの解放タイミングはデストラクタだろうがよ
freeと何がどこが違うんだよ
おまえどこまでオレオレ空想してるんだ?

285:デフォルトの名無しさん
18/09/06 21:38:17.39 itCyrIVk0.net
>>276
それはある程度アクセス権の範囲を考えれば何とかなりそうな予感。
それと開放した後のメモリ叩かれた時とどっちがいいか相談ってことで。

286:デフォルトの名無しさん
18/09/06 21:41:02.92 itCyrIVk0.net
>>279
複数の共有がある場合、一個のデストラクタが走った程度では解放されませんよ?
freeは別にデストラクタに仕込む必要ないじゃないですか。
それと、複数の共有がある場合適切にfreeできますか?

287:デフォルトの名無しさん
18/09/06 21:42:45.15 JT+LXegNM.net
コレクションしてないのになんでgcなんだよ。アホすぎる

288:デフォルトの名無しさん
18/09/06 21:43:23.10 bw6Oo6uj0.net
シェアードはマルチタスクには不向きだし

289:デフォルトの名無しさん
18/09/06 21:49:40.12 itCyrIVk0.net
コレクションサイズが1のコンテナはないのですね。まぁ、冗談は置いといて。
物事を知ってるなら後は任せました。無知でごめんなさい。

290:デフォルトの名無しさん
18/09/06 21:51:04.10 itCyrIVk0.net
>>283
マルチスレッドならアトミックにできた気がしますけど、どうでしたっけ。
マルチプロセスならそもそもメモリ空間が違うのでお門違いですね。

291:
18/09/06 22:00:46.00 N2ZzCqNY0.net
>>272
参照カウンタは普通GCに含めないのでは?

292:デフォルトの名無しさん
18/09/06 22:02:22.60 itCyrIVk0.net
URLリンク(ja.wikipedia.org)参照カウント
こういう記事を見つけました。

293:デフォルトの名無しさん
18/09/06 22:04:19.65 itCyrIVk0.net
ホントお前ら人殺すことばっか考えてるよな。
そういうのは良いから初心者殺すのマジやめて。

294:デフォルトの名無しさん
18/09/06 22:04:41.28 vgkXomJH0.net
gcの一実装として参照カウンタ方式があるだけで、スマポはgcじゃない。

295:デフォルトの名無しさん
18/09/06 22:06:33.66 itCyrIVk0.net
それならそれでいいです。

296:デフォルトの名無しさん
18/09/06 23:18:28.17 8cSq8zHP0.net
>>288
横からでスマン�


297:ェ、他の初心者に偉そうに大嘘教えてるやつを初心者とは普通呼ばない 都合のいいときだけ初心者ヅラはだめよ



298:デフォルトの名無しさん
18/09/06 23:34:23.61 3bNAvGWPM.net
>>262
ありがとうございます
forの中で何回も関数呼び出すので前者が良さそうですね

299:デフォルトの名無しさん
18/09/06 23:34:43.07 itCyrIVk0.net
>>291
嘘の範囲を限定しないと俺大罪人じゃないですか。
まぁ、いいや。
メモリーエラーで落ちろ。

300:
18/09/06 23:34:53.93 N2ZzCqNY0.net
>>289
スマートポインターのうち std::shared_ptr は参照カウンタを内蔵しているのだから
①参照カウンタが GC、故に、std::shared_ptr も GC
②参照カウンタが GC でない、故に、std::shared_ptr は GC でない
①②のどちらかしかない
参照カウンタが GC なのにスマートポインタが GC でない、というのは矛盾しているのでは?
私は「参照カウンタは GC じゃない」と思う

301:デフォルトの名無しさん
18/09/06 23:48:27.91 8cSq8zHP0.net
>>293
>>251
もちろんインライン展開される場合は除く(展開されたら多分同じコードになると思うが
あと
>>255の質問に対して>>268は不適切、>>268から話が変な方向に行ってる
OpenCV使ってるって言ってるし、間違った使い方してリーク(>>255がnewしたのではない部分)
の可能性の方が高いと思うけどね


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch