◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

C++相談室 part137 ->画像>4枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1535353320/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん (ワッチョイ 12c3-4saf)
2018/08/27(月) 16:02:00.94ID:vY3QDx2y0
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part137
http://2chb.net/r/tech/1531558382/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
http://2chb.net/r/tech/1530384293/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)

----- テンプレ ここまで -----
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2デフォルトの名無しさん (ワッチョイ 8ac3-4saf)
2018/08/27(月) 16:03:04.41ID:vY3QDx2y0
すまんスレ番ミスった
3デフォルトの名無しさん (ワッチョイ 6698-PcWx)
2018/08/27(月) 16:03:29.14ID:H/K1FpSE0
謝って許されることじゃないね
4デフォルトの名無しさん (ワッチョイ ea34-5zXi)
2018/08/27(月) 16:22:40.23ID:oonIPXiN0
こういうヤツがプログラミングするとえらいことになる
5デフォルトの名無しさん (ワッチョイ 3aa1-WQAu)
2018/08/27(月) 16:26:27.53ID:7PWma/MO0
1 はクズ
6デフォルトの名無しさん (ワッチョイ bd93-zO5i)
2018/08/27(月) 17:22:00.81ID:TVAO+u4x0
フェイルセイフ機構として
スレッドを立てて何分間あるいはレス何個までは
立てた人に限りタイトルを修正できる、
みたいな機能があっても良いかも知れん。

あるいは事前に「これから立てるスレッドは〜の後継である」
みたいな宣言ができて、重複や番号の間違いをチェックしてくれるとか。
7デフォルトの名無しさん (ワッチョイ 6698-PcWx)
2018/08/27(月) 17:25:07.23ID:H/K1FpSE0
>>6
それいいな。しばらく放置して、正当スレと認められたら
時間ギリギリで>>1の内容を書き換えるのにちょうどいい
8デフォルトの名無しさん (アウアウカー Sad5-fKBf)
2018/08/27(月) 18:21:58.03ID:xvf87VjGa
結局どうするん?
ここ使用?
9デフォルトの名無しさん (ワッチョイ bd08-4dUf)
2018/08/27(月) 22:39:11.81ID:oahf+hzU0
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すればいいのか、それとも両方やらにゃならんのか

よろしくお願いします。
10デフォルトの名無しさん (ワッチョイ 2561-+TX9)
2018/08/27(月) 22:45:10.99ID:X1STgCw40
どなたか c++でのソケット通信を使った複数人が使えるチャットのサンプルコード持ってる人いませんか?
ネットで色々調べてるんですけど、tcpじゃなくてUDPのやつだったりwindowsじゃなかったりcだったり書いてあることが難し過ぎたり...
そもそも1:1のコードばかりで複数人対応のサンプルコードが見つかりませんorz
11デフォルトの名無しさん (ワッチョイ 2561-+TX9)
2018/08/27(月) 22:46:54.38ID:X1STgCw40
複数人対応にするにあたって、複数のソケットを用意するのとselect関数が必要になると思うのですけど、selectの方はおそらく理解できています。
複数のソケットからアクセプトされるところの流れが全然分からないです。
今自分が書いてみたコードだとスタックオーバーフローというらしい現象が起こってしまってます。
12デフォルトの名無しさん (ワッチョイ b9f2-PcWx)
2018/08/27(月) 22:47:25.25ID:CIUWIYCt0
難しくないものは存在しないとオモ
13デフォルトの名無しさん (ワッチョイ ea34-5zXi)
2018/08/27(月) 22:50:37.52ID:oonIPXiN0
>>9
ループで回して解放しないとダメ
JAVA脳だと放置するところだけど
14デフォルトの名無しさん (ワッチョイ fdb3-PcWx)
2018/08/27(月) 22:57:17.24ID:AuFamtLr0
>>9
どっちもnewするなら両方deleteしないといけない(もちろんobjをループでdeleteするのが先
何が良い・良くないは自分で考えた方がいいよ

>>11
アクセプトされる、ってのは認識がおかしい
listenしたソケットに来た接続要求を、acceptで受け入れてクライアントとのセッションを開始する
サーバーはlistenで要求待ちするソケットと、acceptでクライアントと通信するソケットを持つ
クライアントはconnectでサーバーに接続して通信するだけ(ソケットは1つでよい)
15デフォルトの名無しさん (ブーイモ MM8e-my2l)
2018/08/27(月) 23:00:46.13ID:CP0MczZVM
>>11
コードさらした方が話が早いよ
それより複数人だとどういうトポロジーで繋ぐの?
例えば4人だとどうなる?
16 ◆QZaw55cn4c (ワッチョイ 4a60-vl9i)
2018/08/27(月) 23:09:16.63ID:W4qvSHyH0
>>10-11
次の本が、似たような状況(たしかレーシングゲームだったか)のサンプルを載せていたと記憶しています
https://www.amazon.co.jp/gp/product/4774117544/

Windows の winsock も UNIX のバークレーソケットと似たようなもので、若干の修正は必要ですが、そこはネットを参考にして書きなおせる範囲だと思います
この本は初版が 1992 年頃に出たときから htons()/ntohs() が書いていない、とボロカスだったんですが、私はとっても好きだったのです…
17デフォルトの名無しさん (ワッチョイ 2580-kiUO)
2018/08/27(月) 23:16:58.65ID:zX+eejgv0
listenで待ってるスレッド(もしくはプロセス、こっちならあとでfork()する)がいる

listenで待ってるスレッドやプロセスからacceptして
peerと新しいソケットで通信するスレッドを作る

もうコレで分かる
18デフォルトの名無しさん (ワッチョイ 6680-jqYf)
2018/08/27(月) 23:32:35.96ID:ba8BcfX30
>>9
ゲームエンジンの本には、よくメモリープールの実装が載っている。
こういう機能を抽象化した、モジュールを誰かが作っているはず

Effective とか、デザインパターンの本も読んだ方がよい
19デフォルトの名無しさん (ワッチョイ 2561-+TX9)
2018/08/27(月) 23:32:44.53ID:X1STgCw40
サーバーが自分用のソケット一つと複数個のユーザー用ソケットを作成し、ユーザー 一人につき一つのソケットが割り振られるイメージでした。
20デフォルトの名無しさん (アウアウオー Sa12-fKBf)
2018/08/27(月) 23:52:05.98ID:H8sSdLfla
こんな感じにpublicにもmainいてもエラーにならないのはどうしてですか?

Main.h

class CMain
{
public:
int main(int argc, char* argv[]);
};

Main.cpp

int main(int argc, char* argv[])
{
return 0;
}
21デフォルトの名無しさん (ワッチョイ ea5e-7kIV)
2018/08/27(月) 23:57:35.85ID:TZo7knfc0
一般関数のmainとメンバ関数Cmain::main()は別物だろうよ。
22デフォルトの名無しさん (ワッチョイ 4af9-DXeA)
2018/08/28(火) 00:05:18.35ID:04IHxsB70
>>20
名前空間が違っていて区別がつくから同じ名前のものがあっても大丈夫。
23デフォルトの名無しさん (アウアウオー Sa12-fKBf)
2018/08/28(火) 00:18:40.52ID:wxxo3xcIa
>>21,22
なるほど、それもそうですね
24デフォルトの名無しさん (ワッチョイ bd08-4dUf)
2018/08/28(火) 07:30:50.31ID:r63k0nU70
>>13 >>14
ありがとうございました。やっぱ両方なんですね

>>18
メモリープール初めて知りましたがこんな方法あるんですね
あと上司がおよそ20年に渡って継ぎ足し継ぎ足ししてきたすぱg秘伝のコードなので今更構造変えられんのです……
25デフォルトの名無しさん (ワッチョイ bd04-4dUf)
2018/08/28(火) 07:39:23.68ID:oGnGbrSA0
スマポつかえよ!
26デフォルトの名無しさん (ワッチョイ 0a4c-OYOS)
2018/08/28(火) 07:44:24.16ID:BzDdgzNr0
上司のコードに文句言いつつデリートも知らん奴がなんか言っとる
27デフォルトの名無しさん (ワッチョイ bd04-4dUf)
2018/08/28(火) 07:49:16.32ID:oGnGbrSA0
勇んでデリートするようなコード書きたいか?
28はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-PcWx)
2018/08/28(火) 08:58:31.81ID:vCTFJ2QC0
>>24
リファクタリングの機会を設けないと秘伝が負債になるのがこの業界
29デフォルトの名無しさん (ワッチョイ 6680-jqYf)
2018/08/28(火) 08:59:48.56ID:TEJeUOom0
auto pointer, smart pointer ?
30デフォルトの名無しさん (ワッチョイ bd04-4dUf)
2018/08/28(火) 10:05:03.87ID:oGnGbrSA0
rip.auto_ptr.
31デフォルトの名無しさん (ワッチョイ 2561-+TX9)
2018/08/28(火) 15:32:29.83ID:2BUW4hJo0
>>19
1:1のソケットを4つ用意すれば4人でチャットできますよね?送ったメッセージをサーバーサイドが受け取って他の3人のソケットに送るイメージです
32デフォルトの名無しさん (ワッチョイ fdb3-PcWx)
2018/08/28(火) 15:45:07.84ID:FmvTK/aC0
あー、それなら合ってるね
そのままのイメージで書いてみればいける
33デフォルトの名無しさん (ワッチョイ 2561-+TX9)
2018/08/28(火) 19:28:50.38ID:2BUW4hJo0
>>32
それぞれのソケットの中身で違うのはポートだけってことで大丈夫ですかね?
34デフォルトの名無しさん (ワッチョイ fdb3-PcWx)
2018/08/28(火) 19:45:32.21ID:FmvTK/aC0
まぁポートだけ、というかリスニングの処理だけ特殊とは言えるかも
35デフォルトの名無しさん (オッペケ Sr3d-sFL6)
2018/08/28(火) 20:36:55.08ID:jw/yHSMpr
このスレって競プロerいる?
36デフォルトの名無しさん (ワッチョイ de1b-9hnH)
2018/08/28(火) 23:15:21.08ID:q8rsvszA0
>>35
いる
37デフォルトの名無しさん (ワッチョイ d9bd-BYDb)
2018/08/29(水) 00:22:05.79ID:9tKCPoRq0
関数からreturnされる値は必ず自動的にmoveされる?
38デフォルトの名無しさん (ワッチョイ 66eb-vl9i)
2018/08/29(水) 00:25:41.59ID:uf5REJu50
コンパイラと設定によると思う
39デフォルトの名無しさん (ワッチョイ 2580-kiUO)
2018/08/29(水) 00:26:07.98ID:zRPnCBM00
計算機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が受付を待っているポートに
接続する必要がある
40デフォルトの名無しさん (ワッチョイ fdb3-PcWx)
2018/08/29(水) 01:16:31.78ID:nUvoSPGm0
え、TCPいうてたしサーバーのIPとポート指定して接続してつなぎっぱなしを想定してたんだけど違うのか
いちいち切って繋ぎ直すなら別だけど
41デフォルトの名無しさん (ワッチョイ 6681-PcWx)
2018/08/29(水) 01:39:42.75ID:+EFc44O50
受付嬢は一人、ご相談は各担当に回す
みたいな
42はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-PcWx)
2018/08/29(水) 01:56:45.22ID:iljSGsda0
>>37
値が rvalue でムーブコンストラクタが存在するならばムーブされる。
(lvalue も状況によっては rvalue になることもある。)
ただし、 RVO の適用条件に叶う場合は RVO が適用されるかもしれないのでコピーもムーブもされないことは有りうる。
43デフォルトの名無しさん (ワッチョイ ea23-vl9i)
2018/08/29(水) 13:02:14.24ID:3zmBLDqv0
Hogeというクラスがあったとして、
Hoge getHoge();
という関数があるときに、
Hoge &hoge = getHoge();
と参照で受けて問題ない?
44デフォルトの名無しさん (ワッチョイ 8ac3-PcWx)
2018/08/29(水) 13:31:26.82ID:8DgsmGan0
ダメ
getHoge()の返却値はprvalueなので
constのない左辺値参照で受けることはできない

右辺値参照か、
constのついた左辺値参照が必要
45はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-PcWx)
2018/08/29(水) 15:21:15.25ID:iljSGsda0
>>43
getHoge() の返却値は一時的なオブジェクトなので
原則としては完全式の終わりに解体されることに
なっているが、 >>44 の述べる通りの方法で参照で受けたときに限って
例外的に寿命が延長される規則がある。
参照のスコープの終わりがオブジェクトの寿命になる。

RVO が発動するだろうから、そもそも参照で受ける意味があんまり無いと思う。
46デフォルトの名無しさん (ワッチョイ 23d2-J7KC)
2018/08/30(木) 00:25:01.05ID:kCgj5iLA0
書籍スレで聞いたらスレチ(?)と言われたので質問させて下さい(m´・ω・`)m
C++で新し目(出来れば2016年以降に発売したもの)の入門書でオススメがあれば教えていただきたいのですが…
よろしくお願い致します。
47デフォルトの名無しさん (ワッチョイ 239f-HLp6)
2018/08/30(木) 01:05:42.98ID:RsXRD1vR0
ありません( ー`дー´)キリッ
48デフォルトの名無しさん (ワッチョイ 1dc3-Nr3p)
2018/08/30(木) 02:11:48.32ID:0LlXI/R20
Effective Modern C++は読んどいたほうがいいけど入門書じゃねえな
うーん
49デフォルトの名無しさん (ワッチョイ 05fb-PgRe)
2018/08/30(木) 02:18:12.89ID:VcrE/h+O0
>>43
全く問題ない。
規格にもしっかり書いてある。
50デフォルトの名無しさん (ワッチョイ e3c3-tpL7)
2018/08/30(木) 05:39:20.37ID:zs5ycFHj0
>>49
どこに?
51デフォルトの名無しさん (ワッチョイ db1b-eZ+R)
2018/08/30(木) 07:30:44.91ID:3T0jr2180
>>46
あるわけいだろ
C++は入門言語じゃない
52デフォルトの名無しさん (ワッチョイ e3c3-tpL7)
2018/08/30(木) 07:40:22.80ID:zs5ycFHj0
>>46
このへん

ISBN-10: 4797394633
日本人の著者では柴田氏の作風が俺的にはお奨め
入門だからって抜いちゃいかんことを押さえてる

ISBN-10: 4798119598
C++といえばこの人
出版が2011年とやや古めだが
プログラミングの地頭を鍛えてくれる
53デフォルトの名無しさん (ワッチョイ 7df2-tpL7)
2018/08/30(木) 08:03:54.88ID:ff0XXJ3a0
そもそも、何も知らない初心者がなんで「2016年以降」とか限定するんだ?
何か根拠があるわけでもないだろう。
54デフォルトの名無しさん (ワッチョイ 9593-kT/R)
2018/08/30(木) 08:35:46.61ID:GbaSH31o0
古い本だと古い規格で説明されてるから、初心者には良くないって点はあるね。
#include <cstdio.h> みたいな中途半端な古さは特にやっかい。

『プログラミング言語C++』第4版を読んどきゃええじゃろ、と思ったけど
初版が2015年3月だから「古い本」だな。
55デフォルトの名無しさん (ブーイモ MMab-U3HC)
2018/08/30(木) 09:34:44.57ID:CAfiYqURM
2016年に何かあったの?
56デフォルトの名無しさん (ワッチョイ e3c3-tpL7)
2018/08/30(木) 10:11:29.31ID:zs5ycFHj0
> #include <cstdio.h>

こんな時代あったか?
57デフォルトの名無しさん (ワッチョイ 2334-hqRA)
2018/08/30(木) 10:17:39.13ID:ABjDmLki0
ときどきCがわかってない日本人が入門書書いてたりして余計路頭に迷わせたりする
58デフォルトの名無しさん (オッペケ Srf1-Zer2)
2018/08/30(木) 10:25:15.01ID:Usgn3Z4yr
>>48
effective 「modern」 c++ って良いの?
ただの effective は良いってほぼ全員認めてるが、more とか modern はあまり勧められないしどうでも良い本なのかと思ってた
59デフォルトの名無しさん (オイコラミネオ MMeb-RPdS)
2018/08/30(木) 10:56:25.83ID:6+1XpMNpM
math.hとcmathってどっちがいいの?
そもそもcmathインクルードしてもM_PI使えんしよく分からない
60デフォルトの名無しさん (ラクッペ MMd1-eZ+R)
2018/08/30(木) 10:58:18.11ID:OpvYfh8NM
>>58
effectiveならいいっていう老害なんだろ
61デフォルトの名無しさん (ラクッペ MMd1-eZ+R)
2018/08/30(木) 11:01:43.96ID:OpvYfh8NM
>>52
柴田の本は辞めとけ
初心者には無理
あれは大学の講義でかわされるやつ
62デフォルトの名無しさん (ワッチョイ e3c3-tpL7)
2018/08/30(木) 11:49:16.45ID:zs5ycFHj0
>>61
初心者つーかオマエだろ?
大学の授業についていけない二回転5

難癖ばっかりつけてないで
幼児用のC++の本を出してみな
63はちみつ餃子 ◆8X2XSCHEME (ワッチョイ db6f-tpL7)
2018/08/30(木) 12:34:40.85ID:8c0RjkhV0
>>59
cmath を使うべき。
C のヘッダは互換性のために残されているだけで、積極的に使うようなものではない。

M_PI は C の規格にも C++ の規格にもないマイクロソフト独自の拡張だから、
マイクロソフトがどういう気持ちで用意しているのかは知らないけど、
_USE_MATH_DEFINES マクロを #define しておけば Visual Studio では有効になるらしいぞ。

https://msdn.microsoft.com/ja-jp/library/4hwaceh6.aspx
64デフォルトの名無しさん (ワッチョイ e3c3-tpL7)
2018/08/30(木) 12:46:26.01ID:zs5ycFHj0
C++17でcmathが大幅強化されたね
ISO/IEC29124の特殊関数を取り入れた
65デフォルトの名無しさん (スップ Sd43-ePit)
2018/08/30(木) 12:52:55.39ID:5ZKhK1u9d
>>58
modernはC++11以降を使うなら必読だぞ
むしろ素effectiveやmoreの方が古くてあんまり役に立たなくなってる
66デフォルトの名無しさん (ワッチョイ 2312-rkYf)
2018/08/30(木) 13:14:44.70ID:ypFQk8hw0
>>63
gccの独自拡張じゃねえの
むしろMSはそれに合わせてる

長いものには巻かれろ、ってヤツだ
長い方はMSじゃなくgcc
67デフォルトの名無しさん (ブーイモ MMab-zBrR)
2018/08/30(木) 13:37:08.32ID:ZM/Yh9noM
柴田の本は昔から悪書扱いされてる
あえて読むことはないと思うわ
68デフォルトの名無しさん (ワッチョイ e3c3-tpL7)
2018/08/30(木) 13:37:55.22ID:zs5ycFHj0
だから読んでないわけか
69デフォルトの名無しさん (ブーイモ MMab-zBrR)
2018/08/30(木) 13:58:51.87ID:ZM/Yh9noM
昔は読んでたよ
20年以上前かな
いまでもjavaやc++のやつは図書館でたまにペラペラしてみるけど
読みづらくて全然合わないと感じる


同じジャンルで山田祥寛の本があったらそっちを読む
70デフォルトの名無しさん (ワッチョイ e3c3-tpL7)
2018/08/30(木) 14:09:38.78ID:zs5ycFHj0
つまり読んでないってことだろ

図書館でペラペラってなぜそんなことをするんだ
C++を20年以上やってるんだろ
71デフォルトの名無しさん (ワッチョイ cdd2-tpL7)
2018/08/30(木) 14:38:25.23ID:A7u5khVs0
人にC++言語について教える時に、人口に膾炙した書籍の表現を使うのが無難だからでしょ。
7254 (ワッチョイ 9593-kT/R)
2018/08/30(木) 15:34:47.96ID:GbaSH31o0
>>56 すまん <cstdio.h> は変ね。<stdio.h> と <cstdio> が混ざってしまった。
<cstdio.h> というヘッダが存在する処理系もあるか知れんけど、
#include で使えと教えてる本はないだろうな。

主旨は「半端に古い本だと」で変わらないけど、良い例が出せんわ。
73デフォルトの名無しさん (ワッチョイ e3c3-tpL7)
2018/08/30(木) 15:49:06.15ID:zs5ycFHj0
>>72
それを言うなら
<stream.h> //cfront 1.0
<iostream.h> //ARM
<iostream> //C++98
じゃね?
74デフォルトの名無しさん (ワッチョイ 037e-tpL7)
2018/08/30(木) 16:04:11.38ID:pLYrs11p0
質問なんだがコンパイル時間の観点から見て、ヘッダをインクルードするときは必要でない限りcppファイルでincludeするべき?
75デフォルトの名無しさん (ワッチョイ e3c3-tpL7)
2018/08/30(木) 16:13:39.13ID:zs5ycFHj0
#includeのネストを避けろということか?
そう主張する連中もいるが、俺は反対
76はちみつ餃子 ◆8X2XSCHEME (ワッチョイ db6f-tpL7)
2018/08/30(木) 16:18:52.75ID:8c0RjkhV0
>>74
ちょっと質問の意図がよくわかんないんだけど、逆に言えば
「ヘッダファイル (*.h) が他のヘッダファイルを include するのはコンパイル時間を増大させるか?」という意味?

あんまり関係ないよ。
よっぽど大きいプロジェクト (gcc とか) ならちょっとしたことで結構な差が出ることは無いとは言えないけど、
それでもプリコンパイルヘッダとかを活用すればだいぶん時間は短縮できるし、
更に高速化したいならキャッシュサーバを使うコンパイラもある。

https://github.com/yrnkrn/zapcc

・ 小さいプロジェクトでは気になるほどの差はない
・ 大きいプロジェクトではツールで解決しよう
77デフォルトの名無しさん (ワッチョイ e3c3-tpL7)
2018/08/30(木) 16:23:45.00ID:zs5ycFHj0
コンパイラは可能な限り高性能なマシンで使うべし
78デフォルトの名無しさん (ワッチョイ 037e-tpL7)
2018/08/30(木) 16:52:55.72ID:pLYrs11p0
例えばstd::stringをhoge.hでは使わずhoge.cppのみで使われている場合
hoge.hで#include<string>と書くと、他のファイルからhoge.hをincludeしたとき無駄が出るはず
だからhoge.cppで#include<string>と書いた方がいいのが、それとも些細な差なので全部hoge.hにぶち込んでもいいのかということ
79デフォルトの名無しさん (ワッチョイ e3c3-tpL7)
2018/08/30(木) 16:55:06.24ID:zs5ycFHj0
なるほど、実装で使うだけで宣言にはいらないものか
だったらhoge.cppで#includeしたほうがいいね
80デフォルトの名無しさん (ワッチョイ fd61-XEe6)
2018/08/30(木) 17:19:10.16ID:X06N8JK80
http://www.geekpage.jp/programming/linux-network/select.php

なんかソケットごとに違うポートを割り振るものだと思ってたのですが、

listen(srcSocket, 1);//第二引数はクライアント上限数

この第2因数をいじったら同じポートでも普通に接続できました。
このまま気にせずselect処理書いていっても大丈夫ですかね...?
通信関係あまり知らないのでバグったりするとどうなるか分からずちょっと怖いです。

相手用のソケットは
int dstsocket[5]の様な感じで作って中身は全部一緒です
81はちみつ餃子 ◆8X2XSCHEME (ワッチョイ db6f-tpL7)
2018/08/30(木) 17:49:39.07ID:8c0RjkhV0
>>78
その場合だと .cpp に書いた方が当然良い。
82デフォルトの名無しさん (ワッチョイ 0beb-zBrR)
2018/08/30(木) 18:56:44.69ID:aIx07XQj0
プリコンパイル済みヘッダを、いちいち書かなきゃいけなくなるのがあれだから使わない方がいいと言われたことがある
なぜそれでコンパイルが遅いって文句言ってるのか分からない・・・
83デフォルトの名無しさん (ワッチョイ 9504-8dGN)
2018/08/30(木) 21:34:38.22ID:A5r5+/4B0
https://ezoeryou.github.io/cpp17book/
辞書にするならこれ。役に立ったら書籍版買ってあげよう。
84デフォルトの名無しさん (ワッチョイ 0580-rkYf)
2018/08/30(木) 22:17:19.27ID:/0YXnEsV0
書いても大丈夫だが、そういうやりかたにするならselectでブロックしないように注意したほうがいい
selectをブロックしたままの状態にすると、当然、そのあと永遠にacceptされない
きっとスレッドにしたほうが簡単
85デフォルトの名無しさん (ワッチョイ 3de3-zBrR)
2018/08/30(木) 23:08:40.56ID:yw5JoOBN0
>>78
hoge.hでstd::stringを使ってないのに#include<string>を書く、という発想が理解できない
#include<string>はstd::stringを使ってるところに書く、使ってないところには書かない、でいいじゃん

変更があって使わなくなったのに#includeは残ってるのがありがちで嫌なところ
静的解析とかで指摘して欲しい
86デフォルトの名無しさん (ワッチョイ 2333-zBrR)
2018/08/30(木) 23:48:27.87ID:Eu7R++g90
>>80 ひきすう
87デフォルトの名無しさん (ワッチョイ 15b3-lQkG)
2018/08/31(金) 14:08:47.35ID:KIctO/Rq0
>>80
変な心配せずに書いて覚えた方が早いよ
あと最初TCPって言ってたよね?
もしTCPで通信ごとにポート変えなきゃいけないなら、Yahoo見に行く時毎回ポート変えてんの?
HTTPは80番って決まってるやろ?
あと何のためにその第二引数があるの?
88デフォルトの名無しさん (ワッチョイ 0be8-QDks)
2018/08/31(金) 19:45:34.91ID:3sSjwoo80
恥ずかしながら char と signed char が違うものだって知りませんでした…(独り言)
89デフォルトの名無しさん (ワッチョイ 2334-hqRA)
2018/08/31(金) 19:48:20.37ID:+YiNyVyB0
処理系による
90 ◆QZaw55cn4c (ワッチョイ 6360-zBrR)
2018/08/31(金) 19:53:07.91ID:saaKamBG0
>>88
signed char とか unsigned char とか明言されず、ただ char としか書いていない場合、
その char が signed char になるのか、それとも unsigned char なのかは
「処理系依存」・コンパイラ依存だった、という経緯が C の時代からあったのでした

「signed char でも unsigned char でもない『「alternative な char』がある」
という意味ではないのです
"alternative char"…なんかだ魅惑される響きだと感じ入ってしまうのは、私だけですか…
91はちみつ餃子 ◆8X2XSCHEME (ワッチョイ db6f-tpL7)
2018/08/31(金) 20:24:19.94ID:NWzNDPzW0
>>90
char は signed char でも unsigned char でもないです。
C でも C++ でも。
92デフォルトの名無しさん (ワッチョイ 7df2-tpL7)
2018/08/31(金) 20:30:14.89ID:LcHwdHfr0

charとsigned charとunsigned charは全部別の型だろ。
93はちみつ餃子 ◆8X2XSCHEME (ワッチョイ db6f-tpL7)
2018/08/31(金) 20:39:51.15ID:NWzNDPzW0
char は (型システム的には) signed char でも unsigned char でもないけど、
符号付きか符号なしのどちらかではあり、
その表現は処理系によって signed char か unsigned char のどちらかと実質的に等しいことになってる。

だいたいは暗黙の型変換が自然にうまいことやってくれるんだけど、
C++ だとオーバーロードの解決にかかわるところとかややこしいな。
94デフォルトの名無しさん (ワッチョイ 037e-tpL7)
2018/08/31(金) 20:40:27.43ID:fKtAGZM00
std::byteとかいうゴミはどう使えばいいんだ?
95デフォルトの名無しさん (ドコグロ MM43-BCog)
2018/08/31(金) 20:41:47.58ID:jQ6ZKbRRM
>>89-90
そういう話じゃなくて文字列型にはchar, unsigned char, signed charの3つがあるって話じゃないの?
96はちみつ餃子 ◆8X2XSCHEME (ワッチョイ db6f-tpL7)
2018/08/31(金) 20:50:33.26ID:NWzNDPzW0
>>94
数値計算のための演算子が定義されてないのが重要なポイントだな。
なんらかの入力をビットパターンとして処理したいときに使える。

ビット表現に関する C/C++ での規則は未定義の部分もあって、
数値とビット表現の対応付けは処理系 (アーキテクチャ) によるので、
数値としての演算の結果 (の数字をビットパターンとして見た場合) は一意ではない。
std::byte でデータを保持しておけばうっかり数値計算してしまったりしない。

std::byte があることで特にできるようになることがあるわけじゃないけど、
うっかりを防止するために防衛的に使うもんだと思う。
97 ◆QZaw55cn4c (ワッチョイ 6360-3+v7)
2018/08/31(金) 20:57:38.41ID:saaKamBG0
>>91
https://ideone.com/5zhQcP
…なるほど、そういう風に解釈するんですか!?
また一つ賢くなりました
98はちみつ餃子 ◆8X2XSCHEME (ワッチョイ db6f-tpL7)
2018/08/31(金) 21:21:37.54ID:NWzNDPzW0
>>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 のそれぞれに用意されているのは、
そういう曖昧さが起こらないようにするため。
99デフォルトの名無しさん (ワッチョイ 555e-xSD8)
2018/08/31(金) 22:36:19.33ID:mXpACRvK0
>>95
文字列型はchar
signed char, unsigned charは小さい数を格納する
100はちみつ餃子 ◆8X2XSCHEME (ワッチョイ db6f-tpL7)
2018/08/31(金) 23:16:56.24ID:NWzNDPzW0
「文字列型」という言葉を使うと語弊がある気がするぞ。
101デフォルトの名無しさん (オイコラミネオ MM21-RPdS)
2018/08/31(金) 23:21:39.46ID:R+q9F3xyM
現在時刻(またはPCやexe起動からの経過時間)をmillisecondsで取得する方法ってありますか?
mm-dd-yyみたいな形式ではなくて全部数字で取得したいです
102デフォルトの名無しさん (ワッチョイ 0580-rkYf)
2018/08/31(金) 23:24:08.56ID:4ZfpOo1s0
exeだからwindows
つまりGetTickCount()
103 ◆QZaw55cn4c (ワッチョイ 6360-3+v7)
2018/08/31(金) 23:59:05.22ID:saaKamBG0
>>101
https://ideone.com/H6bajN
104デフォルトの名無しさん (ワッチョイ 23bd-+TZu)
2018/09/01(土) 00:01:43.12ID:eGvEpu9E0
なんでCの頃にcharを符号付きを許したのかが謎
文字は負の値にならないとかいうルールまで定めながら
charをunsignedと定義することを頑なに拒んだ古代の連中は一体何を守ろうとしたのか
105デフォルトの名無しさん (ワッチョイ 23bd-+TZu)
2018/09/01(土) 00:06:54.80ID:eGvEpu9E0
charのsignedとunsignedの処理系依存の混乱さえなければ今でもmalloc()はchar*(サイズ1の型のポインタ)を返してくれて便利だったかもしれんのに、
106デフォルトの名無しさん (ワッチョイ 0580-rkYf)
2018/09/01(土) 00:09:21.94ID:/wwW4VSs0
asciiは7bit

いまでもC++はどんなオブジェクトでも(char*)でキャストすることは
仕様で許されてる
107デフォルトの名無しさん (ワッチョイ 7df2-tpL7)
2018/09/01(土) 00:09:26.78ID:Lo8welT80
>>99
そうであればよかったんだけどstreamsでの扱いは全部文字型なんだよな。
おかげでuint8_tをstreamに出力したら文字が出てくる羽目に。
108デフォルトの名無しさん (ワッチョイ 23bd-+TZu)
2018/09/01(土) 00:15:47.63ID:eGvEpu9E0
>>106
E B C D I C は 8 b  i  t  じ ゃ わ !

>>106
キ  ャ  ス  ト  し  た  だ  け  で  は  c h a r *  か  な  に  か  の  中  間  変  数  に  代  入  せ  ね  ば  
標  準  の  言  語  規  格  で  は  + +  や  - -  が  で  き  ん
109デフォルトの名無しさん (ワッチョイ 23bd-+TZu)
2018/09/01(土) 00:21:54.31ID:eGvEpu9E0
スマン訂正;
誤: キ  ャ  ス  ト  し  た  だ  け  で  は  c h a r *  か  な  に  か  の  中  間  変  数  に  代  入  せ  ね  ば  
正: v o i d * 引  数  は  キ  ャ  ス  ト  し  た  だ  け  で  は  c h a r *  か  な  に  か  の  中  間  変  数  に  代  入  せ  ね  ば  
110デフォルトの名無しさん (ワッチョイ 0580-rkYf)
2018/09/01(土) 00:24:45.17ID:/wwW4VSs0
知見が狭い低学歴知恵遅れの世界では
伝統的なテキストがacsiiをさしてることすら
わかってないらしいわ

普通に古代のネットワークで7bitのネットワークとかあったからな

char*の変数に代入しないと
ポインターをインクリメントできないとかあたりまえやんけ
C++とか関係ない

相変わらず低学歴知恵遅れはなにをいってるのか意味不明
111デフォルトの名無しさん (ワッチョイ 0580-rkYf)
2018/09/01(土) 00:28:15.78ID:/wwW4VSs0
昔、なんでメールがiso-2022-jpしかかたくなにダメといわれてたか
きっとその理由も分かってない
112デフォルトの名無しさん (ワッチョイ 23bd-+TZu)
2018/09/01(土) 00:36:37.58ID:eGvEpu9E0
>>110
えっっつ!?
伝統的なテキストの7 bitの文字コードはISO 646のことじゃないの;

ていうかASCIIが7 bitで表現できることはなんでCの頃にcharを符号付きを許したのか(>>104)を完全には説明しない
charをunsguned charにキめとけばアドレス全般を現す型としてのvoid*なんてものを別途作り出す必要も無く全員ニッコニコー☆だったかもしれんのに…
113デフォルトの名無しさん (ワッチョイ 2333-zBrR)
2018/09/01(土) 00:37:24.15ID:gChyprIt0
>>106
「どんなオブジェクトポインターでも」の間違い?
114デフォルトの名無しさん (ワッチョイ 0580-rkYf)
2018/09/01(土) 00:42:50.43ID:/wwW4VSs0
MSBに1がたってるオクテットが1つでも入ってたら
それはバイナリだ

オブジェクトを(char*)を普通にキャストできる
低学歴知恵遅れのどうでもいい感想やどうでもいい願望なんか関係ない
そういう仕様だからな

安全なPODは普通にキャストされることがある
115デフォルトの名無しさん (ワッチョイ 0580-rkYf)
2018/09/01(土) 00:44:26.13ID:/wwW4VSs0
オブジェクトポインターなのは
あたりまえ
116デフォルトの名無しさん (ワッチョイ 037e-tpL7)
2018/09/01(土) 01:14:05.21ID:xvCOhCpk0
7ビットでも8ビットでも表現できる言語の数は変わらないから
117デフォルトの名無しさん (ワッチョイ 1dc3-Nr3p)
2018/09/01(土) 06:51:29.42ID:QGdL6q/H0
acsiiってなあに?低学歴知恵遅れさん
118デフォルトの名無しさん (ワッチョイ e34c-XpOW)
2018/09/01(土) 07:13:19.96ID:hKSBbo0T0
>>117
涙拭けよ老眼
119デフォルトの名無しさん (アウアウカー Sa61-2Cin)
2018/09/01(土) 07:40:58.94ID:/JMJVp6oa
>>110
120デフォルトの名無しさん (ワッチョイ 1dc3-4YxK)
2018/09/01(土) 07:48:51.59ID:vnjaDev80
情報系大学3年生
恥ずかしいことに今までやっていた言語がC++じゃなくてCだったことを知った…
(だってVisualStudio起動するときにC++開発モードを選ぶように言われたんだもの)
そういうわけでC++はどんなもんかなと本屋でちらっと明解C++を手に取ってみたら全く別物じゃねえか…
わかんねえよ……ネットで調べてみたら複雑らしいし
Cならatcoderで緑色になるくらいは書けるけど、でも就活のときCしか書けませんC++わかりませんってかなり致命的?
121デフォルトの名無しさん (ワッチョイ 9593-kT/R)
2018/09/01(土) 08:00:36.94ID:np0z0HoI0
>>104
単なる char を int に変換する時に、符号拡張でも0拡張でも、
そのCPUで都合の良い(速く動作させることのできる)命令を使っていいよ、
っていう部分を重視したんじゃないかな。
文字コードは負にならないから、どっちで拡張しても結果に違いは生じない、
という保証が先にあっての話ということで。
MSBが1になる可能性がある8bit値なら signed/unsigned を明示しろと。

>>112
俺はむしろ「値を格納することを目的としない、抽象的な void* ポインタ」が
総称ポインタとして追加されたのを好ましいと思うけど。
「char* には他のどんなポインタもキャストして代入可能、そのポインタを介して
メモリアクセスすることも許す」の方が苦し紛れな気がする。
もちろん、このルールがないと本当に苦しい、ないと困るものだけど。
122デフォルトの名無しさん (ワッチョイ e3c3-tpL7)
2018/09/01(土) 08:15:34.02ID:Pcb6gvc+0
>>120
C++は、Cの後置インクリメントという名のとおり
最初はCのつもりで使ってよく
次から少しずつCに対する拡張を憶えていけばよい

Cをマスターしている人にとって
ごく自然に入っていける言語だから
慌てないでじっくりやってみそ

C++の発案者(通称、禿)が書いている有名な本が
まさしくCがわかる人のための論調だ
ISBN-10: 4797375957

就活では何言語が使えるかより
何を作ったかが大事
C++使えます、なんて新人が自称してても
たいていすぐボロが出るし
123デフォルトの名無しさん (ワッチョイ 9593-kT/R)
2018/09/01(土) 08:45:34.91ID:np0z0HoI0
>122
書籍の紹介をする際にAmazonさんのページへのリンクを貼る人は多いけど、
ISBNだけでタイトルも書かないパターンは初めて見たよ。
『プログラミング言語C++』第4版だね。

おかげで ISBN-10 と ISBN-13 という2種類のISBNがあることも知った。
124デフォルトの名無しさん (アウアウカー Sa61-g5e1)
2018/09/01(土) 10:57:23.80ID:yZa51HUHa
uint8_tとint8_tを使う。
移植性が良くなる。
125デフォルトの名無しさん (アウアウウー Sa19-6LZ2)
2018/09/01(土) 11:04:56.69ID:o5EcbkDPa
んだ
cstdintとかcinttypesとか使えば良いじゃん
126 ◆QZaw55cn4c (ワッチョイ 6360-3+v7)
2018/09/01(土) 11:30:44.62ID:xvMvXv+W0
>>120
私はC++を覚えるのに20年くらいかかっています、アマチュアベースなので
127デフォルトの名無しさん (ワッチョイ e3c3-tpL7)
2018/09/01(土) 12:18:34.89ID:Pcb6gvc+0
みんなそうだよ
C++はC with Classesから30年以上経っているが
未だに発展途上の言語で
新しい機能がどんどんできているから
128デフォルトの名無しさん (アウアウウー Sa19-zBrR)
2018/09/01(土) 12:35:41.52ID:+BAvd4bna
文法覚えてもそこがスタート地点

推奨される最先端の実装例を見てみたいがどこにそういう例があるのかも知らない
だれかしらないかなあ
129デフォルトの名無しさん (ワッチョイ e3c3-tpL7)
2018/09/01(土) 12:51:44.34ID:Pcb6gvc+0
cl /std:c++latestや
clang-cl -Xclang -std=c++2aとかか?
130デフォルトの名無しさん (ワッチョイ 23bd-+TZu)
2018/09/01(土) 13:05:09.71ID:eGvEpu9E0
レスdクス今全てがつながったわC++完全に理解した!
char→signed int変換を符号拡張でやっても良いという余地を残しておけば、
char→signed int変換を0拡張でやる命令が無いアーキテクチャーであっても、
(たまたま)使う文字コードセットがcharのMSBまで使わないやつ(acsiiとか)であれば
(運よく)変換を1命令で済ませられる

しかしcharをunsigned charとする案に対するアドバンテージはそれだけ…
我々は滅び去った腸古代のアーキテクチャーの痕跡を毎朝目の当たりにしているわけや
131デフォルトの名無しさん (ワッチョイ 23bd-+TZu)
2018/09/01(土) 13:20:25.67ID:eGvEpu9E0
>>130は、>>121へのレス
痕跡というのは、C++において(オーバーロードとの絡みで)charがsigned charでもunsigned charでもない別の型である件のこと。

>>127
職業的に使う言語とアマチュアベースで使う言語は接する時間が違うから、上達の速度も違う
C++はCに擬態することで職場でも家でも継続的に新規の機能を試せたから成功した
D言語は職場で12時間C/C++を触った後に家に帰ってD言語脳に切り替えねばならなかったからめんどくさがられて失敗した

この反省を踏まえ、Pythonはいつでも初心者モードでも問題なく使える簡単言語になったそうな
(ちな職場でこっそり使い倒せる言語はやっぱPerlとJavaScrip(ゲフンゲフン
132デフォルトの名無しさん (ワッチョイ 0b80-4Jnz)
2018/09/01(土) 14:18:13.49ID:kUpkBQ3x0
Linux プログラミング・インタフェース、Michael Kerrisk、2012
翻訳者・千住治郎

C++11/14 コア言語、江添 亮、2015
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006

これらが、神の書!
膨大なOK・NG パターンを列挙している

これらの本を持って、数年山籠もりすべし!w

初心者用の文法書なんて、一部分しか書いていない。
氷山の一角

ドワンゴ江添の本でも、詳細には切りがないので省略しますとかw
無限に出てくるw

こういう本を書ける、Kerrisk・千住・江添は、頭がおかしくなってるはず!w
133デフォルトの名無しさん (ワッチョイ 037e-tpL7)
2018/09/01(土) 14:22:45.69ID:xvCOhCpk0
上の本高いな
134132 (ワッチョイ 0b80-4Jnz)
2018/09/01(土) 15:18:22.65ID:kUpkBQ3x0
「Finnegans Wake」の著者、James Joyce も、
翻訳者の柳瀬尚紀も、頭がおかしいと思ったけど、

132 の本は、まさにそう

頭がおかしくないと、これだけ書けないw
135デフォルトの名無しさん (スプッッ Sd43-snBd)
2018/09/01(土) 16:12:55.71ID:wj4q5AyAd
vcのwriteFileとかの関数って非同期の時戻り値とかどう処理すべきもんなの?
waitforsingleobjectでまつのはセオリーっぽいが
そこにたどり着くまでに非同期の処理が終了とかまだ終わってないとかいろんなケース想定されるじゃん?
136デフォルトの名無しさん (ワッチョイ 15b3-tpL7)
2018/09/01(土) 16:31:40.14ID:sbs5rSlN0
MSDNのWaitForSingleObjectのページ読んだ?
実際に書いてみた?
137デフォルトの名無しさん (ワッチョイ 23b3-BCog)
2018/09/01(土) 16:45:34.07ID:JqoAQjEz0
>>135
WaitForSingleObjectまでに非同期処理が終わってたらWaitForSingleObjectからすぐに抜ける
非同期処理が終わってなければ終わるまでWaitForSingleObjectで待つ
要するにWaitForSingleObjectから帰って来たら非同期処理は終わってる
138デフォルトの名無しさん (ワッチョイ 0580-rkYf)
2018/09/01(土) 17:05:45.30ID:/wwW4VSs0
いまだにメールで昔半角カナを使ってはいけないといわれてた理由すらわかってないのが
よくわかったわ

EBCDICは8bitとかいってるぐらいだからな
そんなもん意味不明なバイナリだからな
当然utf8も意味不明なバイナリ

頭悪い知恵遅れでも分かったふりしてテキトーなこと書けるのが
2ちゃんねるだからな

2ちゃんねるは頭の悪さを自白するのに最適
139デフォルトの名無しさん (スプッッ Sd43-snBd)
2018/09/01(土) 17:09:37.10ID:wj4q5AyAd
>>136
書いてみた
パイプを使ったデータのやり取りをしようとしていて
writeFileだけでなくConnectNamedPipeだったりの非同期処理の異常系で困っている
通常の操作はおそらくできてると思うんだが....

>>137
やっぱりそういうことで良いんやね
140デフォルトの名無しさん (ワッチョイ 2312-rkYf)
2018/09/01(土) 17:46:30.13ID:C1azqw0O0
>>130
>C++完全に理解した!

小悟を経て大悟に至る長大なステップのほんの一段に過ぎない・・・
141デフォルトの名無しさん (ワッチョイ 1dc3-Nr3p)
2018/09/01(土) 18:01:58.23ID:QGdL6q/H0
C++erは3種類しかいない
C++を理解せずに書いている素人、C++を理解したと勘違いしてる素人、いつか人類はC++を理解できるのだろうかと日夜考え続けている素人だ
142デフォルトの名無しさん (ワッチョイ 65b3-J7KC)
2018/09/01(土) 18:06:49.23ID:IaxL4QGW0
C++はわしが育てた。
143デフォルトの名無しさん (アウアウウー Sa19-zBrR)
2018/09/01(土) 18:20:12.88ID:TMvFd8Nda
>>141
.0.5%ぐらいは真のC++プログラマーがいると信じたい
今まで出会ったことがない
144デフォルトの名無しさん (ワッチョイ 9593-kT/R)
2018/09/01(土) 19:13:37.84ID:np0z0HoI0
>>141
「完全な理解」に到達できないようゴールを動かしつづける黒幕、
てのがいそうな感じね。

日々の学習が新規格に追いつかないヘボの愚痴だけど。
145デフォルトの名無しさん (ワッチョイ 23d2-gxLD)
2018/09/01(土) 19:30:28.67ID:YT761AP20
実際これ本物じゃないかと思うよね
http://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html
146デフォルトの名無しさん (ワッチョイ 65b3-J7KC)
2018/09/01(土) 20:34:01.15ID:IaxL4QGW0
>>145
Javaで読み替えてみ。
147デフォルトの名無しさん (ワッチョイ 9504-8dGN)
2018/09/01(土) 20:50:59.81ID:z2qK7ugE0
javaに必要だったのはGCじゃなくてデストラクタだったりして。
噂によると、参照切るために使い終わったらオブジェクトにNULL入れてるらしい。
それってfreeと違うんかい?
148デフォルトの名無しさん (ワッチョイ 037e-tpL7)
2018/09/01(土) 20:53:31.39ID:xvCOhCpk0
今使われてるあらゆる言語に置き換えられそう
149デフォルトの名無しさん (ワッチョイ 65b3-J7KC)
2018/09/01(土) 23:46:43.62ID:IaxL4QGW0
進撃の巨人、エンドオブザワールド見たら、ミカサがいきなり不倫してて子供までいる設定に代わっててびっくりしたわ。
原作ではそんな子じゃなかったのに。
150120 (ワッチョイ 1dc3-4YxK)
2018/09/02(日) 07:00:47.93ID:HcdhtgGT0
>>120です。レス少し遅くなっちゃったけどレスくれたみんな詳しくありがとう
とりあえずじっくり勉強してみることにするわ
このご時世、就活を意識するならPythonのほうが優先度は高そう感じがするけど…

就活についてのアドバイスしてくれた人がいるけど、納得した。
「できます」「つかえます」って基準が不明瞭だからさして効果はないか。
ちなみにどんなものを作れば有利に働くかな?
趣味でプログラミングをしているけど何か作りたいものがあってはじめたんじゃなくて競技プログラミングが面白そう、という理由ではじめて競技プログラミングをメインにやってた
Cでならシューティングゲームを作ったことはあるけどこれはあまり就活では役に立ちそうにないかな
151デフォルトの名無しさん (ワッチョイ db1b-eZ+R)
2018/09/02(日) 07:15:15.45ID:fnBlw2CS0
>>150
査読論文
100万PVを超えるwebサイト
アプリのレビュー経験
上記以外はマイナスになるだけ
152デフォルトの名無しさん (ワッチョイ 1dc3-Nr3p)
2018/09/02(日) 07:18:34.72ID:T+JOOtu00
会社によるし何したいかによる
言語仕様やコンパイラに強い人が欲しい会社もあるし
ハードウェアやアセンブリレベルに強い人が欲しい会社もあるし
CGとか映像処理に強い人が欲しい会社もあるし
Windowsのことなら任せろって人が欲しい会社もあるし
OSS界隈の事情に詳しい人が欲しい会社もあるし
コード土方なんかよりパワポのプロが欲しい会社もある

頑張って
153デフォルトの名無しさん (ワッチョイ 0b80-4Jnz)
2018/09/02(日) 08:54:14.95ID:5WqNet320
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006

日本の大企業から、C の専門家、数十人が集まって、この本を書いたけど、
規格について詳しい人は、いなかった

規格書の条文を組み合わせたときに、どういう現象が起こるかわからない。
このレベルの人では、その恐ろしさをよく知っている

ルールの組み合わせ爆発が起こるから、無限!
だから規格を保証できない

よく、わからなかったから規格書を読めっていう奴がいるけど、
そういう奴は、組み合わせ爆発の恐ろしさを、何もわかっていない
154デフォルトの名無しさん (ワッチョイ 0b80-4Jnz)
2018/09/02(日) 10:18:27.88ID:5WqNet320
言語の入門書を読んで、文法だけを知っている人なんて、いらない。
文法だけじゃ、仕事はできない。
仕事とは、システムを作る事だから

だから企業は、コンピューターリテラシーのある人が欲しい。
OS の知識。システムの運用構築。
デザインパターン・アルゴリズム・データベースなど、すべての範囲

大量の勉強・資格も必要。
その人が到達したレベルの証明書

Ruby が出来たら、Python もわかる。
Rubyよりも面倒くさいのに、なにも、Pythonで書く理由がない

AI・数学系の仕事があって、初めてやるもの

float 変数にずっと、1を足し続けていくと、どうなるでしょう?
ちょっとした質問をされても、勉強していないと答えられないだろ
155デフォルトの名無しさん (ワッチョイ 1dc3-Nr3p)
2018/09/02(日) 10:55:34.36ID:T+JOOtu00
>float 変数にずっと、1を足し続けていくと、どうなるでしょう?
答えてどうぞ
ちょっとした質問なんだろ?答えて
156デフォルトの名無しさん (ワッチョイ 037e-tpL7)
2018/09/02(日) 11:00:46.35ID:AnLHGx5M0
突然ケンカ売り始めてワロタ
157154 (ワッチョイ 0b80-4Jnz)
2018/09/02(日) 11:38:28.02ID:5WqNet320
120 みたいな「入門書を読んで、出来ます」っていうような奴は、よくいる。
文法をかじったのと、システムを作るって言うのは、全く違う

コンピューターリテラシーが無いと話にならない。
文法よりも、情報処理資格を取った方が、よほど使える

8進数の637 を、16進数で表示しろとか、こういう問題

文法よりも、システムを作るための基礎体力がある人。
登山するのにも、まず基礎体力だろ
158デフォルトの名無しさん (ワッチョイ 1dc3-Nr3p)
2018/09/02(日) 11:40:33.24ID:T+JOOtu00
>>157
逃げんな答えろ

>float 変数にずっと、1を足し続けていくと、どうなるでしょう?
正確に答えて
159デフォルトの名無しさん (ラクッペ MMd1-eZ+R)
2018/09/02(日) 12:11:20.54ID:d5Sj8H4uM
>>158
プログラムで実行すればいいじゃん
馬鹿?
160デフォルトの名無しさん (ワッチョイ 23b3-BCog)
2018/09/02(日) 12:52:47.96ID:GR8jnF/50
>>158
環境による、以上!
161デフォルトの名無しさん (ササクッテロ Spf1-lQkG)
2018/09/02(日) 14:37:45.13ID:5hf5Gg6np
>>150
>Cでならシューティングゲームを作ったことはあるけどこれはあまり就活では役に立ちそうにないかな
そっちの方が大きいと思うが・・w
ソフト一本作ったかどうか、ってのは大きいよ
162デフォルトの名無しさん (ワッチョイ 5b9f-JHVF)
2018/09/02(日) 14:52:19.54ID:4Jf6YH6e0
>>150
> Cでならシューティングゲームを作ったことはあるけどこれはあまり就活では役に立ちそうにないかな

そうかなあ?何処に就職しようとするかで変わると思うんだが、しかし、そこまでできるなら結構有利なネタになると思うんだけど。
163はちみつ餃子 ◆8X2XSCHEME (ワッチョイ db6f-tpL7)
2018/09/02(日) 15:50:29.01ID:vK23Frpo0
とにもかくにも何かを「完成させる」ってのは強いと思うよ。
プログラミングに関する色んな理屈は研究されているけれども、
現実の問題に対して適用できる能力はまた別問題だからね。
深く知っているやつよりも目的を達成できるやつが偉い。

もちろん深く知っている方が色々な問題に対して出来ることは多いはずだけど、
実際にやったという見える実績がないと評価しようがないもの。

評価基準は評価する側のことだから、
ひょっとするとあまり気にしない評価者もいるかもしれないし、
高く評価するかもしれないということはある。
でも、無かったら何にも無いだけ。
164 ◆QZaw55cn4c (ワッチョイ 6360-3+v7)
2018/09/02(日) 17:18:56.14ID:oSO4LvdH0
>>163
>とにもかくにも何かを「完成させる」ってのは強い
強いですね…
ある程度できてしまうと、情熱が失せるというか妥協するというか手を抜くというか
それを完成形に持っていくのには知性ではなく意志が必要だとおもいます、そして現在は知性(主知主義)よりも意志(主意主義)を評価する時代かと

私についていえば直近は
http://2chb.net/r/tech/1524570314/795-796
に執心していたのが、α版
http://2chb.net/r/tech/1434079972/52
ができてしまうと、ある意味どうでもよくなって、β版
http://2chb.net/r/tech/1434079972/53
を書き上げた頃は、変てこな義務感だけでいわば青息吐息で動いていた感じです、たぶんこれ以上手をいれることはないでしょう、全然未完成なんですけれども…
165デフォルトの名無しさん (ラクッペ MMd1-eZ+R)
2018/09/02(日) 17:40:53.37ID:d5Sj8H4uM
ゲームってプログラムより素材でしょ
166デフォルトの名無しさん (ワッチョイ 15b3-tpL7)
2018/09/02(日) 17:43:17.01ID:HUwXytGW0
まるでプロには知性が足りないとでも言わんばかりだな
君の書いたソレは売り物になるレベルのソフトなの?
167デフォルトの名無しさん (ワッチョイ 15b3-tpL7)
2018/09/02(日) 17:44:50.35ID:HUwXytGW0
>>165
アホぬかせ
168 ◆QZaw55cn4c (ワッチョイ 6360-3+v7)
2018/09/02(日) 17:56:52.92ID:oSO4LvdH0
>>166
どこを縦読みすれば?
169デフォルトの名無しさん (ワッチョイ 5b9f-JHVF)
2018/09/02(日) 18:21:41.50ID:4Jf6YH6e0

170デフォルトの名無しさん (ワッチョイ 9593-kT/R)
2018/09/02(日) 19:11:21.08ID:p4iMlD/t0
>>165 の意図を正しく読み取ってないかも知れんけど…。

プレイヤーにとっては、凄いプログラムで動いてるゲームより
〜さんがキャラクタ描いてる、〜さんが声アテている、の方が
購入の理由や評価の基準になってる、という面では
「プログラムより素材」と言えるかも。

テトリスやぷよぷよが売れたときは、
また別の意味で「プログラムより素材」だったんだけど。
現在ではマインクラフトなどかな。


技術的にスゲーって感じたゲームはPS2の「大神」だったかな。
それ以後あんまり遊んでないし。
171デフォルトの名無しさん (ワッチョイ 15b3-lQkG)
2018/09/02(日) 19:17:19.67ID:KDgwy3t20
君らいっぺん3Dのゲームがどういう技術で成り立ってるか調べたらいいよ
全く想像つかないのに適当こいてるだろ?
172デフォルトの名無しさん (ワッチョイ 65b3-J7KC)
2018/09/02(日) 19:26:28.00ID:fUkDgbHp0
>>171
しらべてみたら監督技術、プロデュース技術、ディレクション技術なんだな。
一番重要なのは資金調達技術だって。
思ってたのと全然違うわ。
173デフォルトの名無しさん (ワッチョイ 15b3-lQkG)
2018/09/02(日) 19:29:29.85ID:KDgwy3t20
アホだろお前
174デフォルトの名無しさん (ワッチョイ 65b3-J7KC)
2018/09/02(日) 19:32:57.27ID:fUkDgbHp0
ゲーム業界ではパワポを使いこなせないと会議で発言権を得られないって聞いたことがあるな。
175デフォルトの名無しさん (ワッチョイ 65b3-J7KC)
2018/09/02(日) 19:35:22.26ID:fUkDgbHp0
そういえばジョブス氏も皆さんの前でお話しするときはパワポ使ってたよね。
WindowsよりOSXというお話をするときでさえ、スクリーンにはパワポが映ってた。
176デフォルトの名無しさん (ワッチョイ 5b9f-JHVF)
2018/09/02(日) 19:36:03.23ID:4Jf6YH6e0
話がいつの間にか売れるゲームの話になってる?
元の話は学生が就活時にCでゲーム作った事が役に立つかって話だったと思うが。
177デフォルトの名無しさん (ワッチョイ 5b9f-JHVF)
2018/09/02(日) 19:37:22.81ID:4Jf6YH6e0
>>175
Macで動くやつではなく?
178デフォルトの名無しさん (ワッチョイ 15b3-lQkG)
2018/09/02(日) 19:55:02.00ID:KDgwy3t20
>>176
なってないw
QZと165に釘さしたかっただけ

別に趣味グラマを否定したいわけじゃないけど、一本人が使いたがるようなレベルのソフトを作ろうとすると、言語の知識だけではない様々な現実的な問題に直面するだろ

それを乗り越えたかどうかってのは採用担当の評価に大きく関わってくると思うけどね

はっきり言うと、QZのレスは、それを乗り越えるのは意志だけ(つまりソフトを作り上げるために必要になってくる知識など、言語の知識以外には無い)と暗に決めつけてる
最近そういう傲慢な趣味グラマがC++界隈でよく見受けられるけど、そういうの良くないよマジで
179デフォルトの名無しさん (ワッチョイ 0580-rkYf)
2018/09/02(日) 20:08:55.68ID:Tb3tt8fk0
それでコードはもうすでに自分は書けるもんだと勝手に思い込んで
まともな教育を受けてない低学歴知恵遅れのアホなくせに思い上がってるウンコが
この板にはわんさかいる

視野が狭いとそうなる
低学歴知恵遅れはどうしても視野が狭くなる
知見の範囲が限られるからな
180 ◆QZaw55cn4c (ワッチョイ 6360-3+v7)
2018/09/02(日) 20:09:48.00ID:oSO4LvdH0
>>178
>QZのレスは、それを乗り越えるのは意志**だけ**

>>164 ではそうはいっていませんよ、意志の重要性を主張していますが、知性(=知識)が不要とはいっていない、ちょっと言葉が足りなかったのは認めますが
知性がなければ、そもそもプログラムを記述することすら出来ないでしょう?
文脈としては >>150 を応援している内容です

「根性論」の気配を感じて反感をもたれているのだろうとは推察しますけれども
181デフォルトの名無しさん (ワッチョイ 0580-rkYf)
2018/09/02(日) 20:12:17.71ID:Tb3tt8fk0
質問してるヤツ未満のとにかく程度の低いウンコが
この板で幅をきかせてるのが一番の問題
182デフォルトの名無しさん (ワッチョイ 65b3-J7KC)
2018/09/02(日) 20:30:49.80ID:fUkDgbHp0
質問者のほうが詳しいもんな。
183デフォルトの名無しさん (ワッチョイ 0beb-zBrR)
2018/09/02(日) 20:32:00.95ID:ZRAAplmr0
暗にマウンティングしようとしすぎなんだよ、聞かれたことだけ答えてろ
184デフォルトの名無しさん (ワッチョイ e34c-XpOW)
2018/09/02(日) 20:40:57.55ID:x4is64QR0
>>167
いや、俺はゲームプログラムは作れるが
絵や音楽は無理だわ
185デフォルトの名無しさん (ワッチョイ 65b3-J7KC)
2018/09/02(日) 20:42:56.80ID:fUkDgbHp0
絵や音楽を作るAIをプログラミングすれば。
186デフォルトの名無しさん (ワッチョイ 65b3-J7KC)
2018/09/02(日) 22:53:04.36ID:fUkDgbHp0
gperfをconstexprで実現するライブラリない?
187デフォルトの名無しさん (ワッチョイ 65b3-J7KC)
2018/09/02(日) 22:54:40.74ID:fUkDgbHp0
>>153
数十人も集まったら臨界起こる。
危険。
188デフォルトの名無しさん (ワッチョイ 037e-tpL7)
2018/09/03(月) 14:05:29.69ID:oGMLPH120
>>170
ぷよぷよにしろテトリスにしろ完全に動くから売れるんだぞ
数年前に家庭用機に動きもっさりバグだらけのテトリスがあったが発売数日で誰もやってなかったよ
189デフォルトの名無しさん (ワッチョイ 0b81-tpL7)
2018/09/03(月) 20:11:20.95ID:e/XZidXx0
数年て
30年近く前の話だろそれ…
190デフォルトの名無しさん (ワッチョイ 15b3-tpL7)
2018/09/03(月) 20:23:04.08ID:JI8nhEFS0
何言ってんだこいつ・・・w
191デフォルトの名無しさん (ワッチョイ 2312-rkYf)
2018/09/03(月) 20:23:26.23ID:CjQwreEv0
無論コレですな
https://koty.wiki/Tetris
192デフォルトの名無しさん (ワッチョイ 0b81-tpL7)
2018/09/03(月) 20:45:30.49ID:e/XZidXx0
てっきり任天堂のファミコンテトリスの話かと
193デフォルトの名無しさん (ワッチョイ 037e-tpL7)
2018/09/03(月) 20:54:01.67ID:oGMLPH120
xboxoneだぞ
194デフォルトの名無しさん (ワッチョイ 0580-rkYf)
2018/09/03(月) 20:57:10.35ID:E2St7m4+0
テトリスごときでcなんか不要
javascriptで十分

http://codepad.org/GePSyxwv ← コレでできあがり

このコードをメモ帳にコピペしてaho.htmlで保存
 ↓
aho.htmlダブルクリック
 ↓
テトリス起動
195 ◆QZaw55cn4c (ワッチョイ 6360-3+v7)
2018/09/04(火) 00:05:00.11ID:lJV/Mb/R0
以前の話
http://2chb.net/r/tech/1531558382/942,943

やりたいこと
http://2chb.net/r/tech/1524570314/713

質問
一つの bitset または vector<bool> に対して、異なるスレッドから集中してビットをオンしまくる、ということをして矛盾が発生することはありますか?
やりたいことはエラトステネスのふるいなので、この場合オンしたあとオフすることはありません
こういうことをして大丈夫かどうか調べてみたけれどもよくわかりません
bitset https://ideone.com/12V4WY
vector<bool> https://ideone.com/iVcLWd

付随しての質問
biset や vector<bool> というのは、一つの物理バイトに対して複数の bool を詰め込んだ作りとして実装されているのでしょうか?
この場合
bitset[index] = boolean,
とか
vector[index] = boolean
(operator[] が「bool の参照」?を返す、みたいな感じ) は実際にはどのように記述されているのでしょうか?
196さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd43-3h0E)
2018/09/04(火) 00:09:11.92ID:I66W1B5fd
See source by your IDE.
197はちみつ餃子 ◆8X2XSCHEME (ワッチョイ db6f-tpL7)
2018/09/04(火) 00:37:21.78ID:f5HJ/2BD0
>>195
> 異なるスレッドから集中してビットをオンしまくる、ということをして矛盾が発生することはありますか?

矛盾というのがどういう状況を想定しているのかわからないけど、
言語仕様上はデータ競合が起こりうると解釈できる場面だと思う。
要するに未定義動作に突入する可能性がある。

mutex でロックすることで簡単に回避は出来るが速度を考えるならば
操作するデータが atomic であるようにデザインするとなんとかなるかも?

> biset や vector<bool> というのは、一つの物理バイトに対して複数の bool を詰め込んだ作りとして実装されているのでしょうか?

される。

> bitset[index] = boolean,
> とか
> vector[index] = boolean
> (operator[] が「bool の参照」?を返す、みたいな感じ) は実際にはどのように記述されているのでしょうか?

「1 ビットを表す型」のオブジェクトを返すことで対応する。
そのせいで、 std::vector<bool> は bool 以外を格納する std::vector よりも出来ることに若干の制約がある。
198はちみつ餃子 ◆8X2XSCHEME (ワッチョイ db6f-tpL7)
2018/09/04(火) 03:10:23.32ID:f5HJ/2BD0
テトリスの素材を用意したぞ
C++相談室 part137 	->画像>4枚
199デフォルトの名無しさん (ワッチョイ 9593-kT/R)
2018/09/04(火) 05:42:55.53ID:4a01gUXa0
惜しい、もうちょっと工夫すれば
「テトリス」だけでなく「○○トリス」としても使えるのに。
200デフォルトの名無しさん (ワッチョイ 2334-hqRA)
2018/09/04(火) 06:42:41.96ID:Nt/zN6W10
C++相談室 part137 	->画像>4枚
むぅ…
201デフォルトの名無しさん (ブーイモ MMab-Rc6j)
2018/09/04(火) 07:24:16.79ID:FJBPHmlLM
>>195
アーキ依存だが、同一バイトアライメントを参照しない限り問題ないってエロい先輩が言ってた
大人しくmutexつかえ、mutexのコストよりスレッド切り替えのコストを気にしろ、とも言われた
202デフォルトの名無しさん (ブーイモ MM29-gjm5)
2018/09/04(火) 09:34:15.28ID:W1MTXd47M
>>201
何のアライメントのことかわからないけど
キャッシュライン同じだとだめじゃないの
203デフォルトの名無しさん (ワッチョイ 2323-GfG6)
2018/09/04(火) 17:05:52.60ID:QK+jEBGl0
こういう待ち時間が僅少なものはスピンロックの方がいいぞ
204デフォルトの名無しさん (ブーイモ MM29-gjm5)
2018/09/04(火) 18:06:05.25ID:W1MTXd47M
というよりこの場合CASが成功するまで繰り返せばいいだけ
205デフォルトの名無しさん (ワッチョイ 2323-GfG6)
2018/09/04(火) 18:43:17.89ID:QK+jEBGl0
bitset 位なら自分でcasで実装するのが最善か
206デフォルトの名無しさん (ワッチョイ eb9f-jo4B)
2018/09/04(火) 20:32:54.12ID:j0Ybv1km0
C++に標準で画像を表示する方法がないと聞いたけど
どんな方法で出来るのか教えてくれないか?
openGLとダイレクトX以外にないものなのか
207さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd43-3h0E)
2018/09/04(火) 20:35:12.07ID:I66W1B5fd
GDIならウィンドウに画像表示できるよ。
208デフォルトの名無しさん (ワッチョイ eb9f-jo4B)
2018/09/04(火) 20:40:18.08ID:j0Ybv1km0
そんなものがあるのか 調べてみるわ
209さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd43-3h0E)
2018/09/04(火) 20:44:23.36ID:I66W1B5fd
他にもgtkmmとかQtというのも、ウィンドウに画像表示できる。
210デフォルトの名無しさん (ワッチョイ eb9f-jo4B)
2018/09/04(火) 20:47:51.19ID:j0Ybv1km0
3つだけじゃないんだなw
ありがとうそっちのほうも調べてみるよ
211 ◆QZaw55cn4c (ワッチョイ 6360-3+v7)
2018/09/04(火) 21:01:31.49ID:lJV/Mb/R0
>>197 はちみつさん、>>201,203-205
コメントありがとうございます。

>>204,205
初めて atomic を使ってみました
https://ideone.com/HHUfCw

そのままでは atomic を vector の要素にはできないようで、stackoverflow 由来の変てこな回避策をとっています
https://stackoverflow.com/questions/13193484/how-to-declare-a-vector-of-atomic-in-c

マルチスレッドでの評価はこれからとりかかりますが、
こんな感じで CAS できてますでしょうか
212デフォルトの名無しさん (ブーイモ MM43-uAjs)
2018/09/04(火) 21:44:16.54ID:rJd6gmxFM
なんとなくだけど、
vector<bool>でなくてよいのなら、複数スレッドからビットをonにしまくったところでそもそも問題にならないのでは?
213デフォルトの名無しさん (スップ Sd03-snBd)
2018/09/04(火) 22:20:34.19ID:gG5zqknwd
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は非同期云々掛かれてるけどもできないのかな..?
214デフォルトの名無しさん (ワッチョイ 2334-hqRA)
2018/09/04(火) 22:34:45.20ID:Nt/zN6W10
どうやっても無理
215デフォルトの名無しさん (スッップ Sd43-GfG6)
2018/09/04(火) 22:41:49.50ID:GmxIRs0ad
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)) {}

じゃないのよく分からんけど
216デフォルトの名無しさん (スップ Sd03-snBd)
2018/09/04(火) 22:47:11.82ID:gG5zqknwd
>>214
それまじすか....
217デフォルトの名無しさん (ワッチョイ 2334-hqRA)
2018/09/04(火) 23:05:32.40ID:Nt/zN6W10
>>216
待たないでデータ読むにはPeekNamedPipeの第五引数cbAvailでサイズ判定してcbAvailが0以外ならデータ読んでも止まらない
これ以外の方法は何やってもダメ
Linuxみたいにすんなり行かんね
218デフォルトの名無しさん (スップ Sd03-snBd)
2018/09/04(火) 23:07:37.86ID:gG5zqknwd
>>217
そうなのか
今読めてるのは全部同期処理してるのか...

今からそのAPI調べてみる
読み込むのはそれでよかったとしてコネクトも同じ考え?
219デフォルトの名無しさん (オッペケ Srf1-Zer2)
2018/09/04(火) 23:07:51.12ID:b2qgijeQr
sort に渡す比較関数って、たとえば
sort(A.begin(), A.end(), [](int a, int b){return a > b;});
としたら、降順になるのか昇順になるのかいつも分からなくなるんだが、どうやって覚えたら良いの

不等号の向き、つまり return で返る真偽とコンテナの要素番号の大小がどう対応してるのか分からない
220デフォルトの名無しさん (ワッチョイ 3dbd-FrgJ)
2018/09/04(火) 23:59:12.10ID:IwUdbTOo0
a, bで順序がわからなくなるのなら、
first, secondとかleft, rightとかにすればいいんじゃね?
first < secondが昇順でなかったらクレーム続出だろ
221デフォルトの名無しさん (スップ Sd03-snBd)
2018/09/05(水) 00:07:00.10ID:p8WqhzKed
サーバー側だけどこんな感じです。
スマホで打つの限界がある...
{
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で止まる
}
}
222デフォルトの名無しさん (ワッチョイ 15b3-+Ae+)
2018/09/05(水) 00:13:10.80ID:9rSvLDak0
>>213
何がいいたいのかよく分からんな。
4のwaitforでタイムアウトか接続されたか分かるよね?
普通に問題なく動くよ。
223デフォルトの名無しさん (スップ Sd03-snBd)
2018/09/05(水) 00:18:10.89ID:VENvGGw0d
>>222
理想の流れは1-4の流れにしたかった

ただ実際は非同期処理が上手くできておらず3のConnectNamedPipeで捕まる
クライアント側が居なかった場合ずっと待機し続けることになる
そうなっているのが現状

ソースは思い出してかいたのが>>221
224デフォルトの名無しさん (ワッチョイ 0580-rkYf)
2018/09/05(水) 00:30:09.32ID:+wARDt+J0
ココにサンプルコードがある
http://eternalwindows.jp/ipc/namedpipe/namedpipe02.html

FILE_FLAG_OVERLAPPED を追加する
よく分からんがコレとはまた違うのか
225デフォルトの名無しさん (スップ Sd03-snBd)
2018/09/05(水) 00:37:34.35ID:ABz0W8sZd
>>224
FILE_FLAG_OVERLAPPEDの使用はまだ試してないので明日試してみますありがとう
FILE_FLAG_OVERLAPPEDに関しては持たないときの条件を使ってたんだけどだめだったんかな...

これをしたかったのだが...
https://msdn.microsoft.com/ja-jp/library/cc429611.aspx
hNamedPipe ハンドルが FILE_FLAG_OVERLAPPED フラグを持たないとき、かつ、lpOverlapped パラメータで有効なポインタを指定したときは、この関数は非同期的に実行されます。
制御はすぐに返り、戻り値は 0 になります。GetLastError 関数は、ConnectNamedPipe 関数を呼び出す前にクライアントプロセス側が接続されていたときは
ERROR_PIPE_CONNECTED を、そうでないときは ERROR_IO_PENDING を返します。


peekNamedPipe読んでるけど難しい
226デフォルトの名無しさん (ワッチョイ 2334-hqRA)
2018/09/05(水) 01:24:39.22ID:BafBBEgt0
peekで調べるのはcbAvailだけ
データは読まなくていい
読むときはReadFile
227デフォルトの名無しさん (ワッチョイ 3de3-zBrR)
2018/09/05(水) 02:51:54.52ID:n3z3O06I0
C++関係無いよね
Win32APIスレに行くべきだと思う

https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa365146(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.
ってあるし
228デフォルトの名無しさん (ワッチョイ 0b80-4Jnz)
2018/09/05(水) 12:47:17.08ID:TWmx8fnR0
>>223
>クライアント側が居なかった場合、ずっと待機し続ける

パイプって、パイプラインにデータが流れてくるまでは、ブロックされるものだろ。
データも流れて来ないのに、先へ進んだら、バグるだけ

その際、非同期なら、データ無しで、即座に返答が返ってくるのでは?
229デフォルトの名無しさん (ワッチョイ e322-tpL7)
2018/09/05(水) 13:15:20.01ID:mkiFi/5o0
入力が「まだ来んからちょ待っとれ」なのか
「来るわけないやろアホかおまえ」なのかは
別の手段で判断せにゃならん
230はちみつ餃子 ◆8X2XSCHEME (ワッチョイ db6f-tpL7)
2018/09/05(水) 15:48:09.73ID:QNa0Ltxl0
まあ常識的には適当な時間でタイムアウトするようにするくらいのものかな。
231デフォルトの名無しさん (スッップ Sd43-GfG6)
2018/09/05(水) 16:08:15.65ID:Nag0NR3Rd
>>221
https://stackoverflow.com/questions/14306499/non-blocking-connectnamedpipe-event-not-getting-signaled/14306743

PIPE_NOWAIT を使えば ERROR_PIPE_LISTENING だの ERROR_IO_PENDING が即座に返されるが
WaitForSingleObject は発火しない

PIPE_WAIT だと当然ブロックする
PIPE_NOWAIT はlan managerとの互換性のために残されているだけで使用は推奨されていない

面倒でも FILE_FLAG_OVERLAPPED を使うしかない
232デフォルトの名無しさん (スッップ Sd43-GfG6)
2018/09/05(水) 16:09:55.39ID:Nag0NR3Rd
と書いたけどカッコつけずに後先考えず PIPE_NOWAIT でポーリングしてもいいか
233デフォルトの名無しさん (オイコラミネオ MMb9-RPdS)
2018/09/05(水) 18:53:58.76ID:H6UyuApwM
void hoge(int x, int *returnint){
returnint = int * 2;
}
int hoge(int x){
return int * 2;
}

これって内容同じですか?
234デフォルトの名無しさん (ワッチョイ 2334-hqRA)
2018/09/05(水) 19:15:02.29ID:BafBBEgt0
どっちもコンパイルエラー出る点では同じ
235デフォルトの名無しさん (ワッチョイ 9593-kT/R)
2018/09/05(水) 19:32:27.66ID:YeNc+rPy0
>>233 C言語に対して重大な勘違い、または質問レスに些細な打ち間違い、
どちらかだと思うが、どちらかは分からない。
236235 (ワッチョイ 9593-kT/R)
2018/09/05(水) 19:33:03.57ID:YeNc+rPy0
C言語じゃなくてC++だね、ここ。
237デフォルトの名無しさん (ブーイモ MM29-s+Zn)
2018/09/05(水) 22:59:59.06ID:yXdlNP4XM
selectしろや
238 ◆QZaw55cn4c (ワッチョイ 6360-3+v7)
2018/09/05(水) 23:22:24.89ID:juRrGCxW0
>>215
内容をみてくださり感謝いたします、とても考えさせられました

まず >>211 に二点誤りがありました
・コンストラクタ引数に与える bit 数から、内部 vector<atomic<int>> の確保容量を計算する方法に誤りがあった
・CAS 後にスピンロックするかどうかの判断にあやまりがあった

修正 https://ideone.com/nwcmzq

>>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ビットセマフォ)を作らないといけないと考えています
239デフォルトの名無しさん (オイコラミネオ MM53-EsDf)
2018/09/06(木) 02:04:16.57ID:Gt7E2PT1M
>>234,235
すみません
C++にあまり詳しくないのでわからないのですが、どこがおかしいのでしょうか?
これなら内容等しいですか?

void hoge(int x, int& ret){
ret = int * 2;
}

int hoge(int x){
return int * 2:
}
240デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 02:08:35.51ID:itCyrIVk0
それはギャグで言っているのか?

void hoge(int x, int& ret){
ret = x * 2;
}

int hoge(int x){
return x * 2:
}
241デフォルトの名無しさん (オイコラミネオ MM53-EsDf)
2018/09/06(木) 02:15:35.03ID:Ev1vpWJGM
>>240
すみません素でボケてました…
それなら同一ですか?
returnする場合と参照渡しする場合の違い(速度など)があるのか知りたかったです
242デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 02:38:44.74ID:itCyrIVk0
えーっと、
上段の参照渡しは呼び出し時に渡した変数そのものがやってきて書き換える。
下段のやつはコピーを返すので一手間ある。

理論的には下段の方がちょっと遅い。
まぁ、コンパイラが頑張ってきえるかもしれんし、
デルタ時間的に差はあるかもしれないが最近のコンピュータならあまり問題にならない。
それよりも速度を気にするなら採用しているアルゴリズムを精査したほうが効果的。

ちょっと変な文になった。
243デフォルトの名無しさん (ワッチョイ 5393-WN3X)
2018/09/06(木) 05:45:03.77ID:UQb09hzL0
厳密なところはアセンブラ出力を個別に見ないと分からない、
という前提はひとまず措くとして…。

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個で済む代わりに呼出側で返り値を別の変数に代入しなきゃいけない
相殺してどっこいどっこい大差なし、じゃないかな。
計算結果を変数に入れる必要がない場合、等はまた別のお話。
244はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 05:49:16.79ID:IzfX8EX20
>>240
後者の末尾がコロンになってるのがそのままやで。
245はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 05:59:16.76ID:IzfX8EX20
仮に差があったとしてもナノ秒レベルの話やん
246デフォルトの名無しさん (ワッチョイ 17c3-oywQ)
2018/09/06(木) 07:14:55.98ID:3Sjg8sdP0
速度どうこうは1兆回回すループの中にあるとか1マイクロ秒以内に完了しないと原子炉が爆発するとか
プロファイラでクソ時間がかかってることが判明したとかした時だけ気にしよう
247243 (ワッチョイ 5393-WN3X)
2018/09/06(木) 08:27:46.68ID:UQb09hzL0
実際のところ「別のお話」と切り捨てた部分が大切でね。
元の質問から逸れてしまうけど。

関数が計算する結果の値だけが欲しい(別の変数に格納する必要がない、
格納すべき変数そのものが存在しない)場合とか、
返り値に相当するのがint等の単純なデータでなく大きなクラスの場合とか、
その辺りを基準に比較すべきなんだよ。
248はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 08:44:12.19ID:IzfX8EX20
早すぎる最適化は諸悪の根源っていうもんな。
249デフォルトの名無しさん (ワッチョイ efd2-7GfT)
2018/09/06(木) 08:51:51.10ID:j/wx9LUv0
同意。固定長オンリーなどの最適化を最初から入れ込むとロクなことがない。
250デフォルトの名無しさん (オイコラミネオ MMe6-xaKy)
2018/09/06(木) 09:29:04.75ID:mrWZ3sxKM
そーそー
尻拭く時間だけ早くしてもンコが早く出なきゃしゃーない
251デフォルトの名無しさん (ブーイモ MM97-M35H)
2018/09/06(木) 10:29:33.35ID:c/F3wcvdM
>>242
何言ってんの、逆でしょ
差が観測できるかは別にして下の方が速い(効率的)
int返すならレジスタ返しなんだから
メモリアクセスよりずっと速い
252はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 10:57:52.18ID:IzfX8EX20
>>251
関数単独を見るとそうだが、
レジスタで返してもそれを結局は変数に書き込むじゃんという >>243 の話と合わせて考えると
レジスタを経由する分だけ遅くなり得るっしょ。
ただ、この関数を実行した結果を長期には保存しない (式の途中でこの関数を使うとか) のだと
後者の方が速かったりもするだろうし、まあ、状況によるよな。
253はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 10:58:36.13ID:IzfX8EX20
実際のところ、インライン化されて更に他の最適化とコンボが起こったりすると
普通の人間にはどうなるか予測がつかんので考えるだけ無駄。
254デフォルトの名無しさん (ブーイモ MM97-M35H)
2018/09/06(木) 11:15:06.66ID:c/F3wcvdM
>>252
なんで呼び出し側の話がはいってくるんだよ
そっちの話を含めるとしても
呼び出し側もレジスタのまま処理が行われるのが普通だし、
メモリに書き出されるとしても、
参照と同程度になるってだけ

このABIを理解するのはc/c++使う上で基本
無意味と思うのは結構だがそれはお前の関心がないってだけ
レスしなけりゃいい
255デフォルトの名無しさん (オイコラミネオ MM53-EsDf)
2018/09/06(木) 12:11:07.39ID:uRta3OIBM
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);
}
256はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 13:28:43.07ID:IzfX8EX20
>>254
呼出し側の状況によっても変わりうるから呼出しの状況を含めるってのがそんなにおかしな話かね。
あと、あくまでもこれは C++ という言語を中心にした一般原則としてどうコンパイルされることも「有りうる」ということを述べているのであって、
特定のアーキテクチャやコンパイラや ABI を想定したものではないよ。

多くの (あるいは主要な) 処理系であなたが言うような結果になるというなら、
それはそうかもしれないが、そこには単に私の関心がないのも確か。
257はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 13:34:38.93ID:IzfX8EX20
>>255
前者のコードの cv::Mat ret は cv::Mat& ret の間違い?
258デフォルトの名無しさん (ブーイモ MM97-M35H)
2018/09/06(木) 13:53:20.00ID:c/F3wcvdM
>>256
それはお前の間違った理解であって一般とは言わない
だいたい呼び出し側も含めて反論されてんのになにぼけたレスしてんだよ

お前の理屈だとレジスタの返しが無用となるじゃないか
x64ならraxでaarch64ならx0で返り値を返す
32bitのレガシーならいざしらず64bitでもabiはそう決められてるわけ
お前の興味のない低いレイヤーではそういうのを最大限活用して効率的にcpu回してんだよ
259はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 14:06:16.01ID:IzfX8EX20
>>258
> だいたい呼び出し側も含めて反論されてんのになにぼけたレスしてんだよ

それは >>254 のことだろ?
それは特定の命令セットや ABI でないと成り立たないから、
そうでない一般論としてはどうともなりうると私は言っているので論点が違うし、
私はそっちの論点は気にしてなかったという話じゃないか。
260デフォルトの名無しさん (ブーイモ MM97-M35H)
2018/09/06(木) 14:09:29.47ID:c/F3wcvdM
>>259
現実のはなししようぜ
成り立たないシステムあげてみなよ
261はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 14:11:05.68ID:IzfX8EX20
>>255
知らんな。
関心は無い。
262はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 14:27:25.26ID:IzfX8EX20
>>255
前者については & の脱字だと仮定して答えるけど、
その脱字が無ければ、前者でも後者でも最終的な結果に差はないと思う。
特にメモリリークにつながりそうな要素もない。

ただ、単純に、局所的に考えるならば後者の方が効率的と言えると思う。
前者だと呼出し側では結果を受け取るための cv::Mat 型の変数を用意しなければならないが、
そのときにデフォルトコンストラクタが走ってから結果は operator= で格納するという形になる。
後者だとコピーコンストラクタ一発で済むので簡単。 場合によっては RVO が適用されるかもしれない。

一度作った変数を何度も結果格納用に使いまわすのならば、
前者の方がメモリアロケーションの回数を抑制できる (効率的になる) 可能性も有るけど、
Mat の実装次第ではそうならないかもしれないし、
そこらへんは実際にやってみないとわからない。

ところでメモリリークが起きていると判断したのは何かツールを使って検証したの?
263はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 14:31:00.99ID:IzfX8EX20
あっ、 >>261>>255 にアンカーを付けちゃったけど、これは >>260 の間違いね。

現実の話というなら、インライン化や最適化が入れば ABI もクソもねぇし、
そんなの考えたらキリがないやろ。
264デフォルトの名無しさん (ブーイモ MM97-M35H)
2018/09/06(木) 18:25:26.14ID:c/F3wcvdM
>>263
関数内の最適化のみで考えればいいだけなんだからきりはあるだろ
つまりインライン展開なし、LOTなし

ABIを意識するのは全然特殊じゃない
言語間のよびだしはざらだし、
クラッシュダンプにスタックトレース残すためにあえてインライン抑制したりする
お前が経験不足なだけだよ
265はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 18:41:01.02ID:IzfX8EX20
>>264
そっちの脳内でどんな前提を置いてるかなんて知らんがな。
266デフォルトの名無しさん (ブーイモ MM97-M35H)
2018/09/06(木) 19:48:52.61ID:c/F3wcvdM
>>265
コテハンの割に薄いやつだ

もとの質問は関数から値の返し方についてどちらが速いかという質問なんだから、
関数のインライン展開がないと仮定すれば、定性的に答えられる問いだ
かつその仮定は別に現実ばなれしてるわけでもない

それをお前はその知識が有用であることも知らずに考えるだけ無駄とかぶったぎってるわけだ

このスレは相談室
無駄なのはそういうお前の存在ではとおれは思うわけ
267デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/06(木) 20:12:24.70ID:64ZwjQvb0
malloc()したヒープはfree()解放するのは当然
ウンコしたあと水で流さないぐらい行儀が悪い
268デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 20:23:27.14ID:itCyrIVk0
メモリーリークは基本的に自分でNEWすることで起こる。
最近のC++では基本的に自分でNEWすることはほとんどない。
動的なメモリが欲しければvectorを使う。
後は、ポインタにインスタンスを確保しないで関数に投げるとかもやってはいけない。メモリを破壊することになる。
あと、どうしてもnewが必要だったりGCが必要な時はスマポを使う。

そういう作法でやると、ユーザーコードでnewすることはほぼない。
269デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 20:47:20.81ID:itCyrIVk0
えーっと、関数にポインタを投げる時はその関数の仕様を精査して扱わないとほんとやばい。
270デフォルトの名無しさん (ワッチョイ ba34-uOrU)
2018/09/06(木) 21:04:04.33ID:bw6Oo6uj0
newとdeleteを使いこなせない補助輪付C++グラマってのも問題だけど
271デフォルトの名無しさん (ワッチョイ 9a22-7GfT)
2018/09/06(木) 21:10:02.71ID:iyjSCMca0
スマポはGCじゃねえよ ぼけ
272デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:14:09.31ID:itCyrIVk0
shared_pointerは参照カウントっていうGC機構ですよ?
273デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:17:21.85ID:itCyrIVk0
>>270
274デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:18:00.66ID:itCyrIVk0
おっと。
>>270
補助輪があろうがバグ出すよりマシだと思うよ。それと保険的な意味もあるし。
275デフォルトの名無しさん (ワッチョイ 9a22-7GfT)
2018/09/06(木) 21:18:22.90ID:iyjSCMca0
CGってそもそも何だ?
アプリが「今、解放しろ」というタイミングで動くのをGCというならfreeもGCだぞ
276デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/06(木) 21:20:24.16ID:64ZwjQvb0
いつ解放されるか分からないとか
そもそもオブジェクトの外部でポインタの生存期間を制御できてないコードがヤバイわ
277デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:24:58.09ID:itCyrIVk0
>>275
そういう、広義解釈は話題が滅茶苦茶になるのでやめましょう。
GCはガベージコレクションだよ。freeは解放関数だよ。
シェアードポインターの解放タイミングは普通コントールしないのでGCだと思ってます。
というか、開放タイミングが未定だからシェアードポインタ使うんじゃないですか?
278デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:27:59.96ID:itCyrIVk0
それは全能でないとバグが出ちゃうのでこういう機構が発明されました。
書くときは大まかには寿命は把握しているとは思うのですが、細部までは精査しないことが多いんじゃないでしょうか。
自分のクローンに共有オブジェクトを持たせるときとか普通に書くと滅茶苦茶大変ですよ?
279デフォルトの名無しさん (ワッチョイ 9a22-7GfT)
2018/09/06(木) 21:37:24.49ID:iyjSCMca0
>>277
広義解釈してるのはおまえだよ
シェアードポインタの解放タイミングはデストラクタだろうがよ
freeと何がどこが違うんだよ
おまえどこまでオレオレ空想してるんだ?
280デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:38:17.39ID:itCyrIVk0
>>276
それはある程度アクセス権の範囲を考えれば何とかなりそうな予感。
それと開放した後のメモリ叩かれた時とどっちがいいか相談ってことで。
281デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:41:02.92ID:itCyrIVk0
>>279
複数の共有がある場合、一個のデストラクタが走った程度では解放されませんよ?
freeは別にデストラクタに仕込む必要ないじゃないですか。
それと、複数の共有がある場合適切にfreeできますか?
282デフォルトの名無しさん (ブーイモ MM97-A2Qj)
2018/09/06(木) 21:42:45.15ID:JT+LXegNM
コレクションしてないのになんでgcなんだよ。アホすぎる
283デフォルトの名無しさん (ワッチョイ ba34-uOrU)
2018/09/06(木) 21:43:23.10ID:bw6Oo6uj0
シェアードはマルチタスクには不向きだし
284デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:49:40.12ID:itCyrIVk0
コレクションサイズが1のコンテナはないのですね。まぁ、冗談は置いといて。
物事を知ってるなら後は任せました。無知でごめんなさい。
285デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:51:04.10ID:itCyrIVk0
>>283
マルチスレッドならアトミックにできた気がしますけど、どうでしたっけ。
マルチプロセスならそもそもメモリ空間が違うのでお門違いですね。
286 ◆QZaw55cn4c (ワッチョイ da60-Mhaf)
2018/09/06(木) 22:00:46.00ID:N2ZzCqNY0
>>272
参照カウンタは普通GCに含めないのでは?
287デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 22:02:22.60ID:itCyrIVk0
https://ja.wikipedia.org/wiki/参照カウント
こういう記事を見つけました。
288デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 22:04:19.65ID:itCyrIVk0
ホントお前ら人殺すことばっか考えてるよな。
そういうのは良いから初心者殺すのマジやめて。
289デフォルトの名無しさん (ワッチョイ 27bd-A2Qj)
2018/09/06(木) 22:04:41.28ID:vgkXomJH0
gcの一実装として参照カウンタ方式があるだけで、スマポはgcじゃない。
290デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 22:06:33.66ID:itCyrIVk0
それならそれでいいです。
291デフォルトの名無しさん (ワッチョイ 13b3-7GfT)
2018/09/06(木) 23:18:28.17ID:8cSq8zHP0
>>288
横からでスマンが、他の初心者に偉そうに大嘘教えてるやつを初心者とは普通呼ばない
都合のいいときだけ初心者ヅラはだめよ
292デフォルトの名無しさん (オイコラミネオ MM53-EsDf)
2018/09/06(木) 23:34:23.61ID:3bNAvGWPM
>>262
ありがとうございます
forの中で何回も関数呼び出すので前者が良さそうですね
293デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 23:34:43.07ID:itCyrIVk0
>>291
嘘の範囲を限定しないと俺大罪人じゃないですか。
まぁ、いいや。

メモリーエラーで落ちろ。
294 ◆QZaw55cn4c (ワッチョイ da60-Mhaf)
2018/09/06(木) 23:34:53.93ID:N2ZzCqNY0
>>289
スマートポインターのうち std::shared_ptr は参照カウンタを内蔵しているのだから
@参照カウンタが GC、故に、std::shared_ptr も GC
A参照カウンタが GC でない、故に、std::shared_ptr は GC でない
@Aのどちらかしかない
参照カウンタが GC なのにスマートポインタが GC でない、というのは矛盾しているのでは?

私は「参照カウンタは GC じゃない」と思う
295デフォルトの名無しさん (ワッチョイ 13b3-7GfT)
2018/09/06(木) 23:48:27.91ID:8cSq8zHP0
>>293
>>251
もちろんインライン展開される場合は除く(展開されたら多分同じコードになると思うが

あと
>>255の質問に対して>>268は不適切、>>268から話が変な方向に行ってる
OpenCV使ってるって言ってるし、間違った使い方してリーク(>>255がnewしたのではない部分)
の可能性の方が高いと思うけどね
296デフォルトの名無しさん (ワッチョイ ef02-A2Qj)
2018/09/06(木) 23:52:47.61ID:HW23dE280
>>294
なにも矛盾してないよ。

GCの一実装として参照カウント方式を使ったものがある。
スマホの中に参照カウントを使ったものがある。
だからといってGC=スマポじゃない。

エンジンで走る車があって、エンジンで飛ぶ飛行機があっても、車は飛行機じゃないのと一緒
297 ◆QZaw55cn4c (ワッチョイ da60-Mhaf)
2018/09/07(金) 00:04:30.19ID:WaHB6+zk0
>>296
>エンジンで走る車があって、エンジンで飛ぶ飛行機があっても、車は飛行機じゃないのと一緒
is-a の話の例えに has-a の話を使うのは論理的ではありませんね
「車 has エンジン、飛行機 has エンジン」の話と「参照カウンタ is GC、スマポ is GC」の話は別ですよ
298デフォルトの名無しさん (ワッチョイ ef02-A2Qj)
2018/09/07(金) 00:12:24.59ID:YR0a2VfT0
>>297
いやgc=参照カウンタなんて言ってないんだけど。
gcに参照カウント方式を使っているものがあるといってるの。はじめからhas_a関係しか言及してない。
299 ◆QZaw55cn4c (ワッチョイ da60-Mhaf)
2018/09/07(金) 00:15:18.97ID:WaHB6+zk0
>>298
>いやgc=参照カウンタなんて言ってないんだけど。
そこに「=」記号を使うのがおかしいのでは?
真偽は別として、記号を使うのなら ⊂ とか ∈ じゃないですか?
300はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/07(金) 00:17:33.32ID:EL+7DMJm0
参照カウンタは GC だろ。
301はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/07(金) 00:22:54.57ID:EL+7DMJm0
>>266
元々の質問はどちらが速いかではない。
302 ◆QZaw55cn4c (ワッチョイ da60-Mhaf)
2018/09/07(金) 00:53:47.67ID:WaHB6+zk0
>>300
では std::shared_ptr も GC でしょうか?
303はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/07(金) 01:28:57.33ID:EL+7DMJm0
>>302
私は std::shared_ptr を GC だと思ってるよ。
解放のタイミングがコンパイル時に確定しないようなのは GC だろってくらいのカジュアルな認識だけど。
基準の妥当性はともかくとして、とにかく私はそういう基準で考えてる。

QZ 氏の中で std::shared_ptr と GC を隔てるのは何だと思ってるの?
304デフォルトの名無しさん (ワッチョイ 13ea-OfLu)
2018/09/07(金) 02:17:04.39ID:obwFdGuS0
Qt5触ってみてるけど生ポインタばっか使ってて気持ち悪い、これでいいのか?
305デフォルトの名無しさん (ワッチョイ efd2-7GfT)
2018/09/07(金) 07:52:15.03ID:KDtg+GuV0
GC ⊇ shared_ptr
306デフォルトの名無しさん (ラクッペ MM3b-QWFi)
2018/09/07(金) 08:31:14.42ID:M/DU9wQ1M
>>304
生は触って気持ちいいものしかないよ
307デフォルトの名無しさん (JP 0He6-O+me)
2018/09/07(金) 11:18:53.99ID:f8oqes6vH
parentクラスがあってそれを継承したchildクラスがあります。
vector<parent*> getParentlist(){//省略}でこんな感じでparentクラスのポインタのリストを返す関数があります。
それでここからが質問なのですが、
vector<child*> childList = (vector<child*>)getparentlist();
こういうコードがあってびっくりしています。
機能はしているみたいですがこれ作法的にオッケーなんでしょうか。
ダウンキャストは良くないと聞いていたりそもそもこれダウンキャストなのかとかちょっと分からないんです。
よろしくおねがいします。
308デフォルトの名無しさん (ワッチョイ 9a22-7GfT)
2018/09/07(金) 11:20:41.99ID:/+XJI6DP0
>>281
話が通じてないなあ。。。
デストラクタでuse_count見てるのは当たり前だろ
シェアードポインタの話だぜ?

解放のタイミングがアプリのロジックに従属してるかどうかって話なのに
何を言い出すかと思えば
309デフォルトの名無しさん (ワッチョイ 13b3-7GfT)
2018/09/07(金) 12:35:44.17ID:KEvh9jix0
>>307
試せる限りのコンパイラではそもそもコンパイルエラーだったけどなぁ
vector<parent *> &getParentlist();
じゃなくて??
その上で
(vector<child *> &)getParentlist();
なら通るよ、通るし普通に使えるはず
310デフォルトの名無しさん (JP 0He6-O+me)
2018/09/07(金) 13:23:59.20ID:f8oqes6vH
>>309
失礼しました。ポインタ抜けてました
vector<parent*>* getParentlist(){//省略}

vector<child*>* childList = (vector<child*>*)getparentlist();
こんな感じです
311デフォルトの名無しさん (ワッチョイ 13b3-7GfT)
2018/09/07(金) 13:38:44.48ID:KEvh9jix0
おいおい・・・w

ポインタでも同じことだ、そのキャストをreinterpret_castだと考えたらわかるはず
それでわからないならC++の継承の仕組みを勉強すべき
312はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/07(金) 16:38:51.51ID:EL+7DMJm0
基底方向へのキャストの実態は
サブオブジェクトまでのオフセット分だけアドレスをずらす操作なので、
>>310 のような場合にはそれは実現できない。
単に無理やり型を合わせているだけになってしまっている。
C++ 的にはあかんやつ。

ただ、実際に動いている理由をあえて考察するなら、
child が parent を単一継承した場合などには parent が child の先頭に配置されるようなメモリレイアウトにコンパイルされる可能性が高く、
アドレスをずらす量が 0 で済んでしまうので
型を読み替えるだけでも不整合が顕在化せずに動作してしまうということは有りうる。
あくまでも、処理系がやってることが偶然に組み合わさって動いているというだけなので、やめといた方がよい。
313デフォルトの名無しさん (ワッチョイ 13b3-7GfT)
2018/09/07(金) 17:46:14.93ID:KEvh9jix0
そこまでご丁寧に説明してやるのなら、「Cスタイルのキャストは使うな」、を教えるべきじゃねーの?
314デフォルトの名無しさん (ワッチョイ 1ee3-7bxL)
2018/09/07(金) 18:34:49.58ID:mMEjLB3K0
parent * が child * なのかも分からないのに強引にキャストするのか
そこまで型無視するなら void * でいいんじゃない 知らんけど
315はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/07(金) 20:57:02.69ID:EL+7DMJm0
>>313
せやな。
316はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/07(金) 20:57:32.70ID:EL+7DMJm0
C++ スタイルのキャストを、特に入門者の内は static_cast だけ使っておけばまあまあ大丈夫。
static_cast でエラーになるような変換は C++ 的にはだいたいイケてないやつ。
317デフォルトの名無しさん (ワッチョイ 9a22-7GfT)
2018/09/07(金) 20:59:50.93ID:/+XJI6DP0
アホか
dynamic_castが使えないくせに初心者皆伝なんぞやれん
318 ◆QZaw55cn4c (ワッチョイ da60-Mhaf)
2018/09/07(金) 22:12:33.50ID:WaHB6+zk0
>>303
>私は std::shared_ptr を GC だと思ってるよ。
…GC発祥の地 lisp の使い手のはちみつさんがそうおっしゃるのなら、私の中の定義も書き換えないといけませんね
mark and sweep GC って、プログラム本体とは関係のないところで、それこそメモリの死にビットをも使ったりして、ごそごそやる、というイメージがあります

>解放のタイミングがコンパイル時に確定しないようなのは GC だろってくらいのカジュアルな認識
>std::shared_ptr と GC を隔てるのは何

「解放のタイミングを図る機構が表のプログラムとは独立している」
くらいでしょうか?表のプログラムからの参照が途切れることと free() されることに直接の関係性がない mark and sweep とその発展型のみを GC とみなしています
といって、GC の本は一冊しか持っていません
319デフォルトの名無しさん (ワッチョイ b3bd-5rD0)
2018/09/07(金) 22:36:10.40ID:OXR/kEGJ0
は○ち○餃子はLisperか

言語選びは慎重にな!
https://postd.cc/lisping-at-jpl/
320はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/07(金) 22:37:40.84ID:EL+7DMJm0
>>318
定義がひとつでなきゃならないとは思ってないよ。
だから自分なりに一貫した考え方があるのなら、それはそれでいいんじゃないかな。

ただ、「表の機構と分離されているか」という考え方だと、それは抽象化の仕方であって、メカニズム (アルゴリズム) の基準ではないね。
その基準だと std::shared_ptr が GC ではないとは言えても参照カウンタが GC ではないとは言えない。
321デフォルトの名無しさん (スプッッ Sd3b-g95O)
2018/09/07(金) 22:45:54.86ID:Gz5E8uWmd
お返事遅れました>>213です
Overlappedの設定をCreateNamedPipe時点に引数として渡す構造体ことで同期制御を実現できました
ありがとうございました

メモリリーク探しきつい....
322デフォルトの名無しさん (アウアウカー Sa33-IcDn)
2018/09/07(金) 22:58:55.32ID:nLV7kBrTa
すみません質問があります

メインスレッドと通信スレッドがいて、
通信スレッドはメインスレッドのオブジェクトポインタ持ってます
メインスレッドはクラス化されており、スレッド用のstatic関数以外にもメンバ関数を持っています

通信スレッドがデータ受信して、メインスレッドの別のメンバ関数を呼び出した時、
メインスレッドで実行していた処理はどうなるのでしょうか?

メインスレッドで実行していた処理はあくまでもstaticな関数の処理で、staticでない他のメンバ関数は別に処理されるのでしょうか?
323はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/07(金) 23:04:25.63ID:EL+7DMJm0
>>322
説明が分かり難いなぁ。

通信スレッドとやらから呼び出した関数は通信スレッド上で走っているし、
メインスレッドはメインスレッドで走っている。
324デフォルトの名無しさん (アウアウカー Sa33-IcDn)
2018/09/07(金) 23:21:53.12ID:nLV7kBrTa
>>323
分かりずらくて申し訳ありません..
もし通信スレッドで呼び出した別のメンバ関数内でメンバ変数を変更した場合、
メインスレッドでもメンバ変数の変更値を参照できるのでしょうか
325デフォルトの名無しさん (ワッチョイ aa7e-7GfT)
2018/09/07(金) 23:22:52.89ID:RvuhpJx80
スレッドとメモリの関係がよく分かってないようだ
326デフォルトの名無しさん (ワッチョイ b3bd-5rD0)
2018/09/07(金) 23:23:07.46ID:OXR/kEGJ0
微妙な質問キタ
327デフォルトの名無しさん (ワッチョイ efd2-7GfT)
2018/09/07(金) 23:23:45.59ID:KDtg+GuV0
解放のタイミングがコンパイル時に確定しないのは shared_ptr でも同じでしょ。
任意のshared_ptrインスタンスを別のインスタンスにコピーした場合、解放のタイミングはコンパイル時に確定できない。
328デフォルトの名無しさん (ワッチョイ aa7e-7GfT)
2018/09/07(金) 23:25:23.60ID:RvuhpJx80
vectorがconstexpr対応できるならshared_ptrもできそう
329デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/07(金) 23:26:09.70ID:B/yxkRYZ0
staticなメンバ関数ではstaticなメンバ変数しか参照できない
staticでないメンバ関数はstaticな変数もstaticでない変数も参照できる

staticなメンバ関数とstaticでないメンバ関数が作用しあうのであれば、
当然staticな変数になる

はっきりいってな
staticな変数はグローバル変数と同じだからな
とうぜん同じ実体の変数を参照することになる
330デフォルトの名無しさん (ワッチョイ b3bd-5rD0)
2018/09/07(金) 23:26:58.48ID:OXR/kEGJ0
>>329は視野が広い人じゃなかったのか!?
331デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/07(金) 23:29:06.23ID:B/yxkRYZ0
> スレッド用のstatic関数以外にもメンバ関数を持っています

> 通信スレッドがデータ受信して、メインスレッドの別のメンバ関数を呼び出した
> 通信スレッドで呼び出した別のメンバ関数内でメンバ変数を変更した

まず低学歴知恵遅れは質問を読解する能力がない
332デフォルトの名無しさん (ワッチョイ b3bd-5rD0)
2018/09/07(金) 23:35:54.69ID:OXR/kEGJ0
こりゃーもう>>324には>>331に回答してもらうしか
333はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/07(金) 23:38:50.05ID:EL+7DMJm0
>>324
出来るが、データ競合が起こらないように気を付けよう。
334はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/07(金) 23:41:24.38ID:EL+7DMJm0
質問者が状況を理解してない説明をしてるから本当に回答になってるのかイマイチわからぬ。
無理に言葉にしようとせずにコードを示してくれた方がいいんだがなぁ。
335デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/07(金) 23:41:30.87ID:B/yxkRYZ0
バカじゃなければ
普通にアドレスが固定されてるstaticなメンバ関数のアドレスを
スレッドを開始させるアドレスにしてると推定できるからな
336デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/07(金) 23:46:20.44ID:B/yxkRYZ0
このスレのバカどもはスレッドなんか
なんも分かってないからな

質問するヤツもバカになにを聞いてもムダだからな
そこの理解は必要
337デフォルトの名無しさん (ワッチョイ b3bd-5rD0)
2018/09/07(金) 23:56:01.03ID:OXR/kEGJ0
>>335
>スレッドを開始させるアドレス
さすあに
スレッドを起こす質問に解釈しやがった;;

>>322
>メインスレッドはクラス化されており
>通信スレッドはメインスレッドのオブジェクトポインタ持ってます
と、>>324
>メインスレッドでもメンバ変数の変更値を参照できるのでしょうか
からすると通信スレッドで変更したメモリをメインスレッドでも参照できるのかという質問かとオモタわ;;;
338デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/07(金) 23:58:34.82ID:B/yxkRYZ0
> 通信スレッドはメインスレッドのオブジェクトポインタ持ってます

まず一番最初に書いてることが読めてない
致命的な頭のワルサといっていい
339デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/08(土) 00:00:18.18ID:j/6nk0eH0
普通にメインスレッドのメンバ関数呼び出して
メインスレッドのメンバ変数を変更すると読めるからな

こんだけコミュニケーションレベルが低いと
実生活でも支障があるレベルといっていい
340デフォルトの名無しさん (ワッチョイ daf9-FJXj)
2018/09/08(土) 00:03:28.41ID:VqyCCBP80
>>330
半角クンは自分の見たいものしか見えない、すなわち常に半角クンの中ではすべてのものを見通している視野100%ということなのだろう
341デフォルトの名無しさん (アウアウカー Sa33-IcDn)
2018/09/08(土) 00:04:14.21ID:49ssh0n4a
>>333
mutexしときます
いろいろアドバイスありがとうございます
>>329ですね
342デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/08(土) 00:06:40.10ID:j/6nk0eH0
まずなこのスレの低学歴知恵遅れたちは
自分たちがどんだけ低学歴知恵遅れかという自覚がない

致命的といっていい
343デフォルトの名無しさん (ワッチョイ b3bd-5rD0)
2018/09/08(土) 00:18:54.01ID:6MRSNGru0
低学歴知恵遅れなので質問の解釈に関する>>337>>339の違いがわからんが、

それはそうとして、当初の疑問に戻るが視野の広い>>342
>とうぜん同じ実体の変数を参照することになる
には一切注釈をつけなくて良かったの?
344デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/08(土) 00:20:24.81ID:j/6nk0eH0
また低学歴知恵遅れが負け惜しみ意味不明なこといってるしな
低学歴知恵遅れの負けず嫌いは異常だからな
345デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/08(土) 00:22:38.67ID:j/6nk0eH0
低学歴知恵遅れほど自尊心だけは高い
コレは底辺に多い

そして自分がゴミクズの低学歴知恵遅れである自覚もない

つまり救いようがない
346デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/08(土) 00:30:51.48ID:j/6nk0eH0
低学歴知恵遅れの底辺ゴミクズほど自己評価だけは高い

その根拠のない自己評価の高さは
どこからくるものなかははっきりとは分からない

低学歴知恵遅れの底辺ゴミクズほどそういう傾向がある
それは経験からかなり相関が高いと確信している
347 ◆QZaw55cn4c (ワッチョイ da60-Mhaf)
2018/09/08(土) 00:31:21.19ID:t7GfMYxV0
みなさん厳しいですね…
私は質問側ですが、そして今 schme スレで質問を丸投げしちゃっていますが、わからないときは、なにがわからないかわからない、という感じだったりしています

>>324
なにか断片的でいいからコード例をあげていただくと嬉しいです、例えば https://ideone.com/VvdMRl
348デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/08(土) 00:45:27.68ID:j/6nk0eH0
むしろこのスレの低学歴知恵遅れの底辺ゴミクズたちは
質問してるヤツのレベルにすら到達してない
349デフォルトの名無しさん (アウアウカー Sa33-IcDn)
2018/09/08(土) 00:46:44.54ID:49ssh0n4a
>>347
pthread使ってる以外はほぼ同等な考え方です
実例作っていただきありがとうございます。
350デフォルトの名無しさん (ワッチョイ b3bd-5rD0)
2018/09/08(土) 01:03:30.65ID:6MRSNGru0
>>326で書いたとおりスレッドAで変更したメモリをスレッドBで正しく参照できるのか否かというのは
微妙な問題なんじゃ

>>347のコードでf::nの書き換えと参照が正しく動くのは
20行目のC::f()呼び出しで呼び出されたstd::coutがメモリバリア的な効果を果たしたに過ぎないかもしれん
(中でmutexとかcritical sectionとかなシステムコールを呼んでいるなら普通のOSならメモリバリアが効く

と自尊心だけは高い低学歴知恵遅れなので難癖をつけておく
実証はしない
351デフォルトの名無しさん (ワッチョイ b3bd-5rD0)
2018/09/08(土) 01:10:28.57ID:6MRSNGru0
>>347のコードがそもそもC::nがvolatile宣言されていないのに安全に動いている理由は…
と始めると荒れる…!

それはともかくスレッド間のメモリの読み書きを>>341のmutexでガードするというのは大変良い心がけです
多少遅いかもしれないが遵守する限り泥沼に踏み込まずに済む
352デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/08(土) 01:32:58.78ID:LCjnyCTn0
>>322
メインスレッドとサブスレッドで並列に起動して同じ変数を書き換えた場合、書き換えレースになる。
ロックっていう機構があるのでそれを参照。
353 ◆QZaw55cn4c (ワッチョイ da60-Mhaf)
2018/09/08(土) 01:41:37.02ID:t7GfMYxV0
>>351
よろしければ教えていただけますか?

>20行目のC::f()呼び出しで呼び出されたstd::coutがメモリバリア的な効果を果たした
メモリバリアって要するに x86 の lfence, sfence, mfence のことですか?
これはCPUキャッシュがメインメモリに吐き出されることを保証するものですか?
これらの命令は Pentiumu2 あたりにはなかったと思います、でも Pen2 とか特に Celeron-BP6(abit) で普通にデュアルプロセッサできていたのはどうしてでしょうか?
354デフォルトの名無しさん (ワッチョイ b3bd-5rD0)
2018/09/08(土) 02:36:49.43ID:6MRSNGru0
>>353
>これはCPUキャッシュがメインメモリに吐き出されることを保証するものですか?
ちげう
実行したコアのライトコマンドキューかリードコマンドキュー上の命令をその場で全部実行してしまうというもの
キャッシュのinvalidateやfillが起きるかどうかとは別の話(結果的に起きることもあるが常にではない
キャッシュと関係あるみたいな説明のページがあることは承知しているが苦情は漏れに言わないでホスイ

>これらの命令は Pentiumu2 あたりにはなかったと思います、でも Pen2 とか特に Celeron-BP6(abit) で普通にデュアルプロセッサできていたのはどうしてでしょうか?
古代の話は知らん
OoO(アウトオブオーダー実行)はすでにあったはずなので、ライトコマンドキューやリードコマンドキューもすでにあった
全くの推測だが、キャッシュのinvalidate操作が(invalidateを常に伴うため効率の悪い)メモリバリアと同じ効果があったとかではないかいや知らんけど
355デフォルトの名無しさん (ワッチョイ b3bd-5rD0)
2018/09/08(土) 02:52:26.13ID:6MRSNGru0
ちなIA(Intel Architecture)のうちでも常識的なコア数のやつは
コア間のキャッシュコヒーレンシをハードウェアで勝手に取ってくれるので、
コア間のメモリ参照の不整合はメモリバリアだけ注意したら逝ける(キャッシュの存在は透過的
356はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/08(土) 02:58:07.14ID:VmsJpbI+0
>>353
こないだ atomic を使ってたけど、
atomic について調べたならそこらへんの話もどこかに書いてなかったか?
C++ 用語ではバリアでなくてフェンスって言ってるけど。
357デフォルトの名無しさん (ワッチョイ f723-Wta3)
2018/09/08(土) 03:04:22.19ID:RizVmglH0
メメリバリアやフェンスの意味を知るにはcpuのメモリモデルの理解が必要

https://yohhoy.hatenablog.jp/entry/2014/12/21/171035
358 ◆QZaw55cn4c (ワッチョイ da60-Mhaf)
2018/09/08(土) 03:04:32.58ID:t7GfMYxV0
>>354
>実行したコアのライトコマンドキューかリードコマンドキュー上の命令をその場で全部実行してしまうというもの
>キャッシュのinvalidateやfillが起きるかどうかとは別の話(結果的に起きることもあるが常にではない

なるほど…ちょっとだけ理解が進んだかもしれません
「はるか遠くにあるメインメモリに変更が反映されるかどうか」はプログラムの書き手にはあまり関係がなく、
「各コアから見る限りにおいて、各コアが発したライトあるいはリードの結果すべてが反映され、各コアからはみえている」と考えればいいのですね

これらのメモリの可視性について http://www.cs.tsukuba.ac.jp/~yas/cs/csys-2013/2013-10-15/ 等を熟考しています
mutex や cond にその方面での効用があるとは…、pthread のメモリ可視性に関する効果はあまり意識していませんでした

重要なヒントをくださりありがとうございます
359 ◆QZaw55cn4c (ワッチョイ da60-Mhaf)
2018/09/08(土) 03:17:34.12ID:t7GfMYxV0
>>356
ええ、atomic に関係する話をいろいろと読んではいたのですが、正直なところ、あまりよくわからなかったことを告白します
acquire とか release とか、いまひとつイメージできなかった…
atomic の各メンバ関数の memory_order は C++デフォルト引数として sequence-consist(ency) を与えていることはわかりましたので「最強にしているから、まあいいか」くらいですましていました

>>354
>実行したコアのライトコマンドキューかリードコマンドキュー上の命令をその場で全部実行してしまうというもの
この記述が一番しっくりきました
360 ◆QZaw55cn4c (ワッチョイ da60-Mhaf)
2018/09/08(土) 04:20:01.69ID:t7GfMYxV0
>>352
>書き換えレース
ええと、これを読んで reset-set flip-flop の禁止入力「R=S=1」のことを思い出してしまったんですが、それはさておき

複数のコアが同一メモリに対して「同時に書き込み」する、というのは、このフリップフロップ禁止入力と同じ意味あいですか?
つまり「どっちの書き込みが後になるか、予想がつかないから禁止」…@

それとも、「複数のコアが本当に同時に書き込んでしまった場合、結果が不定になる」…A
(昔のフロッピーディスク供給のソフトウェアプロテクトの方法としての「コロコロビット」=読み出すたびに 0/1 が変わる)という意味なのか

いや、@もAも同じような意味なのかもしれませんが、
>>215 の「CAS 連続スピンロックや CAS 連続スピンロック中に別コアから書き込んだり読み込んだりすること」
がAの意味で危険で、ソフトウェア側で mutex や dirty-bit (>>238) を設けて本当に意図的にコントロールしなければならないのか、と、ちょっと心配になりました
最初から安全側にふっておくとは思いますが
361デフォルトの名無しさん (ワッチョイ f723-Wta3)
2018/09/08(土) 08:05:39.39ID:RizVmglH0
考える前に学んだ方がいい

cas が使い物にならないならなぜそんな物があると思う?
というか mutex の実装にも cas は使用される。

使い方がわからないからcasは使わず mutex を使うという判断は正しいが、
例えば前の例のエラトステネスの篩で実装1ビットセットする毎に
mutex で排他していたらコアがかなり沢山あってもシングルスレッドの方が速い
(mutex api を処理する時間が大半を占めてしまう)
362デフォルトの名無しさん (ワッチョイ f723-Wta3)
2018/09/08(土) 08:13:01.68ID:RizVmglH0
質問する前にスレッドセーフとか排他制御とかレースコンディションとか
弱いメモリモデルとかでググって時間くらいしっかり読んで
363デフォルトの名無しさん (ワッチョイ f723-Wta3)
2018/09/08(土) 08:13:34.47ID:RizVmglH0
>時間くらい
「1時間くらい」のタイプミスでした。
364デフォルトの名無しさん (ワッチョイ 7ab3-M35H)
2018/09/08(土) 11:49:10.23ID:+e2Zk2SC0
>>360
cpuのメモリモデルの説明読んだら最初の方に書いてあると思うけど
普通ワード単位のアクセスは何もしなくてもハード的にアトミックであることが保証されてる
そこで壊れたらやってられないからな
365デフォルトの名無しさん (ドコグロ MM32-vzSQ)
2018/09/08(土) 13:52:50.37ID:UCzuGyPmM
>>360
> つまり「どっちの書き込みが後になるか、予想がつかないから禁止」…@
順序は予測できないと言うのは正しい

> それとも、「複数のコアが本当に同時に書き込んでしまった場合、結果が不定になる」…A
通常のプロセッサならこれはない
排他制御がなされていてどちらかの結果が最終的に反映される

ただ CAS (Compare And Swap) 命令はそう言う話じゃなくて読出動作 (Compare) と書込動作 (Swap) がアトミック(つまりその間には他のアクセスは無いように制御されてる)ってこと
ソフトでどうのこうのできる話じゃないからシステムから提供されてるAPIを素直に使いなさい

>>364
中途半端な知識で語るなよ
366デフォルトの名無しさん (ワッチョイ 9a22-7GfT)
2018/09/08(土) 16:38:24.58ID:+lRq1NsW0
>>364
だよな
同一のCS, WE/OEをファンアウトさせるわけで
配線遅延があってもクロック同期で関係なくなるし
367デフォルトの名無しさん (ワッチョイ b3bd-5rD0)
2018/09/08(土) 20:07:53.81ID:6MRSNGru0
このスレは荒れる…!

マルチスレッド、マルチコア、アウトオブオーダー実行(OoO)にまつわる3つの問題は分けて考えられねばならない;
 (A) 書き換えレースの問題(>>352
 (B) アドレスxに対する読み書きのatomic性(>>364
 (C) メモリバリア(>>354

(A)はマルチスレッドすればシングルCPUでも起きる問題
(B)はこれは何ビット幅までの読み書きを他コアが割り込み不可能なバスサイクルで行えるかという話。マルチコア固有
(C)はマルチコア状況化でのアウトオブオーダー(OoO)実行の影響をソフトで制御して無問題にするテクの話で、マルチコア×OoO固有の話

>>364は(B)のことを言っており、だいたい合っているんじゃ
(IAの場合、4バイト境界に整列した32ビットまでは(B)の意味でatomicに読み書きできる
 整列していないデータの読み書きは16 bitであっても(B)の意味でatomicではない
 インテルのマニュアルに書いてある
 自尊心だけは高い低学歴知恵遅れなのでいちいちソースは示さないが
368デフォルトの名無しさん (ワッチョイ b3bd-5rD0)
2018/09/08(土) 20:29:14.34ID:6MRSNGru0
とはいえ、読み書きをミューテックスなりロックなりでガードする、…(D)
これだけを遵守すれば>>367の問題は全部忘れて良い(>>351の後段にも書いた)
メモリモデルとかまともに勉強する必要は無い
さらに言うと、まともなコンパイラなら(中でどんな副作用やメモリバリアを行うかわからない)システムコールを跨いだ
変数のレジスタ割り当てとかしないから、(D)を守れば実際のところ(ほとんどのケースで)volatileも要らん

メモリモデルを勉強する必要があるのは、(D)の速度に不満が生じて改善する必要に迫られたとき、
例えばdouble-checked lockingテクがちゃんと動くのかとか不安になったりロックレスハッシュを作らねばならなくなったときだけ!
369デフォルトの名無しさん (ブーイモ MMaf-qEbW)
2018/09/08(土) 22:09:03.01ID:Mc6Ny40VM
>>367
マルチプロセッサとかNUMAの事は考慮しなくても良いのけ?
370デフォルトの名無しさん (ワッチョイ bab3-vzSQ)
2018/09/08(土) 23:30:32.50ID:ZUEeKRTR0
バスサイクルと言ったりミューテックスって言ったり話のレベルがぐちゃぐちゃすぎる…
371デフォルトの名無しさん (ワッチョイ 3a12-f65Y)
2018/09/09(日) 01:33:18.67ID:XJaXrhZ00
なんせC++は生ポが使える低水準言語ですし・・・
372デフォルトの名無しさん (ワッチョイ 9a22-7GfT)
2018/09/09(日) 03:24:55.55ID:Q3MV1FJL0
要するにあらゆる左辺値をatomicにして更にミューテックスでガードしとけば(これはキチガイ)
ハード系の知識を学ぶ必要はない(ハードソフトという名の蛸壺)という無茶苦茶な主張だな
勉強嫌いにもほどがあるだろ、何が低学歴だ
373デフォルトの名無しさん (ブーイモ MMaf-qEbW)
2018/09/09(日) 08:36:42.55ID:BqWnELncM
周辺チップからのメモリ書換をミューテックスでガード出来るのか
374デフォルトの名無しさん (ワッチョイ 161b-QWFi)
2018/09/09(日) 08:59:15.50ID:9h0HyZsY0
実際プログラミングする上でハードの知識はいらんだろ
375デフォルトの名無しさん (ブーイモ MMaf-qEbW)
2018/09/09(日) 09:25:43.25ID:BqWnELncM
ハードの知識無しでデバドラ書けるのけ?
376デフォルトの名無しさん (ワッチョイ 9a22-7GfT)
2018/09/09(日) 10:19:49.00ID:Q3MV1FJL0
>>374
メモリのゴーストとか普通に出てくるだろ
PCという狭い牧場から出たことのない家畜は知らんだろうけど
377デフォルトの名無しさん (ワッチョイ 161b-QWFi)
2018/09/09(日) 10:31:54.13ID:9h0HyZsY0
>>375
は?プログラミングが書けると言っただけでデバドラのプログラミングするなんて言ってねえよ
じゃあお前は信号処理を知らずに音声合成のプログラミング書けるのか?
>>376
だからそんなの考慮知らなくもソフトウェアは作れるんですが
378デフォルトの名無しさん (ワッチョイ 27e3-fTNn)
2018/09/09(日) 10:37:46.17ID:kQslwDxe0
作文したら推敲しろ、って小学校で習うはずなんだけどな
379デフォルトの名無しさん (ワッチョイ 161b-QWFi)
2018/09/09(日) 10:39:04.08ID:9h0HyZsY0
>>378
え?
お金も払われないのに推敲?
時間の無駄じゃん
380デフォルトの名無しさん (ワッチョイ 9a22-7GfT)
2018/09/09(日) 11:01:35.79ID:Q3MV1FJL0
>>377
ああ家畜か
人間よばわりして悪かったな
381デフォルトの名無しさん (ワッチョイ 5393-WN3X)
2018/09/09(日) 11:25:28.91ID:lGJ+2GvF0
ハードウェア部分を隠すためのOSによるアクセスの抽象化とか、
標準ライブラリがあるわけだし、ハードウェアの知識が絶対に必要でもないでしょ。

デバイスドライバを書くプログラマが優れているとか、その反対に
高レベルな(抽象度の高い)ソフトを作る人ほど偉いってものでもない。
382デフォルトの名無しさん (ラクッペ MM3b-QWFi)
2018/09/09(日) 11:26:29.90ID:l6rR/pccM
>>380
逆に家畜はお前じゃね?
ハードウェアを意識しないとプログラミング出来ないなんて可哀相
383デフォルトの名無しさん (ワッチョイ c78a-qEbW)
2018/09/09(日) 14:43:15.61ID:TxROatu90
何これ?
384デフォルトの名無しさん (ワッチョイ bab3-vzSQ)
2018/09/09(日) 15:02:39.54ID://bKOaXP0
いつものマウントごっこだろ
385デフォルトの名無しさん (アウアウカー Sa33-XU3l)
2018/09/09(日) 16:27:56.67ID:TAQT5wBea
for i in {0..15}; do
mount /dev/dm-$i /mnt
done
386デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/09(日) 17:06:11.77ID:V1LakR3i0
捕食される側の人類最底辺同士で争ってる
387デフォルトの名無しさん (ワッチョイ aeeb-fTNn)
2018/09/09(日) 17:19:50.37ID:xES8AK750
低レベルプログラミングって言う面白そうな本が出てたなあ
388デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/09(日) 18:06:25.87ID:acpzPeVw0
そういえば、さいきんの低レベルいじる時ってどうするんやろね。
BIOSなくなってきてるし、作法かわってきてるのかなぁ・・・。
389デフォルトの名無しさん (ワッチョイ 17c3-oywQ)
2018/09/09(日) 18:53:37.14ID:+aTtRZce0
古き良きシリアルポートが普通のPCではほぼ絶滅してるからなあ
USBきらい
390デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/09(日) 19:01:40.42ID:acpzPeVw0
USB制御のノウハウってあんまり周知されてない感じがする。
391デフォルトの名無しさん (ワッチョイ 9a22-7GfT)
2018/09/09(日) 19:09:08.66ID:Q3MV1FJL0
アイソクロナス?
392デフォルトの名無しさん (オイコラミネオ MMe6-xaKy)
2018/09/09(日) 19:38:22.19ID:eYgKQZDEM
>>382
高級ってのを誤解しているアホがここにもいたわw
393デフォルトの名無しさん (ワッチョイ c78a-qEbW)
2018/09/09(日) 21:21:28.72ID:TxROatu90
>>390
LINE EYEで見てるとエラー出まくったりしてるね
394デフォルトの名無しさん (スッップ Sdda-g95O)
2018/09/10(月) 22:46:19.98ID:IGaBABI/d
dllからexeをCreateProcessで起動するとメモリリークするとかある?
debugging tool forなんたらみたいなやつでメモリリークチェックしてるのだけど
exeから呼んだやつはリークなし
dllから呼んだやつはリークありとなっている
監視開始ポイントと終了ポイント及び呼び出しソースコードに差分がなく
その他にも差分がないんだ
395デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/10(月) 23:03:06.10ID:XzQQxj6r0
dllから呼びだす場合
dllは呼びだした側のプロセスと同じアドレス空間にマッピングされ
dll側の関数を呼び出して生成されたヒープも
呼びだした側のプロセスと同じアドレス空間にマッピングされる

プロセスから呼び出した場合、
呼び出した側のプロセスと関係ない呼び出された側のプロセスのアドレス空間に
ヒープは生成されるから
呼び出した側のプロセスを監視してもそのリークについて検出されることはない

分かった?
396デフォルトの名無しさん (ワッチョイ 1a4c-itPJ)
2018/09/11(火) 05:56:49.25ID:3QLqjO4o0
質問と回答が違う
397デフォルトの名無しさん (ブーイモ MM06-M35H)
2018/09/11(火) 09:46:04.97ID:THBnA1g1M
そのツールでもうちょっと情報とれないんかいって思うが、
ランタイムライブラリの指定とか見直してみたら?
というかexe起動を繰り返したら繰り返すだけリークする?
最初の一度だけならあんまり気にしなくていいんじゃない?しらんけど
398デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/11(火) 22:07:19.41ID:i7axZbyN0
質問通りの
コレ以上ないエレガントなレスになってる
399デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/11(火) 22:09:50.93ID:BTBlWiGG0
あかねちゃん。
400デフォルトの名無しさん (ワッチョイ 13b3-Lb9U)
2018/09/12(水) 00:18:15.71ID:B23czwA60
>>394
umdhじゃないかと思うが、スタックトレースは見てみたの?
プロセスの標準入出力に名前付きパイプが指定されてるとdllの明示的なアンロードのタイミングでApplication verifierでリーク検出されたことはあった。
401デフォルトの名無しさん (ワッチョイ 3a23-Wta3)
2018/09/12(水) 09:57:57.91ID:OqmF7RQ90
>>394
dll ってことは何かの exe の中で動いてるんだろ
そっちのコードが他スレッドで何かアロケートしてるとか

単に dll の問題で CreateProcess しなくてもリークしてるとか
402デフォルトの名無しさん (スプッッ Sd7a-g95O)
2018/09/12(水) 19:18:39.87ID:BIkz+Ggud
>>397
>>395
>>400
>>401
色々とありがとう。UMDHです
色々と試してみたところ繰り返し行ってもリーク量は増えなかったので、自分が作成したロジック以外でのリークみたいでした
UMDHは増えず、タスクマネージャー上のプライベートメモリとかが増えてくのは気になったけども....
403デフォルトの名無しさん (ワッチョイ 57b3-AfNj)
2018/09/14(金) 01:05:55.69ID:y0a2qOvJ0
>>402
メモリはコミットサイズを確認。
あとはハンドルをクローズしてないとかはないよね。
404はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-okpm)
2018/09/14(金) 01:26:50.31ID:NOYHI4qj0
>>402
UMDH は増えずにタスクマネージャー上のプライベートメモリが増えるということは必ずしも問題があるわけではない。
(もちろん問題がある場合もある。)
malloc や new で割り当てるメモリは、
OS からある程度のメモリを融通してもらった塊をアプリケーションのレイヤ (ランタイムライブラリ) で切り分けて提供することになる。
足りなくなったらまた OS に要求する。
しかしその要求というのも、メモリ空間を予約するだけで物理メモリはまだ割り当てないかもしれない。

「プライベートメモリ」というのは予約したメモリ空間のサイズを表すらしく、
実際のメモリ使用量を表さないので、
基本的には UMDH をあてにした方が良いと思う。
405デフォルトの名無しさん (ワッチョイ 9f4c-A9Cx)
2018/09/14(金) 04:46:07.61ID:Ln8BSCnm0
gflagsで対象exeのメモリ割り当てをコンパチブルモードにしてみたら
406デフォルトの名無しさん (スップ Sdbf-UqHH)
2018/09/14(金) 07:55:52.78ID:05hGeAAsd
>>403
コミットサイズを確認すれば良いんですね
ハンドルクローズもしてますね
ありがとうございます

>>404
分かりやすくありがとうございます
差分が出ることもあり得るのですね
丁寧でとても助かりました
407デフォルトの名無しさん (ワッチョイ bf85-qteA)
2018/09/14(金) 20:22:01.09ID:KUzt6BBd0
プログラム全体で使いたい変数を宣言する際は
グローバル変数として宣言するのと#defineするのって何か違います?
どっちを使えばいいんですかね?
408デフォルトの名無しさん (アウアウカー Saeb-hTDA)
2018/09/14(金) 20:34:55.91ID:9HmXun5pa
#define という事は定数だと思われるのでconstexprな変数に一票。
409デフォルトの名無しさん (ワッチョイ 9f12-9b2l)
2018/09/14(金) 20:44:10.13ID:kDrjUGbb0
グローバル変数だとコンパイルのときにエラーを出してくれる
#defineは値がヘンでもエラーを出さない
410デフォルトの名無しさん (ドコグロ MMeb-0AE+)
2018/09/14(金) 20:54:15.35ID:c9w6X9S4M
どっちとか言う前にもう少し言語仕様を理解してこいよ…
411デフォルトの名無しさん (ワッチョイ 17b3-Jnas)
2018/09/14(金) 21:06:34.91ID:YK4Q2JFR0
>>407
そのレベルならいったんdefineは忘れるべき。
defineはほとんどの場合ただの置換に過ぎない。
412デフォルトの名無しさん (ワッチョイ 9780-9b2l)
2018/09/14(金) 21:31:46.88ID:fXySkelb0
C++なら値変更不可な参照のみのシングルトンにしとけばいい
シングルトンを動的にイニシャラズできるようにすれば起動時に設定の変更ができたりするようにできる

めんどくさかったらdefineでいい
defineかえてコンパイルしなおせばしまいだからな
そういうdefineはカテゴリー毎にまとめてぜんぶ一か所に書いときなさい

シングルトンでも裸の外部変数はやめておいたほうがいい
それさえしなければどうでもいい
413デフォルトの名無しさん (ワッチョイ 17b3-Jnas)
2018/09/14(金) 21:53:36.47ID:YK4Q2JFR0
し、シングルトン?
この話題でまさかのsingleton笑
さすがにこれはネタだよね?
414デフォルトの名無しさん (ワッチョイ 9780-9b2l)
2018/09/14(金) 21:55:11.25ID:fXySkelb0
外部変数はシングルトンの変数だからな
なにもおかしくない
415デフォルトの名無しさん (ワッチョイ 17b3-Jnas)
2018/09/14(金) 21:56:25.39ID:YK4Q2JFR0
ここで言ってるsingletonって所謂GoFデザインパターンのsingletonだよね?
416デフォルトの名無しさん (ワッチョイ 9780-9b2l)
2018/09/14(金) 21:58:26.14ID:fXySkelb0
そもそも池沼のID:YK4Q2JFR0はdefineがなにかすらわかってないからな

> defineはほとんどの場合ただの置換に過ぎない。

ほとんどもへったくれもなく
defineはただの置換だからな

頭悪い
417デフォルトの名無しさん (ワッチョイ 9780-9b2l)
2018/09/14(金) 21:59:24.65ID:fXySkelb0
頭悪いやつはムリしてレスしなくていい
なにもわかってないんだからな
418デフォルトの名無しさん (ワッチョイ 5723-B32r)
2018/09/14(金) 22:01:10.88ID:gH/Sje3Q0
>>416
結合と文字列化もあるから「ほとんど」であってるが
419デフォルトの名無しさん (ワッチョイ 17b3-Jnas)
2018/09/14(金) 22:01:20.46ID:YK4Q2JFR0
いつもの半角くん病が発症したらしいw
毎度毎度、燃料投下、お疲れ様ですm(_ _)m
420デフォルトの名無しさん (ワッチョイ 9780-9b2l)
2018/09/14(金) 22:02:21.10ID:fXySkelb0
defineか外部変数にしたいとかいう質問だからな
普通にグローバルを定数値をもたせたいという質問内容なのに
このスレの低学歴知恵遅れたちがどう解釈したかはしらない
421デフォルトの名無しさん (ワッチョイ 9780-9b2l)
2018/09/14(金) 22:02:53.11ID:fXySkelb0
結合も文字列かもただの置き換え
422デフォルトの名無しさん (ワッチョイ 9780-9b2l)
2018/09/14(金) 22:05:22.67ID:fXySkelb0
まず低学歴知恵遅れは日本語を読解する能力がない
ものごとも抽象的にみる能力もない
つまり認知機能に著しい欠陥がある
423デフォルトの名無しさん (ワッチョイ d707-A9Cx)
2018/09/14(金) 22:05:58.57ID:BDjkgOYf0
ID真っ赤にして火病起こしたか
424デフォルトの名無しさん (ワッチョイ 9780-9b2l)
2018/09/14(金) 22:06:56.64ID:fXySkelb0
静的にどう置換されるかコンパイル時に決定されてるからな
このスレに池沼たちは、いつもなにをいってるか意味不明なワケ
425デフォルトの名無しさん (ワッチョイ 17b3-Jnas)
2018/09/14(金) 22:07:36.57ID:YK4Q2JFR0
>>420
こういうtypoをツッコむのは本来嫌いなんだが、せっかく燃料投下してくれたお礼に一応指摘。
「グローバルを定数値をもたせたい」
毎回言うけど、C言語の前に日本語勉強したほうがええで。
426デフォルトの名無しさん (ワッチョイ 9780-9b2l)
2018/09/14(金) 22:09:30.41ID:fXySkelb0
低学歴知恵遅れが指摘できるのはこの程度
自分の著しい頭の悪さを棚にあげるからな

グローバルに定数値をもたせたい

とまともな日本語読解能力があれば
普通に読めるからな
427デフォルトの名無しさん (ワッチョイ 9780-9b2l)
2018/09/14(金) 22:10:14.11ID:fXySkelb0
ともかくとてつもなく頭悪い
しかもとてつもなく頭悪いという自覚がない
428デフォルトの名無しさん (ワッチョイ 17b3-Jnas)
2018/09/14(金) 22:10:23.49ID:YK4Q2JFR0
>>426
よしよし、今日は素直でよろしい。
429デフォルトの名無しさん (ワッチョイ 9780-9b2l)
2018/09/14(金) 22:11:29.39ID:fXySkelb0
で、オマエは自分の頭が
とてつもなく頭悪いのは自覚してんか

ゴミでクズな人間であることも自覚できてんのか
430デフォルトの名無しさん (ワッチョイ 17b3-Jnas)
2018/09/14(金) 22:12:33.95ID:YK4Q2JFR0
さすがにもうワンパターンで飽きてきた。
もっと違う煽り方考えてよ。
ツンデレ的なのはどう?
431デフォルトの名無しさん (ワッチョイ 9780-9b2l)
2018/09/14(金) 22:14:52.54ID:fXySkelb0
煽り?
まず事実だからな

バカは自分がバカである自覚がない
だからバカが直らない

すべてゴミでクズな人間性の問題
ゴミクズには内省というもんがない
432デフォルトの名無しさん (ワッチョイ 17b3-Jnas)
2018/09/14(金) 22:18:12.66ID:YK4Q2JFR0
最初は褒めて褒めて褒めちぎった上でミスリードを誘い、その上でボロクソに貶すとかどう?
さすがに皆そのやり方は飽き飽きしてるよ。
433デフォルトの名無しさん (ワッチョイ ff81-okpm)
2018/09/14(金) 22:34:27.68ID:5DPUkElZ0
子猫がかわいくて甘噛みされたらちょっと叩いたあとで頭なでなでしてたら
大人になっても強くかむようになって困ったのを思い出した

なんだかなあ
434デフォルトの名無しさん (ワッチョイ 9780-9b2l)
2018/09/15(土) 00:40:17.11ID:KIanXBkQ0
オレはこんなことはしてないからな

                        タカイ
                     ∧_∧ タカーイ
                  m⊂(´・ω・)⊃
                ⊂c  ノ__  ノ
             /⌒ヽ  | .|  | .|                /⌒ヽ
            ( ^ω^) i i二 .ノ               _( ^ω^) il|   死ね
          (´  二二二 ノ                (´ \   \|il |il il|
         /    /:                  /  \. \ノ\. \il| |il|
        i===ロ==/                   i===ロ== ヘ. \. i|!l !l\il|
       ノ:::::::::::::::::ヽ                  ノ:::::::::::::::::ヽ \ ヽη /')/')
      /:::::::::::へ:::::::::ヽ                /:::::::::::へ:::::::::ヽ  ヽ_,,..)  /
     /::::::_/   \:::::::)              /::::::_/   \:::::::)   )  ( / /
   /::_ '´      |::::|            /::_ '´      |::::| ⊂(v   )⊃
   レ          しつ           レ          しつ`) \ 〆 (´ ̄           
                                         /⌒Y⌒ヽ
ただの被害妄想
オレは事実を書き込んでるだけだからな
まず事実が事実であることを自覚するところから
435デフォルトの名無しさん (アウアウカー Saeb-hTDA)
2018/09/15(土) 01:10:27.96ID:FCP8vuXka
バイナリファイルの読み書きはfstreamとFILEどちらがオススメですか?
436デフォルトの名無しさん (ワッチョイ 9fb3-okpm)
2018/09/15(土) 01:53:04.57ID:wlkSFfZ20
#include <iostream> is Forbidden
437デフォルトの名無しさん (ブーイモ MM9b-ahc+)
2018/09/15(土) 04:03:10.64ID:x4qTic2YM
FILE
438デフォルトの名無しさん (ワッチョイ 5793-mIvp)
2018/09/15(土) 06:14:52.60ID:/OsufeBT0
>>407 を虚心坦懐に読めば
「#defineじゃ定数値しか作れんのだから変数にする以外ない」
という身も蓋もない答えもありうるわな。
さすがにそんな揚げ足取りをする人はいないみたいだけど。

プログラム全体で参照する定数値をconstのグローバル変数にするか
#defineにするか、なら一般的にはconst変数の方が好まれるかな。
const変数の利点と言うより、#defineの弊害を避けるためって理由で。

その定数が整数値なら enum class も候補に入れてくれ。
static_castが面倒臭いかも知れんけど。
439デフォルトの名無しさん (スップ Sd3f-iXbp)
2018/09/15(土) 08:40:54.56ID:8TAknpK9d
ここまでconstexpr1つもなしなのはみんな意図的?
440デフォルトの名無しさん (ブーイモ MM9b-ahc+)
2018/09/15(土) 09:11:50.04ID:pVwVWDM8M
>>439
つ 408
441デフォルトの名無しさん (ワッチョイ 9f33-+ow7)
2018/09/15(土) 09:12:10.24ID:hHXkfIbs0
>>439 >>408
442デフォルトの名無しさん (ワッチョイ 37c3-A6n1)
2018/09/15(土) 09:39:05.72ID:u2jcQID60
整数の定数くらいならconstexpr付けても付けてなくても大して変わらなくない?
const int n = 42; と constexpr const int n = 42; って何が違うの
どっちも定数式文脈で使えるでしょ
443デフォルトの名無しさん (スップ Sd3f-iXbp)
2018/09/15(土) 10:09:16.49ID:8TAknpK9d
>>440
>>441
節穴だった申し訳
444デフォルトの名無しさん (ワッチョイ 9fb3-nprU)
2018/09/15(土) 10:28:10.96ID:wlkSFfZ20
constexpってクソださい仕様だよな
勝手に推論して最適化しとけや
445デフォルトの名無しさん (アウアウウー Sa1b-TNGn)
2018/09/15(土) 11:23:26.53ID:oMwX4DqWa
>>438
関連性のある定数群をまとめる為にはスコープがあるenum classはいいんだけど、
フラグとして使うのが難しいのがちょっと難点

enum class PNG_COLOR_MASK: uint8_t{
GRAY = 0b000,
PALETTE = 0b001,
RGB = 0b010,
ALPHA = 0b100
}
enum class PNG_COLOR_TYPE: uint8_t{
GRAYSCALE = PNG_COLOR_MASK::GRAY,//できない
RGBA = PNG_COLOR_MASK::RGB | PNG_COLOR_MASK::ALPHA//できない
}
446デフォルトの名無しさん (ワッチョイ 37c3-A6n1)
2018/09/15(土) 14:56:24.44ID:u2jcQID60
フラグとして使うならoperator|と&をオーバーロードするのが良いけど面倒だね

PNG_COLOR_MASK operator|(PNG_COLOR_MASK e1, PNG_COLOR_MASK e2)
{

 using u_t = typename std::underlying_type<PNG_COLOR_MASK>::type;

 return PNG_COLOR_MASK((u_t)e1 | (u_t)e2);

}
447デフォルトの名無しさん (アウアウウー Sa1b-hTDA)
2018/09/15(土) 15:34:42.86ID:oMwX4DqWa
ここまでやって更にstatic_castも必要となるという。
448デフォルトの名無しさん (ワッチョイ bf9f-dTjR)
2018/09/15(土) 16:32:07.11ID:I8Ewbo070
>>444
むしろ俺はコンパイラでやらずビルドシステムで対応すべきことだと思っているが。
なんでもコンパイラに押し込もうとする悪しき風習に思う。
449デフォルトの名無しさん (ワッチョイ 5704-G9Ec)
2018/09/15(土) 19:18:14.78ID:XFoW6siK0
fstreamでも結局writeするのでFILEと比較して都合のいい方を選べばいいよ。
450438 (ワッチョイ 5793-mIvp)
2018/09/15(土) 19:36:37.14ID:/OsufeBT0
enum class はスコープを限定できる代わりに、個別の型として
ガチガチに保護されるせいで数値として使いにくい欠点はあるね。

namespace PNG_COLOR_MASK {
 enum {
  GRAY = 0b000,
  PALETTE = 0b001,
  RGB = 0b010,
  ALPHA = 0b100,
 };
}

 int grayscale = PNG_COLOR_MASK::GRAY;
 int rgba = PNG_COLOR_MASK::RGB | PNG_COLOR_MASK::ALPHA;

こんな感じにnamespaceで名前なしのenumを囲むか。
素直にconstexprを使えばいいんだけど、C++11以前でも可というニッチな提案。
451デフォルトの名無しさん (アウアウカー Saeb-hTDA)
2018/09/15(土) 20:20:12.42ID:MJTXjpFoa
その場合structで囲むのもありだね。二進数リテラルはC++11以前では拡張だけど。
452デフォルトの名無しさん (アウアウウー Sa1b-TNGn)
2018/09/15(土) 21:04:37.66ID:V75GOAR/a
>>446の案を利用(C++17以降?)
https://wandbox.org/permlink/yIJAkUN2Rm3h7Ldb
453デフォルトの名無しさん (アウアウウー Sa1b-TNGn)
2018/09/15(土) 21:10:11.77ID:V75GOAR/a
少し修正
https://wandbox.org/permlink/WtrS5XFoh0knc1W7
454デフォルトの名無しさん (ワッチョイ 57bd-Tlrf)
2018/09/15(土) 22:39:15.30ID:oE5p8K2a0
ようわからんがプログラムを書き始めた当初
#define CONST_A 3
だったものを
extern int g_varA = 3;
#define CONST_A g_varA
とすれはCONST_Aは一瞬で値を変更可能な「変数」g_varAに設計変更になれるキモス
(CONST_Aは定数のつもりだったが後から変数に変えたくなった場合

ただしそうしてしまうとプログラムのどこでも書き換えられてしまって危険極まりないので、
めんどくさくない限りシングルトンすべしという神の啓示に聞こえなくも無い

プログラム起動時のみに値を設定する目的であってプログラム動作中は定数扱いなのだとすれば、
シングルトンのマルチスレッド対応は特に何もしなくても良い(クリチカルセクションやミューテック巣やLOCKとか不要

まあ質問に対しては例の図画の「営業の約束」の類やな
455デフォルトの名無しさん (ワッチョイ 9f34-zxIj)
2018/09/15(土) 22:48:41.06ID:VQoTXRx30
2進数書けないのは不便だと昔からおもてた
456デフォルトの名無しさん (ワッチョイ 57bd-Tlrf)
2018/09/15(土) 22:56:14.72ID:oE5p8K2a0
接頭辞0bというのは十六進数と紛らわしいから02にしよう
457さまよえる蟻人間 ◆T6xkBnTXz7B0 (スププ Sdbf-knbE)
2018/09/15(土) 22:58:34.46ID:2Qh39GgFd
02だと、8進とかぶっちゃうよ。
458デフォルトの名無しさん (ワッチョイ 577f-okpm)
2018/09/15(土) 23:02:11.85ID:bZY/rtks0
8進がおかしい
0Oにしろ
459デフォルトの名無しさん (ワッチョイ 57bd-Tlrf)
2018/09/15(土) 23:06:12.86ID:oE5p8K2a0
二進数が書けたら書けたで、長ったらしくなるから桁区切りを入れさせろという要求が出るのは必至
犯人の要求はエスカレートする一方や
460デフォルトの名無しさん (ワッチョイ ff5b-ck2F)
2018/09/15(土) 23:07:07.35ID:5HUBWRKg0
誰かが仕込んだバグ以外で8進数が使われてるところを見たことがない。
パメ族以外で8進リテラル使ってるやつなんているのか?
461デフォルトの名無しさん (アウアウウー Sa1b-TNGn)
2018/09/15(土) 23:07:30.30ID:V75GOAR/a
C++14で桁区切りも対応してるぞ
462デフォルトの名無しさん (ワッチョイ 9f60-P+8y)
2018/09/15(土) 23:17:11.26ID:xQnt+Dhj0
>>458
賛成!
463さまよえる蟻人間 ◆T6xkBnTXz7B0 (スププ Sdbf-knbE)
2018/09/15(土) 23:29:24.44ID:2Qh39GgFd
ダブルオー
464デフォルトの名無しさん (ワッチョイ 9f34-zxIj)
2018/09/15(土) 23:35:07.74ID:VQoTXRx30
マイコンベーシックで2進数のドット絵キャラを見たときは笑劇だった
465デフォルトの名無しさん (オイコラミネオ MM5b-UhQ6)
2018/09/16(日) 00:46:24.98ID:JK7FzOgWM
>>461
アポストロフィーがどうにも気持ち悪くて…
慣れるのかね、そのうち
466デフォルトの名無しさん (ワッチョイ 9f7c-oS0e)
2018/09/16(日) 06:21:32.85ID:TERwdiOQ0
int a = 123; // a = 123
int b = 0123; // b = 83
ほんとクソ仕様だなこれ
467デフォルトの名無しさん (ワッチョイ d707-A9Cx)
2018/09/16(日) 06:35:39.96ID:Ch2PxBqj0
桁区切りってISOにのっとってるの?
国によって違うけど対応してるの?
468デフォルトの名無しさん (ワッチョイ 37c3-A6n1)
2018/09/16(日) 06:35:52.88ID:NJnAChO90
Unix系のファイルパーミッションは今でもしぶとく8進数だよな
大嫌いだからあの習慣早く滅亡して欲しい
469デフォルトの名無しさん (オイコラミネオ MM4f-UhQ6)
2018/09/16(日) 07:40:39.31ID:R+r0qoR6M
>>467
可読性を高めるためのもの
コンパイラはただ読み飛ばすだけなのでお好きな記方でどうぞ
だったはず
470デフォルトの名無しさん (ワッチョイ 9fb3-0AE+)
2018/09/16(日) 08:43:28.35ID:+ao0anr70
>>460
unix のファイルパーミッションが3bit単位だから昔のソースではcreat()の引数に0755とか0644とか普通に書かれてる
てかそのための8進数だと思う
471デフォルトの名無しさん (ワッチョイ 9780-9b2l)
2018/09/16(日) 08:47:08.77ID:SOVIz+sV0
rwxrwxrwx
421421421

8進数なのはアタリマエ
8進数以外で表現しようがない
472デフォルトの名無しさん (ワントンキン MM7f-ahc+)
2018/09/16(日) 09:04:46.04ID:J7jkqE/NM
intelチップのマシンコードは3bit単位で意味が変わるから
ハンドアセンブル出来るひとは普通8進数使えるよ
473デフォルトの名無しさん (ワッチョイ 37c3-A6n1)
2018/09/16(日) 09:08:16.62ID:NJnAChO90
stickyビットとかsetuidビットとか増えてるから本来はもう8進数じゃ足りないんだぞ
未だに引きずられて無理矢理8進数で表現してるのは害悪だから
474デフォルトの名無しさん (ワッチョイ 9fd5-okpm)
2018/09/16(日) 09:14:30.28ID:lOWFqhA+0
>>465
気持ち悪いよな
アンダースコアでよかったのに何でって思う
475デフォルトの名無しさん (ワッチョイ 57f2-okpm)
2018/09/16(日) 09:19:40.62ID:yGlb1wug0
どっかに書いてあった。ユーザー定義リテラルと衝突するんだと。
476デフォルトの名無しさん (アウアウカー Saeb-hTDA)
2018/09/16(日) 09:20:40.61ID:AHKBmQkKa
ユーザー定義リテラルが先にきてて、アンダースコアだと重複してしまうから。
案としてはアンダースコアも出てたはず。
477デフォルトの名無しさん (アウアウカー Saeb-hTDA)
2018/09/16(日) 09:24:34.63ID:AHKBmQkKa
これやな。
https://cpprefjp.github.io/lang/cpp14/digit_separators.html
478デフォルトの名無しさん (ワッチョイ 17b3-Jnas)
2018/09/16(日) 09:30:17.66ID:Z6oeOzwN0
日本の数勘定として、3桁区切りより4桁区切りのほうが良いと思うの。
100,000,000と書いててもぱっと1億って分からん。
1,0000,0000のほうが分かりやすい。
ってC言語関係ないけど。
479デフォルトの名無しさん (ワッチョイ 9f60-P+8y)
2018/09/16(日) 09:40:48.27ID:M63m8fL00
>>478
万事、英米基準だから…
480デフォルトの名無しさん (ワッチョイ 9fd5-okpm)
2018/09/16(日) 10:16:56.42ID:lOWFqhA+0
operator "" _000 () みたいなアホなこと書かれかねないからか
なるほどthx
481デフォルトの名無しさん (ワッチョイ 9fb3-0AE+)
2018/09/16(日) 11:19:42.15ID:+ao0anr70
>>471
4bit区切りでいいだろ
4bit目は予備として0固定にしちゃえばいいだけ
482デフォルトの名無しさん (ワッチョイ 9fb3-0AE+)
2018/09/16(日) 11:23:02.16ID:+ao0anr70
>>465, >>474
C++相談室 part137 	->画像>4枚
483デフォルトの名無しさん (JP 0Hbb-TNGn)
2018/09/16(日) 14:03:39.12ID:cGCWO0MtH
>>478
一億ってかけ
それ以外は認めん
484はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-okpm)
2018/09/16(日) 14:41:57.29ID:iD6L9h5X0
ユーザー定義リテラルで 1_億 みたいには書けるじゃろ
485デフォルトの名無しさん (ワッチョイ 9fd5-okpm)
2018/09/16(日) 14:43:54.49ID:lOWFqhA+0
constexpr unsigned long long operator "" _\u5104 (unsigned long long val)
{
return val * 10000 * 10000;
}
486デフォルトの名無しさん (ワッチョイ 9fd5-okpm)
2018/09/16(日) 14:58:07.76ID:lOWFqhA+0
// Header <japanese> synopsis
constexpr unsigned long long operator "" _\u4e07 (unsigned long long);
constexpr unsigned long long operator "" _\u5104 (unsigned long long);
constexpr unsigned long long operator "" _\u5146 (unsigned long long);
constexpr unsigned long long operator "" _\u4eac (unsigned long long);
constexpr unsigned long long operator "" _\u5793 (unsigned long long);
constexpr unsigned long long operator "" _\u25771 (unsigned long long);
constexpr unsigned long long operator "" _\u7a63 (unsigned long long);
constexpr unsigned long long operator "" _\u6e90 (unsigned long long);
constexpr unsigned long long operator "" _\u6f97 (unsigned long long);
constexpr unsigned long long operator "" _\u6b63 (unsigned long long);
constexpr unsigned long long operator "" _\u8f09 (unsigned long long);
constexpr unsigned long long operator "" _\u6975 (unsigned long long);
constexpr unsigned long long operator "" _\u6052\u6cb3\u6c99 (unsigned long long);
constexpr unsigned long long operator "" _\u963f\u50e7\u7947 (unsigned long long);
constexpr unsigned long long operator "" _\u90a3\u7531\u4ed6 (unsigned long long);
constexpr unsigned long long operator "" _\u4e0d\u53ef\u601d\u8b70 (unsigned long long);
constexpr unsigned long long operator "" _\u7121\u91cf\u5927\u6570 (unsigned long long);
487デフォルトの名無しさん (ワッチョイ 57bd-Tlrf)
2018/09/16(日) 15:01:20.18ID:AX2qPX270
mjk
488デフォルトの名無しさん (ワッチョイ 37c3-A6n1)
2018/09/16(日) 15:13:55.06ID:NJnAChO90
まあ64bit整数は垓でオーバーフローしちゃうけどな
489デフォルトの名無しさん (ワッチョイ ff5b-ck2F)
2018/09/16(日) 15:19:22.27ID:un+A0LAL0
アンダーバー必須?
490デフォルトの名無しさん (ワッチョイ 57eb-x5wZ)
2018/09/16(日) 15:23:34.17ID:PDH9z/EW0
予約語なのでユーザー定義リテラルをユーザー定義するときはないとダメ
491デフォルトの名無しさん (オイコラミネオ MM5b-UhQ6)
2018/09/16(日) 20:49:23.78ID:ecoXNuEUM
>>482
あー、既視感はこれか…
492デフォルトの名無しさん (ワッチョイ 17a5-l/4L)
2018/09/16(日) 21:37:31.50ID:Lm7yQOTf0
全然関係ない話だが
めんどくさいC,C++を習得すると
他言語学習が簡単に進む
493デフォルトの名無しさん (ブーイモ MMbb-ahc+)
2018/09/16(日) 21:46:28.57ID:h2MQFGAYM
>>492
つ VLIW
494デフォルトの名無しさん (ワッチョイ 9f34-zxIj)
2018/09/16(日) 23:31:10.84ID:V0g35lEl0
他言語すべてがザコに見える
特にJAVA
495デフォルトの名無しさん (ブーイモ MMbb-ahc+)
2018/09/17(月) 00:00:35.54ID:x38HLuISM
多言語使いは問題解決能力が無いのに偉そう
特にJava
496デフォルトの名無しさん (ワッチョイ 17b3-Jnas)
2018/09/17(月) 07:23:44.67ID:EVO8AkN40
ところで、C++ってどんな開発に使ってるの?
Linuxのアプリ以外で。
497デフォルトの名無しさん (ワッチョイ 5704-G9Ec)
2018/09/17(月) 07:48:33.15ID:oxQatDsR0
https://github.com/satori16/PulseGeneratorForWindows
こんな感じの物が作れるようになった。win32apiだ。
コアはそれなりにできたが、UI作ろうとしたらバグで死亡ちゅう。テストは良いけど過信しないで。
VBとかC#のビジュアル開発がどれだけ楽か身に染みてきた。

ところで、[0,1]の引数のみで使える面白関数しらないかい?
logとかは線形な気がするのでもっとおかしな奴ないかい?
498デフォルトの名無しさん (アウアウカー Saeb-NYTI)
2018/09/17(月) 09:36:25.88ID:dZ3SMulNa
edcb
499デフォルトの名無しさん (ワッチョイ 77de-dTjR)
2018/09/17(月) 13:09:26.75ID:9OAi7Hbk0
>>496
アルゴリズムベンチマーク。
リークしててもそこまで問題にならんし、速度が実際どれくらい出るもんか調べるには良い。
まあcでも良さげな使い方ばっかだけど、namespaceとか多少ね。
500デフォルトの名無しさん (ワッチョイ 97d4-+ow7)
2018/09/17(月) 14:24:16.64ID:zCVYDMXL0
>>496
速度が求められるアプリはC++でしょ
大規模データでシミュレーションとかJavaでは遅くて無理
501デフォルトの名無しさん (オッペケ Sr8b-+tGE)
2018/09/17(月) 14:39:27.45ID:r6sTx27/r
リークしてても?


リークしてても……?
502デフォルトの名無しさん (ワッチョイ 97d4-+ow7)
2018/09/17(月) 14:44:25.11ID:zCVYDMXL0
>>501
そうだなw
盛大にリークしてたら速度にめちゃ影響するわな
503はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-okpm)
2018/09/17(月) 15:02:34.85ID:O6rb8eh90
ものすごい潤沢にメモリがあって処理が終わるまでに使い切ることがないという確信があれば
メモリを解放する処理を入れずに速度を優先することは無いわけではないと思うが、
それが妥当かどうかいちいち検討するコストをかけるくらいならちゃんと解放しておいた方がよろしい。
504デフォルトの名無しさん (ワッチョイ 9fbd-Tlrf)
2018/09/17(月) 15:32:46.89ID:t936AOdi0
なんで速度を要する処理の途中でメモリを獲得するん?
なんで速度を要する処理の途中でメモリを獲得するん? 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b)
505デフォルトの名無しさん (ワッチョイ 9f75-okpm)
2018/09/17(月) 16:08:31.17ID:0/ju7MLa0
>>503
「ものすごい潤沢」では意味がない
処理が終わるまでに最悪何バイト使う可能性があり、
実装されているメモリは何バイトなのか、
需要と供給の具体的な比較あるのみ
506デフォルトの名無しさん (ワッチョイ 7f33-dTjR)
2018/09/17(月) 16:22:22.61ID:kSBsQrFK0
サーバープログラムみたいなもんだったら
リークしてたらどこでシステム停止するかわからんし大問題に繋がるだろうが、
てきとうなベンチマーク検証ならリークしようと最悪落ちようとそこまで支障をきたすわけじゃ無いってことだよ。

てか実際問題そのくらい実験的な意味合いの強いものじゃ無いとc++は苦しい気がするんだが。
507デフォルトの名無しさん (ワッチョイ 17b3-Jnas)
2018/09/17(月) 17:13:04.47ID:EVO8AkN40
C++の生産効率、バク埋め込み率、デバックのしにくさを考えると、積極的にC++を採用すべき分野って限られてくるよね。
組み込みやドライバではCが主流だし、WindowsやスマホではほぼC++は使われないし、Webの世界ではスクリプト言語だし、計算分野ではPythonやMatlabやMathmaticaだし。
仕事でC++使う機会は最近めっきり減ったわ。
508デフォルトの名無しさん (ワッチョイ 37c3-A6n1)
2018/09/17(月) 17:37:23.45ID:3kd9gc670
スマポとSTL使ってればリークなんかそうそう起こらんだろ
古臭いC++のイメージで語らないほうが良いよ爺さま方
509デフォルトの名無しさん (ワッチョイ 9f12-9b2l)
2018/09/17(月) 17:41:18.57ID:qtGPC3c90
スマポと言っても一秒間に数千回数万回の確保とかしてたら流石に遅くなるんじゃね?
510デフォルトの名無しさん (ワッチョイ 37c3-A6n1)
2018/09/17(月) 17:53:56.99ID:3kd9gc670
unique_ptrはナマポ使ってるのと一緒よ
511デフォルトの名無しさん (ワッチョイ 9fb3-0AE+)
2018/09/17(月) 17:55:45.86ID:SBpxj18K0
>>509
そんな機会はめったにないし、万が一あったらそこだけナマポとかで対処できるのはC++だけ
512デフォルトの名無しさん (オッペケ Sr8b-+tGE)
2018/09/17(月) 18:07:37.03ID:r6sTx27/r
>>502
いや、どんな場合でもリークしないように書けよと思って引っかかった
513デフォルトの名無しさん (ワッチョイ 9fd2-c2qS)
2018/09/17(月) 18:19:02.17ID:GutZ/6rY0
まあ趣味でない限り実用度が学習コストに見合わない感じはあるな
他に比べて
514デフォルトの名無しさん (ワッチョイ 97d4-+ow7)
2018/09/17(月) 18:20:26.64ID:zCVYDMXL0
オブジェクトを1個1個newする?
でかいデータだと大量にnewするオブジェクトだったら配列で1MBとかまとめてnewしないと遅いでしょ
515デフォルトの名無しさん (ワッチョイ d707-A9Cx)
2018/09/17(月) 18:42:32.24ID:CEV1V8yd0
メモリ解放にも時間かかるけどそこは計測から外します
都合のいい計測をします
516デフォルトの名無しさん (ブーイモ MM9b-nprU)
2018/09/17(月) 19:57:02.88ID:HG71i9DfM
>>508
それで安全になるかもしれないけど
コピーしまくり、newしまくりだったりとかよくあること
C++使う理由をよく考えたほうがいいと思うわ
517はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-okpm)
2018/09/17(月) 20:37:10.33ID:O6rb8eh90
>>516
ムーブの恩恵があるやで。
518デフォルトの名無しさん (ワッチョイ 9fb3-eaiD)
2018/09/17(月) 20:53:22.59ID:tpLtH4DE0
現代の C++ は処理系もライブラリもそれなりに賢いから、任せきりにしてもそれなりの効率になる。
ほとんど任せきりにできる高級言語としての面と、必要なとこは手動で書ける低級言語としての面を合わせ持つのが C++ の強み。
519デフォルトの名無しさん (ワッチョイ 57b3-okpm)
2018/09/17(月) 21:33:50.41ID:YgnM5prK0
>>512
お前は最低でも数万行くらいの規模のコード書いてから偉そうなことを言え
520デフォルトの名無しさん (ワッチョイ ff81-okpm)
2018/09/17(月) 21:40:52.08ID:5VGXhp/T0
最近はC++もスマートポインタが主流で
メモリリークもツールでチェックすると聞いたが

現実はどんなもんなん
521デフォルトの名無しさん (ワッチョイ 5704-G9Ec)
2018/09/17(月) 22:10:33.50ID:oxQatDsR0
VCには簡易メモリっチェックをするヘッダーがある。もちろん環境依存。
スマポでリークするのはかなり筋が悪い。
522デフォルトの名無しさん (ワッチョイ d707-A9Cx)
2018/09/17(月) 22:19:24.01ID:CEV1V8yd0
>>519
それはリークの言い訳にはならんで
523デフォルトの名無しさん (ワッチョイ 9fb3-0AE+)
2018/09/17(月) 22:33:55.31ID:SBpxj18K0
>>519
まあどんな場合でもは言いすぎだと思うが少なくとも正常系ではリークなしを目指すのは当たり前
524デフォルトの名無しさん (ワッチョイ 5704-G9Ec)
2018/09/17(月) 22:36:30.00ID:oxQatDsR0
スマポでリークするケースというと、昔のインターフェースでスマポそのものが渡せないとかかなぁ。。。
希望としてはリファクタリングしてほしいところだけどね。
525デフォルトの名無しさん (ワッチョイ 57b3-okpm)
2018/09/17(月) 23:14:55.87ID:YgnM5prK0
>>522
誰が「規模が大きければリークしていい」と言った?
言ってないことを言ったかのように相手の主張を捻じ曲げるな
>>523
>アルゴリズムベンチマーク。
>リークしててもそこまで問題にならんし
526デフォルトの名無しさん (ワッチョイ b78a-ahc+)
2018/09/17(月) 23:17:40.96ID:2pCWAXV50
リークしたらヒープエリア毎Destroyすれば良いじゃない
@マリー・アンチョワネット
527デフォルトの名無しさん (ワッチョイ 57b3-okpm)
2018/09/17(月) 23:28:41.66ID:YgnM5prK0
あぁすまん、正常系について誤解してた
まぁ個人で使うレベルなんじゃないかね、本人が問題にならん言うてるし
528デフォルトの名無しさん (ワッチョイ 9fbd-Tlrf)
2018/09/18(火) 00:08:27.62ID:z2qcvEfV0
ウィンドーズにはApplication Verifierがあります!!11!1!

>>521
malloc()とfree()が対応しているかはばっちりワカルのでかなり役に立つが
Win32APIで直接メモリ確保したりC++でメモリアロケータを0から自作した場合はどうなるかわからん…

perfmonで指定プロセスのprivate bytesの推移を取得しつつ長時間動かして直接消費状況を確認するというのがある意味最終手段だが
リークが無い(はずの)プログラムでもなかなか安定しないという印象
多分ユーザーコードからRAIIを排除しても拾ってきたライブラリがRAIIするとかそんな感じ!
529 ◆QZaw55cn4c (ワッチョイ 9f60-P+8y)
2018/09/18(火) 00:14:49.89ID:Iw2LHuqq0
>>528
グローバル new 演算子
グローバル delete 演算子
を malloc()/free() を使って定義して、かつ、未解放・二重解放を検出するようにポインタを線形リストに格納してチェックする、ということなら、簡単にできます
win32api でも、たとえば heapalloc() をラップすればいいかと
デバッグ初期の単純なミスならこれで大方弾けます
530デフォルトの名無しさん (ワッチョイ 5704-G9Ec)
2018/09/18(火) 00:18:57.80ID:k3MAuD5K0
>>528
MS製だからWIN32位は拾ってくれると思ってたけど、なんだってー。Orz
俺は末端のユーザだからアロケータ書いたりしないのよね。
特に自作したらメンテとか自分でやんなきゃいけない負債になるのでやりたくないなぁ。
531デフォルトの名無しさん (ワッチョイ 57b3-AfNj)
2018/09/18(火) 01:01:35.82ID:uOah9zOu0
>>530
application verifierはwin32apiをhookしてるよ。
532デフォルトの名無しさん (ワッチョイ 9fb3-okpm)
2018/09/18(火) 01:07:33.27ID:7OxZ5HAL0
>>517
コンテナ形式のデータばかりと思うなよ
533デフォルトの名無しさん (オイコラミネオ MM6b-qteA)
2018/09/18(火) 01:31:03.51ID:n7K73R0GM
hogeはdouble型で
int temp = int(hoge);
if (temp > 0)
return temp;
else
return 0;

このような処理をしたいのですが、何か良さげな内部関数とかないですかね
534はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-okpm)
2018/09/18(火) 04:24:56.90ID:CgLDhfQ00
>>533
C++17 の std::clamp みたいなことがしたいのかな
535デフォルトの名無しさん (ワッチョイ b78a-ahc+)
2018/09/18(火) 04:58:47.12ID:1zYpCWJ70
>>529
ランタイムのソース読んだ事無いの?
536デフォルトの名無しさん (ワッチョイ 7782-Yq0l)
2018/09/18(火) 05:16:37.52ID:bwjvKD0M0
>>533
std::max(0, int(hoge))とか
537デフォルトの名無しさん (ワッチョイ 9f23-x7Ox)
2018/09/18(火) 06:06:39.75ID:mbB60zCK0
>>533
_mm_max_pd とかその辺
538デフォルトの名無しさん (ワッチョイ d707-A9Cx)
2018/09/18(火) 06:32:00.57ID:yg1A1NBg0
>>525
それはリークの言い訳にはならんで
539デフォルトの名無しさん (バットンキン MM3b-Jnas)
2018/09/18(火) 06:35:34.10ID:BuheiE4nM
アルゴリズムベンチマークなんて長期間稼働するものでもないし、プロセス終わればリークも終わる。
540デフォルトの名無しさん (ワッチョイ 5793-mIvp)
2018/09/18(火) 06:55:51.70ID:1W/tmI+p0
>>533 の言う「内部関数」ってのは、
CPUのマシン語命令を直接利用するビルトイン関数みたいな感じかな。
541デフォルトの名無しさん (ワッチョイ 77d7-okpm)
2018/09/18(火) 09:38:53.59ID:GYwTywmv0
言い訳にならんよな
数万行って具体的な数値を出してきたのは奴だし
542デフォルトの名無しさん (ワッチョイ 9f12-9b2l)
2018/09/18(火) 09:39:49.43ID:Zf2s67R20
勝手に察すると、単純な話だと思う
彼の把握では、おそらくは次のようになっているハズだ

内部関数=組み込み関数(あらかじめ用意されている標準の関数)
外部関数=自作関数、ユーザ定義関数

真意を勝手に忖度すると、「自作関数を作らずにそのまま使えるような便利な関数は既に存在してはいないだろうか」という質問に見える
543デフォルトの名無しさん (ワッチョイ 77d7-okpm)
2018/09/18(火) 09:40:00.14ID:GYwTywmv0
そもそも行数でどうたらって、いつの時代劇だよ
544デフォルトの名無しさん (ワッチョイ 77d7-okpm)
2018/09/18(火) 09:40:52.00ID:GYwTywmv0
>>542
俺もそう思った
だとすると536でFA
545デフォルトの名無しさん (ワッチョイ 5704-G9Ec)
2018/09/18(火) 09:49:04.25ID:k3MAuD5K0
>>531
Yes、OK!
546デフォルトの名無しさん (ワッチョイ 5704-G9Ec)
2018/09/18(火) 09:55:26.47ID:k3MAuD5K0
int ookii=...
int tiisai=...
int V=...

int x = std::max(tiisai,std::min(ookii,V));

ってやると、[min,max]区間内のVが取れたような気がする。
今度C++17で入るクランプがそれ。
547デフォルトの名無しさん (ワッチョイ 57b3-okpm)
2018/09/18(火) 11:57:01.55ID:9q1AFd5B0
>>543
>>512
>どんな場合でもリークしないように書けよ
リークしないようなコードを書くのは当たり前だが、どんなに注意してても起きるときは起きる
仮にこういう主張してるやつが居てもお前は俺と同じことを思わんのか?

「どんな場合でもバグらないように書けよ」
548デフォルトの名無しさん (ワッチョイ 77d7-okpm)
2018/09/18(火) 12:26:58.02ID:GYwTywmv0
車の事故と同じ
起きるときは起きるなんて言い訳は通用しない
まず起こすな
やっちまったら責任とれ
そういう緊張感がいるってことだ
549533 (オイコラミネオ MM4f-qteA)
2018/09/18(火) 12:44:39.79ID:TXDNyaJKM
ありがとうございます
max関数使わせていただきます

もう一つ別の質問なのですが、
2つのベクターの要素(1000個程度)の比較で、同じi番目の要素の内容差が10以上の要素番号(イテレータ?)を調べたいです
この操作は何回も繰り返すので出来るだけ高速化したいのですがなにか良い方法ありませんかね?
ベクターの要素はint型で内容は大体1000以下の整数です
vec1[100] = 100とvec2[100] = 300
vec1[102] = 100とvec2[122] = 300
なら100, 102のイテレータ(この後そのまま新しくforに投げるので)
550デフォルトの名無しさん (アークセー Sx8b-Jnas)
2018/09/18(火) 13:14:20.96ID:l12yg0eyx
>>549
思わずC# LINQかPython使いたくなる内容だな。
やりたいことは結局のところ行列演算なのでEigen使うと何か方法ありそうだけど、高速化に寄与するかは不明。
551デフォルトの名無しさん (ブーイモ MM9b-ck2F)
2018/09/18(火) 14:20:03.27ID:Gab8FMClM
>>549
1000個を例えば4コアで250個ずつ並列化してさらにforの中でn個ずつ比較するとかかな…
intelは
_mm_cmpgt_epi16
armは
vcgt_s16
とかあるみたいだけど
552デフォルトの名無しさん (ワントンキン MM7f-ahc+)
2018/09/18(火) 15:33:22.77ID:UQgXz1AkM
普通MPIじゃね?
553はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-okpm)
2018/09/18(火) 16:41:03.37ID:CgLDhfQ00
>>549
新しく for に投げるっていうのがよくわからんのだが、
やりたいことをコードで (C++17 で導入された構造化束縛を使って) 表すと

for (const int& [element1, element2]: extract_if_big_difference(vec1, vec2)) { ほにゃらら }

みたいに書ける関数 extract_if_big_difference が定義できるといいなぁという感じ?

こうだとしたら、並列化するのは難しい気がするぞ。
554デフォルトの名無しさん (アークセー Sx8b-Jnas)
2018/09/18(火) 16:42:40.86ID:l12yg0eyx
OpenCLでベクトル演算すれば速いんじゃね?
555デフォルトの名無しさん (ワッチョイ 9f12-9b2l)
2018/09/18(火) 16:58:21.90ID:Zf2s67R20
こんなのだと速そうな気がする

vec3 = vec1 - vec2;
filter(vec3, 10, index);

void filter(const vector vec3, const int limit, int index[]){
int j=0;
for(int i=0; i<vec3.size(); i++){
if(vec3[i] >= limit){
index[j++] = i;
}else if(vec3[i] <= -limit){
index[j++] = i;
}
}
index[j] = -1;
return;
}
556デフォルトの名無しさん (スップ Sd3f-x7Ox)
2018/09/18(火) 17:05:52.46ID:ZX8OqlLQd
データが多いならざっくり N (2〜8)分割して OpenMP とかで並列処理するのがいいよ
数百ミリ秒以上かかるなら他のコアを遊ばせておくのはもったいない

各分割の結果は独立して保持して後で統合する
557デフォルトの名無しさん (ワッチョイ 77d7-okpm)
2018/09/18(火) 17:06:36.21ID:GYwTywmv0
>>549
vectorじゃなくvalarrayだが。。。
int main()
{
int const n = 10; //おまえさんのリクは 1000 だったな

//このへん前置きは置いといて
mt19937 eng;
random_device dev;
eng.seed(dev());
uniform_int_distribution<int> dis(-20, 20);
auto rnd = [&eng, &dis]() { return dis(eng); };
auto print = [](auto& ct) { for(auto& x : ct) cout << x << '\t'; cout << endl; };

valarray<int> vec1(n);
generate(begin(vec1), end(vec1), rnd);
print(vec1);

valarray<int> vec2(n);
generate(begin(vec2), end(vec2), rnd);
print(vec2);

cout << endl;

//ここが本題
valarray<bool> mask = abs(vec1 - vec2) >= 10;
vec1[!mask] = 0;
vec2[!mask] = 0;
print(vec1);
print(vec2);
}
差が10以上のところを探して何か処理ならこっちのが楽だべ
558デフォルトの名無しさん (アウアウウー Sa1b-EMso)
2018/09/18(火) 18:11:51.89ID:H2d9f0sTa
>>533の質問のレベルを見ていると、
>>549も「実装完了しないうちから最適化必要と思ってたけど実はそんなこと必要なかった」なんて落ちにはならないかなとふと思った。
559デフォルトの名無しさん (オッペケ Sr8b-+tGE)
2018/09/18(火) 18:32:34.48ID:RR2nvfojr
boost の multi_array ってさ、添字の入れ替えってできる?

例えば要素 a[i][j][k] を a[k][i][j] に、全ての i, j, k について入れ替える操作

自分で実装しなきゃ駄目?
560デフォルトの名無しさん (ワッチョイ 9780-9b2l)
2018/09/18(火) 23:03:47.37ID:oE0uJFU60
boostみたいなインチキくさいライブラリは使ったことないが
オレだったらイチイチそんなムダな入れ替えが本当に必要なのかと
まずそこを疑う
561デフォルトの名無しさん (ワッチョイ d707-A9Cx)
2018/09/18(火) 23:14:12.21ID:yg1A1NBg0
行列でそんな演算あったような
562デフォルトの名無しさん (オッペケ Sr8b-+tGE)
2018/09/18(火) 23:30:40.91ID:GKhblNvIr
>>560
無駄の意味が分からない
テンソルの掛け算するときに行列積ライブラリ使うために足組み替えたりするだろ
563デフォルトの名無しさん (ワッチョイ ff5b-ck2F)
2018/09/18(火) 23:35:47.30ID:Re9liTgW0
できた!
template<typename T>
class MyMatrix3D : Matrix3D {
...
virtual T get(size_t i, size_t j, size_t k) {
return get(k, i, j);
}
...
};
564デフォルトの名無しさん (スッップ Sdbf-x7Ox)
2018/09/18(火) 23:43:07.71ID:G/V6WyhFd
stack overflow
565デフォルトの名無しさん (ワッチョイ ff5b-DF3W)
2018/09/19(水) 00:26:11.52ID:McwJY1yY0
わ、わざとだから!
566デフォルトの名無しさん (ワッチョイ 9fbd-Tlrf)
2018/09/19(水) 00:33:47.86ID:dEko0zDA0
boostとか漏れも使ったことないわ(゚∀゚)人(゚∀゚)ナカーマ
567デフォルトの名無しさん (ワッチョイ 37c3-A6n1)
2018/09/19(水) 04:24:37.15ID:2wyJ7zTj0
boostはbjamが糞すぎて入れるのめんどくさくなっちゃった
568533,549 (オイコラミネオ MMc9-TpIz)
2018/09/20(木) 03:07:15.61ID:fZtZJGAwM
遅くなってすみません
処理が重くなったのは別の部分のせいでした…
Python的考えで5桁くらいインデントしてたので勝手に遅いと思ってましたが普通に高速でした
お騒がせしました
569デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/20(木) 13:40:29.54ID:CPfoYuVJ0
たかだか1000回のループでそんなに速度気になるんか(というか並列化とかベクトル化とか大げさやろ)、
と思ってたけどやっぱりか
>>558の一人勝ちやな
570デフォルトの名無しさん (ワッチョイ c980-yqSl)
2018/09/20(木) 21:36:12.15ID:zLqp8E230
低学歴知恵遅れなら
1回ループするのに1分かかるようなコードを書きかねない
571デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/21(金) 00:16:00.80ID:4kzBlK6i0
再帰使ってみたが1分かからんかった
ゆ、許された…
https://ideone.com/kHFd61
572デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/21(金) 00:27:26.94ID:4kzBlK6i0
1分の壁を破るには、何度も何度もそれとわからずに同じ計算をするようなアルゴリズムにしないとだめだなあ…
573デフォルトの名無しさん (ワッチョイ 01ea-nsub)
2018/09/21(金) 03:21:51.90ID:xr3UMDDx0
boostをVS2017に入れられない
574デフォルトの名無しさん (JP 0Hd6-Y82R)
2018/09/21(金) 13:11:38.33ID:JwHgudh+H
関数A,B、C、D、EがあってAの中でBを呼んで、Bの中でCを……
って構造があって、例えばEでエラーが出るとします。大本のAにそれを伝えてエラーにしたいんですけどどうしたらいいでしょう
BCDEの戻り値全部boolにしてfalseを返すくらいしか思いつかないです
575デフォルトの名無しさん (ワッチョイ cd8a-TJ0W)
2018/09/21(金) 13:20:30.45ID:EQpNFWj/0
>>574
戻り値でもいいし、引数に参照やポインタを渡してもいいし
例外でもいい
576はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/21(金) 13:40:44.63ID:FzfC+eZt0
書く分には例外を投げるのが楽じゃないの。
関数 B, C, D ではそのエラーについて忘れておくことが出来るので。
577デフォルトの名無しさん (ワッチョイ 4234-CvAF)
2018/09/21(金) 13:41:36.51ID:IFsUWHdO0
>>574
例外を投げてキャッチさせる
578デフォルトの名無しさん (ワッチョイ c212-yqSl)
2018/09/21(金) 14:25:47.49ID:wDeX8uPc0
例外はGOTOに迫りつつある
579デフォルトの名無しさん (ワッチョイ 6202-coYL)
2018/09/21(金) 14:34:59.25ID:lJw3kOTN0
>>574
典型的な例外の出番だ
void E() { throw std::runtime_error("error at E()"); }
void D() { E(); }
void C() { D(); }
void B() { C(); }
void A() { try { B(); } catch(std::exception& err) { std::cerr << err.what(); } }
580デフォルトの名無しさん (JP 0Hd6-Y82R)
2018/09/21(金) 14:47:07.50ID:JwHgudh+H
皆様ありがとうございました。
別関数からのまでcatchできるとは知りませんでした。>>574を参考にしつつ書いてみようかと思います。
ファイル読み込みのときはあんま例外使わないなんて記述見たんですけど別に書いても大丈夫ですよね
581デフォルトの名無しさん (オッペケ Sr71-i7GN)
2018/09/21(金) 16:31:17.28ID:vcIlO6Gbr
スッゲェ素人なんだけどよ、他人が作ったクラスに自作関数を付け加えたいときってどうすんの?
(例えば、行列クラスに特異値分解する関数を付け加える等)

継承ってやつを勉強して使うだけ?

C++ の言語仕様と常識を勉強したいという意味でもあるので、「その他人のコードを直接編集せよ」ってのはナシで頼む
582デフォルトの名無しさん (ワッチョイ 4223-tHrl)
2018/09/21(金) 16:50:36.52ID:K+jLUYtn0
>>581
機能を追加するために継承使うのは設計的によくないよ
583デフォルトの名無しさん (オッペケ Sr71-i7GN)
2018/09/21(金) 17:01:37.16ID:pko5dpD3r
>>582
どうするべき?
584デフォルトの名無しさん (アークセー Sx71-vwf2)
2018/09/21(金) 17:06:42.97ID:OnuHA6YMx
>>581
クラスの親子関係がはっきりしてるなら継承。
機能が似てるだけなら移譲。
どちらか迷ったら移譲。
585デフォルトの名無しさん (ワッチョイ 4223-tHrl)
2018/09/21(金) 17:15:33.49ID:K+jLUYtn0
>>583
void svd(Matrix &pMtx);
みたいな関数ではダメなの?
586デフォルトの名無しさん (オッペケ Sr71-i7GN)
2018/09/21(金) 17:45:50.45ID:nytN4gJ8r
>>584
移譲という用語は初めて知ったので、勉強してみます


>>585
ダメ、ということはないと思いますしこれまではそうしてきました
しかし、行列の特異値分解は配列ではなく行列に適用するべきだという意識が強くなりました
BLAS 等の多くてややこしい引数も、「行列を渡す」という形で書くことでもう少し自分にとって読みやすくなるのではないかとも思いました
クラスだとか他人のコードの拡張といったことを勉強してみたくなったということでもあります
587はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/21(金) 18:21:14.81ID:FzfC+eZt0
>>586
なんでもかんでもメンバ関数として持たせるのはダサいというのが近年の風潮。
設計方針にもよるんだけど、機能をちょっと増やすたびに新しい型を作るのも馬鹿馬鹿しいだろう。
単なる関数として作ればそれでよいはずのことにクラスの依存関係まで出てくるの、ホントに良くない。
588デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 18:35:46.91ID:nikK7GUa0
>>584
>どちらか迷ったら移譲
やめろ、割とマジで
本来継承が好ましいものに委譲を使うと後々になって必ず破綻する
お前D&E読んでないのか?

>>587
>ダサいというのが近年の風潮
そういう言い方・考え方もやめろ
かつてC++の継承は汚いからテンプレートで代用しろ、みたいな理屈があったが全くの空回りに終わった
その間初心者は嘘の情報に騙されたりオブジェクト指向を誤解したりして、結果C++から離れていった

>単なる関数として作ればそれでよいはず
これは正しい
589デフォルトの名無しさん (ワッチョイ 19b3-vwf2)
2018/09/21(金) 18:37:09.46ID:MaoTi4980
>>587
完全に同意。
クラスの数が星の数ほどあるプロジェクトで、継承してメソッド一個追加してるだけとかの経年劣化したソース見たら目眩がするわ。
オブジェクト指向の初期啓蒙として「既存のクラスは変更するな」「機能追加は継承使え」って言ってた人を恨むわ。
590デフォルトの名無しさん (ワッチョイ 19b3-vwf2)
2018/09/21(金) 18:40:06.68ID:MaoTi4980
>>588
もちろん「IS-A」が成り立ってる継承が適してるものは継承使うべき。
むしろ継承を使うべきでないとこに継承使ってるほうが後々破綻するので悩んだら委譲。
591デフォルトの名無しさん (オッペケ Sr71-i7GN)
2018/09/21(金) 18:53:16.27ID:nVnA1Sbpr
>>588-590
では特異値分解、スライシング、掛け算、足し算、エトセトラ……、という大規模な機能追加を既存のクラスに対して行ないたい場合はどのようにするべきでしょうか
592デフォルトの名無しさん (ワッチョイ 19b3-vwf2)
2018/09/21(金) 19:06:55.02ID:MaoTi4980
>>591
うーん、場合によるけど全てそのクラスに対する操作ならさすがに継承するかな。
後々のメンテ考えたら可能であれば継承元のクラス変更するけど。
593デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/21(金) 19:18:19.30ID:scCYqhjF0
他人が作ったクラスで勝手にいじれないんでしょ?
protectedやvirtualなメンバがあって、それを使って色々するなら当然継承すればいいけど
そうじゃない継承される前提で作られたクラスじゃないなら継承はオススメできんなあ
svd(m)をm.svd()って書きたいためだけに継承の山のようなトラップ抱え込むのは割に合わないと思うよ
どうせ親クラスのprivateはいじれないんだし
594デフォルトの名無しさん (ワッチョイ c104-Om/S)
2018/09/21(金) 19:20:28.05ID:wzHnJ4yt0
unified call syntax 甦れ。
595デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 19:24:14.64ID:nikK7GUa0
>>591
使ってるのはuBLASだっけ?調べてないのでわからんけど・・・・
継承を前提にしたクラス(デストラクタがvirtualであり、実際継承してみても使える)なら継承もアリっちゃアリだとは思う
(責任は負わんw あくまで勉強目的でやってみるのはいいと思う)

ただ、特異値分解は知らんのでわからんけど、一般に演算クラスの機能追加は
>>587の言う通り、単純にそのクラスを受け取るグローバル関数にする方がいい
特に
>掛け算、足し算
こんなのはまさにメンバ関数にしなくても、グローバルに演算子オーバーロードを定義すれば済む
(メンバに書いてもグローバルに書いても利用者側はA * Bって書ける
あとv1.dot(v2)よりdot(v1, v2)のがわかりやすいと思うけどね
596デフォルトの名無しさん (ワッチョイ 19b3-vwf2)
2018/09/21(金) 19:48:50.66ID:MaoTi4980
>>595
完全に同意。
597デフォルトの名無しさん (オッペケ Sr71-i7GN)
2018/09/21(金) 19:58:47.83ID:nVnA1Sbpr
>>592-596
なるほど。
普通に関数にするのが、必要十分さの面で、良さそうですね。

頭の中にあったのは、自分で作った関数群が全て○○というクラスに対して使用することを想定している、と明示したかったということです。
グローバル関数の用途を明らかにする方法として、メンバ関数化すれば良いのかな、と思いました。

メンバ関数にはしないということにした場合、上のことを実現するにはどうするべきでしょうか。
コメントやノートに書くくらいしか思い付きませんが、それで良いのかな
598デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/21(金) 20:09:39.68ID:scCYqhjF0
引数の型が○○やconst ○○&になるでしょ
それ以上のなにが欲しいの?
599デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 20:10:46.02ID:nikK7GUa0
そういえばBLASとは書いてたけどuBLASとは書いてなかったな
いずれにしても、その扱いたいクラスを受け取る関数だから見たらわかるっしょ
違う型を渡したらエラーになる
600デフォルトの名無しさん (ブーイモ MMb6-WirJ)
2018/09/21(金) 20:12:28.34ID:+2gqfJ3dM
>>597
どうでもいいけど最初と大分キャラ変わってるぞw
601デフォルトの名無しさん (オッペケ Sr71-i7GN)
2018/09/21(金) 20:17:41.28ID:nVnA1Sbpr
>>598-599
わかりました。
確かに型を見たら自明ですね。

結局は
> svd(m)をm.svd()って書きたいためだけ
だったのかも知れません。
なんせそういう書き方はいかにも「ぽい」ですから。

ありがとうございます。
602デフォルトの名無しさん (スプッッ Sdc2-m97R)
2018/09/21(金) 20:19:42.40ID:KRvbJL35d
>>601
横レスになるかもだけど多相的に関数の集合を規定したいなら[C++ traits]で検索すると幸せになれるよ
今回は不要だと思うけど後々欲しいなって思ったとき役に立つ
603はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/21(金) 20:43:37.20ID:FzfC+eZt0
>>588
いや、風潮っていうのは確かにあるよ。
かつて上手くいかなかったから今もダメとは限らない。
テンプレートの活用が失敗っていうのは言語そのものとしてのサポートが不充分だったというのがあって、
それは >>602 がいうようにトレイトの活用の知見が蓄積してきたことで風向きが変わってきてる。

今はクソみたいな SFINAE と type_traits で不格好になんとかしてるのも
C++20 でコンセプトが入ったら C++ のパラダイムがそっちに一気に傾くと思う。
Rust や Go の隆盛でプロトコル指向への理解が深まっているというのもある。
604デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 21:06:19.19ID:nikK7GUa0
・・・・・俺が何を批判したかわかってないな
「ダサい」とか「風潮」じゃなくて、何故それが好ましいか、好ましくないか、
質問者のケースに合った説明をしろっつってんの
なんで当時の「テンプレートで継承の代用」の例を出したかわからんか?
代用にはなり得ないんだよ原理的に
実行時のポリモーフィズムをテンプレートで実現できるのか?
ユーザーの入力やファイルの内容に従って実行時に作るオブジェクトを変え、かつ
それを1つの型でまとめられるのか??
type erasure(boost::any含む)とかswitchとかif使う、とかは無しでな

自分の頭でその方法が合っているか合っていないか考えずに
流行とかに流された結果が、↑で挙げたソレなんだよ
C++潰したいのかよ
605デフォルトの名無しさん (ワッチョイ 19b3-vwf2)
2018/09/21(金) 21:35:12.47ID:MaoTi4980
>>604
これも横からだが、C++はもう役割を終えて衰退機だと思う。
今から積極的にC++を採用する分野は限られていて、使えるor使おうと思うエンジニアの絶対数が減るってことは衰退と同義だと思う。
いろんな言語のエッセンスを学べるので悪い言語でないとは思うけど、誰かが言った通り習得のコストに見合ったメリットがない。
盛者必衰。
606はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/21(金) 21:55:31.46ID:FzfC+eZt0
>>604
> 何故それが好ましいか、好ましくないか、
> 質問者のケースに合った説明をしろっつってんの

それは >>587 の説明で足りないか?
風潮があって、その理由は不要な複雑さが出来るからだという説明で足りないか?
この説明は質問者のケースに合致してないか?

> 代用にはなり得ないんだよ原理的に

違う機能が違う能力を持つのは当たり前だろ? 説明するまでもなく。
どちらの機能を中心に活用した「設計」がよいのかっていう話じゃないか。
607デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 22:01:19.22ID:nikK7GUa0
>>606
ああすまん、確かに言葉尻に反応したところはあったな
でも「風潮」とか「ダサい」って蛇足だよな?w
ダサいって言いたかっただけやろ?

>違う機能が違う能力を持つのは当たり前だろ?
お前>>603
>かつて上手くいかなかったから今もダメとは限らない。
>テンプレートの活用が失敗っていうのは言語そのものとしてのサポートが不充分だったというのがあって、
テンプレートを盲信してるようだから説明したんだが。
継承をテンプレートで代用せよ、ってのは間違ってない、って言いたかったんだろ?

>C++20 でコンセプトが入ったら C++ のパラダイムがそっちに一気に傾くと思う。
とか言ってる辺りからも、オブジェクト指向は過去のものだから継承も過去のものなんだぜ、とか
抜かしたかったのがわかる
マルチパラダイムの意味わかってる?
608デフォルトの名無しさん (ワッチョイ c1eb-tHrl)
2018/09/21(金) 22:15:11.22ID:M9VunTBo0
継承をテンプレートで置き換えるって失敗したというよりもすでに当たり前になっただけでは
むしろそっちはそっちで発展してるし、動的でなくてもいいケースは確かに存在している
609デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 22:20:50.92ID:nikK7GUa0
>>608
静的に解決できるものならそうだろうな
そういうケースを否定はしてないが、当時はあちこちでそういう失敗例がドヤ顔で披露されてたんだぞ
禿も指摘してるようにJavaのせいだが
610はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/21(金) 22:46:33.24ID:FzfC+eZt0
>>607
> 継承をテンプレートで代用せよ、ってのは間違ってない、って言いたかったんだろ?

違うものは違う。 代用品ではない。

継承構造の代用品としてテンプレートを使えというのではなく、
テンプレートも前提のひとつとしたデザインにしろと言ってんの。

「なにもかもをメンバ関数にするな」というのは全て非メンバ関数にしろっていう意味じゃないだろ。
611デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 23:01:04.77ID:nikK7GUa0
>>610
>>603
>かつて上手くいかなかったから今もダメとは限らない。
>テンプレートの活用が失敗っていうのは言語そのものとしてのサポートが不充分だったというのがあって、
>それは >>602 がいうようにトレイトの活用の知見が蓄積してきたことで風向きが変わってきてる。
って言ってるよな
「かつて上手くいかなかった」って、
俺の「かつてC++の継承は汚いからテンプレートで代用しろ、みたいな理屈があったが全くの空回りに終わった」
のことだろ?言い逃れしてんじゃねーよ


ちなみに継承をテンプレートで代用、を挙げたのは、それに初心者が惑わされたからだ
ただのテクニックの紹介ではなく「C++の継承は汚い」みたいな暴言を伴ってな
お前が「ダサい」とか「風潮」とか、自分がドヤりたいがために選ぶ言葉と同じだよ

>「なにもかもをメンバ関数にするな」というのは全て非メンバ関数にしろっていう意味じゃないだろ。
質問者の「関数追加」の方法についてはお前の意見に賛同してるだろうが
612デフォルトの名無しさん (ワッチョイ f107-Yi59)
2018/09/21(金) 23:02:28.75ID:ZQgI79kj0
質問者を放置してドヤ顔で語るオタクたち
613デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/21(金) 23:10:39.91ID:nikK7GUa0
あ、ついでに言うと
>言語そのものとしてのサポートが不充分だった
ねーよ

C++98〜03でも十分メタプログラミング出来てたぞ(11から確かに幅は広がったが
STLしかりModern C++ Designの著者のLokiしかり
Boostだって当時からあったからな
614デフォルトの名無しさん (ワッチョイ 42b3-GHk6)
2018/09/21(金) 23:26:46.84ID:wfTNvghC0
>>605
C++に挫折でもしたの? w
ネイティブコード吐けるオブジェクト指向言語ってそんなに選択肢ないし
615デフォルトの名無しさん (ワッチョイ c104-Om/S)
2018/09/21(金) 23:30:11.36ID:wzHnJ4yt0
FixedC++であるRustに期待はしているが・・・。
616はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/21(金) 23:41:33.16ID:FzfC+eZt0
>>611
なんでその結論に納得できるのに前提に色々言ってんだ?

テンプレートについてはそっちが言い始めたことで、別の話題だろ?
代用という言葉の使い方がちょっとずれてるだけじゃないの。
そのまま置き換えれるかという意味では代用できないし、
継承でなんとかしてたデザインをテンプレートを活用したデザインに置き換えられる (こともある)
という意味では代用ともいえる。

言葉については、「ダサい」はともかく、「風潮」に何か問題あるか? それは全くわからんな。
デザインの風潮というものは間違いなくある。
617はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/22(土) 00:00:10.67ID:cynlNZMd0
>>613
無理無理。
今だってろくでもない回りくどい仕組みでどうにかこうにか
型の制約を表現できてるってだけだもの。
初心者にそれを元にデザインさせるのは無理。

型の制約についての知見とは別に C++ の言語機能が足りてない。
618デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/22(土) 00:04:20.29ID:0je8S2eS0
>テンプレートについてはそっちが言い始めたことで
ダサいとかイケてるとか風潮とかで設計を語るからだよ
お前の説明はだいぶ甘い、自分でよくわかってないものを押し付けてないか?
そういう傾向を指摘されたって気づいてるだろ?
自分のコーディングの経験が足りてないゆえに、はっきり断言できないから風潮とか出てくるんだろ?
さっさと謝ってりゃここまで言ってないんだがな

>デザインの風潮というものは間違いなくある。
そう思ってんのはお前らアマチュアだけだから。(特にお前の思ってるようなデザインについては)

>>617
何の話してんの?コンセプト?w
なんで初心者がまだ導入されてないコンセプト前提の設計しなきゃならないの?馬鹿なの?
コンセプト入ったら実行時のポリモーフィズムをテンプレートで出来るの????wwwwww
619デフォルトの名無しさん (ワッチョイ c1eb-tHrl)
2018/09/22(土) 00:11:49.56ID:vYximTvP0
最初はもてはやされたけど、みんな知ってる前提になったら特に触れられもしなくなった
風潮ってこいうのだろw
620デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/22(土) 00:12:42.81ID:0je8S2eS0
すまんちょっと熱くなりすぎた
論破されたことに気付かないアホ(あるいは謝ったら死ぬ病)相手にするとキリが無いわ・・・・
もうやめとく
621デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/22(土) 01:40:05.82ID:3xdfFsZb0
権限の委譲というと良いものを与えているイメージだが
UML用語の委譲はどうみても仕事の丸投げとかたらい回しな印象であるイメージ
な気がする
622572 (ワッチョイ 42bd-LgAV)
2018/09/22(土) 02:14:06.30ID:3xdfFsZb0
昨日のプログラムを改良したったwwwww
https://ideone.com/hkeEp0

データ数N=300のときCore i7-860 (2.8 GHz)で8秒かかる。idoneのやつでも5秒。
N=1000だと宇宙の終わりまでかかる予定。

これで漏れも低学歴知恵遅れに晴れて仲間入りDA☆NE!
623デフォルトの名無しさん (ワッチョイ c104-Om/S)
2018/09/22(土) 03:45:26.27ID:57qyxfm80
https://ideone.com/CYkJfe
高速化する話なのか低速化する話なのかは分からんけど、素直に書いたらこんな感じかなぁとか。
終わった話題かもしれんけど。

どうしても高速化したいんやったら、関数を並列実行できるようにして、
https://cpprefjp.github.io/reference/thread/thread/hardware_concurrency.html
上記の数で分割実行かなぁとか。
フューチャー投げるのはそんなに難しくないと思う。std::async使えば簡単だし。
624デフォルトの名無しさん (ワッチョイ c104-Om/S)
2018/09/22(土) 03:54:48.35ID:57qyxfm80
気が付いたら、absがテンプレート関数じゃなくなってた。
625デフォルトの名無しさん (アウアウカー Sae9-zZLn)
2018/09/22(土) 07:17:07.67ID:ieaomBGwa
constexprな関数はコンパイル時でも実行時でも使えるが、定数になる文脈とならない文脈で関数を使い分けしたい。そういう使い分けは可能だろうか?

例えばsqrt関数はconstexprになっていないが、
アルゴリズム的には自作関数でconstexpr対応可能

ただし速度的にはcmathのsqrtの方が何倍も早いのでconstexprでない文脈の時にはcmathのsqrtを呼び出したいのです。
626デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/22(土) 07:58:27.87ID:0je8S2eS0
is_constexprで検索したらそれっぽいアイデアは出てくるけど
627デフォルトの名無しさん (ワッチョイ 469f-onpN)
2018/09/22(土) 09:39:59.40ID:qCwQCuMG0
>>625
ビルド過程を見直せば?
バカみたいに何でもかんでもconstexprに頼る理由はない。
628はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/22(土) 12:24:16.36ID:cynlNZMd0
>>618
なんで実行時ポリモーフィズムの話なんか出てるんだ?
出来ないもんをやれなんて言ってないだろ。
関係ない要素をどんどん出してくるなよ。

何を言いたいんだ?
629デフォルトの名無しさん (ラクッペ MMe1-BR5k)
2018/09/22(土) 13:05:08.82ID:PHVB0Lj2M
templateで躓いてるんですけど皆どうやってテンプレートを勉強したんですか?
630デフォルトの名無しさん (ワッチョイ c17f-coYL)
2018/09/22(土) 13:06:49.63ID:sAfENX6G0
車輪の再発明
631デフォルトの名無しさん (アウアウカー Sae9-zZLn)
2018/09/22(土) 13:16:51.91ID:EBMrcrP1a
何を悩んでる?
632デフォルトの名無しさん (ラクッペ MMe1-BR5k)
2018/09/22(土) 13:22:32.93ID:PHVB0Lj2M
>>631
Boostのテンプレートを読んでるのですが、理解できない点です
633デフォルトの名無しさん (ワッチョイ 22f9-xOzC)
2018/09/22(土) 13:36:27.52ID:a9vdXzW90
>>632
まずはstlは一通り不自由なく使えるかな?
634デフォルトの名無しさん (ラクッペ MMe1-BR5k)
2018/09/22(土) 13:45:08.87ID:PHVB0Lj2M
>>633
はい、STLに関してはそれなりに使えます
635はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/22(土) 13:53:36.62ID:cynlNZMd0
>>632
Boost はかなり技巧的で無理やりなこともやるので、
ある程度 C++ をわかっている人でもまともに読めないこともある。

普通に入門書とかを読むところから始めるしかないんじゃね?
636デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/22(土) 15:05:35.09ID:JTph0UBg0
boost読んでテンプレート勉強しようとするのは、IOCCCでCを勉強しようとするのと同じくらい無謀
637デフォルトの名無しさん (ワッチョイ 2e98-coYL)
2018/09/22(土) 23:16:14.20ID:Img386zI0
test
638デフォルトの名無しさん (ワッチョイ b198-rhI1)
2018/09/22(土) 23:16:57.30ID:02eserMU0
アホ
639デフォルトの名無しさん (ワッチョイ c980-yqSl)
2018/09/23(日) 00:42:54.42ID:cRG95Xcq0
boostのインチキくさそうなソケット通信とか使ってるヤツいんの
普通にsocket通信の関数で書いたほうが可読性が高そうで困る
640デフォルトの名無しさん (ワッチョイ 6e5b-Nssn)
2018/09/23(日) 01:28:26.89ID:MC3A3QT40
SG4に標準化提案はされてるみたいね
641はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/23(日) 03:10:01.78ID:SNhvYMGK0
>>639
Boost のことはよう知らんけど、
Boost の他のライブラリと組み合わせやすいとか、
そういう利点はないの?
642デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/23(日) 09:37:53.48ID:LgC14Oo10
bool operator<(const T& a, const T& b)は定義されている前提で、
クラスTについてbool operator==(const T& a, const T& b)が定義されていたらそのoperator==()を使い、
定義されていなかったら
 bool operator==(const T& a, const T& b) { return (!operator(a, b) && !operator(b, a)); }
を勝手に補完するようなテンプレート(の特殊化?)ってどうやって書くの?
643デフォルトの名無しさん (ワッチョイ 62f3-coYL)
2018/09/23(日) 11:39:09.69ID:A6XCmyXs0
std::rel_ops空間に == から != を、< から <= > >= を合成するテンプレートならあるけど
644デフォルトの名無しさん (ワッチョイ 469f-onpN)
2018/09/23(日) 12:14:54.07ID:loi8GnJQ0
これとかに載ってなかったっけ?
https://www.amazon.co.jp/dp/4894714353/?tag=hatena_st1-22&;ascsubtag=d-7dzm
645デフォルトの名無しさん (ワッチョイ c1eb-tHrl)
2018/09/23(日) 14:13:03.08ID:oyuLVtOs0
detection idiomで検出してSFINAEで分岐させるだけでできそうだけど
646デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/23(日) 14:26:07.42ID:Dpz6ufMn0
barton nackman trickやな
operator ==が定義されているかどうかの分岐はSFINAEいるんでちょっと複雑になりそうだけど
private継承する基底を選ぶような形にできるはず
647デフォルトの名無しさん (ワッチョイ 19b3-wH+P)
2018/09/23(日) 16:41:12.46ID:d60j7qb90
そんなことができるざんすか。
めんどくさそうですな。
648デフォルトの名無しさん (ワッチョイ c1eb-tHrl)
2018/09/23(日) 16:42:46.60ID:oyuLVtOs0
if constexprつかえばSFINAEいらんな
普段使えない環境だから出てこなかった・・・
649デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/23(日) 17:06:46.21ID:LgC14Oo10
スフィ姉たまんねぇ

ていうか>>643見てnamespace rel_opsの定義見て考えたがSFINAE要らなくね?
コンパイラの挙動(関数名の解決規則?)として、
Tについてoperator==(const T& a, const T& b)そのものズバリが定義されていればそれが使われるし、
無ければその次以降にテンプレートを探しに行こうとするから、
そのときstd::rel_ops名前空間が導入されていれば勝手にテンプレートバージョンが使われる
というしくみっぽい?
650デフォルトの名無しさん (ラクッペ MMe1-BR5k)
2018/09/23(日) 17:18:52.49ID:oc2N8BDIM
>>632
バリバリのテンプレート使いいませんか?
テンプレート難し
651デフォルトの名無しさん (ワッチョイ c1eb-tHrl)
2018/09/23(日) 17:45:10.35ID:oyuLVtOs0
>>649
あーたしかに
試してみたらいけた
652デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/23(日) 17:58:10.59ID:Dpz6ufMn0
>>648
if constexprほとんど使ったことなかったけど便利だなー
確かに型で分岐する必要なかった
https://wandbox.org/permlink/8CGWlZ5i5JLl33Ws

>>649
その方法だと、>>642で言ってるような特殊な補完を他のクラスにも適用することにならん?
それでもいいならいいけど
653デフォルトの名無しさん (ワッチョイ c223-y24S)
2018/09/23(日) 19:13:07.53ID:3hdlUg1R0
>>650
わかんないなら質問すればいいじゃん
何がわからないから分からないと本とかのおススメもできないだろ
654デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/23(日) 21:04:04.43ID:LgC14Oo10
>>652
>その方法だと、>>642で言ってるような特殊な補完を他のクラスにも適用することにならん?
ならない。ならずに済ませられることができる
補完する演算子のテンプレートの導入範囲を名前空間で限定すればおk↓↓↓
https://ideone.com/p4FS43

21行目のOP_EQ_FOO_ENを定義してもしなくてもビルドが通り、Foo::operator==()の呼び出し回数を除き同じ結果になる。

ただし、operator==()についてはちょっぴり闇が深いことがわかった。
名前空間std::rel_opsにはoperator==()テンプレートが存在しない
上のサンプルではstd::rel_ops名前空間に無理矢理operator==()テンプレートを追加したが、
実際にやるときは独自の名前空間でoperator<()以外の全部(==、!=、>、<=、>=)を用意しておくことになるん
ジャマイカ
655デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/23(日) 21:30:04.73ID:Dpz6ufMn0
あーすまん、目的を誤解してた
クラスのoperator ==の実装を省きたいんじゃなくて使う側で補完できればいいのか
656デフォルトの名無しさん (アウアウウー Sa25-dz4b)
2018/09/24(月) 00:24:52.05ID:rSek34EXa
5年くらい前?にテンプレートプログラミングっぽい趣旨の本があったし、基本情報に何故かPrologと同じジャンルにテンプレートが言語として載ってる辺り論理型言語っぽい事ができるみたいだが、基本C++の1機能でしか無いから、知ってる人は少ないんじゃ無い?

俺も知らない。
657デフォルトの名無しさん (ワッチョイ 2e80-tQZR)
2018/09/24(月) 00:56:28.11ID:cIWp1XlU0
C++テンプレートテクニック 第2版、
επιστημη(えぴすてーめー)・高橋 晶、2014

C++ 標準化委員のεπιστημη の本だろ。

ドワンゴ江添亮も、需要があれば、こういう本を書きたいって言ってたけど
658デフォルトの名無しさん (アウアウウー Sa25-dz4b)
2018/09/24(月) 01:06:54.52ID:rSek34EXa
それそれ。
出来るっぽいってのは知ってても、実際できてる奴少ないと思われ。
659デフォルトの名無しさん (ワッチョイ c980-yqSl)
2018/09/24(月) 01:14:19.28ID:Kxio7RVg0
テンプレート使うのに
いちいちそんな悩むもんなんか

なにかを参考にしたいようだが
たとえばtraits乱用してるようなのは読む必要もないし
逆にマネする必要がないわ
660デフォルトの名無しさん (アウアウウー Sa25-dz4b)
2018/09/24(月) 01:21:07.01ID:rSek34EXa
俺も気にした事ないけど、気になる奴は気になるんだろう。

俺の場合は整数型をどうやって文字列型にしてるんだ?ってのが疑問でむしろアセンブラに走って頭捻って理解した。

まあ人間そんなもん。
661デフォルトの名無しさん (ワッチョイ c1eb-tHrl)
2018/09/24(月) 01:37:53.34ID:orHhPIQU0
テンプレートはC++の必須教養だと思ってるけど、別になくても困らないしな・・・
662デフォルトの名無しさん (ワッチョイ 2d8a-9DVt)
2018/09/24(月) 01:47:51.69ID:sBjtzBeV0
>>661
つ vc++ 1.x
こいつのテンプレートは泣ける
663デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/24(月) 01:54:17.59ID:XuY/8j5Q0
>>656->>661
同感

はちみつと言い争ったときに
>>デザインの風潮というものは間違いなくある。
>そう思ってんのはお前らアマチュアだけだから。(特にお前の思ってるようなデザインについては)
とか書いたけど
実践ではなく仕様メインで覚えてる人(趣味でC++の知識を集めるのがメインの人であり、アマチュア)は
「これからの時代はテンプレート使った総称的プログラミングが主流」
みたいなパラダイムの変化を訴えてるけど、それはっきり言って素人が見れるコードでだけだから・・・
(C++標準ライブラリやBoost等)
テンプレート使ってとことん汎用性を高めたライブラリなんか、普通のソフト開発の現場では使われんわ
あまりにも時間がかかりすぎる
そういうごくごく一部の偏ったソースしか読んだことないから誤解するんだろう
で、その誤解した趣味グラマのネット上の言説やライターが書いた本を読んで、
初心者がC++に挫折して去っていくという・・・・・
C++なんか最初はベターCでいいんだよはっきり言って
あと最近ネット見てて(C++の)オブジェクト指向とかC時代の古いノウハウの解説が少ないのは、
単にとっくに出尽くしたからだからな、最近始めたやつは誤解したらだめよ
664デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/24(月) 02:00:05.34ID:XuY/8j5Q0
訂正
Xテンプレート使ってとことん汎用性を高めたライブラリなんか
○テンプレート使ってとことん汎用性を高める開発手法なんか
665はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/24(月) 02:14:19.64ID:tUW1+gfS0
>>663
「何もかもを継承構造で解決しようとするな」の
ひとつとしてテンプレート (を C++ なら利用することになるプロトコル指向的デザイン) が出たんだし、
C++ にコンセプトの概念を持ち込もうとする機運があるほどには活用比率も高まるだろう、という程度の主張なのに、
「とことん汎用性を持たせるべき」とか「主流になる」みたいな拡大解釈はやめてくれよ。
俺はそんなこと主張してないからね!
666デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/24(月) 02:32:05.77ID:XuY/8j5Q0
>>665
しつこいぞ
>テンプレートの活用が失敗っていうのは言語そのものとしてのサポートが不充分だったというのがあって
「おかしな流行が発生して初心者を惑わした」、に対して反論したんだろ?嘘つくなよ

>俺はそんなこと主張してないからね!
主流になる、って意味だろ?これ↓
>C++20 でコンセプトが入ったら C++ のパラダイムがそっちに一気に傾くと思う。

ちなみに
>コンセプトの概念を持ち込もうとする機運
コンセプトは標準化委員会や禿が言い出したことだぞ
導入されたら素晴らしいとは思うが、元々はテンプレートを使ったコードのエラーメッセージをどうにかすることと
テンプレートパラメータで満たすべき要件をコメントではなくコードで示せるようにすることだ
プロトコル指向は聞いたことないが、それはコンセプトで可能になるおまけ程度だろ
しかもそれを利用するにはテンプレート必須なわけで、コンセプトが入ろうが、
クラスなどが実際どういう仕組みなのか程度のことは把握してないと、初心者が手を出せるようなものではないし
出させるべきでもない
667はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/24(月) 02:45:26.39ID:tUW1+gfS0
>>666
変な (教え方なり使い方なりが下手くそな) 流行があったということを以て
テンプレートの活用を全否定するような言い分に反論したんだよ。
テンプレートが無くて良いと思ってるわけじゃないんだろ?

> 主流になる、って意味だろ?
今までが継承構造に頼りすぎだったのが是正されるという意味だ。

初心者への教え方については、また別の話。
ベターCからで良いという意味のことは D&E にも書かれてる基礎理念だから
そこは疑ってない。
668デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/24(月) 02:59:37.96ID:XuY/8j5Q0
>テンプレートの活用を全否定するような言い分に反論したんだよ。
>>587>>588を100回読み直せボケが
悪いけど、お前まともにメタプログラミングやってないだろ?
まともに活用して利点・欠点をはっきりわかってないやつが何偉そうに語ってんの?
しかもその理由で反論したんなら、なおさらポリモーフィズムの話で論破されただろ、
なんで認めずに自分の主張の意味を途中から変えてまで言い返してんの?
図星突かれて気分が悪いってか?

>今までが継承構造に頼りすぎだったのが是正される
誰が頼りすぎてたの??今までっていつまで?

>初心者への教え方については、また別の話
今まで何度も「こいつ初心者にテンプレート勧めてるよ・・・・何考えてんだ」と思ってたんですが
どの口で言ってんだ
669はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/24(月) 03:17:34.86ID:tUW1+gfS0
>>668
ポリモーフィズムの話ってなんだ?

初心者へじゃなくて、
君に、テンプレートの話はしてたつもりだが。
(ID 変わってるから他の人だったらスマソ)
他の人にアンカーを付けてテンプレートの話はしてないだろう。
670はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/24(月) 03:38:10.37ID:tUW1+gfS0
>>668
> 誰が頼りすぎてたの??

標準ライブラリすら。
その他はまあ、私の実感なので、違うというなら違うのかもしれない。
671はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/24(月) 03:48:16.31ID:tUW1+gfS0
「美味しんぼには我慢ならん」
「おい、辛抱しろ」
672はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/24(月) 03:48:58.75ID:tUW1+gfS0
誤爆した。 ごめん。
673デフォルトの名無しさん (ワッチョイ 469f-onpN)
2018/09/24(月) 09:51:46.55ID:dKKNaNpJ0
本当にテンプレートが必要なものってだいたいSTLに揃ってる印象。
あとはTBBみたいにある程度低いレイヤーの抽象化ではどうしても必要にはなる。
しかしこの種類のライブラリってのは本当に信用できる奴が作ったもの以外は
使いたくねーんだわ。
めちゃくちゃデバッグコスト高いからね。
そういう意味で一般プログラマーが実装するってのは実践的ではない。
674デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/24(月) 10:18:16.36ID:cpSL59m30
テンプレートは型の定義をすり替えるために使うもの
#ifdefで型切り替える方がもっと糞だからそこはテンプレートにするべき
それ以上の凝った事はしないほうがいいね
675デフォルトの名無しさん (ワッチョイ 2d48-coYL)
2018/09/24(月) 11:22:17.38ID:GIs1tf8Y0
頼りすぎつーか逆だと思うぜ
コンテナの要件なんかインターフェイスにすればすっきりするのに
紙マニュアル(pdf含む)でガタガタ書かれた口約束とかすげーイヤ
歴史的に見てもそれをやるのに充分な言語機能がもうあったのに
676はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/24(月) 11:36:08.69ID:tUW1+gfS0
>>675
現状の C++ では型の制約を表すには意味不明な SFINAE で回りくどくやってて
初心者には使いこなせない (中級者でも不安があったり面倒だったりする)
という話の文脈だから、言語機能が充分だというのはちょっと変な立場だ。
677デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/24(月) 11:43:09.69ID:IXp/Ejzw0
どうーがんばっても停止性問題は機械的に解けないケースを無くせないのだから
プログラミング自体をアルゴリズム化する企てはどこかで行き詰る
藻前らは行き詰まりかたの良し悪しを議論しているにすぎないのだガハハハハハハ
678はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/24(月) 11:47:19.43ID:tUW1+gfS0
>>675-676
ひょっとして抽象クラスでやったらいいという話だろうか。
Java とかから来た人はそういうことをやりがちだけど、 C++ の設計理念からすると、
少なくとも標準ライブラリでは仮想関数テーブルを辿る実行コストを許容はしないだろうと思う。
679デフォルトの名無しさん (ワッチョイ 2d48-coYL)
2018/09/24(月) 12:24:10.58ID:GIs1tf8Y0
>>678
動的結合のコストは関数ポインタなみにはっきりしてるだろ
680デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/24(月) 12:28:24.97ID:cpSL59m30
インターフェース(=データメンバーなし抽象クラス)は静的な型の制約を表現できないからダメ
681デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/24(月) 12:58:55.73ID:XuY/8j5Q0
>>678
>C++ の設計理念からすると、
>少なくとも標準ライブラリでは仮想関数テーブルを辿る実行コストを許容はしないだろうと思う
滅茶苦茶言うな
https://cpplover.blogspot.com/2015/09/memoryresource.html

>>673
ついでに開発コストも高い
STLが優れてるのは、作者が長年コンテナについて熟考に熟考を重ねたライブラリだからであって
それを実現するためにテンプレートが使われたに過ぎない
テンプレート使ってりゃなんでも有用なライブラリになると勘違いしてるアホが増えた
682デフォルトの名無しさん (ワッチョイ 4234-CvAF)
2018/09/24(月) 13:04:35.46ID:B4Me2M7J0
テンプレートは即席麺的な発想でライブラリのような寝かして熟成させるワイン的な使い方には向いていない
683デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/24(月) 13:10:53.22ID:IXp/Ejzw0
インターフェースはあらゆるメソッドを最初から詰め込まねばならないからイヤソ(特に単一継承の場合
お禿様も自著でそういう傾向(あらゆるメソッドが基底クラスに集中する傾向があることをこっそりカミングアウトしていたはず
テンプレートにはそういう制約がない
型引数Tにadd()メソッドがあるものとしてテンプレートを書いたら、add()メソッドがある既存クラス全部にそのテンプレートが使える
というわけで、インターフェースはそれ自体静的な型の制約のつもりなのかもしれんが、
真にかけたい制約(上の例でいうとadd()メソッドの存在だけを問題にしたいケース)に対して不必要に過剰になることが多いキモス

あとインターフェースだとコンテナの実現は具体的にはどうするんじゃ…
仮想関数テーブル参照の実行時コストだけでも許容し難いのに、間接参照がさらに必要になるんじゃ…
684デフォルトの名無しさん (ワッチョイ 2d48-coYL)
2018/09/24(月) 13:22:48.05ID:GIs1tf8Y0
インターフェイスを単一継承前提で考えるって、どんな教育を受けるとそうなるのかな
numeric_limits<uintmax_t>::max()歩譲って単一継承ってことにしても
最初から全部詰め込みなんてハメにはあまりならないし

あらゆるメソッドが基底クラスに集中するなんて事例あるか?
俺は空想論だと断言するぞ
Smalltalkのobjectみたいなクラスに何が置けるんだよ

あと、なんか仮想テーブルのコストが云々いってるやつが複数いるようだが
具体的にどのくらいか、せめてオーダーくらいわかっているのか
685デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/24(月) 13:35:23.36ID:cpSL59m30
オーダーの問題じゃなくて、C++にはゼロオーバーヘッドの原則があるんだから
ゼロオーバーヘッドに出来るものはゼロオーバーヘッドにするんだよ、標準はその手本なんだから

それにオーダーなんか処理内容でなんぼでも変わるだろ
せいぜい数十万要素のコンテナしか使わないプログラムだから仮想テーブルなんかどうでもいいと主張する奴の言うことは正しいかもしれないが
数兆個の要素を扱う人にはそんなもの慰めにならん
686デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/24(月) 13:56:47.91ID:IXp/Ejzw0
>>684
>インターフェイスを単一継承前提で考えるって、どんな教育を受けるとそうなるのかな
型に対する静的制約を実現するにあたり、多重継承は助けにならないからですだが…

>あらゆるメソッドが基底クラスに集中するなんて事例あるか?
上とまとめて理由を述べる
今、add()メソッドを備えるインターフェースA、sub()メソッドを備えるインターフェースBがあったとして、
加減算ができる具象クラスDやEは、それぞれAとBを多重継承したら一応はできる ・・・(1)
しかし、このバージョンのDやEは「加減算ができるクラス」という静的制約を満たしているとは言えない
なぜなら、DとEは全く別のクラス扱いになるから、DとEを共通に扱える関数を書けないので…
「加減算ができるクラス」という制約の正しい書き方は、AとBを継承するインターフェースCを定義して、
DやEにCを継承させる(単一継承)とらざるおえない ・・・(2)

なおいうまでもないことだがテンプレートにはそんな制限は無い。(1)のバージョンのD、Eに対して
問題なく「加減算ができるクラス」という制約をかけられる(Cにメソッドを集中させる必要が一切ナッシング
687デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/24(月) 14:02:13.87ID:IXp/Ejzw0
ていうか最後の2行で筆が滑ったorz
テンプレートで「加減算ができるクラス」という制約をかけるにはインターフェースA、Bもそもそも要らん
スゲー便利
688デフォルトの名無しさん (アウアウカー Sae9-zZLn)
2018/09/24(月) 14:25:40.72ID:yuMzZsdXa
templateはダックタイピングだとおもう
689はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/24(月) 15:09:08.71ID:tUW1+gfS0
どう説明したもんかと思ったけど、 >>683 の説明が分かりやすいな。
(Java でいうところの) インターフェイスは型の性質を事前に網羅しなきゃ
全体のデザインが定まらない。

関数が要求する性質 (インターフェイス) が増えた時に元の定義をいじるか、
mixin のような形で継承関係を作ることになる。
ちょっと機能を増やすだけでいらん継承関係を作るのは良くないという話の延長線上で
考えればインターフェイスを使ったところであまり解決にならない。

型制約 (コンセプト) は関数の側に付加するものなので、後付けが簡単だ。
結果的に型の側はその性質を持たなきゃならないことにはかわりないが、
性質を追加するのに元のクラス定義を弄らなくて済む。

-----------

最初の設計がキッチリしてたら、
クラス指向的なスタイルの方が混乱が少なくて良いかもしれないなと思い始めてきた。

でも、現実にはそうではない後付けだらけじゃん? とも思ってるわけ。
690デフォルトの名無しさん (ワッチョイ 2d48-coYL)
2018/09/24(月) 15:15:20.89ID:GIs1tf8Y0
>>686
型に対する性的制約って何?
それと事例あるか?と聞いている質問に何で長文がいるんだよ
具体的なライブラリとクラス名を挙げるだけだろうが
なるべく知名度の高い事例ほど説得力があるぞ
691デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/24(月) 15:32:49.32ID:XuY/8j5Q0
>>689
コンセプトを盲信しすぎだろ
あくまで要件をコードで示せるだけだっての

それこそSTLには必ず導入されるべきものだけど、そのSTLでの不満、
つまりInputIteratorだのなんだのの要件をいちいちリファレンス参照しないとわからなかった(>>675)から
必要とされたわけで

はちみつとかは多分STLべったりで、それ以外のライブラリを読んだり
まともにソフト書いたことないから、STLがほとんど出てこない状況ってのを経験してないんだろ

>ちょっと機能を増やすだけでいらん継承関係を作るのは良くないという話の延長線上で考えれば
話を広げすぎ。
型の制約という意味でいえば、現状コンセプトを待つしかないが
多分>>684が言ってるのは、Modern C++ Designで言うところのポリシークラスみたいな話じゃね?(違うかもしれんけど
この場合はあくまで要件定義なので当てはまらないと思うけど、
>いらん継承関係を作るのは良くない
これは暴言。Andrei Alexandrescuに言ってくれば?
ポリシークラスのような、継承によって機能を取り込む設計も非常に便利だし、それこそSTLでもあちこちで使われてるんだがww

あと後半チラ裏にも程がある。何様だよ
692デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/24(月) 15:33:05.07ID:cpSL59m30
Container<T>のbegin()が返すのはIterator<T>だとか
Matrix<M,N>とVector<K>はN==Kのときだけ掛け算できて結果はVector<M>だとか
Converter<V,W>とQueue<X>とProcessor<Y,Z>を持ってたらWとXとYはコンパチブルじゃなきゃいけないとか
そういうのが型の静的制約
693デフォルトの名無しさん (ワッチョイ 2d48-coYL)
2018/09/24(月) 15:39:44.60ID:GIs1tf8Y0
へーえ、vector<int>とvector<string>が掛け算できないという制約が
pure virtualを使った途端に無法状態になってしまうのか
694デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/24(月) 16:03:46.76ID:cpSL59m30
じゃあ練習問題だ
IntVector::begin()の戻り値はIntIteratorで、IntIterator::value()はintを返す
StringVector::begin()はStringIteratorで、StringIterator::value()はstringを返す
そういう制約を表現するインターフェースIVectorを具体的に書いてみよう!

出来やしないのは手を動かせばすぐわかる
695デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/24(月) 16:06:21.46ID:cpSL59m30
ああこれだけだと出来ちゃうか
end()もあってbegin()と同じ型のイテレーターを返すっていう制約も付けてちょうだい
696デフォルトの名無しさん (ワッチョイ 2d48-coYL)
2018/09/24(月) 16:08:34.73ID:GIs1tf8Y0
#define interface struct
template <typename T>
interface IVector
{
class iterator;
virtual iterator begin() const = 0;
};
697はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/24(月) 16:14:35.10ID:tUW1+gfS0
>>691
ポリシークラスは注入 (?) すべきポリシーをパラメタ化してるだけで、
何をパラメタにするかというデザインがきちんとしてれば有用だし、
いらん継承だとは思わないよ。

でも、現実には後になってそれがわかることもあるよねっていう話。
698デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/24(月) 16:24:48.03ID:cpSL59m30
>>696
テンプレート使ってんじゃねえよ雑魚
699デフォルトの名無しさん (ワッチョイ 2d48-coYL)
2018/09/24(月) 16:34:08.72ID:GIs1tf8Y0
>>698
は? 後出しで言い訳してんじゃねえよ蛸助
インターフェイスがテンプレートになってる実例をまさか知らんのか?w
700デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/24(月) 16:37:21.35ID:cpSL59m30
お前の主張通り継承で全部やれよ
そういう所が雑魚なんだよw
701デフォルトの名無しさん (ワッチョイ 2d48-coYL)
2018/09/24(月) 16:38:54.75ID:GIs1tf8Y0
捨て台詞吐いて逃亡かw
追わねえよくっだらねえ
702デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/24(月) 16:41:06.83ID:cpSL59m30
そっくりそのままお返ししますわw
テンプレートと継承の出来ることと出来ないことの区別がつくまで二度と下らない妄言吐くなよ
703デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/24(月) 17:18:02.91ID:XuY/8j5Q0
>>697
>現実には後になってそれがわかることも
それは
>何をパラメタにするかというデザインがきちんとしてれば
が後で変更になることもある、ってことだろうけど
そこまでの変更があったら、結局元の定義に手を出さなきゃいけないのは
どんな設計でも同じことだと思うけどなぁ

>性質を追加するのに元のクラス定義を弄らなくて済む
と言ってたが、それは結局関数とかでクラスの要件を必要以上に大きくしないように
例えばallocator_traitsみたいに、色々手間をかけて、利用するクラスへの依存を減らすのと同じじゃね?
俺にはそういうイメージしか沸かないんだが
コンセプトマップってそういうことだろ
結局テンプレートであれこれ書くことになるか、コンセプトマップであれこれ書くことになるか、ってだけ
(=開発コストは高い)

std::vectorだって、例えばアロケータは初期化時に渡さないといけないし
コピーとかしたときにアロケータはコピーしてくれなかったと思うが
それが不便だという声もある(ここでたまに取り上げられるEASTLの開発動機で触れられてる
あと、アロケータは型に依存するけど、メモリ確保なんてのはそもそも型は関係ないので
アロケータのあの設計は失敗かもね、というのもある(同じくEASTLでも触れられてる
それに対する代替案として、上で挙げたstd::pmr::memory_resourceが出てきたわけだけど、
今更STLの基本設計は変えられないのでpolymorphic_allocatorでラップするということになった

もしvectorがポリシークラスを受け取って、アロケータやメモリ管理についてもっと汎用化してたら
こういう問題は起きなかった(クッソ複雑になってるだろうけど)
これコンセプトでどうにかなるか?後になってわかってもどうにもならんよ
704デフォルトの名無しさん (オッペケ Sr71-i7GN)
2018/09/24(月) 17:46:45.01ID:yIbiTIWcr
ヒープ領域にインスタンスを作りたいときってどうしてもポインタを意識しないとダメなの?

MyClass abc;
みたいに宣言したいんだが。

MyClass* abc;
abc = new MyClass;
みたいにするしか方法ないの?


ヒープに作りたい理由は、巨大なオブジェクトだから。
ちなみにスマートポインタは使えない (icpc 12.0.4)。
705デフォルトの名無しさん (ワッチョイ 82b3-coYL)
2018/09/24(月) 17:53:54.47ID:CvpxIDb80
コンパイラに指示できるか、という意味ではないよ
そんなのあったも紛らわしいだけだと思うけど
706デフォルトの名無しさん (ドコグロ MM0a-GHk6)
2018/09/24(月) 18:26:32.41ID:sIOpRstjM
>>704
MyClass& abc = *new MyClass;
でいけるかも知らんけど十中八九delete忘れるし後から見て分かりにくいだけだから俺ならやらない
707デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/24(月) 18:31:59.03ID:cpSL59m30
struct MyClassHolder
{
 MyClass* p;
 MyClassHolder(): p(new MyClass()){}
 ~ MyClassHolder(){delete p;}
};

とか作っとけばいいんじゃない
自分でスマポ書いてるのと同じだけど
708デフォルトの名無しさん (オッペケ Sr71-i7GN)
2018/09/24(月) 18:47:38.62ID:yIbiTIWcr
>>707
ありがとうございます。
参考にします。


ちなみにポインタをどうこうしたくない理由は、これまで MyClass のインスタンスを参照渡しするように作っていた関数を、できるだけ変更したくないからです。

参照渡しをポインタ渡しに変えて、関数内に適宜アスタリスクを挿入するだけですか? 考えるのもしんどいです。
709はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-coYL)
2018/09/24(月) 18:55:55.79ID:tUW1+gfS0
>>703
> 色々手間をかけて、利用するクラスへの依存を減らすのと同じじゃね?

その通りだよ。
プロトコル指向でいうプロトコルは C++ で言うならまさにトレイツに相当すると思う。
(C++ では実装を直接的に強制する方法ではないけど。)

継承構造ではなく性質でジェネリック関数を使うってだけ。
継承で表すよりも性質で表現する方がたぶん記述は細分化されることになるので、
それが手間かもしれないし、
関連するものがとっちらかる感じはあると思う。

だけど「こういう型」というよりは「こういう性質」という方がプログラムが分かりやすくない?
既に述べたように拡張が楽というのもある。


ただ、プロトコル指向的デザインでは機能を追加することは出来ても
既に問題が生じているものをスパッと綺麗に解決できるわけではないので、
いつでも元の定義を弄らずに済むほど万能とはさすがに言わないよ。
vector なんてそれこそ達人たちが検証してるだろうから、
私が思いつくようなことが入り込む余地は無いだろうし。

そこらへんは程度問題なので、積極的に (あるいは消極的に)
(テンプレートを用いた) プロトコル指向的デザインを
使うのが割に合わないという場面もそれなりに多くあると思う。
繰返すけど、そこまで万能と思ってるわけじゃない。
710 ◆QZaw55cn4c (ワッチョイ 2260-9U/T)
2018/09/24(月) 19:02:18.61ID:63DR0NZS0
>>704
static 宣言する、というのはありな状況ですか?
static MyClass abc;
711デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/24(月) 19:02:38.38ID:XuY/8j5Q0
こいつ金慶珠みたいなやっちゃな・・・・マジめんどくさい
712デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/24(月) 19:04:43.22ID:XuY/8j5Q0
>>711>>709

>>708
関数の方を変えなくても、渡すとこで
auto a = hoge(*pMyClass);
でいんじゃね?
それも大変なら>>707みたいにラップするしかないけど
713デフォルトの名無しさん (オッペケ Sr71-i7GN)
2018/09/24(月) 19:14:36.90ID:yIbiTIWcr
>>710
オブジェクトのサイズが動的に変わるので、難しいです(合ってるかな?)


>>712
> 関数の方を変えなくても、渡すとこで
> auto a = hoge(*pMyClass);
> でいんじゃね?
> それも大変なら>>707みたいにラップするしかないけど

void hoge(MyClass abc);
なる関数 hoge() に、
MyClass* pabc;
pabc = new MyClass;
hoge(*pabc);
とする、ということですよね?
この方法では、関数呼び出し時にコピーコンストラクタが呼ばれますか?
それとも参照渡しのように、実体(?)が渡されるのでしょうか。
714デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/24(月) 19:30:44.68ID:XuY/8j5Q0
>>713
呼ばれないよ
参照渡しと同じことになる
715デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/24(月) 19:31:36.39ID:XuY/8j5Q0
あ、もちろん関数側の受け取りを参照のままにしてれば、だけどね
716デフォルトの名無しさん (ワッチョイ 42b3-GHk6)
2018/09/24(月) 19:42:51.66ID:E4VB1fuR0
>>708
MyClass abc1;
foo(abc1);

MyClass* abc2 = new MyClass;
foo(*abc2);
delete abc2;
717デフォルトの名無しさん (ワッチョイ 42b3-GHk6)
2018/09/24(月) 19:44:00.35ID:E4VB1fuR0
あっ、既に出てたわ
718デフォルトの名無しさん (オッペケ Sr71-i7GN)
2018/09/24(月) 19:51:26.90ID:yIbiTIWcr
>>714-717
すみません。
>>713は間違っていますね。
hoge() の定義は
void hoge(MyClass& abc);
でした。

ありがとうございます。
提案していただいた方法なら、関数側はほぼ何も変えないでできそうです。
初歩的な質問に付き合っていただき感謝します。
719デフォルトの名無しさん (ワッチョイ c104-Om/S)
2018/09/24(月) 20:06:20.22ID:I/nCcJf20
https://ideone.com/l7t0qz
上から取れないマウントを取りに行くスタイル。
720デフォルトの名無しさん (ワッチョイ 694e-BR5k)
2018/09/24(月) 20:23:29.03ID:SA5x5JnZ0
ボレロ村上さんや江添さんみたいなプログラマーになりたいんですが、彼等はどうやってC++についてあんなに詳しいのでしょうか?
721デフォルトの名無しさん (ワッチョイ c104-Om/S)
2018/09/24(月) 20:29:49.13ID:I/nCcJf20
どっちも早いころからパソコンを触っており、
早期にはこんなに言語がなく血反吐吐いて低級言語を覚える必要が少しあり、今はその応用で食ってける。
C/C++も今ほどライブラリがなく、自作するか引っ張ってくるしかなかったうえにそもそもコード系のシャルネットワークがなかった。
722デフォルトの名無しさん (ワッチョイ 469f-onpN)
2018/09/24(月) 20:40:24.56ID:dKKNaNpJ0
前提として奴らは別にプログラマーとして有名なわけではない。
コードを書く能力と有名なことが反比例しているわけだがそれでもいいなら
彼らの真似事してれば同じようになれるんじゃね?
723デフォルトの名無しさん (ワッチョイ c104-Om/S)
2018/09/24(月) 20:50:32.86ID:I/nCcJf20
まぁ、名前を聞くようになったのはツイッターあたりからやね。
江添氏はコードのお作法がおかしいと食いついたりしてたし、委員会に近いところにいたのでそういう情報を発していた。
けど、個人ではあまりコードは書いてないみたいだな。
ボレロ氏は高専言いっててそこらへんで色々学んでconstexprライブラリで名前を売ったってところはある。
その後縮小して最近コードを書いているという話は聞いてないような。

どっちも有名になったのはこの世の不満とオタクの人権みたいなのを発していたら有名になったってところはある。と思ってる。
724デフォルトの名無しさん (ワッチョイ 2d48-coYL)
2018/09/24(月) 21:16:51.40ID:GIs1tf8Y0
誰にでもウイークポイントはある
そこを苛める遊びに固執する阿呆は誰からも何も学べないまま
自らがウイークポイントのみからなるコンパクト星として成長するのみ
世の中の誰からも軽蔑しか受けない天涯孤独な存在だ
725デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/24(月) 21:32:17.37ID:XuY/8j5Q0
まぁ江添氏は委員会の人間だしコードあんま書いてなくても日本のC++ユーザーのために
仕様の解説してくれてるしね
ボレロ氏は・・・まぁその・・・・・生産性あるんだか無いんだかよくわからんライブラリ作ってるというか
あれはあれで勉強になるけど・・・・w

ただ初心者が「ああなりたい」ってよく言ってるのは理解に苦しむな
中途半端な知識でドヤ顔するのでなく、真摯に解説するサイトでも作ってくれりゃ価値があるけど
個人的には彼らを崇拝する人を見るたびに、もやもやした気分になる
言語は道具なんだから使ってなんぼやろ・・・
726デフォルトの名無しさん (ワッチョイ 694e-BR5k)
2018/09/24(月) 21:37:21.19ID:SA5x5JnZ0
>>725
まあ結局言語は道具といっても、作ったものが革新性があったり、真似できないようなら人気を集めるような気がするんだよね
東方のZUNとか別にそこまで凄いゲームでもないけど、プログラマーとしてそこそこ尊敬されてる
727デフォルトの名無しさん (ワッチョイ 469f-onpN)
2018/09/24(月) 21:59:39.82ID:dKKNaNpJ0
仕事でコード書いてたらc++の最新の仕様を追えないからやらない
とか本気で言ってしまう奴は根本が腐ってると思うよ。
言ってて矛盾を感じないのかと。
728デフォルトの名無しさん (ワッチョイ c1eb-tHrl)
2018/09/24(月) 22:02:16.29ID:orHhPIQU0
目標が名声なのか、C++理解度なのか・・・
粛々とコード書き続けるのが一番
729デフォルトの名無しさん (ワッチョイ 694e-BR5k)
2018/09/24(月) 22:40:40.71ID:SA5x5JnZ0
>>728
もちろん理解度なんだけど、何となく日本以外だと彼らしか目標とする人物が見つからなくて
730デフォルトの名無しさん (ワッチョイ 82b3-coYL)
2018/09/24(月) 22:55:21.63ID:CvpxIDb80
ISO/IEC読んでworking draft読んでおまけにg++/clangの実装で読んで
それでみんが知らなそうな重箱をつつくような仕様拾ってきてブログのネタに
すればいいんでないの?知らんけど
731デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/24(月) 22:59:57.25ID:XuY/8j5Q0
まぁ日本だと、解説サイトで目につく人ってそんなもんか
ZUN氏挙げるのははちょっと不思議だけど・・・
以前東方に使われてる技術の解説がどこかにあったけど、
タスクシステムみたいな古くからある2Dシューティングの常套手段とかしか記憶にない
(なんか驚くようなのもあったかもしれんけど

仕事で書いてると驚くようなコードとか設計をあちこちで見かけるけど、
そういうの書くのはやっぱ誰も知らない無名の職業プログラマだったりするよ
732デフォルトの名無しさん (JP 0Hc9-i7GN)
2018/09/24(月) 23:31:07.79ID:nTOSaHPIH
>>731
今もそういう夢いっぱいな話あるの?
昔のファミコンソフトがスーパーテクニックの塊だった、みたいな

最近はリソースが潤沢にあって、手抜きのとりあえず動くプログラムが蔓延しているのだと思ってた
733デフォルトの名無しさん (ワッチョイ 82b3-coYL)
2018/09/24(月) 23:43:30.13ID:CvpxIDb80
今でもゲーム系はスーパーテクニック満載でしょ
マルチコアCPUを90%以上使い倒す世界だからな、すげーわ
734デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/24(月) 23:47:03.19ID:XuY/8j5Q0
>>732
自分は半端者なんで知識はアレだけど、GTAシリーズとかEAのゲームとか
ああいうのは今でもリソース必死に使い切ってるみたいよ
(Game Programming Gemsとか読んでみたらその片鱗が見える)
スーファミ時代のような変態的なのとは方向性が違ってきてるけど
大規模な開発の上でいかにパフォーマンス損なわずに開発効率を上げるかが重視されてる

もちろん2Dのスマホゲーだったら全然使い切る必要ないだろうけど、そっち方面は詳しくない
(多分言語もC#かSwiftが主流?移植性考えたらC#だろうな
735デフォルトの名無しさん (JP 0Hc9-i7GN)
2018/09/25(火) 00:00:26.48ID:C9Mx85q+H
へぇ〜〜〜面白い

「どの業界は超人多い」みたいのあるんだろうか
736デフォルトの名無しさん (ワッチョイ 01b3-coYL)
2018/09/25(火) 00:05:28.27ID:bpDEi/Vx0
個人的にはF-35のソースが読んでみたいw
737デフォルトの名無しさん (ワッチョイ 19b3-vwf2)
2018/09/25(火) 06:17:40.32ID:NMIb1H0N0
>>736
さすがにF35のソースは見たことないけど、軍事関係や命に関わるコードはむしろ枯れた技術以外使わないんじゃないかな?
ECUとかはとんでもなく古い考え方(ほぼ全ての変数がグローバル)で作られてるし。
まぁECUの場合それはそれでちゃんと理由があるんだけどね。
738デフォルトの名無しさん (オッペケ Sr71-i7GN)
2018/09/25(火) 06:26:38.28ID:cr5GGQ8dr
多次元配列クラス Tensor があるとして、そのインスタンス a は a[2][5][3] のように要素アクセスできるとします。

unique_ptr<Tensor> pa(new Tensor);
のように Tensor のスマートポインタを作った場合、pa の指してる Tensor への要素アクセスってどうやるのでしょうか。

「Tensor」の設計の詳細が必要であれば、boost の multi_array と同じとしていただいて問題ありません。
739デフォルトの名無しさん (ワッチョイ 2d48-coYL)
2018/09/25(火) 07:37:41.21ID:ovBx3cXW0
(*pa)[2][5][3]
740デフォルトの名無しさん (ラクッペ MMe1-BR5k)
2018/09/25(火) 08:18:12.28ID:fJAN4SxzM
>>731
自分は業務でC++使ってないのでそういう経験ができないのです‥
だからこそネットで活動してる人しか分からなくて‥

C++は全て独学するしかなくて、いい方法が無いかずっと考えてるのですが、結局ネットや本を見るしかなかったです
741デフォルトの名無しさん (オッペケ Sr71-i7GN)
2018/09/25(火) 12:20:54.85ID:h/rPVSH9r
>>739
すみません……
いろんなところにアスタリスクつけたり矢印つけたりしてみたのですが、そのパターンは見落としてました……
742デフォルトの名無しさん (ワッチョイ c212-yqSl)
2018/09/25(火) 12:31:36.38ID:HAbRzuEs0
>>741
見落とすというか……
予め正解を知っておかないと思い付くのは難しいかもしれない
そしてC++ではなくC言語的な原始的なポインタの話になるので、C++の教科書にそこまで詳しく載ってるかと言うと……

http://d.hatena.ne.jp/licheng/20130829/p2
http://www.nurs.or.jp/~sug/soft/tora/tora10.htm
http://tecmemo.wpblog.jp/2016/09/10/cpp-multidimensional_array/
http://www7b.biglobe.ne.jp/~robe/cpphtml/html03/cpp03010.html
743デフォルトの名無しさん (ワッチョイ 01b3-FIjQ)
2018/09/25(火) 13:46:02.72ID:rTSM83rL0
>>737
組み込み系のノウハウなんだろうけど、大規模な組み込みってなってくると
一体どんな英知が詰まってるのかなーとか気になって
数百万行とかじゃなかったっけ・・
まぁMISRA-C++嫁、で終わる話かもしれんけどw

>>740
自分も会社入る前とか、辞めて休業中は全部独学よ
C++の知識だけに留まらず、何か作りたいもの作ってれば、
その分野での知識が嫌でもついてくると思う
C++の知識だけに閉じこもって実際の開発(プロじゃなくて個人のフリーソフトでも)と
乖離した方向に行ってしまうのが一番怖い
744デフォルトの名無しさん (ワッチョイ 01b3-FIjQ)
2018/09/25(火) 13:48:52.76ID:rTSM83rL0
そういえば以前ここで似たようなこと言ったら
「愚者は経験に学び、賢者は歴史に学ぶ」とか言われたなw
ああいうアホになるんだよ、言語の知識だけに閉じこもって何も開発せずにいると
745デフォルトの名無しさん (ワッチョイ 2d48-coYL)
2018/09/25(火) 20:49:31.31ID:ovBx3cXW0
人は繰り返し、神は再帰する
746デフォルトの名無しさん (ワッチョイ 2260-9U/T)
2018/09/25(火) 21:21:29.13ID:CZcrESgD0
>>743
>MISRA-C++
そんなものがあるのですか?
747デフォルトの名無しさん (ワッチョイ 2d8a-9DVt)
2018/09/25(火) 21:28:11.49ID:LXnmrKE+0
>>746
ggrks
748デフォルトの名無しさん (ワッチョイ 42bd-LgAV)
2018/09/25(火) 22:53:16.70ID:uqsQEMjV0
>>689
>(Java でいうところの) インターフェイスは型の性質を事前に網羅しなきゃ
>全体のデザインが定まらない。
無いメソッドを呼べる言語は存在しないからこれは仕方が無い(ジャバに限らん
ジャバに限らずインターフェースには利用者が絶対呼ぶメソッドだけではなく、
呼ぶかもしれないメソッドも全部packing listに入れねばならない点が無駄が大きい

その代わり、インターフェースのメソッドはビルド単位内で一意な名前(インターフェース名)で
(直接的あるいは間接的に)修飾されるから、同じメソッド名で違う機能のやつがあっても
衝突せず、安全性が保たれる
テンプレートはこの点だけがちょっと劣る
これ以外にテンプレートに欠点など無i
749デフォルトの名無しさん (ワッチョイ 82b3-coYL)
2018/09/26(水) 00:16:16.58ID:XAX5fYE80
バイナリインターフェースが重要なシステムもあるわけで
750デフォルトの名無しさん (ラクッペ MMe1-BR5k)
2018/09/26(水) 13:25:47.21ID:3bFkpdGnM
C++とシェルスクリプトの違いって何ですか?
シェルスクリプトで出来ることでC++ができないこと
C++が出来てシェルスクリプトで出来ないこととかそういう具体例を教えてほしいです。
751デフォルトの名無しさん (ラクッペ MMe1-BR5k)
2018/09/26(水) 13:28:14.24ID:3bFkpdGnM
>>750
個人的に上げるとしたら、webのフロントエンド分野はインタプリタに勝てないと思います
752デフォルトの名無しさん (ワッチョイ 4234-CvAF)
2018/09/26(水) 13:35:28.26ID:8zK/b6uE0
比較の対象が違い杉
753さまよえる蟻人間 ◆T6xkBnTXz7B0 (スププ Sd62-gRel)
2018/09/26(水) 13:35:54.34ID:NuaJwewid
>>750
C++はコンパイルしないと動かない。シェルスクリプトはファイルの操作やバッチ処理が得意。
754デフォルトの名無しさん (ワッチョイ 2d8a-9DVt)
2018/09/26(水) 14:01:36.87ID:3yW6iUgn0
>>750
デバドラをスクリプトで書いてみてくれ
755デフォルトの名無しさん (アークセー Sx71-vwf2)
2018/09/26(水) 14:29:30.26ID:lYIfIhjTx
>>750
桃白白とラウチェン、マジンガーZとテコンVぐらい違う。
756デフォルトの名無しさん (ワッチョイ 4223-tHrl)
2018/09/26(水) 14:43:50.80ID:zEt8XtGI0
>>750
GUI使ったアプリはシェルスクリプトでは無理
757デフォルトの名無しさん (ラクッペ MMe1-BR5k)
2018/09/26(水) 14:51:55.15ID:3bFkpdGnM
>>753
確かにファイルの操作はそうですね
>>754
確かにそういう分野はCですね
>>755
例えが古くてパッとしませんでした‥
>>756
確かにOSにインストールするものはそうですね
758デフォルトの名無しさん (JP 0Hd6-Y82R)
2018/09/26(水) 15:12:38.31ID:nKPhFdqbH
C++というかオブジェクト指向の質問かもしれないんですけど
エクセルにデータを書き出すためのクラスがありましてメソッドがざっとこんな感じ

・データをファイルから読み込む
・シート作成(ここで以下のメソッドを呼び出す)
・シートAに書き出す
・シートBに書き出す

・シートEに書き出す

全体で1000行ほどなんですけど、例えばシートに書き出す共通部を親クラスにして、
それを継承した各シート毎に書き出すクラスを作るみたいなこと考えてます。
ただ正直あまり意味が無いような気もするんですよ。クラスと言うには小さすぎるものになりそうですし。
何行超えたらでかいだろとか何行なんてクラスとしては小さすぎるだろみたいなラインってありますかね
759デフォルトの名無しさん (ワッチョイ 4223-y24S)
2018/09/26(水) 15:23:36.10ID:dRFURWqC0
それは単に

メソッド シート作成(){
シートAに書き出す
シートBに書き出す

シートEに書き出す
}

ということ?それとも

class A {
メソッド シート作成(){
シートAに書き出す
}

class B {
メソッド シート作成(){
シートBに書き出す
}

ということ?
前者ならクラス分ける意味がないと思うが。
760デフォルトの名無しさん (ワッチョイ 2d8a-9DVt)
2018/09/26(水) 15:33:15.98ID:3yW6iUgn0
>>756
Tcl/Tk の立場は?
761デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/26(水) 19:56:11.35ID:oECBSnBC0
クラスは行数じゃなくて意味的にまとまってるかどうかだからな
意味のあるメンバがまとまってれば1万行の単一クラスがあってもいいし
デタラメに寄り集められた50行の粗大ゴミクラスもある
そういうもの
762デフォルトの名無しさん (アウアウウー Sa25-xOzC)
2018/09/26(水) 20:09:57.19ID:LRnZd7JJa
>>761
数字が逆じゃないか?
763デフォルトの名無しさん (ワッチョイ cde3-tHrl)
2018/09/26(水) 20:16:07.55ID:ME0063O80
>>758
>何行超えたらでかいだろとか何行なんてクラスとしては小さすぎるだろみたいなラインってありますかね
ないよ
機能で分けれ

>例えばシートに書き出す共通部を親クラスにして、
>それを継承した各シート毎に書き出すクラスを作るみたいなこと考えてます。
「書く内容を決める」機能が「シートに書く」機能を継承するなんてナンセンス
どのシートに書くかなんて「シートに書く」機能に引数で渡せばいいだけ
764デフォルトの名無しさん (ワッチョイ 5dc3-teld)
2018/09/26(水) 20:55:21.65ID:oECBSnBC0
>>762
あってるよ
50行でも粗大ゴミは作れちゃうんだよ
765デフォルトの名無しさん (ワッチョイ bf9f-e6iu)
2018/09/27(木) 00:26:48.70ID:zZL/tnLy0
さすがに一万行でまとまってるクラスってのはないわ。。
766デフォルトの名無しさん (ワッチョイ 5780-q1nr)
2018/09/27(木) 00:28:50.85ID:pq96CSzd0
もしかして知恵遅れは
なんか書くために毎度毎度ofstreamを継承すんの

もしかして知恵遅れは
なんか読むために毎度毎度ifstreamを継承すんの

さすが
767デフォルトの名無しさん (ワッチョイ ff80-LozN)
2018/09/27(木) 00:36:33.47ID:3iNJ0doV0
例えば、基本クラスに出力クラスを作って、
派生クラスに、プリンター・PDF など、機能が異なるならオブジェクト指向だけど、

機能が同じなら、派生クラスではない。
単に、属性・メンバ変数が変わるだけ
768デフォルトの名無しさん (ワッチョイ 5780-q1nr)
2018/09/27(木) 00:50:27.91ID:pq96CSzd0
void aho::write(ostream& aho) const {
aho << "aho" << endl;
aho << "baka" << endl;
aho << "manuke" << endl;
}

こんな感じで作っとけば
いろんなもんに書ける可能性がある

抽象化をうまく利用するというのは
こういうことだからな
769デフォルトの名無しさん (JP 0H2b-tojA)
2018/09/27(木) 05:39:28.23ID:DR3ASZ+QH
江添亮に匿名で質問ができて、高確率で答えが帰ってくる空間ってもうないのでしょうか
770デフォルトの名無しさん (ワッチョイ bf9f-e6iu)
2018/09/27(木) 07:33:12.06ID:zZL/tnLy0
本人のtwitterにでも投げれば?
高確率で「質問ではない」が帰ってくるが。
771デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/09/27(木) 07:58:37.31ID:GSDkLsyd0
>>750
シェルスクリプトだけではシェルスクリプトを解釈実行することはできない
C++からならできる
つまりシェルスクリプトだけでは金輪際できない仕事というのは少なくとも1つある

もっともこの宇宙自体がシェルスクリプト上で走っているシミュレーションなら話は別やが…
772デフォルトの名無しさん (ワッチョイ 9fb3-aemA)
2018/09/27(木) 08:51:58.83ID:Ct84HJ0d0
c++はコンパイラいるやろが
773デフォルトの名無しさん (ブーイモ MM5b-d72i)
2018/09/27(木) 09:07:42.86ID:eHS6051wM
そんな規約あったっけ?
Cling とか CINT はパチモノ?
774デフォルトの名無しさん (ワッチョイ 37d2-aemA)
2018/09/27(木) 13:29:28.75ID:lX4OM9LG0
>>768
そういうのは、templateのほうがいい。ostreamに依存せずにすむ。
775デフォルトの名無しさん (ワッチョイ 7748-aemA)
2018/09/27(木) 16:27:38.79ID:Zeo03I1R0
766からの流れでそうなっただけだろ
776デフォルトの名無しさん (ワッチョイ 37e0-OlFv)
2018/09/27(木) 16:47:26.94ID:Oj9x/TA+0
俺には誰一人として標準のstreamクラスを継承する話はしてなかったように思えてならないんだが
(最初の>>758も書き出す処理を継承で共通部分と個別部分に分ける案を問うているだけ)
なんでそういう話になってるんだっけ
777デフォルトの名無しさん (ワッチョイ 9f23-brPT)
2018/09/27(木) 20:48:20.83ID:vb6QqVUs0
>>776

>>758
>全体で1000行ほどなんですけど、例えばシートに書き出す共通部を親クラスにして、
>それを継承した各シート毎に書き出すクラスを作るみたいなこと考えてます。

書き出す共通部をまとめたクラスというのは
ファイルで言えば ofstream みたいなものなのであろうと皆疑ってるんだろう。
「みたいなものではない」という、結論が違ってくるような違いも提示されないし。
778デフォルトの名無しさん (ワッチョイ 1704-ClIk)
2018/09/27(木) 20:54:25.22ID:/ZxE29S10
関数にすると不味いことある?
779デフォルトの名無しさん (ワッチョイ 37e0-OlFv)
2018/09/27(木) 21:00:15.42ID:Oj9x/TA+0
>>777
そうなのか……ありがとう
俺はostreamを引数に取る関数オブジェクトを多態やprotectedを使って実装するみたいなイメージで読んでた
780デフォルトの名無しさん (ワッチョイ 1704-ClIk)
2018/09/27(木) 21:09:44.86ID:/ZxE29S10
最初にクラスを設計し始めるのは筋が悪いと思ってる。そんな3流プログラマ。
781デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/09/27(木) 23:22:58.17ID:GSDkLsyd0
訂正;
△:シェルスクリプトだけではシェルスクリプトを解釈実行することはできない
○:シェルスクリプトがあるだけではシェルスクリプトの解釈実行を開始することはできない

シェルスクリプトはもちろんシェルスクリプトから呼ばれるシステムコールその他の
一切合財をシェルスクリプト上だけでシミュレートする能力がある(と思う)が
全ての始まりを起こすのにC/C++で書かれたOSを要する

>>780
つまりクラスの設計はおくらすのが正しい
782デフォルトの名無しさん (ワッチョイ 9f1b-0IEC)
2018/09/27(木) 23:59:38.23ID:RQl7S0Gm0
来たよ、暇なので
783デフォルトの名無しさん (ワッチョイ 77e3-c2ki)
2018/09/28(金) 09:32:22.81ID:hWUH9Sli0
最新のC++コンパイラが使えないので質問。
右辺値参照が仮引数になっている以下のような関数があった場合、

aaa(左辺値の変数);

とすると、ちゃんと、aaa() は呼び出される?
それともエラーになる?

void aaa(T&& a)
{
  ・・・
}
784デフォルトの名無しさん (アウアウカー Saab-NM1n)
2018/09/28(金) 09:39:47.21ID:UtPWkOJga
>>1のオンラインコンパイラを使おう
785はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-aemA)
2018/09/28(金) 09:40:07.87ID:7KXXqv1B0
>>783
呼び出される。
lvalue は rvalue にもなる。
786デフォルトの名無しさん (ワッチョイ 77e3-c2ki)
2018/09/28(金) 09:48:18.84ID:hWUH9Sli0
>>784
どこにあるの?
787デフォルトの名無しさん (ワッチョイ 77e3-c2ki)
2018/09/28(金) 09:53:42.38ID:hWUH9Sli0
では、aaa()に次のようなoverloadがある場合は、「2」の方が呼び出されて、
#if の部分を 0 にすると、「1」が呼び出される?
だとすると、昔のC++では無かったような overloadの仕様かも?

T b;
aaa(b); // bは左辺値のつもり

void aaa(T&& a)
{
  puts("1, 右辺値参照、T&& に来たよ。");
}

#if 1
void aaa(T& a)
{
  puts("2, 左辺値参照、T& に来たよ。");
}
#endif
788デフォルトの名無しさん (ワッチョイ 9f23-brPT)
2018/09/28(金) 10:13:48.61ID:WRA8TBfa0
>>787
>>784
789デフォルトの名無しさん (ワッチョイ 7748-aemA)
2018/09/28(金) 10:23:34.25ID:RVKB6eOl0
>>783
呼び出されない
右辺値参照は左辺値を受け取らない(原則)

ただしTがテンプレート仮引数の場合と、auto&&の場合は、
右辺値参照で左辺値を受け取れる(特例)

型を推定させた場合に限り、右辺値参照は、
左辺値参照への左辺値参照に変形できる
790デフォルトの名無しさん (ワッチョイ 77e3-c2ki)
2018/09/28(金) 10:32:29.28ID:hWUH9Sli0
[Compile and Execute C++11 Online (GNU GCC v7.1.1)]
https://www.tutorialspoint.com/compile_cpp11_online.php
で下の方のコードを試したら、

$g++ -std=c++11 -o main *.cpp
main.cpp: In function ‘int main()’:
main.cpp:18:10: error: cannot bind rvalue reference of type ‘TPerson&&’ to lvalue of type ‘TPerson’
   aaa(b); // bは左辺値のつもり
     ^
main.cpp:8:6: note:  initializing argument 1 of ‘void aaa(TPerson&&)’
void aaa(TPerson && a)
   ^~~

というエラーになった。gcc 7.1.1 では、>>785 の言ってくれたことと合ってない???
791デフォルトの名無しさん (ワッチョイ 77e3-c2ki)
2018/09/28(金) 10:33:03.33ID:hWUH9Sli0
>>790
[続き]

#include <stdio.h>

struct TPerson {
 int m_age;
};

void aaa(TPerson && a)
{
  puts("1, 右辺値参照、T&& に来たよ。");
}

int main()
{
  printf("Hello, World!\n");
  
  TPerson b;
  aaa(b); // bは左辺値のつもり

  return 0;
}
792はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-aemA)
2018/09/28(金) 10:35:31.98ID:7KXXqv1B0
あれ? ごめん。
確かめたら呼び出されなかった。

勘違いしてたかも
793はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-aemA)
2018/09/28(金) 10:39:58.90ID:7KXXqv1B0
あ、逆の場合と混同してた。
const T& に rvalue がマッチするんだった。

このあたりのルール、なんか一貫性がない感じがする。
794デフォルトの名無しさん (ワッチョイ 77e3-c2ki)
2018/09/28(金) 10:40:42.82ID:hWUH9Sli0
>>792
でも、以下の std::move() の実装の説明だとあなたの言ってる方が正しい気がする。

https://stackoverflow.com/questions/36206764/understanding-the-code-for-stdmove
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2027.html#Move_Semantics

The move function really does very little work. All move does is accept
either an lvalue or rvalue argument, and return it as an rvalue
without triggering a copy construction:

template <class T>
typename remove_reference<T>::type &&move(T &&a)
{
  return a;
}
It is now up to client code to overload key functions on whether
their argument is an lvalue or rvalue (e.g. copy constructor and
assignment operator). When the argument is an lvalue,
the argument must be copied from.
When it is an rvalue, it can safely be moved from.
795デフォルトの名無しさん (ワッチョイ 77e3-c2ki)
2018/09/28(金) 10:44:16.75ID:hWUH9Sli0
>>789
なるほど、std::move() は、あなたの言ってくれた、template の場合に当たるから
こその動作だったんだ・・・。
796デフォルトの名無しさん (ワッチョイ 77e3-c2ki)
2018/09/28(金) 10:49:49.55ID:hWUH9Sli0
>>793
template の場合と、auto の場合は、まさに、一貫性が無いということらしい。

こういう一貫性の無さのことを「直交性が低い」と言って、言語が分かりにくい
指標になるらしい。
797はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-aemA)
2018/09/28(金) 11:07:41.28ID:7KXXqv1B0
>>796
一貫性は無いけど、仮引数の rvalue reference に lvalue がマッチ「してほしくない」というのはわかるので、
まあしょうがない。
798はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-aemA)
2018/09/28(金) 11:11:50.31ID:7KXXqv1B0
>>789
ちょっと確認なんだけど、
テンプレート仮引数 T に対して T&& に lvalue がマッチするっていうのは、
実際には lvalue reference として機能するという意味でいいんよね?
(変形できるというのはそういう意味だよね?)
799デフォルトの名無しさん (ワッチョイ 7748-aemA)
2018/09/28(金) 11:58:59.36ID:RVKB6eOl0
>>798
それ以外の何だと思うの?
800デフォルトの名無しさん (ワッチョイ 77e3-c2ki)
2018/09/28(金) 12:26:11.67ID:hWUH9Sli0
>>797
あまのじゃく?
801はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-aemA)
2018/09/28(金) 12:29:12.61ID:7KXXqv1B0
>>799
「変形される」だったら勝手にやってくれるんだなーと思うんだけど、
「変形できる」という言い回しにちょっと引っかかりを感じたというふんわりした疑問なので、
具体的に別の可能性を思い浮かべたわけではないです。
802デフォルトの名無しさん (ラクッペ MM0b-2bq/)
2018/09/28(金) 14:07:40.60ID:7VsD45M6M
江添とお前らどっちがC++に詳しい
803デフォルトの名無しさん (ワッチョイ 77e3-c2ki)
2018/09/28(金) 14:45:05.48ID:hWUH9Sli0
>>802
その人もここに来るかも知れないから。
804デフォルトの名無しさん (ササクッテロル Sp4b-cB/m)
2018/09/28(金) 14:53:59.72ID:5bmo24w9p
江添で言えばまさにわかりやすくその辺の事情解説してくれてるだろ
今の話で江添より詳しいとかありえねー
805はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-aemA)
2018/09/28(金) 17:00:34.02ID:7KXXqv1B0
>>802
江添氏は C++ を使うプログラマというよりは、
C++ の規格の専門家として C++ の知識を持ってるんだから、
かなり詳しいよ。
806デフォルトの名無しさん (ワッチョイ 77e3-c2ki)
2018/09/28(金) 17:18:49.52ID:hWUH9Sli0
>>805
いずれにせよ、気持ちはうれしかったよ。
807デフォルトの名無しさん (ラクッペ MM0b-2bq/)
2018/09/28(金) 17:49:54.67ID:7VsD45M6M
>>804
そのへんの事情って?
>>805
それは本人も自負してるようだけど
808デフォルトの名無しさん (ワッチョイ 17b3-cB/m)
2018/09/28(金) 18:34:51.41ID:2UofBC6a0
>>789, >>793あたりの仕様の事情な
809デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/09/28(金) 21:21:09.15ID:tCflGkAm0
もし非テンプレート関数かつ非インライン関数なvoid bar(Foo&& a)に左辺値xを渡してビルドが通る言語規格だとしたら、
 tmp = xのコピー
 barのビルド結果←(tmpのアドレス)
ということになってxのコピコンが呼ばれてしまうま
つまり右辺値参照がコピコン削減になるかどうかというのは関数を右辺値参照にしただけでは決まらず、
呼び出し元の条件次第なので、bar()を作る人/使う人双方の慢心を避けるためにエラーにするんだろJK

一方テンプレート関数またはインライン展開される関数なら、上のようなへタレコードに一時的になっても
すぐさまコピコン削減ができるから実質弊害が無い
ただし、そういった関数でも再帰呼び出ししたりアドレスをとったりすると上と同じ議論になるので、
再帰呼び出し/アドレスを取る操作 両方ともありえるインライン関数は>>789の例外の適用外とされ、
テンプレート関数は再帰呼び出しが有り得ないし、アドレスを取る奇特な人間も居ないだろうということで>>789の例外が設けられた
810デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/09/28(金) 21:24:43.89ID:tCflGkAm0
訂正;
△: すぐさまコピコン削減ができる
○: コンパイラがすぐさまコピコン呼び出し削減最適化をかけられる

コピコン呼び出し削減最適化はこの場合データフロー解析の結果を流用したらできる
C++はgotoが使われたとき、コンストラクタが呼ばれずに使われるオブジェクトが生じないか否か確かめるために
データフロー解析はもともと必須なので、コピコン呼び出し削減最適化はC++コンパイラ書きなら誰でも出来る(多分
811デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/09/28(金) 21:34:28.86ID:tCflGkAm0
>>793
>const T& に rvalue がマッチするんだった。
それはある意味当然すぐる
const T& x = r; // rは右辺値
...
y = x // (*)
としたときに、コンパイラは(*)みたいな文が現れるまでは、
xへのアクセスを機械的にrへのアクセスに置き換えれば良いわけでゼロコスト
rが所有権を失ったらxのアクセスも不正となるが、これは書き換え可能なオブジェクトを
const参照をとってから書き換えた場合も似たようなもの(身からでたサビ
なのでコンパイラはやっぱ何もしなくて良い
812デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/09/28(金) 21:36:22.95ID:tCflGkAm0
(30分前にこのスレを読んで初めて右辺値とか右辺値参照といったブツを知った初心者なので語ってみた
813デフォルトの名無しさん (ブーイモ MM7b-/SOc)
2018/09/28(金) 22:13:49.14ID:pgnHcfqPM
>>811
y = x
の後もxへのアクセスはrへのアクセスで良くないの?
814デフォルトの名無しさん (スップ Sd3f-brPT)
2018/09/28(金) 22:40:22.15ID:5I7m9/jNd
どんな文が現れようとずっとrでいいんじゃね?
815デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/09/28(金) 22:45:46.54ID:tCflGkAm0
>>813 >>814
ホンマや!(;゚Д゚)天才か!
816デフォルトの名無しさん (ブーイモ MM7b-/SOc)
2018/09/28(金) 22:50:40.02ID:pgnHcfqPM
>>815
ウッサイ、チネ
817デフォルトの名無しさん (ワッチョイ ff5b-/SOc)
2018/09/28(金) 23:48:18.05ID:AAs3crMS0
>>809
再帰だろうがアドレスとろうがオンラインだろうが例外は適用されるだろ。
やっぱ30分で理解するのは無理じゃね?
818デフォルトの名無しさん (オッペケ Sr4b-N9wp)
2018/09/28(金) 23:50:49.06ID:HzE5xAmYr
auto a = funcA(funcB(funcC(input)));
みたいな感じの関数の入れ子ってさ、ある関数が終わる度にその都度インスタンスを作ってコピーして次の関数に渡すということを繰り返すんだよね?

つまり、関数たちの返り値が巨大なオブジェクトだったら、このように書くことで余計に時間がかかるよね?
819デフォルトの名無しさん (ワッチョイ ff5b-/HDE)
2018/09/29(土) 00:09:10.14ID:UwfF5QN40
>>818
いんや。
オブジェクトにムーブコンストラクタがあって戻り値が右辺値ならコピー回避されるし、戻り値最適化で一切何も起こらない可能性すらある。


て、はちみつが言ってた。
820デフォルトの名無しさん (オッペケ Sr4b-N9wp)
2018/09/29(土) 00:13:53.80ID:X+ykKtqpr
>>819
へぇ

> 一切何も起こらない
というのは、一切余計なオーバーヘッドがない、ということですか?
821デフォルトの名無しさん (アウアウウー Sadb-ZVm4)
2018/09/29(土) 00:22:35.94ID:4+9Po3M4a
単純なコピーよりは早くなる可能性があるってだけでは?
822デフォルトの名無しさん (ワッチョイ ff5b-/HDE)
2018/09/29(土) 00:30:08.48ID:UwfF5QN40
ちょっと誇張しすぎた。
正しくは「コピーもムーブも起らない可能性すらある」

コピーもムーブも起こらなければ、その分のオーバーヘッドは当然ないよ
823デフォルトの名無しさん (オッペケ Sr4b-N9wp)
2018/09/29(土) 00:36:40.21ID:X+ykKtqpr
へぇ〜〜〜
ありがとうございます

まぁそこがボトルネックじゃない限り余計なこと考えない方が身のためなのかもしれませんが
824はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-aemA)
2018/09/29(土) 02:25:18.76ID:4F2hgYyq0
>>818-823
コピーもムーブも省略される可能性ってのは、左辺の場所でオブジェクトを直接に構築するっていう意味。
構築してからそのままコピーしてる (そして元のオブジェクトが一時的である) 場合は実際には直接構築したって同じよねという話。
825デフォルトの名無しさん (ワッチョイ 17b3-cB/m)
2018/09/29(土) 14:26:47.44ID:7XGFV27+0
>>819
>オブジェクトにムーブコンストラクタがあって戻り値が右辺値ならコピー回避されるし
なんかムーブコンストラクタを魔法か何かと勘違いしてないか?
ムーブコンストラクタの方が重い処理してたら当然重くなるんだぞ
826デフォルトの名無しさん (ブーイモ MM7b-/SOc)
2018/09/29(土) 14:32:22.06ID:OnnXxjQtM
>>825
ええ…
コピーより重いムーブコンストラクタの存在を前提に話す必要ある?
827デフォルトの名無しさん (ワッチョイ 17b3-cB/m)
2018/09/29(土) 14:44:27.90ID:7XGFV27+0
むしろムーブで軽くなるのは大抵の場合ムーブによってヒープの確保、解放を
避けられるクラスだけ、だろ
ある意味そっちの方が限定して話をしてると思うが

基本をすっ飛ばすからはちみつその他誤解するやつが出てくる
828デフォルトの名無しさん (ワッチョイ 5780-q1nr)
2018/09/29(土) 14:49:31.13ID:IuTgmxg/0
この機能が必要になった背景・経緯

ムーブセマンティクスは、C++03でもNRVO(特定の文脈でのコンストラクタの省略)や、 C++11で非推奨となったstd::auto_ptrで実現されていた。
しかし、NRVOがいつでも機能するわけではなかった。
また、std::auto_ptrにはコピーと同じ文法でムーブしていることなど、問題が多かった。
そのため、コピーと区別でき、統一的にムーブを表す文法が言語機能として必要とされた。


つまりこんなあぶなっかしい
unique_ptr、shared_ptr、weak_ptrとか使ってるヤツラも
クルクルパーしかいない

この程度の簡単な制御も自分で簡単に制御しきれないワケだからな
829デフォルトの名無しさん (ワッチョイ 5780-q1nr)
2018/09/29(土) 14:56:25.79ID:IuTgmxg/0
しかしアホのあたらしもの好きは半端ない
頭悪いシロモノでも新しいものができたら使わないといけない病になってるからな
シロウトに多い
830デフォルトの名無しさん (ワッチョイ 17b3-cB/m)
2018/09/29(土) 14:58:40.21ID:7XGFV27+0
いや、autoはともかくshared, unique, weakは危なっかしくないと思うが・・
ムーブが使えるようになってからだし
あと個人的にはcpprefjpは規格寄り過ぎてユーザー寄りじゃないと思う
cppreference.comを使うべき
831デフォルトの名無しさん (ワッチョイ 5780-q1nr)
2018/09/29(土) 14:59:08.11ID:IuTgmxg/0
で、こんなしょうもないことより
ホントに理解しないといけない部分がすっぽりと抜けてる
832はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-aemA)
2018/09/29(土) 16:42:03.70ID:4F2hgYyq0
C++ の (というかプログラミング言語の) ほとんどの機能は抽象化の道具。
ムーブもまた、見かけ上は代入っぽい抽象で扱えるものであっても
実態はもうちょっと速いコードにも出来る (可能性がある)。

>>828
そういう簡単な制御すら抽象化層に押し込められない方がよっぽど駄目。
クルクルパーだと思ってるならなおさら、
簡単な制御なら (いつも間違いなく) 出来ると期待すべきでない。
そんでもって大抵の人間はクソザコで、しょうもない間違いをする。
問題は道具で解決すべき。
833デフォルトの名無しさん (ワッチョイ 17b3-kFNE)
2018/09/29(土) 17:03:15.96ID:7XGFV27+0
スマポは言語の機能じゃねーよボケ
834デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/09/29(土) 18:38:13.57ID:GD2dD6IB0
>>832
>問題は道具で解決すべき。
ネ申は確かLL言語を創造された
835デフォルトの名無しさん (ワッチョイ d7b3-ZVm4)
2018/09/29(土) 18:45:43.26ID:Dc4laUcM0
ムーブはゼロの発見に次ぐ、人類史上における大発見と言われてるけどな。
ノーベル賞候補の一つにもなってるし。
836デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/09/29(土) 18:51:41.19ID:GD2dD6IB0
std::auto_ptr<T>はもともとオブジェクトをムーブしたくて生まれたわけでは無いと思う…
確実な解放の実現が先
ムーブする仕様はあと

あとstd::auto_ptr<T>(unique_ptr<T>でも良いが)でも使わないとやってられないシチュがC++には少なくとも1つある
837デフォルトの名無しさん (ブーイモ MM7b-uZyL)
2018/09/29(土) 18:56:52.23ID:oWn9MzvpM
move元のオブジェクトに対するアクセスがコンパイルエラーになるんならわかるけど、そうじゃないんなら
大層な仕組みを入れなくても単に unique_ptr を言語組み込みで実装すれば済む話だったのでは?
838デフォルトの名無しさん (ラクッペ MM0b-2bq/)
2018/09/29(土) 19:32:03.30ID:YVfD+mv1M
お前ら江添に負けて恥ずかしくないの?
839デフォルトの名無しさん (オイコラミネオ MM4f-IJfJ)
2018/09/29(土) 20:26:30.14ID:1/46iTAZM
全然?
840デフォルトの名無しさん (スプッッ Sd3f-brPT)
2018/09/29(土) 21:00:53.02ID:vc6gAAuZd
>>837
それ何が嬉しいんだ?
vector とかどうすんだよ
841デフォルトの名無しさん (ブーイモ MM7b-uZyL)
2018/09/29(土) 22:03:09.07ID:oWn9MzvpM
>>840
moveするのが分かってるんなら最初からvectorごとヒープに作って unique_ptr で持てばいいでしょ
中途半端にガワだけスタックに置く意味がない
842デフォルトの名無しさん (ワッチョイ 1704-ClIk)
2018/09/29(土) 23:45:25.50ID:OLOWa9QF0
move後の元オブジェクトを破壊っていうか破棄しようって提案もあったよ。ちょっと早くなるのだとさ。
843デフォルトの名無しさん (ワッチョイ 9f23-brPT)
2018/09/30(日) 00:04:13.06ID:kBo12DYt0
>>841
ポインターならそもそも copy のコスト安いから move 要らないじゃん
844デフォルトの名無しさん (ワッチョイ 5780-q1nr)
2018/09/30(日) 00:20:38.65ID:aYXyCrkn0
それだったら最初から普通にポインタでかけよ
845デフォルトの名無しさん (ワッチョイ ff80-LozN)
2018/09/30(日) 00:57:02.37ID:GfZkWSkk0
この3冊が、神の書!

Linux プログラミング・インタフェース、Michael Kerrisk、2012

C++11/14 コア言語、江添 亮、2015

組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006
846デフォルトの名無しさん (アウアウウー Sadb-uZyL)
2018/09/30(日) 01:40:28.47ID:CKZYWlYLa
>>843
だからmoveいらないって話でしょ
C++のムーブセマンティクスがああなったのは中途半端にスタックを使うスタイルが定着してしまっていて今更ポインタ使えというのは無理があるからで、
本来は所有権の管理さえ適切に行えるようになってさえいればムーブなんか要らんよ
847デフォルトの名無しさん (オッペケ Sr4b-N9wp)
2018/09/30(日) 06:43:45.01ID:C9oWPEnUr
C++ Coding Standards って新品で買えないけど代わりになる書籍ありますか?
848デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/09/30(日) 06:48:23.20ID:d4gXl3Bi0
>>846
ポインタ使え思想はすでにC#とかなクラスが参照型な言語で実現されているが
オブジェクトの解放にガベージコレクタが要る言語になった

これはガベージコレクタ無し・所有権の無条件移動だけだと、次のようなケースで早速話が破綻するから仕方が無い
void bar(int n) {
 std::unique_ptr<Foo> a(new Foo());
 for (int i = 0; i < n; i++) {
  func1(a, i);  // func1(a, 0);で所有権がgone 以降のfunc(a, i)はaの不正アクセス
 }
}

不正アクセスにならないように、実際にはこのようなfunc1()にはa.get()でポインタを渡す書き方をする
するとfunc1()以下の呼び出しは全部>>844になる

人類に逃げ場は無い
849デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/09/30(日) 06:53:57.08ID:d4gXl3Bi0
それにポインタ使え思想だと次のようなケースでBaz::m_c[i]のBar:m_b[j]の:Foo::m_aのアクセスに藻前らどんだけ間接参照するんですかと、
class Foo {
 SomeClass m_a;
};
class Bar {
 Foo m_b[100];
};
class Baz {
 Bar m_c[100];
};
850デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/09/30(日) 07:13:40.02ID:d4gXl3Bi0
ちな>>849はm_bやm_cが配列であるため、配列アクセス時の添え字が定数なシチュでもない限り、JITでも間接参照回数を3以下にはできん
851デフォルトの名無しさん (ブーイモ MM7b-uZyL)
2018/09/30(日) 09:10:22.74ID:3yGUdTqFM
>>848
よくわからんな
848の問題はそれmoveでも一緒だよね
単にデフォルトの挙動がmoveかborrowかだけの話で、unique_ptrがたまたま前者なだけ
スマポ使えば間接参照はどうしても増えるけど、実際>>849のようなケースで特定の要素だけ所有権捨てたりしないでしょ
所有権を移動するかどうかはほぼ例外なくオブジェクト生成時点で予め分かってるんだから、その場合に限ってスマポを使えばよい
コーナーケースのために全てを複雑にする必要はない
852デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/09/30(日) 09:21:04.80ID:d4gXl3Bi0
>>851
>所有権を移動するかどうかはほぼ例外なくオブジェクト生成時点で予め分かってるんだから、
有り得ない仮定すぐる…
>>848なケースにおいて、オブジェクトaの生成時点というのは、
ライブラリー制作者がfunc1()を設計してビルドまで完了した後やがな…
853デフォルトの名無しさん (ブーイモ MM7b-uZyL)
2018/09/30(日) 09:39:54.40ID:3yGUdTqFM
>>852
自分でも分かってて揚げ足取ろうとしてるんだろうけど、コーディング時に、プログラマがオブジェクトを生成することを意図したコードを記述した時点で、な
854デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/09/30(日) 09:46:24.24ID:d4gXl3Bi0
>>853
いやスマン言い方がまずかったそういう意味ではない
確かに
>所有権を移動するかどうかはほぼ例外なくオブジェクト生成時点で予め分かってるんだから、
というのは真だが、ライブラリのインターフェースに解放が必要なオブジェクトのmoveなど認めたら有り得ないコストが生じるという話

func1()の制作者が所有権を寄越すことを強制した(そういうインターフェース仕様にしてしまった)場合、
func1()を使う人はfunc1()に所有権を渡さねばならない。この結果、
 1. 呼び出し元(func1()を使う人)がaをコピーしてコピーをfunc1()に渡さねばならない
 2. func1()は呼び出しの度に、aを解放する
というのが>>848のコードでn回無駄に繰り返される

これを避ける方法はあるっていやーあるが、結局func1()以下の呼び出しは全部>>844になる(か、ガベージコレクタの出番となる

人類に逃げ場は無い
855デフォルトの名無しさん (アウアウウー Sadb-uZyL)
2018/09/30(日) 09:52:25.65ID:CKZYWlYLa
>>854
だからそれmoveでも同じことだよね?
ユニバーサル参照のことを言ってるんだとしたら、あれただの型推論だぞ
856デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/09/30(日) 10:03:48.10ID:d4gXl3Bi0
>>855
解放が不要なオブジェクトのmoveは話がちげう
この場合、単に生ポインタ(オブジェクトのアドレス)をfunc1()に渡すのと変わらん
これはライブラリのインターフェースに現れてもコスト的には問題は無い

元レスのアンカー先>>846>>854のコストが避けられない主張
857デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/09/30(日) 10:07:31.97ID:d4gXl3Bi0
いやすまん解放が不要なオブジェクトでも、所有権を移動した場合は>>854の1のコストは避けられないorz
ここは訂正
858デフォルトの名無しさん (アウアウウー Sadb-uZyL)
2018/09/30(日) 10:11:13.08ID:CKZYWlYLa
>>856
スマポのmoveも本体のmoveも一段間接参照が入る以外は何も変わらないって言ってるんだけど、そんなに難しい話かなあ
859デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/09/30(日) 10:45:39.58ID:d4gXl3Bi0
>>858
>>848>>849は、現行C++におけるスマポのmoveと本体のmoveの優劣は問題にしていない

848を現行C++のコード風に書いたから誤解を招いたのかもしれないが、比較はあくまで現行C++と846思想の比較であって、
846の次の思想を実行に移したら>>854のコストが避けられませんよという話
 1. スタックを使うスタイルはやめるべき(全部スマポであるべき)
 2. 所有権の管理さえ適切に行えるようになってさえいれば(現行C++のムーブセマンティクスみたいな)ムーブなんか要らん

1は現行C++との比較において、間接参照回数に響く
2は現行C++との比較において、現行C++では避けられるコスト(>>854またはガベージコレクション)を無駄に背負い込むことになる
860はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-aemA)
2018/09/30(日) 10:52:02.74ID:56zUhffF0
>>858
本体のムーブも、ムーブ出来るように書いたらカスタムなスマートポインタみたいになるから、
間接参照が入っちゃうので、なおさら同じではあると思う。

でもまあ、ムーブは抽象化の方法であって、
最終的に実行されることが同じだからなくても良いってのは暴論よね。
861デフォルトの名無しさん (オッペケ Sr4b-hm9e)
2018/09/30(日) 11:10:34.99ID:f0zM7Hcdr
アンダースコアとドットをこの順で必ず含む string があったとして、アンダースコアからドットまでの部分文字列を切り出す処理って一行で書ける?

substr と find_first_of と find_last_of を組み合わせる方法を考えたんだが、
アンダースコアの前を削る;
ドットの後を削る;
という2行に渡るやり方しか思い付かない
862デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/09/30(日) 11:15:56.30ID:d4gXl3Bi0
ちな
>スマポのmoveも本体のmoveも一段間接参照が入る以外は何も変わらないって
これは現行C++においても違う違いがワカル男ならワカル

func1()からfunc2()にfunc1()の自動変数aをmoveするとして、かつfunc2()はインライン展開されるとすると、
func2()におけるaのメンバへのアクセスはfunc1()呼び出し時点でのスタックポインタ相対で一発でやれる
一方、aがスマポだったりすると、aのメンバへのアクセスの前に、func1()呼び出しの都度1回はスタックポインタ相対でaのアドレスを得なければならない
863デフォルトの名無しさん (ブーイモ MM7b-uZyL)
2018/09/30(日) 11:27:40.54ID:fM5IaZg4M
オブジェクト本体のメモリのコピーにかかるコストを考慮すればどっちもどっち
864デフォルトの名無しさん (ワッチョイ 9fa2-aemA)
2018/09/30(日) 11:54:22.15ID:u5/6mv7u0
>>861
substr じゃなくて、コンストラクタ使えばいいんじゃね
string t(s.begin() + s.find_first_of('_') + 1, s.begin() + s.find_last_of('.'));
865デフォルトの名無しさん (オッペケ Sr4b-hm9e)
2018/09/30(日) 12:29:37.73ID:f0zM7Hcdr
>>864
なるほど、ためになります
866デフォルトの名無しさん (オッペケ Sr4b-hm9e)
2018/09/30(日) 12:35:17.89ID:f0zM7Hcdr
>>864
ふと気になったのですが、このコンストラクタの挙動って他の名前の関数で実装されてないんでしょうか?
867さまよえる蟻人間 ◆T6xkBnTXz7B0 (スププ Sdbf-RRKt)
2018/09/30(日) 12:48:58.63ID:Eso9UeUod
>>866
assign
868デフォルトの名無しさん (オッペケ Sr4b-hm9e)
2018/09/30(日) 13:18:31.87ID:f0zM7Hcdr
>>867
何から何までありがとうございます
869デフォルトの名無しさん (ワッチョイ bf9f-e6iu)
2018/09/30(日) 14:15:51.90ID:QSRvujde0
「rustにもあるし俺らも入れなきゃ」くらいの感覚で
今までのシステムとの統合性の難しさなんかほぼ考えないで入れちゃった機能だから。
c++らしいといえばらしい感覚だけど。
870デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/09/30(日) 14:22:42.56ID:d4gXl3Bi0
std::basic_string::find()もイテレータを返すように他のコレクションとの統合性を尊重して欲しいよな
871デフォルトの名無しさん (ワッチョイ 77c7-aemA)
2018/09/30(日) 22:56:12.57ID:SdlFi6Ao0
findを実行した対象とは別のstringの同じ位置に何かしたいとき
イテレータで返されるとちょっとだけ面倒
まあ大した問題でもないんだけど
872デフォルトの名無しさん (ワッチョイ bf8a-ClIk)
2018/10/01(月) 17:20:37.02ID:mKeAnbBU0
moveセマンテックが必要になった理由を理解してないのが多くて驚くばかりだな
破壊して良い中間オブジェクトとそうじゃないのとを区別するために必要なのだよ
ポインタ使えばmove必要ないとかそういう問題じゃない
873デフォルトの名無しさん (ワッチョイ 9f02-aemA)
2018/10/01(月) 17:40:58.61ID:qsdLJDx40
元はといえば禿が左辺値参照でもconstつければ右辺値を指せるという曲がった話を始めたのが
評判悪くてC++11でやっとやっとやっとやっとメスが入ったのが本当の理由
874はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-aemA)
2018/10/01(月) 18:05:01.87ID:hbafP85H0
>>872
色んな話題が出てるので混乱してるが、ムーブ不要論を出してる側の *元々の* 主張は >>846 の通り
「ちゃんとした所有権の管理 (たぶん Rust みたいなやつのこと?) が有りさえすれば」
であって、でもそれは C++ ではもはや無理でしょということもわかった上だと思う。
875デフォルトの名無しさん (ワッチョイ f7c3-2BxS)
2018/10/01(月) 18:05:54.55ID:Gge6W+rt0
Cにも欲しいわ
Cは参照ないから右辺値指示ポインタで
876デフォルトの名無しさん (ワッチョイ 9f02-aemA)
2018/10/01(月) 18:09:04.02ID:qsdLJDx40
それを言うなら、右辺値の概念を撤廃すべきでしょ

どんな値もポインタで指すことができ、
ポインタで指すことでregister指定を解除されるという変更
877デフォルトの名無しさん (ワッチョイ 1704-ClIk)
2018/10/01(月) 18:12:32.93ID:UY4lJdAP0
テンポラリーオブジェクトなくすと、一回必ず厳密に生成してから仕様になるので、手間増えると思う。
878デフォルトの名無しさん (ワッチョイ f7c3-2BxS)
2018/10/01(月) 18:40:21.84ID:Gge6W+rt0
右辺値がないと int i = 0; すら書けなくなるんだが
879デフォルトの名無しさん (ワッチョイ 9f02-aemA)
2018/10/01(月) 18:50:50.76ID:qsdLJDx40
なんで?

int j;
j ^= j;
int i = j;
左辺値でも問題ないじゃん
880デフォルトの名無しさん (オイコラミネオ MM4f-IJfJ)
2018/10/01(月) 18:54:00.22ID:xwh6ZD/vM
>>879
苦しいねーw
881デフォルトの名無しさん (ワッチョイ 77e3-c2ki)
2018/10/01(月) 19:00:24.21ID:Yquio+NL0
0 以外はどうすんの。
882デフォルトの名無しさん (ワッチョイ f7c3-2BxS)
2018/10/01(月) 19:02:25.38ID:Gge6W+rt0
> j ^= j;
はい未初期化値を使ったから未定義動作で鼻から悪魔
883デフォルトの名無しさん (ワッチョイ 77e3-c2ki)
2018/10/01(月) 19:04:34.50ID:Yquio+NL0
char buf[1];

int i = (int)(buf[10] - buf[0]);

で、i = 10 に初期化される。
884デフォルトの名無しさん (オイコラミネオ MM4f-IJfJ)
2018/10/01(月) 19:05:56.72ID:xwh6ZD/vM
NaNのときはxorは未定義か、そこまで考えなかったな
885デフォルトの名無しさん (ワッチョイ 9f7c-c2ki)
2018/10/01(月) 19:06:32.55ID:uXaVofwo0
>>883
間違った。正しくは:

char buf[1];

int i = (int)(&buf[10] - &buf[0]); // i = 10 と等価。
886デフォルトの名無しさん (ワッチョイ bf9f-e6iu)
2018/10/01(月) 19:11:01.98ID:rJND5eoS0
そもそも=の無理やりなオーバーロードや引数に対する暗黙的なattainが問題なんだろう。
しかし元々のcのシンタックスを引き継ぎつつ、上記の問題を解決するのは不可能。
887デフォルトの名無しさん (ワッチョイ f7c3-2BxS)
2018/10/01(月) 19:14:47.64ID:Gge6W+rt0
>>885
10
0
&buf[10]
&buf[0]
&buf[10] - &buf[0]
(int)(&buf[10] - &buf[0])

右辺値だらけ
やりなおし
888デフォルトの名無しさん (ワッチョイ 9f02-aemA)
2018/10/01(月) 19:19:47.07ID:qsdLJDx40
>>881
別に?

int *j;
j = &10;
int i = *j;
てだけじゃん

10が左辺値だったらって話ね

char *j;
j = "\n";
int i = *j;
て話と何か違うの?
889デフォルトの名無しさん (ワッチョイ f7c3-2BxS)
2018/10/01(月) 19:23:45.27ID:Gge6W+rt0
10が左辺値ならこれ認めるの?
10 = 42;
890デフォルトの名無しさん (ワッチョイ 574e-2bq/)
2018/10/01(月) 21:57:05.81ID:92NEoPQV0
お前らがC++で作ったことあるものリスト化して
891デフォルトの名無しさん (ワッチョイ 9f02-aemA)
2018/10/01(月) 22:37:33.40ID:qsdLJDx40
>>889
全然かまわん
int a = 10;
int b = 10;
a = 42;
こう言っているに過ぎない
892デフォルトの名無しさん (ワッチョイ 9f02-aemA)
2018/10/01(月) 22:42:30.92ID:qsdLJDx40
>>878
そろそろ答えてもらおうか
なぜ右辺値がないと int i = 0; が書けないのか
893デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/10/01(月) 23:15:35.29ID:2m3Ms8fl0
>>874
ていうか所有権などという中途半端な概念にオブジェクトの解放を担わせるのは危険か無意味かのどっちかにしかならない
最後までオブジェクトを使いたい人と、そのオブジェクトを所有する人を
コードに所有権を明示するスタイルで一致させられるケースは少ない

希ガス
894デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/10/01(月) 23:21:45.86ID:2m3Ms8fl0
しかしながら右辺値参照を使うとコードを書く人がオブジェクトの所有権を意識せざるを得ない
これを抽象化といわれるとかなり違和感

※ 個人の感想です
895デフォルトの名無しさん (ワッチョイ bf9f-e6iu)
2018/10/01(月) 23:31:19.12ID:rJND5eoS0
結局ネストしたオブジェクトってのはどう扱おうと楽な扱いなんてできんってことなんだわ。
同期と効率と安全性を全て容易にするってのは不可能なんじゃないかね。
896デフォルトの名無しさん (ワッチョイ 9fbd-G9Ql)
2018/10/01(月) 23:41:31.83ID:2m3Ms8fl0
>>895
>結局ネストしたオブジェクトってのはどう扱おうと楽な扱いなんてできんってことなんだわ。
いや?
オブジェクトの所有権は最初のcallerががっちり掴んでオブジェクトを使うcallee以下は生ポでおk

全てが調和する
897デフォルトの名無しさん (ワッチョイ 5780-q1nr)
2018/10/01(月) 23:46:11.02ID:zfKNS/F/0
アホどもはやっと気付いたか。。。

コタエ:最初から普通にポインタで書きなさい
   unique_ptr、shared_ptr、weak_ptrなんか使ってるヤツラは
   クルクルパーしかいない
898デフォルトの名無しさん (ワッチョイ 17b3-kFNE)
2018/10/01(月) 23:49:34.85ID:aHxMqUX30
>>894
右辺値参照周りを抽象化とか言ってるアホははちみつだけだろ
899デフォルトの名無しさん (アウアウウー Sadb-mlbx)
2018/10/02(火) 00:39:52.22ID:YrRJAaFSa
https://ideone.com/BBhHn8

上のコードで教えて欲しい。

templateでデフォルト引数で関数を指定する場合、わざわざテンプレートパラメーターFuncにdecltype(...)しなきゃいけないのは何故?
900デフォルトの名無しさん (ワッチョイ 17b3-aemA)
2018/10/02(火) 01:21:04.00ID:HQVsIoxF0
https://ideone.com/JKTYpf

testは関数名だから型じゃない
901はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-aemA)
2018/10/02(火) 02:10:18.78ID:wuORmtyC0
>>894
ムーブだのなんだの言ってても、
C++ の言語機能として直接的に有るのは rvalue 参照を区別して受け取れるってだけで、
所有権の管理をキッチリやってくれるわけではない C++ の限界なんだよね。

だけど、なるべくクラス・関数の実装の中に区別を押し込めて隠す道具のひとつにはなるって話。
でも、中途半端にやるなら隠さないで見せた方がマシという論はわかる。
902はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-aemA)
2018/10/02(火) 05:46:40.59ID:wuORmtyC0
受取る関数の側を上手く作っておけば
それを使う側では所有権の移動とかそんなに気にしなくない?
rvalue だったら勝手にちょっと効率的になる (こともある) ねってだけで。

使うときに気にしなくて良いように押し込められるならやっぱり抽象化の道具って言えると思うよ。
903デフォルトの名無しさん (アウアウウー Sadb-mlbx)
2018/10/02(火) 06:04:33.19ID:YrRJAaFSa
>>900
ありがとう。

template<typename Func = int (int)>

template<typename Func>

にするとエラーになるのは何故?
904はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-aemA)
2018/10/02(火) 06:50:19.11ID:wuORmtyC0
>>903
デフォルト引数からはテンプレート引数を推定できない制限がある。
905デフォルトの名無しさん (アウアウウー Sadb-mlbx)
2018/10/02(火) 07:00:39.49ID:YrRJAaFSa
なるほどです。
906デフォルトの名無しさん (ワッチョイ 9702-aemA)
2018/10/02(火) 07:46:51.87ID:kk/2dA0Y0
時々、イラつかされる制限だ
907デフォルトの名無しさん (ラクッペ MM0b-2bq/)
2018/10/02(火) 08:15:45.67ID:Tcj3k2lbM
>>890
C++が得意なことを教えてください
908デフォルトの名無しさん (ブーイモ MM7b-uZyL)
2018/10/02(火) 10:26:10.74ID:giBEQZ0BM
>>902
いや呼び出す側に意識させるのが右辺値参照の目的だろ
意識しなくていいようなケースならconst参照で十分
909デフォルトの名無しさん (ワッチョイ 9702-aemA)
2018/10/02(火) 10:31:03.15ID:kk/2dA0Y0
冗談は顔だけにしろよ
たとえばstd::threadの右辺値参照なんぞ意識してるか?
910デフォルトの名無しさん (ワッチョイ 17b3-kFNE)
2018/10/02(火) 13:13:32.45ID:8CvSI5wK0
一行目に何の意味があるのかわからん
911デフォルトの名無しさん (JP 0H4f-ZVm4)
2018/10/02(火) 15:51:55.37ID:Xh7D/bbnH
割と昔からあるプログラムを見てるんですけど一つのメソッド内で
for(int i = 0; ……){……}
for(i = 0;……){……}

って書き方してるのをちらほら見ます
要は宣言してるんだから使い回せるだろみたいな理屈なんでしょうがビルドしようとすると当然未定義だとエラーが出ます
昔のC++だとこれがオッケーだったりしたんでしょうか?
912デフォルトの名無しさん (ワッチョイ 9702-aemA)
2018/10/02(火) 15:56:06.09ID:kk/2dA0Y0
そうだよ
913デフォルトの名無しさん (ラクッペ MM0b-2bq/)
2018/10/02(火) 16:33:18.83ID:Tcj3k2lbM
c++で初心者が作れるものを教えてください
914デフォルトの名無しさん (ワッチョイ 9702-aemA)
2018/10/02(火) 16:37:39.73ID:kk/2dA0Y0
rogueとか作って見てはどうよ
SetConsoleCursorPositionとGetKeyStateがあれば何とかなるだろ
915はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-aemA)
2018/10/02(火) 16:39:28.61ID:wuORmtyC0
>>911
むしろ古い仕様だと後者の i を宣言しようとすると、
ひとつのスコープ内で同じ名前の変数を定義しようとした扱いになってエラーになったりした。
916デフォルトの名無しさん (ワッチョイ 9702-aemA)
2018/10/02(火) 17:18:00.03ID:kk/2dA0Y0
今のコンパイラでも当時の仕様に合わせるオプションはある
917デフォルトの名無しさん (ラクッペ MM0b-2bq/)
2018/10/02(火) 18:04:17.03ID:Tcj3k2lbM
>>914
ありがとう
918デフォルトの名無しさん (ラクッペ MM0b-2bq/)
2018/10/02(火) 19:05:29.79ID:Tcj3k2lbM
C++.でバッチ処理やbashのsedの様な機能はありますか?
919デフォルトの名無しさん (ワッチョイ 9702-aemA)
2018/10/02(火) 19:11:57.50ID:kk/2dA0Y0
システムコマンドを実行したいのならsystem関数
正規表現ならstd::regexクラス
ファイル名に関する様々なことはstd::filesystem::pathクラス
920デフォルトの名無しさん (ワッチョイ 574e-2bq/)
2018/10/02(火) 20:37:48.16ID:YnEH1wx10
>>919
ありがとうございます
とても便利です
921デフォルトの名無しさん (オッペケ Sr4b-N9wp)
2018/10/03(水) 01:07:54.12ID:S2BN/gu+r
std::array を自作関数の引数に渡したいときって、サイズはハードコードしないとダメなの?
922さまよえる蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ d7b3-uTcE)
2018/10/03(水) 01:11:26.75ID:gXNqr2Qf0
>>921
template <size_t t_n>
void my_func(std::array<data_t, t_n>& a)
{
...
}
923デフォルトの名無しさん (オッペケ Sr4b-N9wp)
2018/10/03(水) 01:18:33.15ID:S2BN/gu+r
>>922
なるほ
ありがとうございます
924デフォルトの名無しさん (オッペケ Sr4b-N9wp)
2018/10/03(水) 01:18:50.70ID:S2BN/gu+r
>>922
なるほ
ありがとうございます
925デフォルトの名無しさん (ワッチョイ 1708-ClIk)
2018/10/03(水) 03:04:58.67ID:plRFOjxw0
>>912 >>915
ありがとうございました。やっぱそうだったんですね
しかし検索しても全然出てこないというかどう検索したら良いものか。C++98とかの時代になるんですかねぇ
926はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-aemA)
2018/10/03(水) 05:02:16.81ID:jiQInXAP0
>>925
たぶんそれより更に前の話だったと思う。

「c++ for文 宣言 スコープ」でググったらこういうのとかヒットした。
http://www.ksky.ne.jp/~seahorse/cpp/loopvar.html

D&E でも言及があって、 if 文でのルールと合わせる形で修正したという話が載ってる。
927デフォルトの名無しさん (ワッチョイ 373d-0kAr)
2018/10/03(水) 05:31:10.20ID:F+YgKz680
>>916
VC++ですら廃止予定だけど
https://msdn.microsoft.com/ja-jp/library/84wcsx8x.aspx
928はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-aemA)
2018/10/03(水) 05:33:04.20ID:jiQInXAP0
ARM (The Annotated C++ Reference Manual; http://amzn.asia/d/53K2HrA ) を確認してみたら、
「初期設定文が宣言ならば、宣言された変数のスコープは for 文を囲むブロックの終わりまでである」
というような記述がある。 (要するに古い仕様)

このあたりから C++98 になるまでの間に修正したってことなんじゃないかと。
929デフォルトの名無しさん (ワッチョイ 9702-aemA)
2018/10/03(水) 07:01:52.10ID:IEc6BJqm0
>>926

キーワードと完全に同じ綴りのマクロがあると
標準ヘッダが動作保証外になる

ISO/IEC9899:2011 7.1.2 Standard headers の段落4
930デフォルトの名無しさん (スッップ Sdbf-wTw4)
2018/10/03(水) 11:00:28.82ID:e50Rb7+yd
>>925
最初期の処理系、AT&T cfront の頃からの仕様だから 1980年台だと思う
ちなみに有名な Annotated C++ Reference Manual (ARM) は
この cfront のリファレンスマニュアルに注を付けたもの。

Mac II が出た頃の Mac のソフト開発者は Apple の MPW という開発環境の上で
AT&T のリファレンスマニュアル見ながら cfront で開発していた。
931デフォルトの名無しさん (スッップ Sdbf-wTw4)
2018/10/03(水) 11:03:08.53ID:e50Rb7+yd
>>925
>しかし検索しても全然出てこないというかどう検索したら良いものか。

当時まだ処理系と独立して言語仕様を策定/記述したものは存在していなくて、
上記の cfront のリファレンスマニュアルと cfront の実際の動作が c++ の仕様でした。
932デフォルトの名無しさん (ワッチョイ 17b3-kFNE)
2018/10/03(水) 12:23:08.82ID:eWsEWXO50
>>929
そんなもん古い環境で使うなら標準ヘッダのインクルード後に定義するに決まってるだろ
現行の標準に合わせたいけど仕方なく古い環境でも動くようにしたい場合のテクニックなんだから
933デフォルトの名無しさん (ワッチョイ 9702-aemA)
2018/10/03(水) 13:10:09.63ID:IEc6BJqm0
>>932
俺だったらこう書くぜ
{ for(int i = 0; i < 1; i++) ; }
{ for(int i = 0; i < 1; i++) ; }
前提にしている環境を誤解させかねない変態コードには反対だ
934デフォルトの名無しさん (ワッチョイ 9f23-wTw4)
2018/10/03(水) 13:21:21.77ID:2zzoZNSm0
ヘタレな俺は c 同様直近のブロックの頭で宣言してました
935はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf6f-aemA)
2018/10/03(水) 17:25:53.30ID:jiQInXAP0
>>934
今では C でもブロックの頭という縛りは無いやで。
936デフォルトの名無しさん (オッペケ Sr4b-N9wp)
2018/10/03(水) 22:30:16.11ID:T5RLH7Axr
std::array ってコンパイル時にサイズが決まっていることを想定して作られてるんだよね?

だったら、「可変長ではないがサイズは実行時に決まる」というメモリが連続な配列がほしいなら生配列を使え、というのが C++ を作った人の気持ちなの?
937デフォルトの名無しさん (アウアウウー Sadb-mlbx)
2018/10/03(水) 23:04:38.92ID:p3pJJViFa
それこそvectorじゃないの
938デフォルトの名無しさん (ワッチョイ 1704-ClIk)
2018/10/03(水) 23:19:51.08ID:frDsf1q90
>>936
いや、昔はイニシャライザーリストがなかったので、初期化式が使えるオブジェクトの立ち位置だった。
イニシャライザーリストが入ったのでほぼ産廃。constexprの対応もなく死んでいる。
基本的に配列っぽいものがほしかったらベクター使ってっていう趣旨だったと思う。
939デフォルトの名無しさん (オッペケ Sr4b-N9wp)
2018/10/03(水) 23:26:50.16ID:T5RLH7Axr
>>937-938
vector ってメモリ空間連続ですか?
だったら迷わずこれ使うんですが
940デフォルトの名無しさん (ワッチョイ 1704-ClIk)
2018/10/03(水) 23:29:56.10ID:frDsf1q90
>>939
&V[0]すると一本のメモリの先頭が取れると規格書に書いてあると聞いた。
これは、サイズを拡張するなどのメモリ変更があるまで同じものを指してると思う。
941デフォルトの名無しさん (ワッチョイ c48a-Aquf)
2018/10/04(木) 00:07:58.65ID:zm1AtLvQ0
>>939
迷わず使っていいですよ
942デフォルトの名無しさん (ワッチョイ 9bc3-dNAh)
2018/10/04(木) 00:35:06.85ID:b1qTAw9u0
C++11からvectorのメモリ空間は連続でなければならないと規格で決められた
安心していいよ
943デフォルトの名無しさん (オッペケ Sr10-/FYQ)
2018/10/04(木) 00:40:31.88ID:bav+IDITr
>>940-942
ありがとうございます
しかしメモリが連続じゃないといけない外部ライブラリに vector 渡すの結構緊張しますね


少し飛躍するのですが、vector の入れ子は流石に連続とは限りませんよね?
944デフォルトの名無しさん (アウアウウー Sa30-z023)
2018/10/04(木) 00:58:43.11ID:s35zoLCpa
メモリ連続させたいならvectorの入れ子はよして。

最初arrayで考えてたなら画像とか行列とかそんな感じかな?
945デフォルトの名無しさん (スップ Sdc4-+rwh)
2018/10/04(木) 01:32:01.20ID:ezH2Wklod
>>942
太古から実際には連続だし規格として明記されたのは C++03 から。
C++11 で連続と規格化されたのは string (basic_string) の方。
946デフォルトの名無しさん (オッペケ Sr10-/FYQ)
2018/10/04(木) 01:57:52.21ID:CYtCz8O/r
>>944
いえ、もともとは生の一次元配列を使ってて、array の方が取り回しが良いのかなと考えただけです
実際は vector が最強ということですね

入れ子云々は本当に気になっただけです

多次元配列は、色々諦めて Boost を使っています
947デフォルトの名無しさん (ワッチョイ de8a-F3g9)
2018/10/04(木) 03:00:41.82ID:SxiNReMs0
変数名とかクラス名にめちゃくちゃ毎回悩む
従業員の名前、社員番号、階級みたいなクラスを作るときのクラス名とかって普段どうしてる?
Employeeだけで良いのだろうか
DataとかInfoとか意味のあるようでないような命名が頭をよぎってしまう

仮に従業員をEmployeeとしたときに会社名と従業員リストのDictionary<string, List<Employee>>の変数名とかどうすりゃええねんってなる
CompanyではないしCompanyDataだとそれっぽいが的確でもなさそうだし...
948デフォルトの名無しさん (スップ Sdc4-+rwh)
2018/10/04(木) 03:38:58.82ID:ezH2Wklod
emproyees でいいだろ
for (consy auto& emproyee : emproyees["Microsoft"]) ...
949デフォルトの名無しさん (スップ Sdc4-+rwh)
2018/10/04(木) 03:39:14.21ID:ezH2Wklod
rじゃなくてlか
950さまよえる蟻人間 ◆T6xkBnTXz7B0 (スププ Sd94-hQIv)
2018/10/04(木) 04:00:10.87ID:MLculXgyd
MapCompanyNameToEmployees
951はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e66f-vBoO)
2018/10/04(木) 04:12:55.17ID:1wg41Y300
>>939
vector が連続と明記されたのは C++03 だが、
C++ 標準の体制としては仕様の「欠陥」と認められた項目については過去の版にさかのぼって適用されることがあり、
vector が連続であるというのもそのひとつのはず。

つまり、 C++98 を名乗る処理系でも vector は連続であるべきで、実際にほとんどそうなっていると思う。
952デフォルトの名無しさん (ワッチョイ 1e81-toeJ)
2018/10/04(木) 04:54:31.87ID:MQvrn7bB0
>>947
クラス名・変数名に迷ったら書き込むスレ。Part28 [無断転載禁止]©2ch.net
https://mevius.2ch.net/test/read.cgi/tech/1494147712/
953デフォルトの名無しさん (ワッチョイ a6b3-XM+q)
2018/10/04(木) 19:12:35.69ID:Ohr0xwue0
>>947
素直に日本語使えばええやんけ。
954デフォルトの名無しさん (ワッチョイ 26bd-PkCJ)
2018/10/05(金) 00:43:30.52ID:SgefIaql0
英語の複数形は便利すぐる
emproyee_list[]の代わりにemproyees[]で済む
大文字小文字でキャメルケースも使えるしほんと出来過ぎ
955デフォルトの名無しさん (ワッチョイ 0cb3-vBoO)
2018/10/05(金) 01:05:30.84ID:lAZe+Hwv0
単独かコンテナで意味が大きくかわるのに
字面の違いがsのありなしは微妙すぎていまいちだと思ってる
956デフォルトの名無しさん (ワッチョイ 529f-QTQU)
2018/10/05(金) 06:55:01.43ID:226EunUa0
しかしそこまでメモリに直触りするならvectorでない方がいい気がするんだが。
957デフォルトの名無しさん (ワッチョイ 9f02-vBoO)
2018/10/05(金) 07:56:42.65ID:Zg//fZBj0
だよな
生メモリがいるなら生メモリ使えってこと
958デフォルトの名無しさん (オッペケ Sr10-/FYQ)
2018/10/05(金) 08:13:10.92ID:8YBbWag1r
>>956-957
サイズの取得とかオシャレにできないじゃん
959デフォルトの名無しさん (ワッチョイ 8ad7-vBoO)
2018/10/05(金) 12:49:05.99ID:cQzHZ22n0
生メモリのサイズの管理の仕方さえ忘れたか
960デフォルトの名無しさん (ワッチョイ 6ee3-BkfR)
2018/10/05(金) 18:47:04.93ID:4ThlZrTR0
>>947

g_dictCompanyInfo
961デフォルトの名無しさん (ワッチョイ 6ee3-BkfR)
2018/10/05(金) 18:49:08.38ID:4ThlZrTR0
>>960
もし、今後絶対、employee の情報しか入れないと言い切れるのなら、
g_dictCompanyEmploees

でもいい。何か追加する予定なら、>>960 のように「g_dictCompanyInfo」
962デフォルトの名無しさん (ワッチョイ 6ee3-BkfR)
2018/10/05(金) 18:51:17.31ID:4ThlZrTR0
>>947
最初の従業員のデータについては、
EmployeeInfo

二番目の dictionary の方は、
g_dictCompanyEmploeeInfo_s
963デフォルトの名無しさん (ワッチョイ 928a-SWBM)
2018/10/05(金) 20:18:06.35ID:2Vgho4wC0
g_とか_sとかなんなんだそれ
964デフォルトの名無しさん (ワッチョイ ba12-A6IM)
2018/10/05(金) 21:02:11.53ID:eXLBKWdN0
秘密の呪文
965デフォルトの名無しさん (ワッチョイ 4634-C4cH)
2018/10/05(金) 21:42:38.07ID:s/+stmcD0
ハンガリアン記法とかいうMSが編み出した負の遺産
966デフォルトの名無しさん (ワッチョイ 9bc3-dNAh)
2018/10/05(金) 21:54:51.59ID:wRA0FWgN0
型付けるハンガリアンは糞だけど、グローバル変数にg_付けるのは普通でしょ
付けないの?
967デフォルトの名無しさん (ワッチョイ df7f-vBoO)
2018/10/05(金) 21:56:47.70ID:zW6/2yxd0
グローバル変数使わないしg_つけてもなんの役にも立たないし
968デフォルトの名無しさん (ブーイモ MM98-Ww/X)
2018/10/05(金) 22:29:36.85ID:dsZIcecxM
スコープを示すハンガリアンは変数のスコープを不必要に広げることに対する心理的抵抗を低減するという点で害悪
969デフォルトの名無しさん (ワッチョイ c0f2-vBoO)
2018/10/05(金) 22:48:31.92ID:qdFd1sVz0
あの複雑怪奇な名前解決ルールを受け入れているC++使いからしてみれば、変数が
ローカルかグローバルかなんてわざわざ目印付けるほどのことじゃないのかも
970デフォルトの名無しさん (ワッチョイ 26bd-PkCJ)
2018/10/05(金) 22:49:02.31ID:SgefIaql0
パブロフの犬カヨ
グローバル変数の先頭に「g_」を付け続けると
そのうち先頭に「g_」とつけただけで
971デフォルトの名無しさん (ワッチョイ 26bd-PkCJ)
2018/10/05(金) 23:02:57.02ID:SgefIaql0
しかしいかにクラスFooに関連するオブジェクトは全部Fooのコンストラクタかsetterで渡すか一時オブジェク
トとしてメソッドの引数として都度渡すのがオブジェクト指向設計としての理想とはいえ実際には対数表のカ
スタマイズ版みたいにかなり普遍的な意味を持つテーブルTが存在する前提でいっぱいクラスを定義したい
ときもあるわけでそういうときはテーブルTをグローバル変数とした方がスマートに書けるTがこの世に1つし
かないのにいちいちインスタンス毎にTへのポインタを持たせるのですかみたいな、

で、そうするとグローバルであることの目立つ標識が欲しいところだがオリジナルの規則を考えるのもアホら
しいので使用人口が多そうな「g_」を使う
972デフォルトの名無しさん (ワッチョイ 8ad7-vBoO)
2018/10/05(金) 23:05:20.25ID:cQzHZ22n0
60億人がシステムハンガリアンの良さを発見できなかった
そういうことだ
973デフォルトの名無しさん (ワッチョイ 8ad7-vBoO)
2018/10/05(金) 23:06:16.17ID:cQzHZ22n0
せっかく自動化したものを蒸し返す愚行
機械に使われる人間に自ら志願するようなことでしかない
974デフォルトの名無しさん (バッミングク MMc2-Ww/X)
2018/10/05(金) 23:14:36.32ID:MM5jcfpFM
ハンガリアン記法が滅亡した時にgとかsとかのスコーププレフィックスも一緒に絶滅したと思うの。
975デフォルトの名無しさん (ワッチョイ 26bd-PkCJ)
2018/10/05(金) 23:19:28.57ID:SgefIaql0
もうそういうのは見飽きたからハンガリアン無差別否定派とアプリケーションハンガリアン推進派が頃しあって消滅してくれたらいいのに…
976デフォルトの名無しさん (ワッチョイ 6ee3-BkfR)
2018/10/05(金) 23:22:01.95ID:4ThlZrTR0
「ハンガリアン記法を使うと、コードの断片からでも何かを発見できる。」
977デフォルトの名無しさん (ワッチョイ 6ee3-BkfR)
2018/10/05(金) 23:25:38.27ID:4ThlZrTR0
C#では、メンバ変数 aaa をアクセスする時には、必ず、
「this.aaa」
とするらしい。これは、C++で、ハンガリアン記法を使った場合の、
「m_aaa」
に該当する。this. と m_ では、後者のほうが短く便利。

m_ も、this. も付けない場合、たとえば、コンストラクタで
同じ意味の仮引数を使いたい場合に、何らかの別の名前を
考えなければならなくなる。
978デフォルトの名無しさん (ワッチョイ 0104-SWBM)
2018/10/05(金) 23:26:32.77ID:eEmdo3hB0
サイズ変更してキャパシティ変更になったらデリートかかる可能性が高いのでそういうことを一応管理しないといけない。
979デフォルトの名無しさん (ワッチョイ 26bd-PkCJ)
2018/10/05(金) 23:28:00.34ID:SgefIaql0
>C#では、メンバ変数 aaa をアクセスする時には、必ず、
>「this.aaa」
>とするらしい。
mjd?
いつから?次の元号から??
980デフォルトの名無しさん (ワッチョイ 965b-zn+7)
2018/10/05(金) 23:29:24.93ID:3VgmxBOW0
一般的に言われているシステムハンガリアンのデメリットはg、s、mには当てはまらない。
iとかdwとかlpszみたいな糞接頭辞とは分けて考えたほうがいいと思うよ。
981デフォルトの名無しさん (ワッチョイ 6ee3-BkfR)
2018/10/05(金) 23:31:13.38ID:4ThlZrTR0
個人的には、以下のような命名規則は大いに役立っており、
コード全体を見ずにコードの断片を見るだけで、何も考えずに
コーディングが出来ることが多くなる。おかげでずいぶん楽になった。

char *pszText;
char szText[256];
CString strText;
char **ppszText;

「sz」は、0終端文字列。s = string、z = zero。
p は、ポインタ、str は、CString。
pp は、ポインタへのポインタ。
982デフォルトの名無しさん (ワッチョイ df7f-vBoO)
2018/10/05(金) 23:36:17.35ID:zW6/2yxd0
m_がついててもそれがメンバである保証が何もないからなあ。無駄なだけ
983デフォルトの名無しさん (ワッチョイ 6ee3-BkfR)
2018/10/05(金) 23:39:57.45ID:4ThlZrTR0
>>980
個人的には、i や dw は滅多に使わない。
lpszは、自分では使わない。pszは使う。
なぜなら、lpsz の「l」 は、16BIT時代から32BIT 時代へ移行したときの産物だから、
今は時代遅れなので。

ところで、dwRead と書くと、宣言を見返さなくても、読み込みバイト数を表す DWORD 値だと
分かって便利。dwWrite だと、その書き込み版となる。変数名が規則変化するのでとっても便利。

たとえば、「text」という変数名だと、CString 型なのか、0終端文字列なのか、
0終端が付いてないような特殊な文字列なのかが分からない。
ところが、ハンガリアン記法を使うとそれらが明確に区別できる。


0終端文字列を配列で持っているのか、それとも、そのアドレスをポインタで
持っているのかも、sz か、psz かで区別できる。

このことはバグの少ないコーディングにとても役立つ、。
頭を使わなくても機械的にコーディングできてしまうことが多くなるから。
984デフォルトの名無しさん (ワッチョイ 26bd-PkCJ)
2018/10/05(金) 23:46:52.35ID:SgefIaql0
命名のプレフィックスに関する個人的な熱い想いはカプセルの内側に隠蔽すると良い
そういう意味で「m_」は比較的どうでも良い
985デフォルトの名無しさん (ワッチョイ 965b-zn+7)
2018/10/05(金) 23:50:11.62ID:3VgmxBOW0
>>982
それを言うならあらゆるシンボル名が正しくそれを示している保証なんてないと思うよ。

>>983
そういうのはoopやtmpと相性が悪いんで…
986デフォルトの名無しさん (ワッチョイ d980-A6IM)
2018/10/05(金) 23:51:01.17ID:elz6X2140
こういう話だけは食い付きがいい
さすがドカタ
987デフォルトの名無しさん (ワッチョイ df7f-vBoO)
2018/10/05(金) 23:52:25.87ID:zW6/2yxd0
そうだよ。だから最低限にしないといけない
無駄なものをつけるのはいらんバグを増やすだけで悪
988デフォルトの名無しさん (ワッチョイ 26bd-PkCJ)
2018/10/05(金) 23:54:14.41ID:SgefIaql0
個人的にはCのライブラリ関数名に「g_」がついていないのを遺憾に思う
989デフォルトの名無しさん (スップ Sd02-YLcB)
2018/10/05(金) 23:54:47.79ID:ZMQnisBBd
今時ハンガリアン使うアホがいたとは驚きなんだがw
もう絶滅したと思ってた
990デフォルトの名無しさん (ワッチョイ 6ee3-BkfR)
2018/10/06(土) 00:00:43.80ID:JjdhAE/r0
>>985
>そういうのはoopやtmpと相性が悪いんで…

どういう意味?
991さまよえる蟻人間 ◆T6xkBnTXz7B0 (スププ Sd70-hQIv)
2018/10/06(土) 00:06:22.53ID:SJezKYMvd
OOP == オブジェクト指向プログラミング
TMP == テンプレート/temporary
992デフォルトの名無しさん (ワッチョイ 6ee3-BkfR)
2018/10/06(土) 00:07:22.53ID:JjdhAE/r0
何で相性が悪いのかが分からぬ。
993デフォルトの名無しさん (ワッチョイ 26bd-PkCJ)
2018/10/06(土) 00:11:20.65ID:d9G2ZJ030
いかにハンガリアン否定派といえども
いざ実際ハンガリアンで書かれた変数名を見たら体が反応してしまうということなんだろJK
鍛錬が足りん
994デフォルトの名無しさん (ワッチョイ 6ee3-BkfR)
2018/10/06(土) 00:14:20.26ID:JjdhAE/r0
ずっと前に、ハンガリアン記法で書かれた比較的大きなソース・コードを見て
とても分かりやすかったので自分もそれに習っただけなんだよね。
995デフォルトの名無しさん (ワッチョイ ee9f-vBoO)
2018/10/06(土) 00:23:46.06ID:PyrakEMK0
実際みんなが叩いてるから叩いてるってやつはいるだろうな
俺も別に悪くはないと思うよ
自分から進んで使おうとは思わないが
996デフォルトの名無しさん (ワッチョイ 4634-C4cH)
2018/10/06(土) 00:28:00.98ID:GMmUDkcN0
型が殖える度に変数名のプレフィックスがどんどんどん殖えていくなんてコーダー側からしたら不毛なだけ
いざ型名変えたいと思っても後ろを振り向くのが怖くなる
997デフォルトの名無しさん (ワッチョイ 6ee3-BkfR)
2018/10/06(土) 00:33:38.42ID:JjdhAE/r0
でも、BOOL 値の変数の先頭に b を付けたりすると、ミスを発見するのに大いに役立つ
事があるよ。
998デフォルトの名無しさん (ワッチョイ 4634-C4cH)
2018/10/06(土) 00:36:41.02ID:GMmUDkcN0
読む側にとってはな
書く側は細心の注意を払わないといけない
簡単に後戻りできないからな
メンテ効率最悪なんだよ
999デフォルトの名無しさん (ワッチョイ 965b-zn+7)
2018/10/06(土) 00:38:54.48ID:CdYUXXMG0
次はpart139でいいのか?
1000デフォルトの名無しさん (ワッチョイ 0104-SWBM)
2018/10/06(土) 00:42:40.48ID:tQclXtq/0
ハンガリアンは、集団にその命名方法が周知されていないといけないので、周知するところから始めないといけない。
周知できればコスト低減できるが、それまでのコストをどうみつもる?
-curl
lud20241210003328ca
このスレへの固定リンク: http://5chb.net/r/tech/1535353320/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「C++相談室 part137 ->画像>4枚 」を見た人も見ています:
C++相談室 part156
C++相談室 part126
C++相談室 part142
C++相談室 part143
C++相談室 part136
C++相談室 part147
C++相談室 part144
C++相談室 part138
C++相談室 part137
C++相談室 part135
0からの、超初心者C++相談室
C++相談室 part131 [無断転載禁止]
Cygwin + MinGW + GCC 相談室 Part 8
C#, C♯, C#相談室 Part94
C#, C♯, C#相談室 Part91
C#, C♯, C#相談室 Part97
【太気拳】なんでも相談室 part6【意拳】
アパート経営なんでも相談室【135号室】
シーバスなんでも相談室 17&#169;3ch.net
アパートマンション経営なんでも相談室【154号室】
アパートマンション経営なんでも相談室【153号室】
アパートマンション経営なんでも相談室【154号室】
BBC「リリベットは女王に相談してない」ヘンリー夫妻「相談したわ訴えてやる」王室ノーコメ
【聯合ニュース】韓日慰安婦合意「密室会談で決着」「韓国外交の恥」 韓国与党議員が主張[10/27]
【皇室】眞子内親王殿下がお気持ち表明「結婚に向けて家族とも相談しながら進んでまいりたい」★12 [ばーど★]
【皇室】眞子内親王殿下がお気持ち表明「結婚に向けて家族とも相談しながら進んでまいりたい」★14 [ばーど★]
【皇室】眞子内親王殿下がお気持ち表明「結婚に向けて家族とも相談しながら進んでまいりたい」★8 [記憶たどり。★]
【身体】ズバリ解決!名医のお悩み相談室 気づくのが難しい『前立腺がん』 前立腺肥大症との見分け方は?[09/02] ©bbspink.com
【名古屋】いじめ相談も「報復」恐れ学校側は直接指導せず…中1女子が下校後に自殺 2月から教室に行かず別室で授業 ★2 [ばーど★]
【ガルパン】マライ・メントラインの勝手にお悩み相談室「困っています。全力で『ガルパン』を推すために私は何を為すべきでしょう」 [鳥獣戯画★]
皇室の相談役に就任する五百旗頭眞『拉致なんて取り上げるのは日本外交として恥ずかしい。こっちははるかに多くの人間を強制連行してる』 [Felis silvestris catus★]
【美容医療相談室 神谷和宏】医師法に違反する恐れ。。http://biyou-iryou.jp/">http://biyou-iryou.jp/
相談室
荒らし相談室
パワハラ相談室
シーバスなんでも相談室55
シーバスなんでも相談室67
シーバスなんでも相談室58
シーバスなんでも相談室73
シーバスなんでも相談室57
シーバスなんでも相談室39
50代の恋愛よろず相談室
シーバスなんでも相談室27
シーバスなんでも相談室19
山神愛美の恋愛相談室
シーバスなんでも相談室29
シーバスなんでも相談室28
蟹座の恋愛相談室 その3
アトピーのお悩み相談室
シーバスなんでも相談室【避難所】
PC相談室5月廃止・・・ISIZE崩壊へ
必ず誰かがなんたら相談室 Part.3
【大衆演劇★なんでも相談室 2幕】
相談室のお姉さんに恋をしてしまった
drunkerの「悩み相談室」 2016
苔 コケ 初心者なんでも相談室-2回目
ギコネコ先生の自作PC相談室その43
音ゲーお悩み相談室【隔離病棟】
鍼灸マッサージ質問相談室パート14
船乗りなんでも相談室 第7次航 【外航用】
一級建築士設計製図相談室(199室)
【構成】BTO購入相談室【見積り】■39
12:19:29 up 8 days, 22:43, 0 users, load average: 8.69, 9.11, 9.01

in 2.4275469779968 sec @2.4275469779968@0b7 on 122102