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

【初心者歓迎】C/C++室 Ver.104【環境依存OK】 ->画像>3枚


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

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

1デフォルトの名無しさん
2018/12/28(金) 06:04:52.38ID:ufThBpcD
エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります

コードを貼れる所
http://codepad.org/
https://ideone.com/

前スレ
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
http://2chb.net/r/tech/1530384293/
2デフォルトの名無しさん
2018/12/28(金) 06:06:22.84ID:ufThBpcD
c++builder10.3 community
IID_PPV_ARGSを使わない場合どうしたら良いか教えてください
何を入れたら良いのかわからないです
#include <windows.h>
#include <tchar.h>
#include <shlobj.h>
#include <shellapi.h>
#include <commoncontrols.h>
void __fastcall TForm1::Button1Click(TObject *Sender) {
IImageList *piml;

SHGetImageList(SHIL_JUMBO, IID_IImageList, (void**)&piml);// pimlがNULLになる

SHGetImageList(SHIL_JUMBO, IID_PPV_ARGS(&piml));// 成功
}
3デフォルトの名無しさん
2018/12/28(金) 07:22:25.34ID:br5v3uv4
わけのわからん言語をこねくり回して、つまらんことしてちゃ、つまらん。
4デフォルトの名無しさん
2018/12/28(金) 11:40:52.89ID:sicn3fFV
O2
5デフォルトの名無しさん
2018/12/28(金) 11:42:24.93ID:VQYieTPu
つまんね
6デフォルトの名無しさん
2018/12/28(金) 11:48:00.87ID:e5XGwJ2H
>>997
UTF-8 は char * に入れるもの
char32_t * ならぎりぎりセーフ

wchar_t * は wcs 用
UTF-32 を wchar_t * に入れる
7デフォルトの名無しさん
2018/12/28(金) 12:09:16.93ID:qtS4fp6w
utf8は漢字仮名に3バイト使ってることわかってんのか
処理を簡単にするためいったんwchar_t使うのは普通のこと
でなければ文字数のカウントすら文字コードを調べる羽目になる
8デフォルトの名無しさん
2018/12/28(金) 12:17:53.33ID:sicn3fFV
その用途ならchar32_t*ってことじゃね
9デフォルトの名無しさん
2018/12/28(金) 12:21:31.54ID:I8tv0Dcv
調べる羽目になるっていうけど、たったそれだけのことでしかない
当然、パフォーマンス的に最適な方法は場合による
10デフォルトの名無しさん
2018/12/28(金) 13:36:08.91ID:qtS4fp6w
>>8
c++17は調べてないが、
char32_tだと文字列処理のライブラリも正規表現も使えないだろ。
既存のライブラリ使うためにまた変換するのか?

>>9
たったそれだけて、文字列処理なんか主たる作業じゃないC/C++プログラマにとっては、
utf8の文字コード常に思い浮かべながらコーディングするなんてのは不快極まるだろ。
*x == 'あ'
これが書けないことがたったそれだけかよ
11デフォルトの名無しさん
2018/12/28(金) 13:40:58.79ID:VQYieTPu
endian でドツボですねわかります
12デフォルトの名無しさん
2018/12/28(金) 13:46:43.01ID:qtS4fp6w
そもそもchar32_tてutf32用だろwwww
13デフォルトの名無しさん
2018/12/28(金) 14:07:56.51ID:e5XGwJ2H
判ってないなお前
14デフォルトの名無しさん
2018/12/28(金) 22:03:45.49ID:n6DxUiN/
このなかで一番美人なのって真ん中だよね?深キョンレベルだと思うのだが
ちなみに向かって右は目も鼻も整形してるって本人が公言してるけどそれ抜きにして誰が一番美人だと思う?
http://bigsta.net/media/1933567086757747003_3564907098
15デフォルトの名無しさん
2018/12/29(土) 09:44:06.88ID:ixKuXlJx
VSだとwchar_tは16ビットだろ。
だから3バイト以上/文字あるutf8だとおいしくもなんともないが、
unixは32ビットなんで、シェル出力をfgetwsでwchar_tで受け手、時にwstringで処理すると、
fgets->charより格段に楽に処理できる場合がある。
環境依存であんまり人に推奨できないだろうけど、unix, gcc限定なら正しく処理できる
もちろんwslでも使える
16デフォルトの名無しさん
2018/12/29(土) 12:44:13.02ID:EK4sWEwk
次から次へと嘘を並べるのがウリナラ

密漁船を捜索中だった→密漁船は既に発見し救出中(実際は瀬取り中?)だった
レーダーは水平以下へ照射していた→上空へレーダー飛んだのはなぜ
機体は真上を飛んでいた→実際は1km以上遠方だった
カメラを向けただけで照射はしていない→レーダーも回転して対面していた
17デフォルトの名無しさん
2018/12/29(土) 13:22:25.41ID:Ol/xTs6w
環境:Win10/VC++2015

WinSockでマルチキャスト受信のプログラムを作っているんですが、
マルチキャスト送信している別PCとの接続において、
以下のケース2の挙動に困っています。

■ケース1(期待する挙動)
LANケーブルが接続されている状態で受信ソフト起動
⇒ recvfrom()で受信する
⇒ LANケーブルを抜く
⇒ recvfrom()がブロックする
⇒ LANケーブルを挿す
⇒ recvfrom()がデータを受信し、ブロックが解除される

■ケース2
LANケーブルが接続されていない状態で受信ソフト起動
⇒ recvfrom()がブロックする
⇒ LANケーブルを挿す
⇒ recvfrom()はブロックしたまま、いつまで経っても解除されない
  (受信&ブロック解除してほしい)

なぜrecvfrom()はブロックされたままなのでしょうか?
18デフォルトの名無しさん
2018/12/29(土) 13:25:48.49ID:EK4sWEwk
selectしてないから
1917
2018/12/29(土) 13:51:03.81ID:Ol/xTs6w
>>18
selectは「複数ソケットのとき」という先入観があったのですが、
1ソケットのときでも使うんですね。
ありがとうございました!
20デフォルトの名無しさん
2018/12/30(日) 13:06:57.06ID:bhbCdqKe
gccでしか確認してないが、warningは出るんだが
前にu8をつけない'あ' は int (4バイト)展開されるんだな
u8つけてしまうと下位1バイトしか処理されないんで正しく処理されない。

wchar_t buf[0x100];
としとくと
buf[i] == L'あ'
ではwarningすらでない.
21デフォルトの名無しさん
2018/12/30(日) 16:05:04.48ID:FqO1nm3e
文字リテラルにu8プレフィックスは使用できない。
22デフォルトの名無しさん
2018/12/30(日) 16:10:42.14ID:kRHvhG4M
【TOKIOがまた被曝を応援】 「不勉強」「操られている」のはローラではなく、安倍と食事した奴
http://2chb.net/r/liveplus/1546137382/l50
23デフォルトの名無しさん
2018/12/30(日) 16:13:30.28ID:Y/PcKL5Q
https://cpplover.blogspot.com/2012/02/blog-post_16.html
24デフォルトの名無しさん
2018/12/30(日) 16:43:37.53ID:bhbCdqKe
>>21
いったいいつの時代の話してるんだ古すぎるんだよ情弱
C++17から問題なく使用できる
25デフォルトの名無しさん
2018/12/30(日) 16:50:02.84ID:bhbCdqKe
情弱がねごとほざくからそのたんびにイラン労力強いられることとなる
ちったぁ情報収集してこいよダニ
26デフォルトの名無しさん
2018/12/30(日) 16:50:18.97ID:bm6ZOgnS
どうせだったら、utf8専用のchar8_t型も用意しといてくれたら良かったのに。
ascii文字圏の連中にはどうでもいいことなんだろうけどw
27デフォルトの名無しさん
2018/12/30(日) 23:19:20.59ID:+xBVE+bB
教えてください。
C++のvectorについてです。
あるvectorの要素を自分自身に追加したいとき、どうすればよいのでしょうか。
例えば、v.push_back(v[2]);のようなことをしたいのです。
28デフォルトの名無しさん
2018/12/30(日) 23:25:38.38ID:fEPs2N4H
それでいいんじゃね?
29デフォルトの名無しさん
2018/12/31(月) 07:35:40.55ID:fsnZuStD
>>27
それ以外の何を望むの?
特定場所への挿入v.insertぐらいしかないじゃん
30デフォルトの名無しさん
2018/12/31(月) 07:57:31.16ID:kcuDnRZu
27です。レスありがとうございます。v.insertでうまく行きました。
v.push_back(v[i])だとなぜか空の要素が追加されてしまい、困っていました。
31デフォルトの名無しさん
2018/12/31(月) 08:53:01.66ID:Ls1ZsSUM
>>27
https://stackoverflow.com/questions/18788780/is-it-safe-to-push-back-an-element-from-the-same-vector
32デフォルトの名無しさん
2018/12/31(月) 09:18:55.86ID:Ls1ZsSUM
>>30
まともなpush_backの実装なら対策されているので問題ないはず。
無対策でも明示的にコピーコンストラクタを呼べばうまくいかくも。(要素の型をTとする)
v.push_back(T(v[2]));
33デフォルトの名無しさん
2018/12/31(月) 09:25:50.67ID:rwDIj1dr
あ〜そういうことか
俺もハマりそうだなそれ
でもそれはvectorの実装側の責任になるか
34デフォルトの名無しさん
2018/12/31(月) 10:05:21.41ID:fsnZuStD
>>27
意図しないエレメントが追加されてしまうC++は何?バージョンも併せて教えてよ
3527
2018/12/31(月) 10:10:54.60ID:kcuDnRZu
環境書くのを忘れてました。すみません。
Win7、Visual Studio 2008です。
36デフォルトの名無しさん
2018/12/31(月) 10:19:59.32ID:fsnZuStD
>>32
まともでない実装ってのはどのテンプレート?つかコンパイラ?
37デフォルトの名無しさん
2018/12/31(月) 10:27:09.66ID:fsnZuStD
>>35
thx
なるほど10年前のコンパイラならstlにバグ残ってる可能性あるわな
2011、2014、2017でずいぶん新しくなってるよ
仕事で2008指定されてるとかじゃなければ2017入れて損することあんまないと思うけど
38デフォルトの名無しさん
2018/12/31(月) 10:27:22.88ID:Ls1ZsSUM
さすがにvectorではまともでない実装にお目にかかったことはない。
VisualStudio2010のMFC独自コンテナCArrayで同じ問題ではまったことがあっただけ。
39デフォルトの名無しさん
2018/12/31(月) 11:04:33.38
マジかよ MFC 最低だな!
失望しました。WPF 使うの止めます
40デフォルトの名無しさん
2018/12/31(月) 11:44:30.10ID:zd5ZDQG6
vsに2011ってのもあったのか、いやあ勉強になるなぁ
41デフォルトの名無しさん
2018/12/31(月) 11:46:37.75ID:sEEumFv8
C++の規格と混同しているっぽい。
42デフォルトの名無しさん
2018/12/31(月) 11:58:04.83ID:fsnZuStD
C++の規格の話
43デフォルトの名無しさん
2018/12/31(月) 12:28:15.56
つまり江添亮の話
44デフォルトの名無しさん
2018/12/31(月) 20:39:25.62ID:kcuDnRZu
>>31
参考になりました。ありがとうございます。
45デフォルトの名無しさん
2019/01/01(火) 03:54:37.57ID:vBi+DP3M
元日記念カキコ
46デフォルトの名無しさん
2019/01/01(火) 15:38:58.76ID:tgQbht6s
gnuのobstackってざっくり理解するなら普通にデータ構造としてのstackのいち実装って認識であってますか?
47デフォルトの名無しさん
2019/01/01(火) 17:39:02.76ID:i/vicifv
うん
48 【大吉】 【249円】
2019/01/01(火) 18:06:26.08ID:kK3EzG3m
はっキネン
49デフォルトの名無しさん
2019/01/03(木) 02:16:07.41ID:oIrbeINi
Privateにメンバ関数を置くのって別にいいですか?
50デフォルトの名無しさん
2019/01/03(木) 02:25:02.88ID:rCo9hP60
いいんじゃね?
そのクラスの中のみでよく使われる関数とかprivateにする
51 ◆QZaw55cn4c
2019/01/03(木) 03:52:58.78ID:moS/XERj
zen2 5GHz が来た!
https://wccftech.com/amd-ryzen-3000-zen-2-cpus-ryzen-9-3900x-ryzen-7-ryzen-5-listed-online/
52デフォルトの名無しさん
2019/01/03(木) 15:12:15.57
誤爆しました
53デフォルトの名無しさん
2019/01/04(金) 00:19:38.87ID:C/NwCX/x
デバッガってどう動いたら正常なんでしょうか
vscodeでハロワしてみてブレークポイントで止まる→これでいいんだよな?となりまして
54デフォルトの名無しさん
2019/01/04(金) 00:50:16.36ID:ihBPygyi
リクツを語ると
デバッガにデバッガを適用するとバグかどうかを検出できない
55デフォルトの名無しさん
2019/01/04(金) 20:57:44.72ID:leXZv0J4
Win32APIなんですが、
ウィンドウクラスにアイコンハンドルを設定してWS_OVERLAPPEDWINDOWスタイルで
CreateWindow()すると問題なくタイトルバーにアイコンが表示されるのですが、
WS_POPUPスタイルでCreateWindow()した後にSetWindowLong()でWS_OVERLAPPEDWINDOWスタイルに変更すると、
タイトルバーにアイコンが表示されません。
WM_SETICONをSendMessage()しても変わりませんでした。
どうすれば表示されるようになるでしょうか?
56デフォルトの名無しさん
2019/01/04(金) 23:35:35.15ID:GKwYgY3X
>>55
つ Win32API質問箱
5755
2019/01/05(土) 00:28:56.43ID:1yzAmca9
>>56
そちらはスレが盛んでないので、こちらでお聞きしました・・・
58デフォルトの名無しさん
2019/01/05(土) 08:53:49.71ID:b8ezfK6l
じゃあ自力で頑張って下さい
59デフォルトの名無しさん
2019/01/05(土) 12:19:51.40ID:wMTnOPNR
>>55
http://eternalwindows.jp/control/controlbase/controlbase06.html
http://chokuto.ifdef.jp/urawaza/api/SetWindowLong.html
SetWindowLong 関数で変更されたそのデータは SetWindowPos 関数が呼び出されるまで反映されません 👀
Rock54: Caution(BBR-MD5:79b7e0206b0fd5ffcfddd514fa488d36)
6055
2019/01/05(土) 22:25:41.89ID:1yzAmca9
>>59
SetWindowLong()後にSetWindowPos()はコールしていたのですが、
WM_SETICONをSendMessage()するときのアイコンハンドル取得方法がまずかっただけでした(汗)
(LoadIcon()のHINSTANCE引数が正しくなかった)
今は問題なくアイコンが表示できています。
お騒がせしました!
61デフォルトの名無しさん
2019/01/06(日) 01:50:50.63ID:crl+XFhH
>>60
https://g.co/kgs/ZEZu9X 👀
Rock54: Caution(BBR-MD5:36abcc1a7fb24404caf692865ab3af18)
62デフォルトの名無しさん
2019/01/06(日) 13:24:20.28
>>57
盛んでないなら先ず盛んにしろよ
欲しい者は先ず自ら与えると言うぞ
63デフォルトの名無しさん
2019/01/06(日) 16:05:17.54ID:s8+QTrGL
難癖つけ太郎
64デフォルトの名無しさん
2019/01/07(月) 19:00:48.26ID:29GPlbw0
ツケタロサァン
65デフォルトの名無しさん
2019/01/09(水) 15:58:07.62ID:LoPBTm2D
C++て3年周期で新規格リリースされるんだなC++20が来年発表て、
えーかげんもうついていけんわ
家電のモデルチェンジじゃあるまいし。言語の追っかけなんかやってられん。
66デフォルトの名無しさん
2019/01/09(水) 18:23:48.31ID:h/UgfZoi
C言語の需要はそういうところじゃねえの
もうこれ以上進歩しないが大抵のことはできる
適度に難しいところもある
67はちみつ餃子 ◆8X2XSCHEME
2019/01/09(水) 18:30:18.01ID:wEN9wc2j
>>65
もしそうしたければ古い版の規格で書いてもええんやで。
C++20 が出ても C++11 が消滅するというわけでなし。
まあ主要なコンパイラがサポートしなくなったらしょうがないけど……
68デフォルトの名無しさん
2019/01/09(水) 22:38:39.03ID:teyoDIou
C++11が神過ぎる。
それまでとは雲泥の差。
これだけでずっと戦える。
69デフォルトの名無しさん
2019/01/10(木) 07:42:30.84ID:JUlDRUM2
>>67
言語って自分だけで済まんだろ
キャッチアップしていかんと人の書いたコードが読めなくなる
こんな短期間でアップデート繰り返すんじゃなくもっと精査した上で規格変更しろといいたい
アップデート繰り返す度にユーザ減少してるだろ
70デフォルトの名無しさん
2019/01/10(木) 07:53:15.61ID:JUlDRUM2
>>66
new/delete無造作に使ったコードを組込なんかで書くと、
メモリフラグメント作りまくるだけだからな。
ハードウェアの一部としてRTOS上で安定動作させるためには、
ポインタ使いまくりのbetter Cとして書くしかない。
4kB メモリのRL78でコード書いてみろと
71デフォルトの名無しさん
2019/01/10(木) 11:58:03.74ID:+qf2Eno1
>>69
C++の良かったのは仕様が枯れてることだったのにな
今は逆を逝っててどんどん人が離れて逝ってる
72デフォルトの名無しさん
2019/01/10(木) 13:39:40.00ID:AlpMGZ50
utf-8の文字コードが格納されてるchar配列から、デコードされた文字をstd::string型に入れる方法を教えてください
以下のような変換を実装したいです

char ai[] = {0xe3, 0x81, 0x82, 0xe3, 0x81, 0x84}; // "あい"のutf-8コード
std::string str = ??
std::cout << str << "\n"; // prints "あい"
73デフォルトの名無しさん
2019/01/10(木) 14:15:08.46ID:XfqugDbL
>>72
aiの最後にnull文字は入れないの?
入れないなら
srd::string str { ai, sizeof(ai)/sizeof(ai[0]) };
74デフォルトの名無しさん
2019/01/10(木) 14:38:26.46ID:f6PjJx/6
>>72
wstringに入れろ
75はちみつ餃子 ◆8X2XSCHEME
2019/01/10(木) 17:13:07.72ID:2cm4ZQb/
>>69
時間を掛けたら扱う項目 (提案) も増えるからどっちでも同じだよ。
一度の変更が大量になるよりは小さな変更を頻繁にした方が良いというポリシー。
その方が実際の運用で出た問題をフィードバックしやすいという利点もあるしな。

>>73
配列の大きさを知るには std::size か std::extent を使えよ。
76デフォルトの名無しさん
2019/01/10(木) 17:38:07.90ID:d84NrtHP
C++ には C 以来伝統の sizeof / sizeof 以外に
配列の要素数を知る方法があったはず…と思ったが std::size だったか。
でも標準で使えるのは C++17 以降だよね。

「C++ならテンプレート使えばできますよ」的な情報は色々あるけど、
結局、移植性を考えると古典的な sizeof 割り算が便利だったり。
77デフォルトの名無しさん
2019/01/10(木) 19:00:06.40ID:K/rzzMpV
ちょっと知ったかは、よくよく初心者を馬鹿にする。
自分も、初めは、初心者だったくせに。
78デフォルトの名無しさん
2019/01/10(木) 19:11:35.64
スタティックおじさんにならないように戒めなければ
79デフォルトの名無しさん
2019/01/10(木) 20:37:36.88ID:WIE9C9TP
ヒカキンの年収が10億超え!?明石家さんま・坂上忍も驚愕の総資産とは??
https://logtube.jp/variety/28439
【衝撃】ヒカキンの年収・月収を暴露!広告収入が15億円超え!?
https://nicotubers.com/yutuber/hikakin-nensyu-gessyu/
HIKAKIN(ヒカキン)の年収が14億円!?トップYouTuberになるまでの道のりは?
https://youtuberhyouron.com/hikakinnensyu/
ヒカキンの月収は1億円!読唇術でダウンタウンなうの坂上忍を検証!
https://mitarashi-highland.com/blog/fun/hikakin
なぜか観てしまう!!サバイバル系youtuberまとめ
http://tokyohitori.hatenablog.com/entry/2016/10/01/102830
あのPewDiePieがついに、初心YouTuber向けに「視聴回数」「チャンネル登録者数」を増やすコツを公開!
http://naototube.com/2017/08/14/for-new-youtubers/
27歳で年収8億円 女性ユーチューバー「リリー・シン」の生き方
https://headlines.yahoo.co.jp/article?a=20170802-00017174-forbes-bus_all
1年で何十億円も稼ぐ高収入ユーチューバー世界ランキングトップ10
https://gigazine.net/news/20151016-highest-paid-youtuber-2015/
おもちゃのレビューで年間12億円! 今、話題のYouTuberは6歳の男の子
https://www.businessinsider.jp/post-108355
彼女はいかにして750万人のファンがいるYouTubeスターとなったのか?
https://www.businessinsider.jp/post-242
1億円稼ぐ9歳のYouTuberがすごすぎる……アメリカで話題のEvanTubeHD
https://weekly.ascii.jp/elem/000/000/305/305548/
世界で最も稼ぐユーチューバー、2連覇の首位は年収17億円
https://forbesjapan.com/articles/detail/14474
80デフォルトの名無しさん
2019/01/10(木) 22:25:25.90ID:jgU/jZru
std::sizeが使えなかったとしても(主要なゲーム機の環境の1つはC++14止まりだし)、テンプレートで取得するのはC++の移植性には影響しなくないか?
81デフォルトの名無しさん
2019/01/10(木) 22:41:00.66ID:poVh1zdG
ていうかGUIとかマングリングの統一とかvtblが最初に来ることとか
テンプレート周りばっかりじゃなくて解決して欲しい問題いっぱいあるんだけどなぁ
あと個人的にはプロパティとかも欲しい
82はちみつ餃子 ◆8X2XSCHEME
2019/01/11(金) 00:50:02.24ID:le18Krsa
配列の要素数を取得するだけのものを自分で書くならこんな感じかな。

template<class T, size_t N>
std::size_t size(T (&)[N]) {
return N;
}

実装自体には sizeof を使ったって害はあまりない (あえてする意味もないけど)。

template<class T, size_t N>
std::size_t size(T (&a)[N]) {
return sizeof a/sizeof a[0];
}

sizeof でのやり方を「そのまま」書く、またはマクロで覆うのは、
型チェックの支援を受けられないから変なミスをしやすい。

変数 a が (配列ではなく) ポインタのときに
sizeof(a)/sizeof(a[0]) という式がコンパイルは通っちゃったりするし。
変数名を二回書かなきゃならないのも、
何かの修正のときにうっかり片方だけ書き換えたりとか有りがち。

プログラミングをそれなりに長くやってると、
馬鹿みたいなつまらないミスをした経験のひとつやふたつやみっつや二百くらいはあるでしょ。
型システムはそういうのを多少なりとも事前に検出してくれるありがたい仕組みなんだから、
積極的に活用したいところ。
83デフォルトの名無しさん
2019/01/11(金) 01:26:18.63ID:bUNhmYA9
C++標準じゃないけどVC++の_countofが重宝してる
84デフォルトの名無しさん
2019/01/11(金) 07:47:16.24ID:PueFbUtC
>>75
>時間を掛けたら扱う項目 (提案) も増えるからどっちでも同じだよ。

同じ訳ないだろが、
仕様変更、追加したものの、さんざん使ったあげくそんなもん使うなってのはいくらでもあるだろ。
auto_ptrはどーした。
だから3年なんて製品のモデルチェンジ並の仕様変更じゃなく、言語オタク共がもっと時間をかけて精査して、
10年に一度ぐらいの変更にしとけってこった。
そもそもCのプリプロセスだったわけで、
Cとの整合性は確保した上で双方同時に仕様変更しろといいたい。
だいたいどっち見て仕様変更してんの?言語オタクのセンズリか?wwww
85デフォルトの名無しさん
2019/01/11(金) 11:25:51.10ID:saOHWwmK
3年ごとなのはいいと思うけど、クラステンプレートの引数推定なんか
関数テンプレートみたいに推論できないテンプレート引数が残る形に出来ない上に
エイリアステンプレートには使えないしクラステンプレートの参照にも使えないし
デフォルトテンプレート引数では省略できないしで・・

便利だけど、あまりにも片手落ちじゃね?と思うことはある
86はちみつ餃子 ◆8X2XSCHEME
2019/01/11(金) 13:40:13.69ID:le18Krsa
>>84
> 同じ訳ないだろが、
> 仕様変更、追加したものの、さんざん使ったあげくそんなもん使うなってのはいくらでもあるだろ。

同じだよ。
散々使ったからようやくわかったことで、ただの言語オタクどもがどんだけ理屈をこねた
ところで現実的なプロダクトの実際なんかわかりゃしない。
精査をしっかりすれば事前にどうにか出来てたと本当に思うのか?

> auto_ptrはどーした。

これはまあ……アレだ……
これ自体は擁護しようがないほどアレだけど、
一番アレなのを抜き出して言うのもちょっとどうかなって。

強いて言えば、当時としてはスマートポインタという概念を提示出来たという
成果といえなくもないんじゃないかな……。

> 10年に一度ぐらいの変更にしとけってこった。

【初心者歓迎】C/C++室 Ver.104【環境依存OK】 	->画像>3枚

> だいたいどっち見て仕様変更してんの?言語オタクのセンズリか?

そうならないために言語オタクにゆだねない (実際の運用で見極める) という選択なのに、
お前はもっと言語オタクに活躍しろって言ってんだぞ。
おかしいだろ。
87デフォルトの名無しさん
2019/01/11(金) 14:33:07.36ID:iMdUEP7b
仕様変更が止まってる言語はともかくとして仕様策定のない言語に比べればC++の更新スパンは割と長い方という認識がある

これより長いのメジャーどころだとC11(1,20年)/Fortran2008(5年)/Ada2005(10年)/Haskell(5年前後)くらい?
Haskellなんかは処理系拡張ゴリゴリだしアテにならないし他はもう古めかしさを感じるなぁ
88デフォルトの名無しさん
2019/01/11(金) 14:56:08.31ID:9UT8ehvY
これ以上Dをdisるのはやめて
89デフォルトの名無しさん
2019/01/11(金) 16:08:50.25ID:c9plSaZI
まぁ、TypeScriptは年6回updateしてるけど次が待ち遠しいな。
90デフォルトの名無しさん
2019/01/11(金) 20:26:13.94ID:KLK+GnJ4
426名無しでいいとも!@放送中は実況板で2019/01/10(木) 18:17:49.03ID:b7PfIJnh0

新しい物好きな人は、よく、古いもの馬鹿にする。
古いものに、大切なものがあることが、
よくあることを、知らない人が多い。
91デフォルトの名無しさん
2019/01/12(土) 08:06:07.36ID:TXMmMfvK
古いという感覚を持つと話をしただけで古いものが悪いとは一言も言っていないが……?
一方でもしその良さが「新しい仕様を頻繁に覚えなくて良い」なら、言語に対して掛けるコストが減る事と、自身が怠惰である事の2面性を常に持つかもね

プログラマなんて怠惰でナンボだけど覚える事に怠惰か書く事に怠惰か人それぞれよね

個人的には草案で嬉しそうな機能を追加します!って言いながら実際の仕様では無限に延期される方が嫌
92デフォルトの名無しさん
2019/01/12(土) 13:08:56.44ID:k/r1EiKa
これな
youtube
qqwgldvnNlk
#t=41m41s
93388
2019/01/12(土) 23:22:31.27ID:0iVYXuy3
>>82
配列の参照のsizeofは配列のサイズじゃないから害はあるな()
94388
2019/01/12(土) 23:28:35.62ID:0iVYXuy3
>>84 は面白いよな、散々使うことで問題が見付かるって自分で初っ端から言ってるのに「だからスパンを長くしろ」つまり散々使うことが出来ないようにしろって言ってる
そして最後には言語オタクのセンズリかって、言ってる事が弾けまくってるな。

言語オタクのセンズリになってるのが不味いから、積極的に一定毎に更新するようにしていってるんだがな
95デフォルトの名無しさん
2019/01/13(日) 09:10:56.47ID:47MX21Fj
何が言いたいのか分らん
96デフォルトの名無しさん
2019/01/13(日) 09:35:19.34ID:e8OabTpu
箇条書きでよろ
97デフォルトの名無しさん
2019/01/13(日) 14:11:24.44ID:goGtxYMD
おれは >>84 に同意だな
数年で更新ってそれがどれだけワークしてるのさ
だいたいどれだけ認知されてるのかようわからん小さい機能追加が山盛りな一方で
大規模なconstexprとかひかえめにいって大クソじゃん?
理論もなければ、現実のワークフローなにも考慮にはいってない
結局オナニーでしょ、何オタクかはしらんが
98デフォルトの名無しさん
2019/01/13(日) 15:03:59.93ID:lykUAvmZ
1.仕様が確定してからでなければ実務には使われない
2.実務で使われないと良し悪しは分からない

3-1.仕様確定のスパンが短いと、仕様に提案されてから試されるまでが短い(もし悪ければ次で撤回も可能)
3-2.仕様確定のスパンが長いと、提案されてから実務で試されるまでが長い(撤回されないと言えば聞こえは良いが、当然悪いものが残り続ける)

んで仕様策定を言語オタクのオナニーって言ってるのに、実務で試されない、策定の期間だけ伸ばして言語オタクなんとかしろって言ってるように聞こえるからよく分からんわけだ
だって君たち仕様確定してからじゃないとそうそう草案の機能なんて使わないでしょ?追わないでしょ?私だってそうだ

期間が長ければその間に普及する概念も多くなるし(少なくともc++はそれを取り込む方針の言語なので)あんまり長くすると大変だと思うよ
99デフォルトの名無しさん
2019/01/13(日) 16:52:54.35ID:bhcZ5Z4Z
>>97
c++14のconstexprは条件分岐とかループにも対応してるから、そこそこ使えるよ。
文字列リテラルの長さを取得する関数とかも定数化できるし。
テンプレートの非型引数をあれこれする関数を定数化したりとか。
100デフォルトの名無しさん
2019/01/13(日) 16:58:40.56ID:goGtxYMD
機能追加したい人が、ブランチして機能追加して実務で実証して、
それから正式に仕様を提案すりゃいいじゃん
なんで仕方なく業務でC++使ってるだけなのにベータテストみたいな
仕様更新に巻きこまれなきゃならないのさ
101デフォルトの名無しさん
2019/01/13(日) 17:05:15.75ID:zLcYabhS
そんなことよりrvoを強制してほしい…
102デフォルトの名無しさん
2019/01/13(日) 17:05:25.96ID:bhcZ5Z4Z
仕様を確定させないと各コンパイラでの実装と互換性チェックとか出来ないし、
既存のコードが動かなくなるわけでもなし、
10年くらい経って十分枯れた機能を使ってれば良いだけでは?
103デフォルトの名無しさん
2019/01/13(日) 17:06:11.78ID:goGtxYMD
>>99
その程度の最適化はコンパイラが勝手にやればよくね?
もっと大規模なことしたいからわざわざconstexprなんてキーワード追加して
かつ人間様がわざわざそれを指定するんだろ?
で大規模なことをできる仕様か?あれが?
どうせみんなデバッグするときにconstexprをはずしてんだろ?
アホと思わないか?
104デフォルトの名無しさん
2019/01/13(日) 17:10:55.99ID:bhcZ5Z4Z
>>103
Visual Studioでしか試してないけど、わざわざ外さなくてもデバッグビルドでは定数化されないのが普通じゃないの?
105デフォルトの名無しさん
2019/01/13(日) 17:11:37.75ID:zLcYabhS
constexpr相当を勝手にやられたら、参照してるほうがリコンパイルが必要か判断できなくなるんじゃないの?
106デフォルトの名無しさん
2019/01/13(日) 17:27:56.15ID:bhcZ5Z4Z
constexpr指定を使わずに同じような定数化を自動でやるとなると、
一度全ての関数を定数化可能か調べるためのプレビルドみたいなことをしないと無理だよね。
107デフォルトの名無しさん
2019/01/13(日) 17:43:24.56ID:goGtxYMD
定数畳み込みなんて古典的な最適化手法だし、
gccはstrlenの最適化やるだろ
だからもっと大規模なことをやるためのconstexprだろと言ってる
108デフォルトの名無しさん
2019/01/13(日) 17:50:38.42ID:bhcZ5Z4Z
その最適化をコンパイラ依存でなく標準規格化したことに意味があると思うんだけど。
gccで出来ればあとは何でも良いの?
109デフォルトの名無しさん
2019/01/13(日) 18:13:13.67ID:goGtxYMD
珍説どうも
その程度の最適化技術を持たないコンパイラベンダなんてどうでもいいな
clangのバックエンド自分で作った方が早い
110はちみつ餃子 ◆8X2XSCHEME
2019/01/14(月) 02:10:17.55ID:ybeYuaGe
constexpr 相当のことはコンパイラが最適化で頑張るのが筋だというのは
まったく正当な意見だと思うんだが、本当に速度が必要な個所のチューニング
をしたいとき、つまりコンパイラの最適化以上のことがしたいときに
打てる手段が無かったりだとか処理系の拡張構文を使わなければならないというよりは、
不格好でも constexpr の方がマシ。

C++ は現実的に使えることを指向した言語で、現実はクソなんで、
クソを少しマシに書けるようにするってのは妥当な選択肢。
コンパイラが十分に賢いだとかいうような
理想的な世界で生きてる人は別に constexpr を使わなくてもいいよ。
111デフォルトの名無しさん
2019/01/14(月) 06:19:38.07ID:S0iGLcvV
pythonやmatlabみたいに配列やvectorを:とかでスライス抽出できないんですか?
112デフォルトの名無しさん
2019/01/14(月) 07:17:53.28ID:4qrkuOlT
技術スキンだけ高い奴が、できる奴と思い込んでるチキン。
113デフォルトの名無しさん
2019/01/14(月) 09:22:28.84ID:UgNfZwvf
>>111
それをアセンブラで書いてみてくれ
114デフォルトの名無しさん
2019/01/14(月) 10:26:42.41ID:3TGcl/LH
++20のfilterでスライスみたいな事ができるようになる
しばし待たれよ
115デフォルトの名無しさん
2019/01/14(月) 13:02:31.28ID:BcFaCsuL
>>110
constexpr指定はコンパイラにはわからない関数呼び出し先で
定数化できる計算であるとコンパイラに教えられるので
指定できるならした方がいいだろうけど

>本当に速度が必要な個所のチューニング
そういう個所がコンパイル時にわかってる定数だけで構成されてる例なんて
まず滅多にないんだけどね
116はちみつ餃子 ◆8X2XSCHEME
2019/01/14(月) 13:29:30.02ID:ybeYuaGe
>>115
>> 本当に速度が必要な個所のチューニング
> そういう個所がコンパイル時にわかってる定数だけで構成されてる例なんて
> まず滅多にないんだけどね

constexpr はコンパイラに対するヒントであるだけでなく、プログラマにとっての制約でもある。
「そういう (速度が必要な) 箇所」であるにもかかわらず実行時の値に依存しているということを
プログラマが気づくことが出来る (ので分離するなどの工夫をする機会があるかもしれない)
というのは十分に便利だよ。
117デフォルトの名無しさん
2019/01/14(月) 13:39:03.52ID:BcFaCsuL
わかってないな
本当に解決しなきゃいけないボトルネックが、たかだか定数の畳み込みだけで
解決出来ることなどまず無いと言ってんの

ただの数回、数十回の普通の演算はそのままやっても十分速いんだよ
むしろ定数化できるとこを全部定数化したせいで、(即値にならないような構造体の場合)定数を読みに行くコストの方が大幅に高くなる可能性もある
constexprというか言語の機能を盲信しすぎ
118デフォルトの名無しさん
2019/01/14(月) 13:47:53.15ID:BcFaCsuL
あと、
>「そういう (速度が必要な) 箇所」であるにもかかわらず実行時の値に依存しているということを
ファイルから読んだ内容、mainに渡された引数、ネットワークから受け取ったデータ
そういうの(および一度でもそれらと関わった変数)全て実行時の値だってわかってる?
119デフォルトの名無しさん
2019/01/14(月) 22:35:17.67ID:SOyXSPCI
オフラインで複雑な計算して、結果をバイナリで埋め込んでおくことはよくやる
ゲームなら当たり前にやるワークフローだよな
しかしそういう典型的な用途にconstexprは向いてないという間抜け具合
C++でなんでもやるというのが目的になってんだよね
こういうのをオナニーって言う
120はちみつ餃子 ◆8X2XSCHEME
2019/01/15(火) 09:17:36.65ID:f9+1p0X/
>>117-118
やりたいときに出来る方法があるというのは無いより「マシ」と私は >>110 で述べたが、
それが君にとっての妄信なのかい?
要するに、 constexpr の成果は限定的すぎると言いたいんだろ?
ほとんどの機能は個別に見ればどうでもいいような些細なものなのは普通のことだ。
121デフォルトの名無しさん
2019/01/15(火) 09:57:48.09ID:fPstZ0f7
何度も言ってきたが、負けを認めたら死ぬ病気なのか?君は
122デフォルトの名無しさん
2019/01/15(火) 10:02:02.52ID:fPstZ0f7
ついでに言えば、俺は「指定できるならした方がいい」と書いた
俺が成果を限定的だと貶してるんじゃなくて、
君が過信してるの
123はちみつ餃子 ◆8X2XSCHEME
2019/01/15(火) 10:05:46.91ID:f9+1p0X/
>>122
じゃあ何が問題なんだい?
指定できるならした方がよくて、指定できるようになってるのは指定できないより良いというのなら意見は一致してるじゃないか。
124デフォルトの名無しさん
2019/01/15(火) 10:23:37.90ID:p3r+u4ET
>本当に速度が必要な個所のチューニング
>をしたいとき、つまりコンパイラの最適化以上のことがしたいときに
>打てる手段が無かったりだとか処理系の拡張構文を使わなければならないというよりは、
>不格好でも constexpr の方がマシ。
125デフォルトの名無しさん
2019/01/15(火) 10:26:22.74ID:fPstZ0f7
(途中送信してしまった)
本当に"速度"が必要なときに速度より移植性やC++標準への準拠を優先してconstexprマンセーする
これを過信と言わずして何と言う
126はちみつ餃子 ◆8X2XSCHEME
2019/01/15(火) 10:40:35.59ID:f9+1p0X/
>>125
速度が必要な個所が「なるべく」移植性が高い形で表現できればそれに越したことは無いし、
更にそれ以上が欲しいなら移植性を犠牲にすることも出来るんだから、
constexpr の導入に何の問題もないだろ?
127デフォルトの名無しさん
2019/01/15(火) 19:01:25.37ID:CKmovdLr
何でC++スレはプログラム板で勢いあるんですか?
128デフォルトの名無しさん
2019/01/15(火) 19:02:26.94ID:CKmovdLr
C++で有名人になりたいです
どうすればいいでしょうか?
129 ◆QZaw55cn4c
2019/01/15(火) 21:38:31.55ID:niK8DUcQ
>>128
c++ のコンパイラを c で記述すれば、それだけで有名になれると思います
gcc が c から c++ になったときは心底残念に思っていました
130デフォルトの名無しさん
2019/01/15(火) 22:36:39.63ID:CKmovdLr
>>129
それって無理では‥
131デフォルトの名無しさん
2019/01/16(水) 01:23:29.16ID:CLrL7dI7
>>130
https://www.amazon.co.jp/dp/4797344369
132デフォルトの名無しさん
2019/01/16(水) 04:10:04.96ID:GtMBox+p
>>94
はちみつなんとかもそーだけど、
おまえもほんま馬鹿やね。表面しか読めないんだな。
10年間、言語オタを隔離してしまえといってるのだよ間抜けちゃん。
世の中から隔離された世界でせんずりこいてろといってる。ザーメン臭でくさいやつは地上に出るな。

大体、大規模プログラミングはすでにC++には向かないことが露呈して久しく、
せいぜいbetter Cとして生き残るぐらいしか道はないのにどういう意図を持っての3年ごとの改訂なんだ。
ポリシーなき改訂ははた迷惑なだけ
これだけ頻繁に改訂されると、スペック以外の解説本では、すでにストラウストラップ本自体改訂をキャッチアップできてない。
その邦訳ともなればますます現行仕様から浦島太郎になるのは必至。せっかく覚えた頃に新スペックの登場か?
C++初心者はいったいどの本買ってるのさ?キチガイ言語オタ江添本でも買うのか?
結局、ユーザー減少させてるだけだろうが
133デフォルトの名無しさん
2019/01/16(水) 04:55:20.85ID:M8dG57eU
他人をけなす人には、なりたくないな
http://2chb.net/r/pav/1534982458/
134デフォルトの名無しさん
2019/01/16(水) 05:13:03.61ID:CLrL7dI7
なるな人間になるな
135デフォルトの名無しさん
2019/01/16(水) 09:06:01.53ID:Cj0f6L/5
もしかして、最初の「なる」はNULLと掛かってる?
中身のない人間、アクセスしちゃダメな奴、みたいな意味で。

ちなみに自分は「ヌル」派。
だってNULLを「ナル」と読んだら「ぬるぽ」と言えなくなるもの。
136デフォルトの名無しさん
2019/01/16(水) 09:58:04.96ID:qfBMRYbT
>>131
一応買ってみました
でもどうせコンパイラ作るならC++でClangとかの実装を勉強したい
137デフォルトの名無しさん
2019/01/16(水) 12:17:10.07ID:qfBMRYbT
C++好きな人って、C‡‡、Java嫌いな人が多いのって偏見ですか?
関数型言語かRustの話しかしてない気がします
138デフォルトの名無しさん
2019/01/16(水) 13:56:12.46ID:CLrL7dI7
>>135
回文
139はちみつ餃子 ◆8X2XSCHEME
2019/01/16(水) 15:05:52.98ID:kJO3cJ8H
>>132
C++ の言語としてのポリシーはこのように提示されている。
Stroustrup 自身がその著書に書いたもの。
委員会の公式な文書にするとかどうとかいう議論はあったけど、
結局どうなったのかは知らない。

・C++ の進化は現実の問題をその動因とする
・完全主義にはこだわらない
・C++ は今現在役に立つ言語でなければならない
・人に何かを強制しない
・静的タイプシステムに対する暗黙の違反が無い
・同じ機能なら人に教えやすい方を選ぶ
・C のプリプロセッサは使わないように
・C との正当でない非互換性が無い
・C++ 以外に他の低レベル言語を必要としない (アセンブラは除く)
・使わない機能はコストを発生させない

これらの考え方に基づいて今要求されているものが (不完全でも) より素早く反映しやすくする
リリース体制として ship train model が導入された。
多くの人が関わるので妥協はあるだろうが、一環したポリシーの下で改定されている。

そのポリシーを気に入らないでいる自由はあるし、それはどんどん主張して良いが、
ポリシーが無いというのは事実誤認だし、自分にとって妥当ではないからといって
必要としている人を侮辱するべきではないよ。
140デフォルトの名無しさん
2019/01/16(水) 15:25:10.37ID:mUX6kDFm
俺が以前「D&E読んでないのか」、って言ったせいではちみつはD&Eの受け売りするようになったな・・・

http://i-saint.hatenablog.com/entry/20101012/1286822888
「あるプログラム言語を使うためにその言語の弁護人になるべきではない。」
そういうただの弁護人になってるバカは大抵C++を実用レベルで使ってない人間ばっかりだ
141デフォルトの名無しさん
2019/01/16(水) 15:27:49.73ID:vTKVQdGX
そやな
142はちみつ餃子 ◆8X2XSCHEME
2019/01/16(水) 15:39:55.50ID:kJO3cJ8H
>>140

このスレで言われたから読んだということは無いはずだが、どの発言のこと?
正確に覚えてないけど
私が持ってるやつは (日本語版の) 初版だからたぶん 2006〜2007 年頃には読んでるはず。
143はちみつ餃子 ◆8X2XSCHEME
2019/01/16(水) 15:56:46.23ID:kJO3cJ8H
現実的な問題があるならそれは解決されなければならない問題であって、
改定を先延ばしにすることを要求するのはおかしな話じゃない?

ドキュメントが追い付いていないのは、これは確かにあるけど、
翻訳とかに時間がかかるのが分かっているから
早め早めに改定がリリースされるのはむしろありがたいことでしょ。
デカい改定が一気にくるよりは。

constexpr が限定的に過ぎるとかいうのはわかってる話で、
だから制限を緩くしたり consteval を検証したりしてるんだろ。
それでも必要だと判断したから入れたんだから、
そこに文句付けたって今更な話で擁護もクソもない。
駄目な部分があるのは知ってるっつーの。 それでも要るんだよ!
144135
2019/01/16(水) 17:16:27.25ID:Cj0f6L/5
>>138 回文には気づかなかった。
「なるな」「人間に」がそれぞれ反転同一で、
それらフレーズを反転同一になるように並べて作成した回文か。
「人間になるな人間に」でも構造的には同じね。

いくらかPPAPな感じがしないでもない。
あと、正規表現のパズルっぽくもある。
145はちみつ餃子 ◆8X2XSCHEME
2019/01/16(水) 17:26:40.42ID:kJO3cJ8H
酢にピリッとした風味を足すのに使えます

_人人人人人人_
> スピリタス <
 ̄Y^Y^Y^Y^Y^Y ̄
146はちみつ餃子 ◆8X2XSCHEME
2019/01/16(水) 17:28:13.10ID:kJO3cJ8H
>>145
すまん。 誤爆した。
147デフォルトの名無しさん
2019/01/16(水) 17:58:49.69ID:Cj0f6L/5
はちみつと関係ないと思ったけど、餃子の方には関係ありそう。

しかし、C++スレッドでの真摯な態度と裏腹に、
他所ではどういうキャラクタなんだろ、と思わせる投稿ね。
148デフォルトの名無しさん
2019/01/16(水) 18:12:30.55ID:mUX6kDFm
真摯かねぇ・・・・希望的観測で詳しくないことに首突っ込んだり
自分の間違いや認識の誤りは絶対に認めないクソコテなのに

まぁそれも俺の主観だから他の人がどう思うかは知らんけど。
149デフォルトの名無しさん
2019/01/16(水) 18:41:54.90ID:YdXHJCw6
>>145
風味って鼻から空気が出る時に感じる食べ物の香りかと思ってたわ
150デフォルトの名無しさん
2019/01/16(水) 20:40:09.12ID:iaQOejPk
c++が対象にしてる現実問題って何だ?
c++使う大規模プロジェクトってゲームがまずあると思うけど
例外禁止未だに普通だし標準ライブラリも限定的にしか使わないよ
151デフォルトの名無しさん
2019/01/16(水) 20:47:01.61ID:Tucl/crz
c++で書かれたc++のコンパイラのことだろ
ここが0.001%早くなるだけで世界から年間100000時間くらいが節約できるんじゃねえの
152デフォルトの名無しさん
2019/01/16(水) 21:54:11.46ID:gQtWsPR9
じゃあLLVMのコーディングスタンダードこれな
https://llvm.org/docs/CodingStandards.html

例外、RTTI、iostream使わない
現実に使えるソフトってのはこういう制約で作るわけだ
C++の標準化やってる連中はメタプログラミングで遊んでるだけ
現実問題なんて何もわかってない
153デフォルトの名無しさん
2019/01/16(水) 23:10:45.86ID:4t4UncJr
例外使わないとかないわー
初心者かよ
154デフォルトの名無しさん
2019/01/16(水) 23:12:36.63ID:Xh3PQjx5
だから、ブラウザ、ロケット射的距離のシミュレーション、機械学習
155デフォルトの名無しさん
2019/01/16(水) 23:36:41.52ID:gQtWsPR9
>>153
初心者ってのはC++の例外のバイナリモデル説明できねーやつのことな
156デフォルトの名無しさん
2019/01/16(水) 23:44:05.56ID:gQtWsPR9
>>154
でC++がそれらに対してどんな問題解決してくれたんだ?
157はちみつ餃子 ◆8X2XSCHEME
2019/01/17(木) 01:07:41.88ID:/VOhvfFp
>>152
そこらへんはしゃーない。 便利な機能も害悪な場面は有るし、
ある時点では有用だったものが後には足を引っ張ることもある。
あるプロジェクトで縛りを設けるからといって
それが現実の全てというわけではない。

ただ、例外を使わない方向というのは大きなプロジェクトでは
そこそこあるかも?

>>153
例外が忌避されるのは他の言語と接続したときに、
呼出した側が例外を捕捉できないというのが致命的で、
つまりはそういった場面が想定されるようなライブラリでの一般的な規則。

外へ出る前に例外を全部キャッチしてしまうってのでも、
まあなんとかならんことはないが、
近頃では std::optional を活用した方がいいという雰囲気はある気がするね。

Go や Rust は最初からそういう方向だし。
158デフォルトの名無しさん
2019/01/17(木) 02:01:31.97ID:l+wuAult
このスレ、初心者を見下す者ばかりだし、

何が 【初心者歓迎】だよ。
【初心者歓迎】はずせ。

そう言うと、「何にもそんなことしてないよ」
とか、レスが来る。
子供スレ。
159デフォルトの名無しさん
2019/01/17(木) 08:10:37.95ID:qOfK2eXQ
optionalはヒープ使わないだけでnullと大差ない
せっかく静的にnot nulが保証されてるとこを壊してしまう
ほとんどアンチパターン
160デフォルトの名無しさん
2019/01/17(木) 08:21:29.72ID:4hvMH0x4
業務でC++使ってない雑魚の意見なんて無視しろ
161デフォルトの名無しさん
2019/01/17(木) 08:22:23.19ID:4hvMH0x4
趣味でC++齧ってるやつと本気で仕事としてやってるやつじゃ格が違うんだよ
162デフォルトの名無しさん
2019/01/17(木) 08:22:55.36
C++では好きなだけ効率を犠牲にして安全を手にすることができる
効率を犠牲にして安全を手にすることを余儀なくされている言語とは区別すべきだ
163デフォルトの名無しさん
2019/01/17(木) 08:47:23.41ID:qOfK2eXQ
業務で使ってない素人は平気で例外禁則とか言って返り値チェックで死ぬほど汚いコード書くんだよな
164デフォルトの名無しさん
2019/01/17(木) 09:07:15.76ID:CHgbqTPA
まぁ業務と違って趣味は時間を無駄につぎ込めるから
人によっては素人の方がレベル高かったりするけどな

そういうのと比較するのはホントやめて欲しい
165デフォルトの名無しさん
2019/01/17(木) 09:09:21.72ID:4hvMH0x4
>>164
は?業務と趣味でやってる奴が一番最強
166デフォルトの名無しさん
2019/01/17(木) 10:35:25.89ID:iQ0t94Qh
>>159
optionalの理解間違ってるよ
167デフォルトの名無しさん
2019/01/17(木) 10:39:29.94ID:iQ0t94Qh
>>163
例外禁止されるのは業務の方だろ
一見汚くなるがそちらの方がバグが少なくメンテしやすいという判断で
トップダウンで強制される
趣味なら最新の機能ばんばん使って自由にやりゃいい
168デフォルトの名無しさん
2019/01/17(木) 12:13:15.88ID:oU9OMPiG
実際には例外を禁止するとバグが増えてメンテしにくくなるんだけどな
169デフォルトの名無しさん
2019/01/17(木) 13:51:39.37ID:l+wuAult
そのソフトが気に入らないなら、
そのソフトを使わなきゃ良いだけだし。
そんなことも、いい年になって、わからないのか。
170デフォルトの名無しさん
2019/01/17(木) 14:34:02.57ID:DbtLCT5r
このスレ卒業死体
171デフォルトの名無しさん
2019/01/17(木) 14:43:25.66ID:n6FY+cyG
スレばいいじゃない
172デフォルトの名無しさん
2019/01/17(木) 15:55:58.66ID:K5aWd8xj
setjmp 使えばよろし
173デフォルトの名無しさん
2019/01/17(木) 17:20:21.35
遂に中級者になるのか……
174さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/01/17(木) 20:25:15.31ID:e9w/TFC0
>>173
なんでID消えてるの?
175デフォルトの名無しさん
2019/01/17(木) 20:47:04.58ID:iJuNblTy
浪人で消してるんでっしゃろ
176デフォルトの名無しさん
2019/01/17(木) 21:54:16.18ID:yb/OKoP7
単なるエラーを返すのに例外機構みたいな大域脱出って牛刀感あるよな。
177デフォルトの名無しさん
2019/01/17(木) 22:25:28.97ID:zQ8cL02f
エラーコードの取り間違いやチェック漏れがないように書くにはすごい集中力が必要で神経をすり減らす作業
スローすれば僅かな労力で安全に済むところをわざわざ戻り値にするのは事を大げさにするだけ
178デフォルトの名無しさん
2019/01/17(木) 23:05:50.61ID:K5aWd8xj
つ errno
179デフォルトの名無しさん
2019/01/17(木) 23:24:18.46ID:yb/OKoP7
なあに、例外のcatch漏れや例外安全を欠いていないか注意するのと比べたら
たいてい局所的に判断できるから大したことない。

>エラーコードの取り間違いやチェック漏れがないように書くにはすごい集中力が必要で神経をすり減らす作業

検査例外じゃない例外機構でそれを保証するのも簡単じゃないと思うがな。
まぁ、一人開発で投げるのもcatchするのも全部把握しているという前提ならわからんでもないが。
180はちみつ餃子 ◆8X2XSCHEME
2019/01/18(金) 00:32:34.20ID:ZqjXe4yq
>>179
そのへんはチェックするツールとかあったりしない?
知らんけど。
181デフォルトの名無しさん
2019/01/18(金) 00:49:25.33ID:HmTdANXo
実はキャッチ漏れは戻り値処理漏れよりはるかに少ない
戻り値処理はその場でエラー処理したくない場合にも一度変数に受け取って分岐を入れて呼び元に返すということを繰り返さなければならない
なので処理漏れを起こしうる確率が呼び出し箇所の数に比例して増えていくことになる
そして本当のエラー処理をしたい場所が隠れてしまいコードの可読性が低下する
可読性が低下すればミスがさらに増える
例外なら処理したくない場合は何も書かなくていいので間違えようがないので安心
またエラー処理をしたいまさにその箇所だけに処理を書けばいいのでコードの見通しが非常に良くなりミスも激減する

エラーコード戻し安全なコードを書くことは実は非常に難しい
エラーコードチェックのせいで無駄な変数と分岐が大増殖するので正確にシステムの状態を追うことが困難になりミスが増える
例外を使えばフローが非常に単調で綺麗になるので安全なコードを書くのも簡単になる
182デフォルトの名無しさん
2019/01/18(金) 01:03:26.14ID:0w3MYNkW
同じ理由で、忌み嫌われてるgoto文も、実はけっこう便利だと思う
183はちみつ餃子 ◆8X2XSCHEME
2019/01/18(金) 01:11:53.91ID:ZqjXe4yq
正しく使えば何だって便利だし、
駄目な使い方をすれば何だって駄目だっていう
すごく当たり前すぎる話
184デフォルトの名無しさん
2019/01/18(金) 08:10:56.74ID:VfzPRVfV
>>183
>>180
プログラミング辞めてツールでチェックしてもらえば?
185デフォルトの名無しさん
2019/01/18(金) 08:14:02.62ID:BmxrQ6cX
>>180
それが検査例外じゃないかな。
いろいろ批判もあるけど、例外の内容に応じてそれぞれ異なるリカバリを確実に行うことを
保証する手段としては今のところそれ以外無いかなと思う。
まぁ、erlang/swiftあるいはgoのpanicのように、エラーの種類なんて気にせず「この下の
処理が失敗した」とだけ捉えるのが例外の扱いとして妥当なところかも。
186デフォルトの名無しさん
2019/01/18(金) 09:51:47.22ID:LyFbxqMk
>>181
使い捨てでないまともなプログラムはいたるところにエラーリカバリー処理が入る
つまり例外だといたるところにtry catchかつ外に投げる例外は誰がcatchするのか仕様が複雑
仕事で大規模なプロジェクトに関わったことない人はこういうのが理解できていない
187デフォルトの名無しさん
2019/01/18(金) 10:01:53.52ID:LyFbxqMk
例外押しのやつはどうせほとんどcatchせずにそのままexitさせてるだろ
exitするぐらいなら異常が発生した場所でabortする方がはるかにいい
確実にスタックダンプが残せる
188デフォルトの名無しさん
2019/01/18(金) 10:41:00.50ID:cHsPUmRi
例外が有用なのってネットワークとストレージのioぐらいという認識
それ以外で必要性を感じない
配列外アクセスとかで例外とばすなと思う
189デフォルトの名無しさん
2019/01/18(金) 11:40:22.57ID:6lA8mErY
>>188
そういうバグが原因の例外はcatchしなければいいんでは?
190デフォルトの名無しさん
2019/01/18(金) 13:31:14.01ID:cHsPUmRi
>>189
だから現実的にそういうのに例外をなげる仕様にありがたみがないでしょ
191デフォルトの名無しさん
2019/01/18(金) 13:49:33.80ID:6lA8mErY
>>190
なんで?SEGVも起こさずに潜在的なバグとして残り続けるよりよくない?
192デフォルトの名無しさん
2019/01/18(金) 13:57:52.52ID:cHsPUmRi
>>191
自分でcatchするならtry catchがうざい
バグ扱いでcatchしないならそもそも例外投げずにpanicされた方が調査が楽
また下手にどこかでcatchされたらバグに気づかない危険性がある

以上の理由により
193デフォルトの名無しさん
2019/01/18(金) 16:42:12.57ID:MrHOaa15
gotoなんか品質チェックに問答無用で引っ掛かる
194デフォルトの名無しさん
2019/01/18(金) 16:50:08.01ID:e8mi14LA
お間抜けな品質チェックだこと
195デフォルトの名無しさん
2019/01/18(金) 17:34:28.42ID:dGgLcYHd
ID:cHsPUmRi ってcatchで全ての例外がキャッチされると思ってるのか?
196デフォルトの名無しさん
2019/01/18(金) 17:42:49.84ID:e8mi14LA
例外が発生しました

「このPCの電源が入っていません」
197デフォルトの名無しさん
2019/01/18(金) 17:59:44.06
例外機構は誰がキャッチするのか別の問題を作った
問題先送りで日本人らしい
結局本質的には何の解決ももたらさなかった
例外機構はオカルトだったんだ。占いの類
198さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/01/18(金) 18:01:08.56ID:eisM0hGT
例外なくしてOS作れるか?
199はちみつ餃子 ◆8X2XSCHEME
2019/01/18(金) 18:48:44.03ID:ZqjXe4yq
>>197
エラーを返却値で返すことにしたところでそれは同じでしょ。
どこまで上に (返却値によって) 伝播すべきかってのは
どこでキャッチすべきかと問題は同じだよ。
200デフォルトの名無しさん
2019/01/18(金) 18:57:17.35ID:X3ceYQ3H
ダウソファイルのファイル名置換する簡単なプログラムをC++とC#で書いてみた(C++で作って、それ見ながらC#に変換した)
もともとシェルスクリプトでもいいようなプログラムなんで実行速度とかどーでもいい
コンパイル時間長が
C# <<< 超えられない壁 <<< C++
C++のコンパイル時間と比べるとC#は一瞬で完了する。これは、快適性がだんちだな。
201デフォルトの名無しさん
2019/01/18(金) 19:12:22.57ID:seZYByET
if文使うな。
ということか?
202デフォルトの名無しさん
2019/01/18(金) 20:07:49.64ID:BPWAMvDw
リターンコードスタイルにすると


無駄な変数が増える
無駄な分岐が増える
エラーコード追加時に全ての呼び出し元を精査しなければならない
エラーに付随する情報を伝達する標準的な規則が存在しない
全ての正常系の処理にコードチェックのオーバーヘッドが追加される
ライブラリ内部で発生する例外への対処が困難(例外を基本としていれば容易に対処可能)
参照透過性が壊滅する

デメリットだらけ
203デフォルトの名無しさん
2019/01/18(金) 20:59:01.43ID:BmxrQ6cX
>エラーコード追加時に全ての呼び出し元を精査しなければならない
>参照透過性が壊滅する

例外ならそれが解決すると考えているならちょっとやばい。
204デフォルトの名無しさん
2019/01/18(金) 23:06:15.78ID:BPWAMvDw
>>203
返り値でエラー通知するようなセピア色の世界にいるとわからんかもしれんが普通に解決するぞ
205デフォルトの名無しさん
2019/01/19(土) 01:49:00.66ID:gJ7zJmkH
参照透過性ってそういう意味だっけ?w
最近例外ない言語増えてる事実はどう考える?
206デフォルトの名無しさん
2019/01/19(土) 07:07:12.07ID:+IqL7b8U
>>203
リターンコード方式や例外と参照透過性になんの関係があるんだろう…

>>205
> 最近例外ない言語増えてる事実はどう考える?
Go以外にあったっけ?
207デフォルトの名無しさん
2019/01/19(土) 07:37:40.03ID:FscMnE/k
まぁ、実際関係ないね。
同じ入力に対して常に同じエラーコードを返すなら参照透過性があると言えるし、
入力によらず場合によって例外を返すことがあるなら参照透過じゃない。
208デフォルトの名無しさん
2019/01/19(土) 07:43:37.22ID:WVD5Mi4y
「呼び出し元を精査」とかプログラム内のデバッグに例外使ってるような書き方やね
例外処理は外部的要因(ハード、通信等)のエラーのように自分の責任外のエラーを積極的に通知するために使うべきだと思うけどな
209デフォルトの名無しさん
2019/01/19(土) 08:51:08.36ID:fPDnzLoP
戻り値形式ではそもそも式として書けないから参照透過性もクソもないということをまずは理解しろ

int h(P const & p, Q const & q, Z & out_z) {
X x;
Int ret_f = f(p, x); // out ref x
if (is_error(ret_f)) return ret_f;
Y y;
int ret_g = g(q, y); // out ref y
if (is_error(ret_g)) return ret_g;
z = x * y;
return RET_OK;
}

↑例外を使わない下品すぎるコード
↓例外を使ったスーパーエレガントなコード

Z h(P const & p, Q const & q) { return f(p) * g(q); }
210デフォルトの名無しさん
2019/01/19(土) 09:21:20.09ID:XwZdf3Vk
Real Programmers Don't Use Exception.
211デフォルトの名無しさん
2019/01/19(土) 12:10:48.67ID:gJ7zJmkH
>>206
rust
swiftは最初なくて後で追加
積極的に使うスタンスでない
212デフォルトの名無しさん
2019/01/19(土) 12:13:26.40ID:gJ7zJmkH
>>209
そこに丹念なエラー処理を追加していくと、あら不思議どっちもあまりかわらない
213デフォルトの名無しさん
2019/01/19(土) 13:16:34.67ID:+IqL7b8U
>>211
それってやっぱりいるじゃん
ってことだよね w

>>212
え?
何言ってるの?
エラー処理ってなんのこと?
具体的に書いてみて
214デフォルトの名無しさん
2019/01/19(土) 14:04:33.44ID:gJ7zJmkH
>>213
エラー処理って言ったらまぎらわしかった
異常系の対応ってこと
215デフォルトの名無しさん
2019/01/19(土) 14:08:49.01ID:fPDnzLoP
何にでも丹念なエラー処理が必要になることはないし
丹念なエラー処理も例外の方がやりやすい
216デフォルトの名無しさん
2019/01/19(土) 14:30:15.46ID:+IqL7b8U
>>214
エラー処理でも異常系の対応でもいいから具体的に書いてくれよ
>>209程度ならたいしたことないだろ
217デフォルトの名無しさん
2019/01/19(土) 14:50:30.01ID:FscMnE/k
案の定、参照透過性は関係ない話だった。
218デフォルトの名無しさん
2019/01/19(土) 16:58:07.69ID:gJ7zJmkH
>>216
具体的にするには前提がいるでしょ

f、gは外部から与えられてる関数で中身を書き換えることはできない
かつ至る所で使われている
p、qは誤りを含んでいる可能性があって、異常(エラー/例外)が起こりうる
異常の場合は何かおかしかったの後で調査できるようにログに残す、
または人間にフィードバックしてリトライさせる必要がある

製品レベルのソフトウェアならいたって普通の前提と要件
これを実現するとどうなるかは想像つくでしょ?

おれは例外否定派ではないよ
役に立つところは限定的と言う主張
>>188 がおれだから
まぁ確かにどちらかで言えばなくてもいいとは思ってる
ただ現状C++の標準ライブラリは例外ありきの設計に突き進んでいるから
エラーコードで突き進むのは筋が悪いのは確か
219デフォルトの名無しさん
2019/01/19(土) 17:14:14.89ID:+IqL7b8U
>>218
> p、qは誤りを含んでいる可能性があって、異常(エラー/例外)が起こりうる
意味わからん
220デフォルトの名無しさん
2019/01/19(土) 17:16:52.76ID:fPDnzLoP
コード書けないならそう言えば?
長文で言い訳してないでさ
221デフォルトの名無しさん
2019/01/19(土) 17:33:46.39ID:XYN5JTgF
普通は馬鹿に割く時間がもったいないからコード書けません
222デフォルトの名無しさん
2019/01/19(土) 17:53:36.92ID:+IqL7b8U
そう言ういいわけ要らんし
223デフォルトの名無しさん
2019/01/19(土) 18:31:39.45ID:fPDnzLoP
信者ですらわずかなサンプルコードを書くのをためらうほどには戻り値スタイルは厄介な代物ということがわかったね
くだらない言い訳で長文を書く労力よりも高くつくということがはっきりした
224デフォルトの名無しさん
2019/01/19(土) 20:10:32.29ID:XwZdf3Vk
普通signalで実装するよね〜
225デフォルトの名無しさん
2019/01/19(土) 20:17:23.95ID:gJ7zJmkH
勝利宣言の後で申し訳ないけど
h()でハンドルするとしたら単に

  Z h(P const & p, Q const & q) {
    try {
      return f(p) * g(q)
    } catch (exception_invalid_arg_f e) {
      throw exception_invalid_arg("arg p is invalid");
    } catch (exception_invalid_arg_g e) {
      throw exception_invalid_arg("arg q is invalid");
    }
  }

みたいにリアス海岸になるわけでしょ
でもこれはpとqの異常の区別が下からあがってくる例外で区別できてしまう特殊例

  Z h2(P const & p, Q const & q0, Q const & q1) {
    return f(p) * g(q0) * g(q1);
  }

だとより複雑になる
じゃあこれ次の人やってみて
226デフォルトの名無しさん
2019/01/19(土) 20:34:58.74ID:DlKBTFO2
天狗だ天狗が出たぞぉ
227デフォルトの名無しさん
2019/01/19(土) 21:39:06.68
やっぱり例外機構はオカルトだった。皆が長い間この迷信に惑わされ疲弊した
228デフォルトの名無しさん
2019/01/19(土) 22:11:28.98ID:+IqL7b8U
疲弊してるのは君みたいだけど w
229デフォルトの名無しさん
2019/01/19(土) 22:15:24.45ID:wCv/sLww
>>227
少し休め
人生は長いぞ
230デフォルトの名無しさん
2019/01/20(日) 09:40:39.15ID:GKseTsKF
>>225
例外の使い方知らないのか
231デフォルトの名無しさん
2019/01/20(日) 10:17:17.63ID:0AQxsU+K
具体的に書いてくれよ
232デフォルトの名無しさん
2019/01/20(日) 10:50:52.46ID:mVpLWWyp
>>231
まさかと思うけど>>225でcatch書かなきゃf()やg()で発生した例外はそのままh()の呼び出し側に伝搬すること知らんのか?
あと、例えば引数がおかしいと言う例外なら例外情報に引数の値などを含めて一番外側でログを採るとかするから
>   Z h2(P const & p, Q const & q0, Q const & q1) {
>     return f(p) * g(q0) * g(q1);
>   }
> だとより複雑になる
なんてことはない
233デフォルトの名無しさん
2019/01/20(日) 11:19:55.89ID:GKseTsKF
ほらな言った通りになった

戻り値スタイルはただ異常処理を上位に委ねるだけでも多量のコードを書かなければならない
だから本当に処理すべき異常や正常系の処理が異常伝達に埋もれてしまいコードの可読性が著しく低下してしまう
>>225>>209のサンプルコードの意図を誤解した理由がこれだ
>>225が間違えたのは予想された事だったんだ

>>225が例外スタイルでは必要ない障害伝達を書いてしまった理由も根は同じ
戻り値スタイルを書き続ける事によって関数コールの周りに障害伝達を書くのは当たり前の事なんだと頭の中に刷り込まれて思考停止してしまった
結果として例外スタイルを書く際にもいつもの癖で不要な障害伝達を書いてしまった

そして戻り値スタイル派の人々は自分達が戻り値スタイルの常識にしたがって書いた例外スタイルの酷いコードを見てこう言うのだ
「ほらやっぱり例外はダメじゃないか」
とね
234デフォルトの名無しさん
2019/01/20(日) 11:22:27.27ID:GKseTsKF
ちなみに言った通りのレスは>>181のことな
235デフォルトの名無しさん
2019/01/20(日) 13:52:10.31ID:Y8m3wOFq
>>232
> > だとより複雑になる
> なんてことはない

具体的にコードで書けよw
要件は >>218
h()が異常処理の責任を持つ前提でな
上に例外伝搬させてるだけでは問題は何も解決しねーから
236デフォルトの名無しさん
2019/01/20(日) 14:06:11.05ID:Y8m3wOFq
あと
>>225
で例外投げなおしてるのは本質じゃない
単にそこでなにかしら異常系の対応をするという意味合い

人間にリトライさせることを考えると h()を呼び出したのがUIのフレームワークで
呼び出し側が "arg p is invalid" というメッセージでどっちの間違いが判定するなど
(現実には文字列で判定させる実装にしないだろうが、例な)

そこをそのまま exception_invalid_arg_f を上に伝搬させればいいだろと思うのはど素人
h() から外部ライブラリの exception_invalid_arg_f、exception_invalid_arg_g がそのまま
あがってくるというのは一般的にソフトウェアのレイヤー構造を崩してる
もちろん自分が担当している範囲ならありだが、
h() を外部に公開するような場合は仕様の責任をもつために自分で定義した例外で
投げなおすのは当たり前
237デフォルトの名無しさん
2019/01/20(日) 14:24:17.92ID:mVpLWWyp
とりあえず戻り値スタイルでコード書いてくれよ
例外版に直してあげるからさ
238デフォルトの名無しさん
2019/01/20(日) 14:29:19.26ID:GKseTsKF
>>235
ほら何もわかってない
エラー発生箇所でなんでも解決しなきゃならないと洗脳されてんだね
何もなくてもエラー処理コードを書かなければならない戻り値スタイルの書きすぎで感覚がおかしくなってる
239デフォルトの名無しさん
2019/01/20(日) 14:32:48.63ID:Q8jHF7yk
printfの戻り値もチェックしろよ
240デフォルトの名無しさん
2019/01/20(日) 14:40:21.16ID:GKseTsKF
>>236
戻り値スタイルに慣れるとレイヤー境界がどこかも定義せずに例外変換をしてしまうようになっちゃうのかな
そして本当に変換が必要な例外は何かということも考えなくなってしまう
必要かどうかわからないけど何かしなきゃって強迫観念に苛まれてるのだろうね
戻り値スタイルだと伝達処理が必須だから例外スタイルになると不安になるのだろうな
241デフォルトの名無しさん
2019/01/20(日) 17:06:39.20ID:z2xvgkTe
戻り値って何?
242デフォルトの名無しさん
2019/01/20(日) 17:27:50.05ID:wW/QZhoY
戻り値を使う例

printf("%d\n",printf("1+2+3="));
243デフォルトの名無しさん
2019/01/20(日) 17:45:51.48ID:Q2ecPa0m
配列・ポインタ・構造体・クラス→「プログラミング楽勝ンゴwwwwww」

スレッド・コルーチン・テンプレート→「あばばばば・・・」
244デフォルトの名無しさん
2019/01/20(日) 21:20:28.02ID:Y8m3wOFq
はい誰もコード書かないw
お前らちっさいコードとか異常系の甘いコードしか書いたことないから例外マンセーなんだよ
245デフォルトの名無しさん
2019/01/20(日) 21:31:17.80
やっぱり例外機構はオカルトだった。皆が長い間この銀の弾丸を装った迷信に惑わされ疲弊した
246デフォルトの名無しさん
2019/01/20(日) 21:52:33.91ID:mVpLWWyp
>>244
だから後出し条件出されると困るから戻り値スタイルでコード書いてくれ
って書いてあるだろ
例外とあまり変わらないんだから書けるよね?
247デフォルトの名無しさん
2019/01/20(日) 22:13:54.05ID:GKseTsKF
>>244
>>209
248はちみつ餃子 ◆8X2XSCHEME
2019/01/20(日) 22:17:29.98ID:/TyOXJfP
あのなぁ、俺は他の機能についての話で何度か書いてるけど、
適切な場面で適切に使えってだけの話で、
どんな機能だってそんなに万能だと思ってるやつなんていねぇよ。

どうせ回復できない異常ならちまちまと返却値をとりまわして
上まで運ぶのはクソ面倒くせぇし、
その場で対処する必要があるようなものは
try/catch よりも if で書いた方が短くて簡単だし取りこぼしにくいってのはわかる。

どちらにするべきか判断を付けるコストの方がデカいわっていう場面なら
各プロジェクトのポリシーで一方に決めつけたって別にかまわん。

当たり前すぎて主張するのがアホくさいんだけど、
そんなことは場合によるとしか言いようが無いだろ。
249デフォルトの名無しさん
2019/01/20(日) 22:18:21.76ID:GKseTsKF
異常系の処理がシビアになればなるほど例外が有利になる
リターンコードスタイルは複雑化した分岐と大量の変数のせいでミスを誘発しまくる
例外ならば必要な時に必要なだけ異常系の処理を書けばいいので混乱することはない
例外スタイルにはまったく過不足がない
やりたいことをジャストそのまま書けばよろしい
250デフォルトの名無しさん
2019/01/20(日) 22:25:39.40ID:GTDVzsz1
>>248
中身のない長文は要らんよ
251デフォルトの名無しさん
2019/01/20(日) 22:33:30.46ID:ps+hJNCY
例外はその機構が重いから極端な異常系にしか使わないようにしてるのも今は昔の考え方なのかな
252デフォルトの名無しさん
2019/01/20(日) 22:36:51.24ID:XHg9p3tl
>>250
ここ数10レスほど続いていた中身のない不毛なやり取りより>>248の1レスの方が有意義だと思うぞ
253デフォルトの名無しさん
2019/01/20(日) 22:39:23.56ID:GTDVzsz1
>>252
お前もな〜
254デフォルトの名無しさん
2019/01/20(日) 22:55:26.02ID:GKseTsKF
>>251
そもそも正常系では例外の方が速い
255デフォルトの名無しさん
2019/01/20(日) 23:31:58.94ID:PO2ZqArQ
>戻り値スタイルに慣れるとレイヤー境界がどこかも定義せずに例外変換をしてしまうようになっちゃうのかな

レイヤーの境界やエラーの粒度の違いに頓着しないのは、どっちかというと安直に例外投げれば良いと
考えている方のような気がするがな。
この一連の発言見ても、投げた例外が誤ってレイヤー境界を越えてしまわないようどう保証するかなんて
言及してた人いないでしょ。
256はちみつ餃子 ◆8X2XSCHEME
2019/01/21(月) 00:00:25.72ID:seIeK7lJ
>>251
例外にもいくつかの方式があって、SJLJ ってやつは例外を投げないときもやたら遅いが、
他のほとんどの方式は例外を投げないときはゼロに近いコストのはず。

ただ、 SJLJ 以外の方法というのはデバッグ情報を使うためにツールチェインとの連携が必須だとか、
ハードウェアの機能を使うとかいった制約があって移植性に難があったりもするので、 SJLJ も滅びずに残ってる。

要するに例外の処理速度は場合によるが、
普通のデスクトップコンピュータで SJLJ を使わざるを得ないようなみみっちいツールチェイン、ハードウェアって
ことはあんまりなかろうと思う。 (ある?)
257デフォルトの名無しさん
2019/01/21(月) 00:16:50.05ID:xYP7RvSv
>>255
リターンコードスタイルはレイヤ境界どころか体系的にエラー処理を考えるということをしないからなぁ
例外スタイルの人はじゃあどこで処理すんのということもちゃんと考えてる
258デフォルトの名無しさん
2019/01/21(月) 02:42:47.97ID:sP4gcHu6
例外でイベント発生させて、イベントハンドラで受けるのはど?
259デフォルトの名無しさん
2019/01/21(月) 06:13:04.33ID:NbFzEAOW
>>255
> この一連の発言見ても、投げた例外が誤ってレイヤー境界を越えてしまわないようどう保証するかなんて
> 言及してた人いないでしょ。
保証は言語側でやってくれるから言及する必要がないだけのこと
そもそも例外は>>249の言う通りその場所で必要なものをキャッチして処理をすればいいだけ
260デフォルトの名無しさん
2019/01/21(月) 07:28:30.34ID:sP4gcHu6
swith caseで分岐する場合もあれば、
関数へのポインタテーブル作って、ジャンプさせる場合もあるわけで、
例外も戻り値分岐も両方普通に使わないか?

C++てイベントとかイベントハンドラは環境とかboost任せで、言語仕様としては未だに確定してないのか?
C++11でようやくマルチスレッドや排他制御が仕様に盛り込まれたり、
テンプレートの仕様いじくるよりこっちの方がよっぽど大事なんじゃないのか?
261デフォルトの名無しさん
2019/01/21(月) 08:25:41.60ID:vJCo0PxF
>保証は言語側でやってくれるから言及する必要がないだけのこと

保証なんてしないよね?catch忘れたらそのまま上まですっ飛んでいくだけ。
Javaのような検査例外ならそこに差異があることを意識されられるかもしれないけど。

>そもそも例外は>>249の言う通りその場所で必要なものをキャッチして処理をすればいいだけ

そこでプログラマが考える「必要なもの」から漏れた例外は上位へ渡されてしまう。
それを防ぐためには呼び出し先から送られる可能性のあるすべての例外を把握する必要があるが、
検査例外がないなら動的型付言語のように投げる側と受け取る側とで平仄を合わせてやるしかない。
262デフォルトの名無しさん
2019/01/21(月) 08:37:50.82ID:Kndge7xV
大前提が間違ってる
例外なんか最終的にはフレームワークが最上位で纏めてキャッチすりゃいいんだよ
途中でキャッチして処理するのはあくまでベターなオプションであり、それを必須とするような作りにしてはいけない
263デフォルトの名無しさん
2019/01/21(月) 08:55:24.27ID:NbFzEAOW
>>261
> catch忘れたらそのまま上まですっ飛んでいくだけ。
闇雲にキャッチしたいならcatch(...)ってやればいいだけ w
> そこでプログラマが考える「必要なもの」から漏れた例外は上位へ渡されてしまう。
本来キャッチが必要な例外を漏らしているならそれはバグ
それは戻り値スタイルでも同じ話
違うのは例外はキャッチする必要の無い例外についてはそこで考慮する必要はない、自動的に上位に渡されるから上位の然るべき場所で考慮すればいいから
それが>>249の言う
> 例外ならば必要な時に必要なだけ異常系の処理を書けばいいので混乱することはない
ってこと
264デフォルトの名無しさん
2019/01/21(月) 08:56:49.38ID:vJCo0PxF
>>262
半分同意。
結局のところエラーの種類に応じてきっちり対処するなら検査例外的な仕組みが必要になるが
そうでなければエラーの内容など見ずにlet it crash的に対処するしかない。
どっちつかずが一番ダメなやつ。
265デフォルトの名無しさん
2019/01/21(月) 08:58:29.41ID:Kndge7xV
(検査例外とかいうJava自身も認める失敗作は論外として、)例外機構は正しく使えばエラー処理に対する関心の分離に有効なんだよ。
ところがC++では例外を煩わしいノイズと見做す人が多い。これは即ち関心の分離ができてないわけだ。
その一番の原因は、例外型がロクに標準化されてないことだろうね。
最上位での集約処理を実現するには、下位の全てのコードが制御下になければならない。
これは膨大な既存資産と貧弱な標準ライブラリを持つC++においては非現実的な前提である。
266デフォルトの名無しさん
2019/01/21(月) 08:58:39.64ID:unEY8tjt
すべての例外を把握する必要はない
回復可能かつ回復が要件に含まれるなら個別に処理すべき
それ以外はアスペクトで処理すればいい
267デフォルトの名無しさん
2019/01/21(月) 09:04:47.90ID:nVlZ7k5e
>>247
だからさ、比較できるように例外スタイルで一度きちっと異常系対応して
かつスーパーエレガントなのを書いてくれよって言ってんの
お前のは体よく異常系の処理全無視してるだけじゃん

catchしたい人が必要なところでcatchすればとか言うんだろうけど
例外発生場所から遠くなればなるだけ何が原因で例外が発生して、
その回避はどうすればいいかが不明瞭になっていくってのは
散々語られてる例外の欠点

リターンコードは泥臭いが下層からくるエラーをどう処理してるかはコード見れば一目瞭然
エラーを上位に伝搬させるか、リカバリーするか、その場でクラッシュさせるか
ローカルに記述が完結できてる
APIとして外部に公開するときもインタフェースの仕様にきっちり責任持たせることができる
ちなみにプルリクでレビューする文化があればエラー無視してるような雑はコードは突き返されるだろう
見ればすぐわかるんだから
大規模な開発を経験したことない人はこういう観点でソフトウェア開発を
考えられないんだよ

最後にもう一度言っておくけどおれは例外を完全否定してるわけじゃねーから
使える場所は限られるって意見ね
268デフォルトの名無しさん
2019/01/21(月) 09:07:50.76ID:nVlZ7k5e
>>262
> 大前提が間違ってる
> 例外なんか最終的にはフレームワークが最上位で纏めてキャッチすりゃいいんだよ

これがど素人の意見
ソフトウェアの品質について考えたことがない
269デフォルトの名無しさん
2019/01/21(月) 09:11:48.87ID:nVlZ7k5e
「不正な入力です」
「ネットワークでエラーが発生しました」
「書き込みに失敗しました」

こういう情けないダイアログが表示させて終わりのアプリを作るやつね
270デフォルトの名無しさん
2019/01/21(月) 09:19:18.64ID:9okmCQOj
>>269
それでも正常に回復できてるならそれでいいケースは多い
例外の最大の利点は例外安全さえ死守できていればアドホックな例外処理が必須でなくなることで、
より丁寧な処理が必要になれば後から追加すればよい
まあ組み込みとかやってる人には馴染まない考え方だろうね
271デフォルトの名無しさん
2019/01/21(月) 09:35:09.59ID:9okmCQOj
まあC++開発者が未処理例外=クラッシュと短絡的に考えてしまう気持ちはよく分かるよ
呼び出し階層の途中に一つでも if (hoge() != SUCCESS) errorhandle(); があれば例外安全は破綻するわけで、あまりにも非現実的
272デフォルトの名無しさん
2019/01/21(月) 09:54:05.98ID:NbFzEAOW
>>267
仕様は>>218が決めるんだから>>218がコードを提示すべき
>>236みたいに後出しの条件出されても困るからな
273デフォルトの名無しさん
2019/01/21(月) 10:02:59.35ID:+Z2Zhk1G
>>267
> 例外発生場所から遠くなればなるだけ何が原因で例外が発生して、
> その回避はどうすればいいかが不明瞭になっていくってのは
> 散々語られてる例外の欠点
それ戻り値スタイルでも同じだろ

> リターンコードは泥臭いが下層からくるエラーをどう処理してるかはコード見れば一目瞭然
だからそれはすぐ上位で処理することが前提になってるだろ
上位に何度も伝搬したら例外と同じになる上に伝搬するコードをそこら中に書く羽目になる

> ちなみにプルリクでレビューする文化があればエラー無視してるような雑はコードは突き返されるだろう
例外処理を書かないことはエラーを無視するんじゃなくてそのまま上位に伝搬してるだけ
書かないと無視してると取るのは例外をきちんと理解してないってこと

> 見ればすぐわかるんだから
お前の能力がな w
274デフォルトの名無しさん
2019/01/21(月) 12:21:37.48ID:Di3L4KSP
>>267
例外を使いこなせていないね

例外の型とパラメータをみれば何が起こったかはっきりわかる
おそらく君は例外の種類を使い分ける習慣がないだろ?
あったとしてもせいぜい標準ライブラリの例外をなんとなくふり分ける程度だろうね
でないとこんな発言はしないから
まずは例外を定義するところから初めてごらん

それと大規模開発をしたことがないのはそちらだろう
関数コールするたびにずらずらと変数や分岐を書かれたらあっという間に管理不能になる
大規模だからこそ標準的なコード、必要十分なコードというのが大切になる
275デフォルトの名無しさん
2019/01/21(月) 12:52:23.62ID:Di3L4KSP
リターンコードスタイルをレビューに出すと袋叩きにされるぞ

・ノイズが多すぎて正常系のレビューが不可能
・同じくどのエラーが上位伝達、エラー変換、共通対応、個別対応なのか見てすぐにわからない
・同じく要件漏れを見落としやすい
・正常系、異常系、判断、伝達などあらゆる要素が密集して強く結合しているため仕様変更があった場合の影響が大きすぎてレビューしきれない
276デフォルトの名無しさん
2019/01/21(月) 13:00:29.05ID:9okmCQOj
>>275
考え方自体には同意するけど、>>271で示したように例外安全が破綻しているケースについてどう考える?
エラーコードを前提にクリーンアップ処理が記述されているコードが混入しているような場合ね
あくまでC++に限った話だけど、大規模開発で完全な例外安全を維持するのは極めて困難だか実際には絵に書いた餅と思ってる
277デフォルトの名無しさん
2019/01/21(月) 13:01:15.22ID:9okmCQOj
>>276
訂正
極めて困難で、実際には絵に描いた餅
278デフォルトの名無しさん
2019/01/21(月) 13:05:57.47ID:eQbQQa6X
レビュアーの経験値不足って感が否めない
279デフォルトの名無しさん
2019/01/21(月) 13:14:15.22ID:NbFzEAOW
>>276-277
必要なら直せばいいだけ
非常に稀な事象についてまで例外安全を遵守する必要はないでしょ
そもそもそういう変なコードが混入してる体質の組織で何を言ってるんだよ? って話だと思うけど
280デフォルトの名無しさん
2019/01/21(月) 13:20:41.40ID:9okmCQOj
>>279
文化と素養の問題だよ
例外の是非でこれだけ荒れる現状を見てれば、例外のスルーなんて怖くてできねえよ
そりゃあんたが全てのコードをレビューしてマサカリ投げまくってくれるなら別だけどねえ
281デフォルトの名無しさん
2019/01/21(月) 13:46:08.82ID:NbFzEAOW
>>280
ごめん、言ってることがよくわからん
そもそも
if (hoge() != SUCCESS) errorhandle();
なんてコードがあったら戻り値スタイルでもどうしようもない
例外は魔法の杖じゃないんだから何でもかんでも例外使えば解決するわけじゃなくて戻り値スタイルより楽にできるというだけの事だよ
プログラムがデカくなるほどその差は開くけど
282デフォルトの名無しさん
2019/01/21(月) 15:00:28.97ID:9okmCQOj
>>281
result = hogehoge();
if (failure(result)) エラー処理();
リソース解放();
これhogehogeが例外起こしたらリークするだろ
283デフォルトの名無しさん
2019/01/21(月) 15:09:35.03ID:NbFzEAOW
>>282
スマートポインタ使うなりcatchしてリソース解放して例外再送出するなりいくらでもやりようはあるだろ…
ちょっとレベル低くね?
284デフォルトの名無しさん
2019/01/21(月) 15:25:30.15ID:9okmCQOj
>>283
だからそれが例外安全だよ
勉強になったね
285デフォルトの名無しさん
2019/01/21(月) 15:27:04.68ID:NbFzEAOW
流石に恥ずかしくね? w
286デフォルトの名無しさん
2019/01/21(月) 15:51:37.78ID:GjW/cezm
>>283
基本的にデストラクタやリソース開放系は例外投げられると大変なことになる
catchしてなんて簡単にいってるけどもcatch(...)をそこに入れることになるのはわかるかね
287デフォルトの名無しさん
2019/01/21(月) 16:15:33.27ID:NbFzEAOW
で、そんな当たり前のことを言って何が言いたいの?
聞きかじりの知識を披露してるとしか思えないんだが… w
288デフォルトの名無しさん
2019/01/21(月) 18:01:37.80
例外機構は宗教
多くの人が正しいと盲信しているに過ぎない
289デフォルトの名無しさん
2019/01/21(月) 21:32:31.75ID:sP4gcHu6
戻り値でイベント投げるという選択肢がない言語使用自体くそじゃね?
290デフォルトの名無しさん
2019/01/21(月) 22:06:05.18ID:5kYBxhZB
Cにそんな機能あったっけ?
それとも別の言語の信者が折伏に来ているの?
291デフォルトの名無しさん
2019/01/21(月) 23:00:01.73ID:vJCo0PxF
>>265
そう、検査例外を正しく使うのはしばしば困難で批判も多いな。ただ、呼び出す処理がどのような
例外を返すか、静的な型検査による保証を与えてくれる仕組みとしては他に無いのも事実。

検査例外を否定するのであれば例外型に頼らない(>>264の後者)か、プログラマの努力で
整合をとってやる(>>261の最後)カウボーイ的プログラミングになる。
>>265はあくまでも例外に型を期待しているようだからカウボーイの方なんだろう。
292 ◆QZaw55cn4c
2019/01/21(月) 23:52:35.55ID:N0KGcgmj
>>291
>プログラマの努力で整合をとってやる(>>261の最後)カウボーイ的プログラミングになる。



これって「カウボーイ的」と形容されるべきものだったんですか?

catch の引数は値ではなくて、「型」だから、
テキトーな super class ERROR の下に個別エラー用派生クラスを列挙しておき、
臨機応変に catch (ERROR &e) を噛ましています…

>>256
一応例外を投げておくけれども、まじめにサポートする気はさらさらなく、
そもそもやる気は皆無・全くゼロであることを、ただ、それだけを全心全霊で表現するためだけに

throw 13;
293はちみつ餃子 ◆8X2XSCHEME
2019/01/22(火) 02:54:09.24ID:FdSNzm47
例外の処理速度については、こういう提案もある。

https://ezoeryou.github.io/blog/article/2018-07-10-static-exception.html

要するに、投げるオブジェクトが条件を満たすときは、
暗黙の返却値のような形で例外を伝播する仕組み。
バイナリレベルの取り扱いも ABI を決めさえすれば済むだろうし、
互換性も確保しやすそうに思う。
294デフォルトの名無しさん
2019/01/22(火) 07:12:53.52ID:c7vqWXz4
どう見ても例外否定派の方が宗教がかってる…
295デフォルトの名無しさん
2019/01/22(火) 08:50:21.38ID:Z/sMOZE7
環境の方の質問NGなら完全スルーでお願いします

Windows8.1 64bit のうえで Windows98SE でも動く C のバイナリを作ろうと思ってるのですが
LSI C 試食版以外に何か良い方法がないかなあと…


Windows98SE の方に Visual C++ 6.0 & SP6 をインストールしても良いのかも知れませんが
DLL の整合性とか不安
VC++ 2005 は iso 持ってるだけ…Windows98SE で動くバイナリが生成できるとか何とか
296デフォルトの名無しさん
2019/01/22(火) 09:09:13.74ID:Z/sMOZE7
業務で使った経験は一切ないです
使い捨てレベルのものを書くのが目的です
297デフォルトの名無しさん
2019/01/22(火) 12:47:22.45ID:beRmTaV+
TEST::TEST()
{
 うんたら
}

ってコンストラスタがあって、このクラスにパラメータ付のコンストラスタを追加したいとき
C# だったら
TEST::TEST(int param) : this()
{
 増やす機能
}
みたいに書きますが C++ の場合はどうやって書きますか
298デフォルトの名無しさん
2019/01/22(火) 13:28:39.91ID:/wbMKv3O
TEST::TEST(int param) : クラスのパラメータ(param)
{
 増やす機能
}
299デフォルトの名無しさん
2019/01/22(火) 14:01:29.45ID:mZt3aCP3
>>297
委譲コンストラクタでググると出てくると思う。
たしかC++11で追加された機能。
300はちみつ餃子 ◆8X2XSCHEME
2019/01/22(火) 14:03:25.02ID:FdSNzm47
>>295-296
LSI-C試食版 って Windows 用どころか MS-DOS (16bit) の、しかもスモールモデルしか作れないじゃん。
使い捨ての、いいかげんな富豪的プログラミングしたらすぐメモリ足りなくなるぞ。

ワイとしては Open Watcom C++ を推すやで。
301デフォルトの名無しさん
2019/01/22(火) 14:11:32.02ID:/wbMKv3O
>>295
https://bellard.org/tcc/
https://en.wikipedia.org/wiki/Tiny_C_Compiler
https://dyama.org/2012/11/tiny-c-compiler/
https://github.com/TinyCC/tinycc
302デフォルトの名無しさん
2019/01/22(火) 15:51:04.50ID:DsO4NZlu
LSI-Cとかなっつw
昔の勉強用コンパイラといったらこれだったな
303デフォルトの名無しさん
2019/01/22(火) 16:10:30.87ID:3oaAhSoC
LS愛ちゃん
304はちみつ餃子 ◆8X2XSCHEME
2019/01/22(火) 16:47:15.38ID:FdSNzm47
>>302
Cマガの付録CDに常に収録されてたよな!
305デフォルトの名無しさん
2019/01/22(火) 17:01:23.17ID:8l7UUA+M
LatticeCとかBDS-Cとか使ってたわ
306デフォルトの名無しさん
2019/01/22(火) 17:22:22.39ID:beRmTaV+
>>298-299

TEST::TEST(int param) : TEST()
{
 増やす機能
}

で出来ました。ありがとうございました。
307デフォルトの名無しさん
2019/01/22(火) 18:21:52.81ID:Z/sMOZE7
bcc32c でコンパイルしたバイナリが Win98SE 上で動くことを確認…
Win98SE 上だと Turbo C が動くことを確認…

Open Watcom C++ というのは存じませんでした
確認してみます
308デフォルトの名無しさん
2019/01/22(火) 18:30:45.76ID:hELj0NVW
森公一郎さん、4年前に亡くなってる
309デフォルトの名無しさん
2019/01/22(火) 18:51:51.72ID:c7vqWXz4
>>295
> VC++ 2005 は iso 持ってるだけ…Windows98SE で動くバイナリが生成できるとか何とか
なんで試さんの?
310デフォルトの名無しさん
2019/01/22(火) 20:54:28.21ID:Z/sMOZE7
DLL hell に躊躇
311デフォルトの名無しさん
2019/01/22(火) 23:43:17.99ID:f8uEJHYw
LSI-C試食版www
懐かしいなあ
あの頃はものすごくCPU遅かったよね
486にして感激したからな
もうC言語でプログラムはしたくない
C++だ・・・
312デフォルトの名無しさん
2019/01/23(水) 03:50:30.92ID:2NaZdHzA
コメントに//が使えない時点でもうダメだな俺はw
313デフォルトの名無しさん
2019/01/23(水) 06:49:23.93ID:u7DJzLvn
古いOSでも動作させたいけど、ソースは新しい規格で書きたい、
と言うのは要望としてはありうるな。

>>295 はLSI-C試食版(C89相当だっけ?)を使ってるようだから、
そのクチではないのかも知れんけど。
314デフォルトの名無しさん
2019/01/23(水) 07:14:34.51ID:aGw/aeEH
>>310
今時なら仮想マシンでやればいいだけだろ
315デフォルトの名無しさん
2019/01/23(水) 08:57:06.72ID:A4LjhfFf
>>312
コメント前に // つけるより
/*
コメント
*/

あるいは

#if 0
コメント
#endif

のほうがすっきりしないか?
316315
2019/01/23(水) 08:57:45.81ID:A4LjhfFf
コメントが複数行にわたる前提ね
317デフォルトの名無しさん
2019/01/23(水) 09:18:31.94ID:NxchbiGL
だから何?
それに同意しようがしまいが単一行コメントのときに面倒なのは変わらないよね
個人的にはエディタがコメントの一括付け外しに対応してるなら複数行でも//の方が見やすいと思ってるけど
318デフォルトの名無しさん
2019/01/23(水) 09:36:35.20ID:WSWjtujW
C言語の a=b; って
アセンブラで言うと、メモリ→レジスタ→メモリって移し替えてるのと同じ?
メモリ→メモリにデータコピーする時って、必ずレジスタを経由しないとだめなのかな?
アセンブラ勉強初めたばっかで何言ってんだこいつ的な感じだったらごめん。
319はちみつ餃子 ◆8X2XSCHEME
2019/01/23(水) 10:06:54.98ID:+T2/7smM
>>318
CPU の種類による。

アセンブラはアセンブラという言語の規格があるわけではなくて、
各コンピュータの機械語の単語を便宜的に読みやすい書式に置き換えた
ものの総称なので、使える命令は各アーキテクチャのデザインに従うし、
書式のバリエーションもある。 いくつかの伝統的な習慣はあるけれど。

データの移送にレジスタを経由しなければならないようなデザインの CPU もあるし、
そうでないものもある。
メモリアクセスをする命令とその他演算の命令を明確に分離するようなデザインの
アーキテクチャを特に Load?store architecture と呼んでる。

https://en.wikipedia.org/wiki/Load%E2%80%93store_architecture

コンピュータの設計の根本を左右する方針の違いなので、
理解があやふやとはいえ、ここに引っかかりを感じたというのは才能を感じる。
320デフォルトの名無しさん
2019/01/23(水) 15:54:30.09ID:WSWjtujW
>>319
自分が勉強してたCPUがたまたまレジスタ必要とするものだったということですね。ありがとうございます。

あと、intelとryzenは、どちらのCPUであっても殆どのソフトは動作しますが
この2つのCPUのアーキテクチャオペランドは同じということでしょうか?
ゲームなんかは高速化の部分でアセンブラ使う場所も頻繁にあるんじゃないかなと思うのですが。
321デフォルトの名無しさん
2019/01/23(水) 16:07:56.74ID:WSWjtujW
すみません自己解決。
x64ですね。
322デフォルトの名無しさん
2019/01/23(水) 22:57:36.31ID:A4LjhfFf
>>317
wwww
逆に、だから何?
エディタが/* 入力と同時に
*/ を自動挿入してくれるなら全く変わらないだろ
それともおまえのエディタは / 入力で
もひとつ/ を自動挿入するように設定でもしてるのか?
ゆとりもここまで来るとどーしよーもねーな。
323デフォルトの名無しさん
2019/01/23(水) 23:18:56.27ID:A4LjhfFf
>>318
>>319
状況によるが、
a = b;
はメモリを介せず、できるだけレジスタ間コピーになるように最適化される。

んでメモリ to メモリを許すのはCISCと相場が決まってる
RISCはメモリ to メモリは命令にない 。命令セットを減らしてるからこそ reduce
このおかげで回路が簡単になり、所用クロック数をほぼ等しくして、クロック(Hz)をあげることができた。
このタイプはメモリ→レジスタ→メモリとせざるを得ない

今は、パイプラインを深くして、CISCでもクロックをあげられるようになったのでRISC/CISCはあんまり関係なくなった。
CICSの代表はx86なのでメモリ→メモリ命令セット調べてみ。
CISCの歴史的な経緯がわかるのは、これもCISC代表のx68kやH8は、命令セットごとに大幅に所用クロック数が違う。
それに対してx86の流れをくむ最新設計のRL78だとほとんどの命令セットが1クロックとなって。RISCと変わらない上に、
メモリ to メモリが可能となってる。それでも メモリ to レジスタに比べて1クロック増えてる。
メモリ to メモリ とレジスタ to メモリを同クロック数で実行しようとするなら、 バスラインがもう一組(例えば32bit)必要になった上に、
2ポートメモリが必要になってしまうwwww
324デフォルトの名無しさん
2019/01/23(水) 23:20:08.21ID:A4LjhfFf
アンカー違い
× >>319
>>320
325デフォルトの名無しさん
2019/01/23(水) 23:21:30.54ID:MK/3pF0O
>>322
自分で複数行が前提だと言っときながら何言ってんの君
326デフォルトの名無しさん
2019/01/24(木) 00:07:57.67ID:sZmPY6bv
>>325
*/の自動補完は複数行だろうが単一行だろうが関係ないだろが。
おまえがエディタ支援による入力補助を持ち出したから応じてやっただけだろゆとり
入力の手間はむしろ/* */の方が楽なんだよお馬鹿さん
327デフォルトの名無しさん
2019/01/24(木) 00:17:17.17ID:sZmPY6bv
>>325
それとさ俺が複数行限定といってるのに
>>317
>単一行コメントのときに面倒なのは変わらないよね

また単一行の話をしてるのはそっちだろーが。
おまえは朝鮮人か?それともボケてんのか?
328はちみつ餃子 ◆8X2XSCHEME
2019/01/25(金) 04:31:55.12ID:D9LdM3uI
まあ例えばインテルアーキテクチャでも、
機械語の命令列を内部で μop に分解して最適化してから実行したりするので、
機械語のレベルなんてまだまだ高級な層。

内側では RISC 的なデザインとも融合していて
正直言って、そこで何が起きているのか正確に理解するのは無理。
(結果に影響しない範囲で) 命令を並べ替えることすらあり、
しかし、マルチスレッドと絡むとわけわかんなくなりがち。

Z80 の牧歌的な世界を知ってると隔世の感がある。
実際、演算能力で言えば何百倍とか何千倍とかいう規模で違うもんな……
329デフォルトの名無しさん
2019/01/25(金) 04:48:14.16ID:RBnOR415
Z80Aで、おおむね4Mhzだったような
無印Z80は知らない

日本人だとZ80AよりμPD870Cの方が普及???
330デフォルトの名無しさん
2019/01/25(金) 05:29:09.86ID:VVNAHEZ9
>>329
μPD780C-1な。870だと電卓チップになってしまう。

詰めが甘いな :-P
331デフォルトの名無しさん
2019/01/25(金) 09:28:14.11ID:U8XeH6tm
>>328
自分もこの結論に達した
332デフォルトの名無しさん
2019/01/26(土) 10:50:23.69ID:ibgF9MiT
初心者です
関数の引数の1つとして3種類の構造体を受け入れたいという場合オーバーライドで3つ書くのよりスマートなやり方ありますか?
333デフォルトの名無しさん
2019/01/26(土) 11:07:13.35ID:MaEquCGy
オーバーロードで3つ書く方がスマートですよ
334デフォルトの名無しさん
2019/01/26(土) 11:19:38.97ID:UuAHSy+r
関数テンプレートというものが一応存在する。

tempate<class T> void func(T arg)
{
...
}

このように記述すると、型に応じたオーバーライドをコンパイラが自動で作成してくれるという機能。
ただ、実際に呼び出すコードを書かないと(型が確定してないから)コンパイル対象にならなず限定的なエラーチェックしか行われない、
エラーが出た時に問題が関数内なのか呼び出し元なのかが分かりづらい、エラーメッセージもわけわからない、という欠点があるので、
あまり初心者向きとは言えない。すごく便利なんだけどね。
335デフォルトの名無しさん
2019/01/26(土) 13:38:51.24ID:ibgF9MiT
>>333-334
ありがとうございます
オーバーロードでしたね^^;
336デフォルトの名無しさん
2019/01/26(土) 17:08:07.75ID:a/6Wmtam
>>335
Variantが使えるならVariant
対照的にunionはおすすめしない
337デフォルトの名無しさん
2019/01/26(土) 18:04:32.62ID:wmp8xlgD
結局中で分岐だろ
338デフォルトの名無しさん
2019/01/27(日) 04:46:54.79ID:tVyD3cTv
>>336
variant勉強します
ありがとうございます
339デフォルトの名無しさん
2019/01/27(日) 23:53:20.30ID:PNYmCs1E
投機実行がセキュリティホールになるなんて
当時の技術者は予見できたのだろうか
340デフォルトの名無しさん
2019/01/30(水) 21:22:57.38ID:pEOkr0Qg
いやー
論文ネタに困った情報系の役にたたん学者がひねり出したネタだろ
投機実行を攻撃に使った実例なんてあるのか?
341デフォルトの名無しさん
2019/01/31(木) 10:11:52.05
煽ってたら論文ネタに困った情報系の役にたたん学者が投機実行を攻撃に使った実用法をひねり出したらどうすんだ
342 ◆QZaw55cn4c
2019/01/31(木) 23:01:04.87ID:GI5VQ7Hx
>>340
手元にようやく SandyBridge(IvyBridge) を確保しましたのでいろいろ試してみようと思っています
343デフォルトの名無しさん
2019/01/31(木) 23:07:28.54ID:sIpyZVmV
Googleだったっけ、見つけたのは?
役に立たない暇な部門があったんだ
344デフォルトの名無しさん
2019/02/02(土) 08:27:42.12ID:tJohl//6
C++って未だにasync,awaitがないんだな?
江添とかtemplate使えないC++プログラマはポインタを使えないCプログラマと同じゴミとかいってるんだが、
templateは確かに面白いし頭の体操になるけど、templateはひな形があれば、泥臭くエディタちょい編集して使い回したり、
yacc/lex使うとか、ループのアンロールはスクリプトで展開するとかいくらでも手段はあるので、
どう考えてもasync,awaitあたりの実装の方が重要だと思うけどな。
345デフォルトの名無しさん
2019/02/02(土) 08:50:29.54ID:UyxpbyFe
futureでいいんじゃね。C#のawaitもFutureパターンの実装でしょ。
346デフォルトの名無しさん
2019/02/02(土) 11:01:27.11ID:tJohl//6
>>345
.net動いてるのとそれが前提でないC++では全く同じにはいかんのだろな
教えてくれてありがと
347デフォルトの名無しさん
2019/02/02(土) 11:23:05.73ID:ZfwOhOL2
コルーチン拡張は提案段階なんだっけ?
MS界隈ならC++/WinRTで使用例があるけど
348デフォルトの名無しさん
2019/02/02(土) 11:47:15.38ID:qgXcCvEo
>>346
いや別に
C#のasync/awaitって単なるステートマシンジェネレータだし
標準化は至難だろうけど技術的にはC++でできない理由はない
349デフォルトの名無しさん
2019/02/02(土) 13:08:31.83ID:cZfjknnV
>>344
再帰includeとdefineの組み合わせでも大抵はなんとかなったりするなw

templateは型に縛られてるから安全な反面、不便なこともあるよね。
sjisとutf8が区別できないし。なぜchar8_tを作らなかった…(´・ω・`)
350デフォルトの名無しさん
2019/02/02(土) 13:11:59.53ID:OjPcxytf
テンプレートよりObjective-Cのやり方の方が好き
351デフォルトの名無しさん
2019/02/03(日) 12:10:14.76ID:JIYTTgNa
江添なんて最新仕様知ってる俺スゲーやりたいだけの奴だからな。
まともに使えるプログラムを書いてるわけじゃない。
352デフォルトの名無しさん
2019/02/03(日) 14:07:26.32ID:IhqR/Csp
でもプログラム書くなんて誰でも出来るじゃん
353デフォルトの名無しさん
2019/02/03(日) 14:11:00.19ID:s/ZudwPt
おまえのgithubさらせよ
354デフォルトの名無しさん
2019/02/03(日) 14:15:39.93ID:IhqR/Csp
>>353
お前が先に晒せ
355デフォルトの名無しさん
2019/02/03(日) 14:56:06.74ID:nprxb46h
きっとはぶられる
356 ◆QZaw55cn4c
2019/02/03(日) 15:08:24.54ID:t4xt++Qj
>>353
そろそろ github に移行しようか…
http://2chb.net/r/tech/1434079972/

http://hibari.2ch.net/test/read.cgi/tech/1289715349/
http://hibari.2ch.net/test/read.cgi/tech/1295273862/
http://hibari.2ch.net/test/read.cgi/tech/1309527259/
http://peace.2ch.net/test/read.cgi/tech/1313183984/
357デフォルトの名無しさん
2019/02/04(月) 12:56:22.82ID:Y0slw8we
>>351
江添とか書いてることみてるとムカっ腹立たないか?
何様だこいつ。しかもやってることキチガイだろ
358デフォルトの名無しさん
2019/02/04(月) 13:07:21.17ID:qU4d2Hmv
>>357
は?お前じゃあ江添より仕様に詳しくてC++のコンパイラを実装出来るような能力なのかね?ええ?
359デフォルトの名無しさん
2019/02/04(月) 14:02:36.47ID:zmkNdOJF
工学部生よりましやろ
360デフォルトの名無しさん
2019/02/04(月) 14:08:27.48ID:n76odGjc
例え世界一の物知りでもそんな口の効き方をする人とは
付き合いたくないな
RMSにはEMACSやgccといった作品があるから許される
361デフォルトの名無しさん
2019/02/04(月) 14:56:20.34ID:iZ37iel0
この3冊は、日本人が作った神の書。
皆、基地外。基地外しか、こんな本を書けない

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

この本は、神の書と言われていて、翻訳本は日本しか出ていない。
著者は10年、man-pagesを書いてきた人で、翻訳者・アドバイスの千住治郎も、技術者

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

組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006

ドワンゴ江添は需要があれば、テンプレートの本を出そうか、なんて言ってるけど、既にこの本がある

C++テンプレートテクニック 第2版、
επιστημη(えぴすてーめー)・高橋 晶、2014
362デフォルトの名無しさん
2019/02/04(月) 15:06:30.08ID:zmkNdOJF
ステマ宣伝乙
5ちゃんでは禁止
363デフォルトの名無しさん
2019/02/04(月) 15:58:27.96ID:n76odGjc
Linuxの黎明期にman page 書いていたのは janneさん事、中谷千絵さんだよ
エピスメーテーさんは昔っから雑誌に記事を書いていたな
The Basicだった?

真ん中の人は知らないけどどんな貢献をしたの?
364はちみつ餃子 ◆8X2XSCHEME
2019/02/04(月) 16:09:06.48ID:kMmgpke2
>>363
ざべは読んだことないけど、Cマガでεπιστημηの名前はよく見たな。
今では Teratail で C++ の質問をするとたまに回答者として出現するよ。
365デフォルトの名無しさん
2019/02/04(月) 16:27:32.33ID:n76odGjc
>>364
そうでしたか、CUJJとかは買っていたけど...CMAGは
時々だったので
366デフォルトの名無しさん
2019/02/04(月) 17:40:44.94ID:Y0slw8we
>>361
えぴすてーめーと高橋のC++テンプレ本は神だわ。
なんというか、読者に理解させてあげたいという熱意が伝わってくる
江添とは大違い
江添にお布施するつもりは毛頭ない。死ねばいいのに
367デフォルトの名無しさん
2019/02/04(月) 17:42:39.71ID:Y0slw8we
>>358
本人様のご登場wwww
368361
2019/02/04(月) 18:14:10.83ID:iZ37iel0
>361 の3冊は、単なる規格の文章ではなく、それをソースコードの実例にした所がすごい!
だから、プログラマーは皆、Kerrisk の本を枕にして寝ろって、言われている

たぶん、江添やMISRA‐C の本も、外国で発売されていれば、大絶賛されるはず!
369デフォルトの名無しさん
2019/02/04(月) 19:01:28.11ID:GH1lEwiX
エピスや高橋ageて江添sageってのもよくわからんな
立ち位置違うし江添は委員会の人間だから
仕様や提案について素晴らしいとかクソとか言う権利や責務がある
それをsageるってことは「現行仕様マンセー、標準規格に欠点など無い!」みたいなことか?
370 ◆QZaw55cn4c
2019/02/04(月) 19:11:50.08ID:CLpqTC7n
>>361
エピさん単著は買わないですね、エピさんの文章は今の言葉で表現するとすれば「ポエマー」が近い

同じくポエマーに分類される私がいうことではないのですけど…
371361
2019/02/04(月) 19:22:56.32ID:iZ37iel0
元々は、Kerrisk も、江添やMISRA‐C のメンバーも、
規格をソースコードの実例で、表示してやろうという、とんでもない企画!

よく規格厨みたいな香具師がいて、企画書を読めって言うけど、
文章で書かれてもわからないし、全く出来るようにならないから、業を煮やして書き始めた

こんな面倒くさいことを、何年も掛けて書くかね?

こういうのは、忍耐力がある日本人が得意なんだろう。
外人は、まずやらない
372デフォルトの名無しさん
2019/02/04(月) 19:24:18.62ID:n76odGjc
MISRA はBOSCH を引き込み損なった時点で絵に描いた餅でしょうね
デンソーが勝利すれば勝ちの目も出て来るかもしれないが
373デフォルトの名無しさん
2019/02/04(月) 19:29:03.26ID:Y0slw8we
>>371
>規格をソースコードの実例で、表示してやろうという、とんでもない企画
いや言語の解説本は規格をわかりやすく、ソースコードを例示して解説するでしょ。
それがなければ、規格だけでいいわけで、解説にならない。

わかりやすく書こうとしてるけど、そこの熱意の持ち方と、おつむのレベルでほんとにわかりやすいかどうかが問題なんだろ。
374デフォルトの名無しさん
2019/02/04(月) 19:32:47.98ID:GH1lEwiX
そら商業目的の本だったらわかりやすく書くの当たり前だろ
江添の本は読んだことないから分からんけど
売られてる本とブログで比較してないか?
375デフォルトの名無しさん
2019/02/04(月) 19:36:24.60ID:Y0slw8we
>>371
>こういうのは、忍耐力がある日本人が得意なんだろう。
>外人は、まずやらない

K&R も Stroustrapも規格になるまえからやってますがな
ソース示してこつこつと。

何もプログラム言語だけじゃないわ。人に説くこと、伝道師のようなwriterは日本人よりむしろ、英米人に多い。
クヌースの The Art of Computer Programmingあたり読んでみ。
376デフォルトの名無しさん
2019/02/04(月) 19:46:25.23ID:Y0slw8we
>>374
反響見て、読んだやつにバグだしさせてたあとブログ印刷物なり、ebook販売するんだから
金取ろうが、無償でやるかはどーでもいい話
日本語のコンピュータ書籍なんて販売数からしてとてもとてもメシ食えないから
ほぼ実益のないめんどくさいだけの作業
ブログでわかりにくければ本になってもわかりにくいことは保証する
377デフォルトの名無しさん
2019/02/04(月) 19:48:43.30ID:9WmylojK
クヌースの4-1巻目は、かなりの分量をZDD/BDDの説明に割いていて
このアルゴリズムは北海道大学で日本人が考えた物だね

で、その江添さんという方はどの様な技術貢献をしたの?
378デフォルトの名無しさん
2019/02/04(月) 20:02:32.24ID:Y0slw8we
>>377
警察に喧嘩売って訴訟おこしたこと以外知りませんがな
きちがいの所業なんざ
379デフォルトの名無しさん
2019/02/04(月) 20:32:13.56ID:GH1lEwiX
まぁC++テンプレートテクニックがわかりやすい良書なのは同意するけど
高橋晶ってたまにテクニックのメリットを語るときに
デメリットに気づいてない(またはスルーしてる)ことがあるんだよな
わかりやすくても鵜呑みには出来ない
380デフォルトの名無しさん
2019/02/04(月) 20:36:58.42ID:Y0slw8we
ま、江添が好きならどーぞご勝手に俺は願い下げってだけ
381デフォルトの名無しさん
2019/02/04(月) 20:39:36.21ID:GH1lEwiX
好きとは言ってないよ
結局役に立つ&正確な情報を書いてるかどうかが全てだ
382デフォルトの名無しさん
2019/02/04(月) 20:41:05.88ID:GH1lEwiX
というか江添のブログでも「あれ?おかしくね?」みたいなことあったから
どっちがどうとも言えないけど
383デフォルトの名無しさん
2019/02/04(月) 21:00:45.66ID:Y0slw8we
だいたい

ドマンコ

とかいう社名が下品すぎる
384デフォルトの名無しさん
2019/02/04(月) 22:23:14.32ID:ZVfvG47Q
>>364
毎月題材がカウンタークラスの人…
385デフォルトの名無しさん
2019/02/04(月) 23:23:10.64ID:Y0slw8we
https://qiita.com/dc1394/items/d2b8de600a304664cdb5
実に参考になった
386デフォルトの名無しさん
2019/02/04(月) 23:47:34.63ID:xjVdC68S
型指定するのが嫌だから最初にautoを使うc++入門書籍を書こうとしてたり、
まともにプログラム開発してたら最新の仕様を追えないので開発しないとか言い出す奴とか
普通の精神してりゃ信用せんわな。
根本的にありゃ馬鹿だよ。
387デフォルトの名無しさん
2019/02/04(月) 23:59:20.89ID:GH1lEwiX
>まともにプログラム開発してたら最新の仕様を追えないので開発しないとか言い出す奴とか
江添みたいに標準化委員会に属してたら正しいと思うけどね
何もコミュニティに貢献しない趣味グラマだったりライターでもない奴が言ってたらアホだが
388デフォルトの名無しさん
2019/02/05(火) 01:34:09.47ID:PwKFrksX
趣味グラマにドワンゴが給料払ってるんだろwww
389デフォルトの名無しさん
2019/02/05(火) 06:14:00.98ID:sYtbTM3p
すみません
n秒ごとに関数foo()を繰り返し実行するような、かつ「低負荷な」方法を教えてください。
n秒は、精度はだいたいでよくて、たぶんnは600(つまり10分)程度にしたいと思っています。

windows 10 で、gccで最新の標準C++ とboost C++ が使用可能です

よろしくお願いいたします
390はちみつ餃子 ◆8X2XSCHEME
2019/02/05(火) 06:20:20.09ID:VmiK9YL/
>>389
SetTimer API を使って WM_TIMER イベントの発生を待つのが妥当な方法だと思う。
イベントが発生するまでは何もせずに待つだけなので低負荷。
391389
2019/02/05(火) 06:57:10.23ID:sYtbTM3p
>>390
windows API をつかう方法で行ってみます
ありがとうございます。
標準C++ で導入された
thread とchrono を用いて、while (1 )を回すという方法がGoogle検索で 出てきますが、低負荷な方が良いので、windows API で行ってみます。
ありがとうございます。
392デフォルトの名無しさん
2019/02/05(火) 07:12:26.12ID:kZRbw8C2
whileは単なる無限ループじゃなく、スレッドが立ち上がるまで、sleep で CPU を眠らせてるんじゃないの?
whileだけだと、負荷かかるし、sleep一発だと、繰り返し待ちできないから
393デフォルトの名無しさん
2019/02/05(火) 07:23:19.83ID:kZRbw8C2
https://ja.cppreference.com/w/cpp/compiler_support
gccは並列STLまだ実装できてないんだな。がかーり
C++2xは後回しでいいから先に実装してもらいたいな
msvcがしらん間にgccを上回るC++17準拠状況になってるんだな
msがかなり頑張ってるのがかなり意外
394デフォルトの名無しさん
2019/02/05(火) 10:24:17.44ID:Jquzc2Ph
趣味グラマーって本職が焼そば職人だっけ
395デフォルトの名無しさん
2019/02/05(火) 10:36:43.43ID:PCiHKxWL
MSが標準をわざと外して潰し合う戦略を取ってたのは遥か昔
今は協調してシェアを取り込んでから独占する戦略がメイン
396デフォルトの名無しさん
2019/02/05(火) 13:32:56.11ID:HSCecGQW
>>394
ブロガーで良くね?
397デフォルトの名無しさん
2019/02/05(火) 18:47:37.04ID:VoURnPvV
スパゲッティーでは?
398デフォルトの名無しさん
2019/02/05(火) 21:03:29.46ID:6rjCuhxB
>>396
https://cpplover.blogspot.com/2016/05/2016.html
399デフォルトの名無しさん
2019/02/06(水) 08:14:04.23ID:QvJUH+Yd
>>394
Oishii Sru Paの話?
400デフォルトの名無しさん
2019/02/09(土) 10:04:34.12ID:Js3eMSlM
6
だまれ朝鮮人
失せろ
401デフォルトの名無しさん
2019/02/09(土) 13:43:15.52ID:n731AUSx
Class TA{
public:
TB B;
}
Class TB{
・・・
}
Class TA::TA(){ //コンストラクタ
B = new TB;
}

で、TAのデストラクタが走った時点でBも一緒に消えるんですかね。
それともTAのデストラクタで delete B が必要なんですかね。
402 ◆QZaw55cn4c
2019/02/09(土) 14:02:51.11ID:1JWnTnfH
>>401
new したのなら delete は必ず書かないといけない
https://ideone.com/z0IYgT
403デフォルトの名無しさん
2019/02/09(土) 14:24:00.17ID:6TG0Gkwe
必ずというわけではないよ
404 ◆QZaw55cn4c
2019/02/09(土) 14:36:03.78ID:1JWnTnfH
>>403
理解はしますが薦める気にはならないのです…
405デフォルトの名無しさん
2019/02/09(土) 15:47:27.40ID:YAWSonmT
>B = new TB;

エラーになるんじゃね?
406デフォルトの名無しさん
2019/02/09(土) 16:20:31.91ID:NnmcfWng
>>405
それぐらいは忖度してやれよ
407デフォルトの名無しさん
2019/02/10(日) 13:20:38.44ID:MWi64iyD
メンバ変数にクラスを持つときはポインタ型にしてコピーコンストラクタを作るべきですか?
それともクラスの実体を持たせても大差ありませんか?
408デフォルトの名無しさん
2019/02/10(日) 13:21:20.82ID:XMMc9iis
クラスと用途による
409デフォルトの名無しさん
2019/02/10(日) 13:40:02.39ID:Ix0Ul5tp
実体で用が足りるならすべて実体でよい
効率云々はまず一通り動くものが出来上がった上でそこが問題になってから考えろ
410デフォルトの名無しさん
2019/02/10(日) 13:41:09.49ID:MWi64iyD
わかりました
ありがとうございます
411デフォルトの名無しさん
2019/02/10(日) 14:15:19.12ID:0+1G/wKU
値型とエンティティを意識して作って下さい
エンティティはスマポで管理、値型は実体を持たせるべきでしょう
412デフォルトの名無しさん
2019/02/10(日) 14:26:23.71ID:KPch74RC
エンティエィって何?
定性的な定義を頼むわ
413デフォルトの名無しさん
2019/02/10(日) 14:30:03.09ID:0+1G/wKU
>>412
インスタンスがアイデンティティを持つならエンティティ
414 ◆QZaw55cn4c
2019/02/10(日) 15:14:36.29ID:nGIVWkyn
>>413
実数はエンティティですか?
符号付整数はエンティティですか?
415デフォルトの名無しさん
2019/02/10(日) 15:16:29.18ID:sKzQuR0e
あーやだやだ
こういう宗教じみた設計論語るやつ
416デフォルトの名無しさん
2019/02/10(日) 15:16:40.47ID:0+1G/wKU
>>414
値です
417デフォルトの名無しさん
2019/02/10(日) 15:17:40.51ID:0+1G/wKU
>>415
現実を見据えて追求すると自然と出てくる答えです
418デフォルトの名無しさん
2019/02/10(日) 16:25:18.62ID:scT3207q
親クラスとライフサイクルが同じか数値型なら実体、そうでないならポインタでいいだろ。

動的確保よりコピーやmoveのほうがコストが低い場合とか検討の余地はあるけど、考えすぎると禿げる。
419デフォルトの名無しさん
2019/02/10(日) 16:31:34.44ID:25jgEgQt
>>401
デストラクタは virtual に汁
420デフォルトの名無しさん
2019/02/10(日) 20:26:50.17ID:EWmLbbO6
どうせそこまで最適化も厳密なメモリ管理も必要なプログラムじゃないだろ。
421デフォルトの名無しさん
2019/02/10(日) 21:57:11.00ID:sKzQuR0e
>>417
ほらね、こういう精神論がでてくる
422デフォルトの名無しさん
2019/02/11(月) 01:02:52.04ID:QKPibkAC
組み込み以外に使い道あるんですか?
423デフォルトの名無しさん
2019/02/11(月) 07:24:34.72ID:KN5ZTrY9
OS作ったり、ブラウザ作ったり、3Dバリバリのゲームを作ったり、他の言語向けに機械学習や科技計算等のライブラリを作ったり、いろいろあるよ
424デフォルトの名無しさん
2019/02/11(月) 12:01:51.83ID:itY+kGJR
RubyはC++が嫌いだからCで書かれている
425デフォルトの名無しさん
2019/02/11(月) 12:06:46.94ID:QKPibkAC
>>423
天才達だけに許された言語なのでしょうか?
もっと身近なプロダクトはないんですか?
426デフォルトの名無しさん
2019/02/11(月) 12:32:11.46ID:PRVQuzHN
古い例だとニコニコ動画がC++
まあおかげで開発がスケールせずオワコン化したわけだが
427デフォルトの名無しさん
2019/02/11(月) 12:32:14.48ID:itY+kGJR
the door is open
428デフォルトの名無しさん
2019/02/11(月) 12:43:40.65ID:MmPS3pUZ
>>425
聞いてばっかりじゃなくてお前がどういうものを探しているか書いたら?
429デフォルトの名無しさん
2019/02/11(月) 13:10:19.37ID:Y0EVtjJ+
CADとか画像処理とかビット演算系アルゴリズム(cf.ZDD)なんかは
まだまだ他の言語には負けないね
430 ◆QZaw55cn4c
2019/02/11(月) 13:44:01.42ID:HT+vwAFW
>>426
>開発がスケールせずオワコン化した
これってどういう意味ですか?
431デフォルトの名無しさん
2019/02/11(月) 13:51:23.27ID:awXFg/MG
JavaからC++勉強中です
C++の場合、他のクラスのオブジェクトを複数持たせるときは、一般的にどうするんでしょうか

・コンテナにオブジェクトそのものを突っ込む(一番わかりやすいけど、ムーブの定義忘れとかでミスが出そう)
・コンテナにオブジェクトへのポインタを持たせる(コンテナ解放時に、クラスごとに同じようなメモリ解放処理書くのかしら)
・コンテナにポインタをスマートポインタで持たせる

辺りをネットで読ませてもらいましたが、こんな感じで良いんでしょうか?
不勉強な上、他のオブジェクト持つという基本的なことなので、なんかもっと簡単な方法を見落としてる気がしてしまいまして
432デフォルトの名無しさん
2019/02/11(月) 13:54:24.78ID:QKPibkAC
>>431
時と場合によりますので一般的な答えはありません
433さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/02/11(月) 14:06:14.14ID:fD0IDjkv
>>431
Javaのオブジェクト参照はC++のポインタに該当する。
C++のオブジェクトは、型を持ったバイト列だと考えていい。
C++で自動変数を宣言すると、スタックにバイト列が割り当てられる。
newやスマポやコンテナを使うと、ポインタによりヒープでメモリーが割り当てられる。
ポインタも型を持ったバイト列。ポインタは配列のように周りのメモリーにアクセスできる。
C++のクラスは構造体に関数群を追加したもの。C++でクラスを継承すると、関数群とバイト列を引き継いだサブクラスになる。
434デフォルトの名無しさん
2019/02/11(月) 14:12:14.41ID:0TxoCFW6
>>431
大体、その3つの通りで、そこに述べられたものの上から優先的に選ぶ。
つまり、普通にメンバ変数にオブジェクトとして宣言するのがC++では
最も効率が良くて伝統的な書き方。それでは問題が生じる場合にオブジェクトの
ポインタとして持たせる。スマートポインタは後になって導入されたもので、
人気があるものではないので無視して良い。

二番目のポインタとして持たせるのは、例えば、今定義している最中の
クラス(自分自身)と同じ型のデータで、子どもや親にあたるデータへ
リンクを作りたいようなときか、または、ある基本クラスを継承した
色々なクラスのオブジェクトを持ちたい場合に用いる。
435さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/02/11(月) 14:16:41.10ID:fD0IDjkv
C/C++では、sizeofキーワードを使えば、簡単にvoid以外の型のサイズがコンパイル時に取得できる。Javaではオブジェクトのサイズを簡単に取得することはできない。
C/C++はよくオブジェクトのサイズやバイトの並びを意識してプログラミングする。
436デフォルトの名無しさん
2019/02/11(月) 14:17:25.55ID:a3vDiVrE
結局CのポインタってJavaとかの言語で表すなら何なんだ?
437さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/02/11(月) 14:23:20.42ID:fD0IDjkv
なぜなら、例えばスタックに巨大なデータを割り当てると、スタックオーバーフローというエラーが発生するし、
ヒープだって、巨大なデータの割り当ては失敗することがある。
また、構造体を変更すると、構造体のサイズやデータ構造が変化して、互換性の問題が発生することがある。
438デフォルトの名無しさん
2019/02/11(月) 14:24:23.31ID:awXFg/MG
>>434氏他
丁度今、ウェブ上のC++で書かれたCompositeパターンのソースを読ませて頂いてました
正に2番目で実装されてましたが、都度メモリ解放処理書くくらい当たり前なんですね、流石C++です

独学なもんで、こうはっきり言ってもらえると本当にありがたいです、使い分けて行きたいと思います
他の皆様もありがとうございました、勉強になりました
439さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/02/11(月) 14:34:10.39ID:fD0IDjkv
>>436
Javaの動的配列はCのポインタに近いが、Javaの配列では危険なアクセスは制限されているし、参照カウントで管理されている点が異なる。
Javaのオブジェクト参照は、参照カウントで管理されており、C++の構造体/クラス型に対するstd::shared_ptrに該当する。
440さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/02/11(月) 14:37:16.50ID:BEdrdhIs
しかし、std::shared_ptrはヌルポを指定できるが、Javaはできない。
441デフォルトの名無しさん
2019/02/11(月) 14:49:43.57ID:0TxoCFW6
>>438
C++ は、デストラクタに必ずメモリ解放処理を書いておけば、そんなに
メモリーリークを気にすることはない。多くの場合にはそれで完全に処理できるから。

次のように書くだけで、ほとんどの場合、メモリーリークは起きない:
class CMyClass {
 BYTE *m_pBuf;
 CMyClass() {  // コンストラクタ
   m_pBuf = NULL;  // メモリをまだ未割り当てであることをマークするためにこうしておく
 }
 ~CMyClass() {  // デストラクタ
  if ( m_pBuf != NULL ) {
   delete [] m_pBuf;   // メモリの解放
  }
 }
}
442デフォルトの名無しさん
2019/02/11(月) 14:52:47.12ID:dGdUrFsa
すごく古い書き方だ
443さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/02/11(月) 14:54:57.57ID:BEdrdhIs
>>441
ナマポの場合、代入したらまずいよ。例外安全にも問題があるし。
444デフォルトの名無しさん
2019/02/11(月) 14:55:46.62ID:DnOcmNTU
確かに、人に教えるレベルじゃないね
445デフォルトの名無しさん
2019/02/11(月) 14:56:36.09ID:0TxoCFW6
>>441
正しくは、次のようにアクセス制御のための「public :」を書かないといけない。

class CMyClass {
protected :
 BYTE *m_pBuf;   // 高速化のため、自動的には初期化はされないのでコンストラクタで初期化する。
public :
 CMyClass() {  // コンストラクタ
   m_pBuf = NULL;  // メモリをまだ未割り当てであることをマークするためにこうしておく
 }
 ~CMyClass() {  // デストラクタ
  if ( m_pBuf != NULL ) {
   delete [] m_pBuf;   // メモリの解放
  }
 }
}

なお、必要に応じて、コンストラクタの中で、m_pBuf = new BYTE [xxx]; のように書いても良い。

それと、BYTE は、「オブジェクト」ではないので、あなたの書いているような場合には、
BYTE *m_pBuf の部分を CSomeObject m_pObj; のように変えて、m_pObj = new CSomeObject;
のようにする。
446さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/02/11(月) 14:58:34.69ID:BEdrdhIs
>>445
ダメだこりゃ。
447デフォルトの名無しさん
2019/02/11(月) 15:03:05.98ID:MkFOBvt9
良い子のみんなは>>441の危険性が理解できるまではスマートポインタを使ってね
おじさんとのお約束だよ
448デフォルトの名無しさん
2019/02/11(月) 15:11:57.93ID:Qk3j4qw0
>>445のデストラクタでnullチェック必要?
nullポインタをdeleteしても問題ないはずだが
二重解放防止にはならんし意味わからん
449さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/02/11(月) 15:18:49.80ID:BEdrdhIs
>>448
超独自仕様の組み込み開発とか、メモリー管理がbuggyなプログラムでは意味があるらしい。
例えば解放したメモリーブロックをアクセスするような行儀の悪いプログラムでは意味がある。
450はちみつ餃子 ◆8X2XSCHEME
2019/02/11(月) 15:19:34.89ID:eS7AzULV
>>441 >>445
・ 初期化を初期化リストでやらずに代入でやるのは邪悪。
・ delete に NULL を渡した場合には何もしないことが保証されているので、
  無駄にヌルチェックする必要はない。
・ ポインタ型や整数型の値もまたそういう型の「オブジェクト」である。
  (元質問者が Java から入ってきてるから「Java の用語で言うところの」という意味?)
451デフォルトの名無しさん
2019/02/11(月) 15:19:51.73ID:3tLemvMU
初心者なので確認
コンストラクタの中に飛び込む前のメンバの初期化で例外発生したら m_pBuf は中途半端になるから
コンストラクタの中で代入するんじゃなく、メンバ初期化子で初期化しろ
という認識でいいのかしら
452さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/02/11(月) 15:29:14.84ID:BEdrdhIs
>>451
「C++ 例外安全」でググれ。ナマポを使わずに、素直に生配列、コンテナ、スマポのどれかを使えば済むこと。マネージされてないナマポは村八分にしろ。
453デフォルトの名無しさん
2019/02/11(月) 15:39:02.97ID:3tLemvMU
なんとなくわかった   ような気がする
生ポそのものはコンストラクタもデストラクタに何ら操作しないから宙ぶらりんこになるのか
454デフォルトの名無しさん
2019/02/11(月) 15:41:57.41ID:dGdUrFsa
ちょっち理解は大変だけど生ポはスマポにドンドン置き換えたい
455さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/02/11(月) 15:43:11.94ID:BEdrdhIs
スマポならコピーコンストラクター・代入のややこしさからも解放される。
456はちみつ餃子 ◆8X2XSCHEME
2019/02/11(月) 15:52:25.23ID:eS7AzULV
まあまあ。
スマートポインタを活用しろというのはその通りだが、
ポインタ (や例外機構) を理解せずに
思考停止してスマートポインタを使うのはあかんやろ。

ここの元質問者はまだそこを理解しようとしている
ところなんだから、スマートポインタを使わなかった場合にどう書けば良いのか、
きちんと書くと面倒くさすぎるという体験も必要だろ。
457さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/02/11(月) 16:16:38.24ID:fD0IDjkv
所有権の管理は人類には早すぎる。
所有権が変動するときは、スマポでOK.
458さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/02/11(月) 16:28:46.52ID:fD0IDjkv
こんなときはナマポを使ってもよい:

処理の中で所有権が移動・消滅しない場合。
バイナリーデータやPODを生で扱う場合。
処理系がナマポやトークンやハンドルの入力を要求する場合。
459デフォルトの名無しさん
2019/02/11(月) 16:36:19.07ID:QKPibkAC
生ポはスマポのオーバーヘッドすら許容できないときに使うものです
だから初心者は無理して生ポを使わなくていいです
460デフォルトの名無しさん
2019/02/11(月) 16:59:08.84ID:V2lM2C5l
>>434
スマポは後になって導入されたもので人気がない、なんて意見は一般的ではないので無視して良い
461デフォルトの名無しさん
2019/02/11(月) 18:19:37.85ID:j549IniP
スマポをC#のusing感覚で使ってる
462デフォルトの名無しさん
2019/02/12(火) 13:19:56.52ID:VqanzRzk
エアプwwwwwwwww今は参照カウントじゃねーよw残念だったなクソ蟻wwww
463デフォルトの名無しさん
2019/02/12(火) 13:20:43.00ID:VqanzRzk
それで、Cの生ポってC/C++以外で表現するなら何なんだ?
464デフォルトの名無しさん
2019/02/12(火) 16:02:24.32ID:VerJGrBE
>>463
native int
465デフォルトの名無しさん
2019/02/12(火) 17:27:09.82ID:VqanzRzk
>>464
仮装アドレス的な意味で来るとは思ってなかったwでも本質はそうだよなあ
466デフォルトの名無しさん
2019/02/12(火) 17:29:23.18ID:t+DTqVP+
CALL -151
467デフォルトの名無しさん
2019/02/13(水) 06:16:37.08ID:2WlGbphz
>>463 今の言語は極力「生のポインタ」が見えないようにしてるからなぁ。
オレの乏しい知識で無理矢理ヒネリ出すなら、
「古いBASICの peek, poke のアドレス指定に変数を使った場合」かのう。
型のない単なるアドレスって言うか数値だけど。
468デフォルトの名無しさん
2019/02/13(水) 15:13:52.62ID:Yg4iFXpY
upvar
469デフォルトの名無しさん
2019/02/13(水) 15:46:18.41ID:SgfrIpbp
>>463
BYTE  ptr = アドレス値;

BYTE  MEM[4096 * 1024];  // 4GB のメモリ配列


*ptr  --->  MEM[ptr]  // ptr は MEM[] 配列の添え字
470デフォルトの名無しさん
2019/02/13(水) 15:46:56.07ID:GHq8zte2
訂正:

BYTE  MEM[4096 * 1024 * 1024];  // 4GB のメモリ配列
471デフォルトの名無しさん
2019/02/13(水) 15:48:00.46ID:GHq8zte2
訂正:

Uint32  ptr = アドレス値;
472デフォルトの名無しさん
2019/02/13(水) 18:19:07.37ID:QnNf1eu6
恥の上塗り
473デフォルトの名無しさん
2019/02/13(水) 19:18:53.91ID:BFnAt9lr
intptr_t とか、INTPTRとか。
474デフォルトの名無しさん
2019/02/13(水) 19:41:39.99ID:D91GFqhb
eax
475デフォルトの名無しさん
2019/02/13(水) 22:43:21.58ID:8CyDgeqf
行儀よく バッファなんて 守れやしなかった
夜のサーバ オーバフロー起こしてまわった
*印見て アナルといわれた 早く添え字になりたかった
信じられぬ カーニハンとの 争いの中で
許しあい いったい何 解りあえただろう
うんざりしながら それでも過ごした ひとつだけ解ってたこと
このポインタからの 卒業
476デフォルトの名無しさん
2019/02/14(木) 07:38:16.87ID:fSoz/vTj
まあstatic変数やglobal変数使ってリークしてないとか言い張るバカよりかは
ナマポ使えやとは思う。
それならまだコード修正効くからな。
初心者にスマポ使わせればリークしないコード書かせることができるって考えははっきりいって幻想だわ。
477デフォルトの名無しさん
2019/02/14(木) 22:35:36.88ID:vW9ukCJU
昔研究室の後輩でポインタがわからないから全部グローバル変数でプログラム作ってるって奴がいて、
それはそれである意味すごいなって思ったわ。
マルチメディア系ライブラリを触る必要がある研究室なのだが。
元々組込系が得意な奴だったってのもあると思うけど。
478デフォルトの名無しさん
2019/02/14(木) 22:50:47.58ID:tlcLfILV
COBOLERだったんじゃね
479デフォルトの名無しさん
2019/02/15(金) 00:04:29.72ID:tnuHGyjk
一度切りの使い捨て用途とかなら全然よくね
480デフォルトの名無しさん
2019/02/15(金) 00:36:18.42ID:kpfA4lgp
>>476
スマートポインタを使うとコード修正効かなくなるの?どういうこと?
481デフォルトの名無しさん
2019/02/15(金) 00:46:46.72ID:TR5VS7Vw
mp4boxをちょこっといじったのを作ろうとしたんだけど、
signed int32の計算で -2112000 / 48000 の結果が 89434 になるんですが。
VS2015のx64です。
482デフォルトの名無しさん
2019/02/15(金) 06:57:51.95ID:OZ8Dcboc
>>481 「-2112000 / 48000 の結果が 89434」

その環境を持ってないんで分からないけど、
-2112000 の32bit16進数表現が 0xffdfc600
89434 * 48000 == 4292832000.000 == 0xffdf6b00
両者のビットパターンが一致することと関係ありそうね。

被除数の -2112000 を64bitで表現する際に
符号拡張 0x_ffff_ffff_ffdf_c600 とすべきなのに
ゼロ拡張 0x_0000_0000_ffdf_c600 にしちゃって、
その後の計算は64bit正数でやってる感じかな。
483デフォルトの名無しさん
2019/02/15(金) 07:20:58.81ID:1DfV94Wg
>>480
本人がスマポ理解できてないってオチだろ
484デフォルトの名無しさん
2019/02/15(金) 07:22:53.73ID:1DfV94Wg
>>477
組み込みが得意でポインタがわからない後輩
設定に無理がありすぎw
485482
2019/02/15(金) 07:53:28.61ID:OZ8Dcboc
再び >>481 「-2112000 / 48000 の結果が 89434」 (間違いを訂正)

-2112000 の32bit16進数表現が 0xffdfc600
89434 * 48000 == 4292832000.000 == 0xffdf6b00
ビットパターン一致してないね。桁数多くて見間違えちゃった(テヘペロ)。

-2112000 を32bitで表現すると 0xffdfc600 であり、
これをゼロ拡張した 0x_0000_0000_ffdf_fc600 == 4292855330 を
48000 で割り算して小数部を捨てれば 89434 という答えが出る。
ということなら合ってるかな。
486 ◆QZaw55cn4c
2019/02/15(金) 07:57:48.46ID:8MeM2Ami
>>481
コードを https://ideone.com/ に貼っていただけませんか?
487デフォルトの名無しさん
2019/02/15(金) 09:49:31.73ID:tuwIijw4
>>481
どうせ48000がunsignedなんじゃねーの
それにつられて -2112000もunsignedになって4292855296
その結果が薬師美代ちゃん
488デフォルトの名無しさん
2019/02/15(金) 13:45:38.25ID:TNDmXWGM
>>479
自分が何してるか判って使う分には問題無いな
適材適所だ
489デフォルトの名無しさん
2019/02/15(金) 21:13:40.77ID:kkRd+/gL
>>480
>スマートポインタを使うとコード修正効かなくなる
どういう風に読むとそういう理解になるのか。。
まずは日本語の理解が必要だな。
490デフォルトの名無しさん
2019/02/17(日) 07:14:37.91ID:KxX3tJEE
超初歩的な質問になるのですが
scanf関数を使って20個未満の任意の数だけ、数値を配列変数で受け取りたいです
たとえば「2 4 8 9」と入力し、Enterが押されたらそれで確定
num[0]=2
num[1]=4
num[2]=8
num[3]=9
としたいわけです。

どうしたらよいでしょうか?
一応自分で考えたコード(期待通りの動きをしません)を掲載します
for(i=0;i<20;i++){
scanf("%d",&num[i]);
if(num[i]==‘¥n’){
break;
}
}
491デフォルトの名無しさん
2019/02/17(日) 07:30:35.53ID:a45/WyPQ
for(i=0;i<20;i++) if (scanf("%d",&num[i]) != 1) break;
492デフォルトの名無しさん
2019/02/17(日) 09:09:16.12ID:uZDoAvc4
>>490
scanfや標準ライブラリの関数など、参考書とかで普通の使い方はわかると思うけど、細かい仕様をmsdnやmanコマンドで調べるようにするとかなり理解が広がると思うよ。
493デフォルトの名無しさん
2019/02/17(日) 22:37:58.74ID:O/E0SKNM
中途半端なUI使うよりもcsvパーサーを作るかどっかからとってくるかすれば?
494デフォルトの名無しさん
2019/02/18(月) 00:02:29.61ID:yZfkTbdS
autoってコンパイル遅くなりますか?
495 ◆QZaw55cn4c
2019/02/18(月) 00:59:53.43ID:aN2QSVsl
>>494
むしろ遅くなる方に振れるでしょうけれど、そんなのどうでもいいのでは?
496デフォルトの名無しさん
2019/02/18(月) 01:22:44.39ID:c9cLPpQ7
autoって変数の型宣言の話だよね?
コンパイルは遅くなるのか
速くしたい時はどうすりゃ良いの?
497はちみつ餃子 ◆8X2XSCHEME
2019/02/18(月) 01:27:51.06ID:ViRlfcsh
C++ の auto は右辺と一致させるように推論するだけの単純機構で、
ややこしい演算で推論するわけではないので、
コンパイル速度ではほとんど差はないと思うよ。
498デフォルトの名無しさん
2019/02/18(月) 01:30:04.86ID:tKsXQ0K5
autoはむしろコンパイル速くなるんじゃない?
いちいち型を解決せずとも、既に解決済みの型を右から左へコピーするだけでいいんだから
C++でコンパイルを速くするのは簡単で、単純にソースファイル数とインクルードするヘッダを減らせばいい
C++のコンパイルが遅いのは主にコンパイル単位という時代遅れで極めて非効率なコンパイル戦略に起因しており、実はコードの複雑さ自体はわりとどうでもいい
499 ◆QZaw55cn4c
2019/02/18(月) 01:31:11.50ID:aN2QSVsl
>>496
C++を言語として選択した時点で「記述の時間やコンパイル時間を投資して実行時間を稼ぐ」という思想なのでは?コンパイル時間を短くする努力はする気がないと思います
500 ◆QZaw55cn4c
2019/02/18(月) 01:32:21.67ID:aN2QSVsl
>>498
>いちいち型を解決せずとも、既に解決済みの型を右から左へコピーするだけ
この記述はコンパイル時を想定しているの?それとも実行時を想定しているの?
はっきりさせたいので念のために確認します
501デフォルトの名無しさん
2019/02/18(月) 05:41:12.34ID:KTgkm+s5
>>490 サーバーの 503 エラーに引っかかって昨日のうちに書けなかったんだが…。

>>491 の方法だと Enter が単純に読み捨てられて scanf() が終了せず
まだ入力をよこせと言ってくるからダメみたいね。

11 22 33 (Enter) だと読み込みが継続、期待通りに動作しない
11 22 33 x (Enter) なら x を解釈する時点で scanf() が 0 を返してループ脱出


先に文字列として1行読み込んで sscanf() と思ったけど…
ndat = sscanf(s, "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d",
&num[0], &num[1], &num[2], &num[3], &num[4], &num[5], &num[6], &num[7], &num[8], &num[9],
&num[10], &num[11], &num[12], &num[13], &num[14], &num[15], &num[16], &num[17], &num[18], &num[19]);
実際に読めた値の個数は ndat に入る。
これは書くのもメンテナンスするのも嫌だなぁ。

strtol() で1個ずつ数値を拾いつつ、地道にポインタ進める方が良いかも。
502デフォルトの名無しさん
2019/02/18(月) 05:53:27.02ID:KTgkm+s5
>>500 自分は >>498 の人じゃないけど。
ごく簡単な場合ながら、例えば
int val_a = func(para); // func() がint互換の値を返すかチェックが必要
auto val_b = func(para); // func() の返す型そのまんまで val_b を作ればいい

てな具合に考えると auto で定義した方がコンパイル時の手間が少ない、
という考え方にも一理あるかと。
503デフォルトの名無しさん
2019/02/18(月) 08:39:38.41ID:KTgkm+s5
瑣末なことだけど val_a, val_b って変数名は良くなかったね。
変数 variable の例なんだから var_a, var_b だわな。
というか、この場合は a, b で十分だ。
504デフォルトの名無しさん
2019/02/18(月) 10:06:03.91ID:PGieQvh3
まず計測しろよ
505491
2019/02/18(月) 13:24:52.92ID:fHtoi1qq
>>501
ありがとう。ちゃんと確認してなかったわ。
タブに空白に改行はスキップしやがるんでしたか

別案としては fgets() ⇒ sscanf() になるんかな
506デフォルトの名無しさん
2019/02/18(月) 13:29:17.97ID:fHtoi1qq
505の後半は無しで
1文字ずつ切り出して解析してったほうがよさそうね
507デフォルトの名無しさん
2019/02/18(月) 15:27:41.58ID:bbNHvPxv
コンパイル時間にリンク時間は含まれますか?
508デフォルトの名無しさん
2019/02/18(月) 15:28:58.14ID:bbNHvPxv
>>501
scanf は禁止

>>505 が正しい
509デフォルトの名無しさん
2019/02/18(月) 15:34:26.17ID:c9cLPpQ7
人間の様な邪悪なものからの入力でscanfは使うなと、ばっちゃは言ってた
510 ◆QZaw55cn4c
2019/02/18(月) 20:54:12.82ID:aN2QSVsl
>>502
>func() の返す型そのまんまで val_b を作ればいい
この発想は実行時なのでは?

>てな具合に考えると auto で定義した方がコンパイル時の手間が少ない、
実行時の発想をコンパイル時に適用していいのでしょうか?
511 ◆QZaw55cn4c
2019/02/18(月) 20:54:41.05ID:aN2QSVsl
>>504
コンパイル時間を計測するのですか?…
512 ◆QZaw55cn4c
2019/02/18(月) 20:57:23.82ID:aN2QSVsl
>>509
賛成です、そういうのは1ラインを秘術を尽くして何とか読み込み、後で sscanf() とかを使うべき
513デフォルトの名無しさん
2019/02/18(月) 21:15:24.03ID:JRPNr6+t
>>512
今回の例(>>490) のように可能な限り %d で抜き出して打ち切るとなると sscanf 単発では面倒
なんとか行単位でバッファに詰めた後
連続空白などでトークンに区切ってそのトークン単位で sscanf をぶんまわすような
ほのかな中途半端感が
514デフォルトの名無しさん
2019/02/18(月) 21:20:31.62ID:etvvcICH
>>510
別に実行時の発想じゃないでしょ
型を書けばコンパイラはその型名に対応する型を解決しなければならないし、
型変換の要否や可否のチェックも必要
515 ◆QZaw55cn4c
2019/02/18(月) 23:19:20.43ID:aN2QSVsl
>>514
>型変換の要否や可否のチェック
これは10中8, 9 コンパイル時にすることなのでは?
516デフォルトの名無しさん
2019/02/18(月) 23:37:20.44ID:Q29xkQ9H
>>515
初めからずっとコンパイル時間の話をしている。お前さんだけ噛み合ってないから、もう黙っててくれ。
517デフォルトの名無しさん
2019/02/19(火) 15:32:09.41ID:Hz70ZqtS
C++です
インクルードガードがあっても関数の定義がヘッダに書かれていればヘッダが複数回読み込まれていた場合リンク時に多重インクルードでエラーが出る

ここまではわかるのですが、同じことをクラス関数で実験した結果エラーになりませんでした
具体的にはヘッダのクラス内に関数定義を書いて複数のファイルからインクルードしました
これはどういうことなのでしょうか?
518デフォルトの名無しさん
2019/02/19(火) 16:00:36.20ID:uP1odnYQ
>>517
クラス定義の中に書かれたメンバ関数の定義は
自動的にインライン関数になる(関数の実体の定義ではない)

この場合は、複数の場所にメンバ関数の実体が作られるわけじゃない、
という説明でどうかな。
519 ◆QZaw55cn4c
2019/02/19(火) 17:19:54.69ID:BVj1SDNF
>>516
そもそも「実行時」「コンパイル時」の区別がついていないのでは、コンパイル時間の話なんかできないのでは?
だから「実行時」「コンパイル時」どちらを適用するかに執着しているだけです
520デフォルトの名無しさん
2019/02/19(火) 17:23:21.85ID:Hz70ZqtS
>>518
なるほど
クラス内に定義を書くとインライン関数になって普通の関数としては扱われないんですね

もう少し理解するために調べたのですが、インライン関数は内部リンケージのみを持つものとしてコンパイラに解釈されるらしいですね
だからコンパイラはファイル間での関数の重複を調べようとしない
そしてインクルードによって複数のファイルで同じものを読み込んだとしてもエラーにはならないと・・・
理解です
勉強になりました
ありがとうございました
521502
2019/02/19(火) 17:39:36.16ID:uP1odnYQ
失礼、なぜか >>510 を見逃してて(黙殺するような意図はまったくなかった)。

C++ は関数を宣言・定義するときに返り値型を書くから
auto で受けてもコンパイル時に曖昧さは生じないと考えたんだけど。

実行時まで返り値の型が決まらない関数って作れるんだっけ?
これは純粋に質問、教えを乞いたい。
あんまり高度な話だと振り落とされるかも知れないけど。
522デフォルトの名無しさん
2019/02/19(火) 17:48:52.81ID:h1wI7nx1
型推論が実行時に行われるとかトンチキこいてるやつが一人騒いでるだけ
523デフォルトの名無しさん
2019/02/19(火) 18:43:18.16ID:+3biNeIC
>>521
おそらく君の書いた「func()の返す型〜」をqz某が勝手に勘違いしているだけだからスルーしていいよ。
初心者が必ずしも正確な用語を使わないことくらい想像つくだろうし、文脈からして普通ならそんな勘違いはしないはずなのだが。
524はちみつ餃子 ◆8X2XSCHEME
2019/02/20(水) 00:20:40.27ID:C98K3aY7
>>521
出来ない。
強いて言えば C++17 からは std::any があるけれど、
これはこれで実行時に型が決まるわけではなくて
コンパイル時に std::any 型であることは確定する。
525デフォルトの名無しさん
2019/02/20(水) 00:28:15.76ID:qDW9CRq2
>>520
> もう少し理解するために調べたのですが、インライン関数は内部リンケージのみを持つものとしてコンパイラに解釈されるらしいですね

どこにそんな嘘書いてあった?

https://timsong-cpp.github.io/cppwp/n4659/dcl.inline#footnote-94
> The inline keyword has no effect on the linkage of a function.
526デフォルトの名無しさん
2019/02/20(水) 00:47:02.04ID:rsRaa5eC
>>525
IBMのサイトに書いてありました・・・
と思って今見返したらこれはIBMの統合開発環境のページなのでその開発環境の仕様かもしれないですね
失礼しました

https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_72/rzarg/inline_linkage.htm
>インライン関数は内部リンケージを持っているものとして処理されるので
527デフォルトの名無しさん
2019/02/20(水) 09:09:52.38ID:qDW9CRq2
>>526
「C のみの始まり」〜「C のみの終わり」で囲まれているとおり、それはCの仕様だね。
528 ◆QZaw55cn4c
2019/02/20(水) 19:50:21.82ID:P8vN2pc3
>>525
それは inline キーワードで束縛された関数は、inline 展開される多数の実体と、外部リンケージによって外部からコールできるものとで別の実体をコンパイラは作成する、ってことですか
まあ inline しまくって無駄にバイナリーを増やすくらいだったら、ついでに1 個の外部リンケージで呼べる実体を追加したって、いろいろな面で大差がない、とはいえますね
529デフォルトの名無しさん
2019/02/21(木) 01:44:35.45ID:HXHB3ZEN
>>528
「それ」が何を指して言ってるのかよくわかんないけど、 inline 関数に対して
インライン展開されてない「実体」を生成するのもしないのもコンパイラの自由。

外部リンケージを持つ関数について複数のコンパイル単位でアドレスを取って
==, != で比較した場合には一致させないといけないので、アドレスを取られた場合には
そういうコード生成をするのが一般的だろうとは思う。
530デフォルトの名無しさん
2019/02/22(金) 22:57:05.70ID:LZ/mWRas
引数や関数にはconstつけられるところは全部つけるべきですか?
531デフォルトの名無しさん
2019/02/23(土) 00:51:14.65ID:CdF18mGW
つけて問題ないならつけるべきだけど、まあ実際は面倒くさくなければという程度…
532デフォルトの名無しさん
2019/02/23(土) 10:37:02.21ID:6erMuDJl
>>530
内部で書き換えないポインタや参照の引数には必ずconstをつけるべき。より自己文書化されるし、付けてないと使う側の手間が増える。>>531は元javaプログラマ
533デフォルトの名無しさん
2019/02/23(土) 10:39:40.19ID:Iy1q86mj
今は良いけど、半年後の自分は既に他人だと思わないと
534デフォルトの名無しさん
2019/02/23(土) 11:45:29.73ID:+DV3f+Dk
const連鎖まんどくせ
535デフォルトの名無しさん
2019/02/23(土) 12:40:33.73ID:aRr2CtyI
530みたいな質問する奴はそもそもconst気にする前に関数が長すぎたり
参照と実値渡しの違いもわかってないと思われるのでその辺をしっかりやった方が良い。
536デフォルトの名無しさん
2019/02/23(土) 17:32:16.44ID:7GKXwuwj
入門書の類が、最初のうちは const なしで説明しておいて、
本の後半でおもむろにポインタの引数に const つけることを
載せてたりするせいかもな。
高度な、マニアックな話題みたいな感じで。

文字列(charへのポインタ)を受け取る関数を紹介したら、
すかさず const char* の説明も合わせてすべきって気がする。

const の一般的な価値が分かれば、メンバ関数での func() const {...} の
ありがた味もすぐ飲み込めて const つけまくり派になるでしょ。
537デフォルトの名無しさん
2019/02/23(土) 21:02:55.45ID:kvfLWeS8
戻り値を const char* してても、
char* const してなければさほど意味がない。
538デフォルトの名無しさん
2019/02/23(土) 21:20:57.14ID:JpeZVvP/
それは質問なの初心者君?
539デフォルトの名無しさん
2019/02/23(土) 23:45:27.99ID:Z+wYSHT9
クソミソみたいなjavaのconstと違ってC++のconstは
コードの安全性を高めるのに必須といっていいぐらいのキーワード
とりあえず片っぱしから全部const付けて、どう頑張ってもここは
constはずさないと動くコードにできないよな・・ていうぐらいの
時だけはずす。このぐらいの気構えでコードを書けば、かなり安全な
コードになってる。他のやつが書きかえちゃダメなものをいじろうと
しても、強引なキャストでもしない限りどうやってもコンパイルが
通らなくなる。強引なキャストしてでも無理矢理強姦してくる強姦魔は
そもそも犯罪者気質なのでそんなやつに仕事をやらせてる時点で間違い
540デフォルトの名無しさん
2019/02/23(土) 23:48:50.01ID:Iy1q86mj
「かなり安全な」

ここで思わず笑ってしまったではないか
541デフォルトの名無しさん
2019/02/24(日) 00:00:52.25ID:qLJosHl4
残念ながらバカはmutable使い出すから無意味。
542デフォルトの名無しさん
2019/02/24(日) 00:06:41.22ID:2wDVhIfR
俺は書換られたりはしない たぶんしないと思う
しないんじゃないかな ま、ちょっと覚悟はしておけ
543デフォルトの名無しさん
2019/02/24(日) 00:47:53.06ID:ORSkBdqU
constっていちいち書くのめんどい
544デフォルトの名無しさん
2019/02/24(日) 00:48:50.68ID:haqs87u6
>>537
何を言ってるのか分かりません
545デフォルトの名無しさん
2019/02/24(日) 01:15:50.47ID:is7scwjD
いやまてまて・・このスレの99%はネタでできてるけど
そこ分からないのはダメだぞ
まさに初心者向けの話題ではある
546デフォルトの名無しさん
2019/02/24(日) 07:21:28.17ID:kwD2lttR
>>541
mutable使ったらいかんのか
547デフォルトの名無しさん
2019/02/24(日) 08:50:14.25ID:FFCpIhtq
こいつ能力低いなと思う奴のソースを見ると、
constなんて全く付いていない場合が多い
548デフォルトの名無しさん
2019/02/24(日) 09:00:44.87ID:eyx8DEIH
>>543
ちょっとわかるわw
あと3文字くらいが良かった
549デフォルトの名無しさん
2019/02/24(日) 09:02:28.69ID:zE1f0a65
cnst
550デフォルトの名無しさん
2019/02/24(日) 09:40:01.37ID:4ommn3XM
constはキーボード入力の観点からはそんなに苦じゃない
stdとかarrayが割りと入力しづらい
左右均等に割り振られてると楽な感じ
551デフォルトの名無しさん
2019/02/24(日) 09:57:22.91ID:FGRIaiAP
const char* a = "hoge";
const char* const a = "hoge";

の違いがわからんやつは死ねとよい
552デフォルトの名無しさん
2019/02/24(日) 10:22:22.64ID:qLJosHl4
そんな違いを意識しないと読めないコード書く方がバカだと思う。
553デフォルトの名無しさん
2019/02/24(日) 10:24:20.55ID:eyx8DEIH
(そんな初歩中の初歩でマウンティングドヤ顔して大丈夫っすか先輩)
554デフォルトの名無しさん
2019/02/24(日) 10:37:36.70ID:haqs87u6
>>545
>>544のこと言ってるの?
>>537は、ポインタの指し先だけでなく、戻り値を格納する変数自体を定数にしなければさほど意味がないっていう主張だと理解したけど、合ってる?
ローカル変数を定数化したければ呼び出し元が勝手にやればいいし、戻り値をconst char*にする重要性に比べたらそれをする必要性なんてごく僅かで"さほど意味がない"なんてとても言えないと思うけど
555デフォルトの名無しさん
2019/02/24(日) 12:08:33.20ID:6sZPiHms
>>551
ドヤ顔して噛むなよ
556デフォルトの名無しさん
2019/02/24(日) 12:15:09.98ID:sIV9Z0cV
C++ってC言語の負の遺産を引き継いだ言語だろ?
constは廃止すべき
557デフォルトの名無しさん
2019/02/24(日) 15:05:59.28ID:uFOuUY9d
constみたいな糞どうでもいい些末なことより
配列のサイズとオーバーフローの管理を強化するべきだったんだよ
互換性捨てなきゃならんが
558デフォルトの名無しさん
2019/02/24(日) 15:35:26.16ID:2tRfk65D
>>557
そこはCの負の遺産を引き継いだのではなく、可能な限り実行時オーバーヘッドを小さくする実装手段を提供するというCの基本スタンスを継承しただけだろう。それが負の遺産というなら他の言語の方が適切なんだからそれを選択すればいいよ。
C++を使いたく、ある程度の実行時オーバーヘッドが許容できるときはstd::vectorという選択肢があるけど、それじゃダメなのか?
559デフォルトの名無しさん
2019/02/24(日) 16:47:00.15ID:RgZ/0jGo
>>556
const に関しては C++ で新規導入された仕様を ANSI C に逆輸入、
みたいな感じじゃなかったっけ?
そのせいか、定数としてconst変数を使えないとか中途半端になってる。
C++ が C の負の遺産を切り捨てるべきだったとしても、
const はその「C の負の遺産」の範疇に含まれないかと。

いずれにせよ、今さら言っても、現に存在する C++ はどうもならんよね。
そういう新プログラミング言語が出ても、それは C++ じゃない別物ってことで。
560デフォルトの名無しさん
2019/02/24(日) 16:57:30.90ID:2fcQjxFq
そういうのはDで良いと思う
561デフォルトの名無しさん
2019/02/24(日) 17:18:54.78ID:NUlc6EOn
とりあえず数値以外はconst参照渡しが基本でおk?
562デフォルトの名無しさん
2019/02/24(日) 17:34:26.40ID:qxqTarkR
>>557
at()使え。
>>556
constが負の遺産とか頭おかしい。
ドキュメントにこの変数は内部で変更しませんとか書くよりよっぽど楽だろ
563はちみつ餃子 ◆8X2XSCHEME
2019/02/24(日) 17:36:09.20ID:gUJTdPsI
>>562
負の遺産だよ。
const キーワードを廃止して
デフォルトの挙動を const に出来れば
どれほど良いことか。
という意味で。
564デフォルトの名無しさん
2019/02/24(日) 17:40:12.42ID:qxqTarkR
>>563
それなら同意するけど>>556にそんな意図はないでしょ
565はちみつ餃子 ◆8X2XSCHEME
2019/02/24(日) 17:43:09.22ID:gUJTdPsI
>>564
皮肉っぽい言い回しをしてみたかっただけ。
566デフォルトの名無しさん
2019/02/24(日) 17:48:01.19ID:qxqTarkR
いやん
567デフォルトの名無しさん
2019/02/24(日) 18:48:30.19ID:qLJosHl4
そこまで挙動を変えるなら別言語でやれば良いし、実際rustとか他の言語としてあるだろ。
568デフォルトの名無しさん
2019/02/24(日) 18:53:22.05ID:2wDVhIfR
使わないで済ませる事ができるなら、使わないで置く方がうまく行く
569デフォルトの名無しさん
2019/02/24(日) 19:20:28.43ID:iK4D+UQi
>>563

>>567 も書いてるけど、それ何てRust?と思った。
570はちみつ餃子 ◆8X2XSCHEME
2019/02/25(月) 01:48:46.07ID:LzC1voP1
負の遺産でも互換性とのトレードオフだしな。
いいことばかりじゃないけど、悪いことばかりでもない。

とりあえず const は付けれるだけ付けとけというのが
ベストプラクティスだと思う。
571デフォルトの名無しさん
2019/02/25(月) 12:52:11.08ID:y5m/9TYH
>>563
引数だけなら同意してもいいけど変数はどうするんだ?
for(variable int i = 0; i < 10; i++){
とかはあまり書きたくないぞ
572はちみつ餃子 ◆8X2XSCHEME
2019/02/25(月) 13:56:12.72ID:LzC1voP1
>>571
まあそこはもしもの話だから。
最初から const なら文法もそれに
沿ったものになってただろうさ。
573デフォルトの名無しさん
2019/02/25(月) 17:39:50.14ID:ubojwQhV
確かに、関数内で作ったローカル変数だけデフォルト変更可能、
他所から持ちこんだ、ポインタの先や参照、グローバル変数へのアクセスは
基本的に読み出しのみ許可で、明示した場合だけ変更できる、なら
「勝手に書き換えたのは誰だ!?」ってバグは減りそうだね。
574デフォルトの名無しさん
2019/02/25(月) 18:51:13.68ID:y5m/9TYH
>>573
ああ、それなかなかいいかも
575デフォルトの名無しさん
2019/02/25(月) 20:42:12.40ID:lqvZQt+c
そうそう、だから普通にC++書いてる人は
とりあえず引数に全部 const つけるでしょ
それはそういうことだよ
576デフォルトの名無しさん
2019/02/25(月) 20:44:41.85ID:x+rkal0w
引数じゃなく method の const は後悔することがちょいちょいと

class foo {
public:
void method() const;
};
577デフォルトの名無しさん
2019/02/25(月) 20:50:25.72ID:1EOktSCH
constつけときゃいいってのもなんか胡散臭い印象しかないな。
そんなことよりも変更や生成を行う場所、タイミングを局所化するってのが本質だと思うが。
578はちみつ餃子 ◆8X2XSCHEME
2019/02/25(月) 20:56:50.13ID:LzC1voP1
const が必要なところに付けるって考えるよりは
const では駄目なところでは外すという考え方の方が
安全っぽいという話であって、
適切に使い分けろというのは大前提のことだってことは補足しておく。

const が当たり前だって気持ちになると
変更が必要な個所は自然に局所化されるでしょ。
579デフォルトの名無しさん
2019/02/25(月) 21:58:02.00ID:rMTHv0xs
const連鎖くらったらほどほどでいいやと思うようになる
580デフォルトの名無しさん
2019/02/25(月) 22:14:33.44ID:1EOktSCH
なんというかもう修正が一切されないコードしか想定してない印象を受ける。
581デフォルトの名無しさん
2019/02/25(月) 22:37:43.55ID:rMTHv0xs
やりすぎオブジェクト指向といっしょで
事故起こりにくいとこでこだわっても変更に弱くなるだけ
582デフォルトの名無しさん
2019/02/25(月) 22:51:58.14ID:ki6l711j
複雑怪奇で理解不能にしておくと、
変な改造されないで済む
583デフォルトの名無しさん
2019/02/26(火) 00:51:25.18ID:wcHiR3Ib
初心者で申し訳ないんですが、c/c++を学ぶため何か作りたいのですが、cで作る意味のあるいいお題はないでしょうか。JavaやC♯、rubyは一通りかける感じですがcはmallocなど知ってはいても使ったことはないレベルです。よろしくお願いします!
584デフォルトの名無しさん
2019/02/26(火) 01:02:30.50ID:Ujo6lghI
>>583
ビットマップ画像を読み込んでブラーをかけてビットマップ画像として出力
585はちみつ餃子 ◆8X2XSCHEME
2019/02/26(火) 01:30:28.38ID:azIRgqwp
>>583
いきなり「実務的な」プログラムを書くのはオススメしないよ。
C/C++ には歴史的経緯によってクソな落とし穴と「未定義」がたくさんあるので、
たとえ期待通りに動いたとしても正しくないプログラムであることは多い。
初心者向けのしょうもない (他の言語でやる入門と大差ないような) 題材で小さなプログラムを書いて
ブログとか Qiita とかに書いておけばベテランがよってたかって指摘してくれるさ。
そういうので基本的な落とし穴くらいは理解してから進んだ方が良いと思う。
586デフォルトの名無しさん
2019/02/26(火) 01:35:07.18ID:F6jD76wH
HDDの中を検索するプログラムとか、整理するプログラムとか
こういうのがあったら便利だなっていう物を考えて作ってみる
途中分からなくなったら、ここに相談に来ると良い
親切な人が教えてくれる、かもしれない
あてにはしないこと
587デフォルトの名無しさん
2019/02/26(火) 01:49:53.01ID:2prSgTvN
おっさんらジイさんらの世代だと
「こういうのあったら便利だよな」と思って作りはじめるパターンは有効だったけど
今はそういうの探したらほとんどあるからある意味不幸だよな
しかも自分で作ってたらとてもここまで作ってるヒマないっていうぐらい高機能なのが多いし
588デフォルトの名無しさん
2019/02/26(火) 01:50:17.99ID:wcHiR3Ib
>>584
>>585
>>586
ありがとうすごく参考になりました。デスクトップランチャーとかほしいと思って作るならWPFだし、Cで実用的なほしい物ってむつかしいんですよね。初心者向けの小さなプログラムは上記のブラーとかでしょうか?Cで書く意味がある題材ってわからなくて。。。
589デフォルトの名無しさん
2019/02/26(火) 01:59:04.98ID:H+xdnOpD
>>588
そもそも自分がC/C++を身につける意味があるかというとこらから見直した方がいいのでは?
直ちに必要な訳ではないが将来的に身に付けたいというなら、先に他の人が言っていたようにいきなり実用的なプログラムから入るより練習問題レベルの小品をコツコツ作っていった方がいいと思う。
590はちみつ餃子 ◆8X2XSCHEME
2019/02/26(火) 02:00:19.43ID:azIRgqwp
どうしても自分が欲しくて既存のものがないってケースでも、
既存のものをバッチファイルで繋げればできるって程度のものだったりするもんな。
そういう意味じゃ、日常ではスクリプト言語の方が使うことが多いとは思う。
俺が一番最近に書いた C のプログラムもスクリプト言語の拡張パッケージだし。
591デフォルトの名無しさん
2019/02/26(火) 02:19:19.20ID:F6jD76wH
>>588
例えば容量の大きなHDDだと、同じファイルが複数場所にあったりするじゃない?
そういうのを見つけて、チェックした後削除すれば容量節約という実利もあるよ
592はちみつ餃子 ◆8X2XSCHEME
2019/02/26(火) 02:22:08.89ID:azIRgqwp
>>588
C/C++ で書く意味ということに最初は拘らなくてよいと思う。
こだわらなくてもプログラムの構成の仕方、書き方には確実に違いがあるから、
むしろ比較しながら学んだ方がいいかもしれない。
593デフォルトの名無しさん
2019/02/26(火) 02:40:55.07ID:OTQ63qDn
C/C++使う必要性がわからないならやらないのが正解
今だにこんなクソ言語使ってるのはそれしか選択肢がないから
あるいは物好きな言語マニアか
594デフォルトの名無しさん
2019/02/26(火) 03:33:39.99ID:belfWXD5
先に他の言語やらんとC++の必要性はわからんと思う
595588
2019/02/26(火) 08:48:58.01ID:+14u2RP+
こんなにレスもらえると思いませんでした、他の言語スレや板だともっと殺伐としてます。。。ありがとうございます。
低レイヤを高速で処理できるのが魅力だと思うので最終的には任意のパケットを送受信できるデーモンを作りたい。ので、>>591のいう同名ファイル検索デーモンから始めようと思います。
596デフォルトの名無しさん
2019/02/26(火) 09:06:06.17ID:OTQ63qDn
ならechoサーバーから入ってhttpサーバーという定番ソケットプログラミングコースもおすすめ
まぁでもその検索デーモンとやらでファイルの扱い勉強してからでいいだろうな
高速化に興味あるならC/C++の標準ライブラリでなくOSのnativeのapiを積極的に使うのもいい
ファイルならメモリマップドファイルを使ったり(ファイル名調べるだけなら不要だけど)
他には検索アルゴリズムに凝る方向とかね
597デフォルトの名無しさん
2019/02/26(火) 11:48:20.70ID:9FjD9aLm
>>595
同じファイルというのをどう判定するかだな
ファイル名なのかハッシュ(中身)なのか
598デフォルトの名無しさん
2019/02/26(火) 14:41:46.79ID:8+7ktUtN
globalに宣言されてる変数と同じ型同じ名前で
関数内にlocalに宣言されたものがあるとき
警告出してくれるオプションって何だっけ
599デフォルトの名無しさん
2019/02/26(火) 16:05:20.40ID:5MxkS3P7
>>595
なんで、そんな面倒くさい事をしなきゃならないんだ?

Ruby なら、PowerShell から、1-liner で、
Rubyで作られた遅いウェブサーバー、WEBrick が起動する

ruby -run -e httpd . -p 8080

そのフォルダに、index.html があれば、
何も考えなくても、これでブラウザからアクセスできる

http://localhost:8080
600デフォルトの名無しさん
2019/02/26(火) 16:39:31.27ID:2RZ4BMiv
>>599
お前は相手の意図を理解する気がまったくなく、人とのコミュニケーションができないことをさっさと理解して、巣にかえって閉じ籠っていてくれ。
ここはお前に用がある奴は一人もいない。
601588
2019/02/26(火) 17:33:10.46ID:+14u2RP+
みなさんありがとう
今日は会社で暇だったのでコピペベースながらUDPで任意のメッセージ送受信出来るようになった
ヘッダでincludeする構造体って宣言済みのクラスみたいな感じで使えることを理解しました。(udphdrを使わずにsendしたからか、送れたけどudpチェックサムは自動で計算されなかった)

tcpは、というかhttpサーバは難しそうですが頑張ります!
602デフォルトの名無しさん
2019/02/26(火) 17:44:16.64ID:MNG9zBp3
>>598
gcc/clang だと -Wshadow だな。
-Wall -Wextra とは別に指定する必要があるようだ。
細かいことを言えば、同じ型でなくても、名前が隠される場合は警告が出る。

今ネットで調べて確認、これからオイラも使うことにする。
603デフォルトの名無しさん
2019/02/26(火) 23:22:44.06ID:8Je4SUY+
同じ意味だけど型が違うときの変数名ってどうされてますか?
いつも困ってます。

例)

float2 fPos( 1.0f, 2.0f );

XMFLOAT2 fPos( fPos.x, fPos.y ); ←当然同じ名前は×
604デフォルトの名無しさん
2019/02/27(水) 07:11:30.50ID:tay7IMIk
>>603
float2でfPosって付けてるならXMFLOAT2ならxPosとかでいいと思うが…
605デフォルトの名無しさん
2019/02/27(水) 07:53:03.71ID:3Jl+ieqT
>>603
よくシステムハンガリアンは悪と言われるけど、この例のように同じ内容で型名の違いに意味がある場合は、型名に関するプリフィックスをつければいいんでない?
とあるライブラリに渡す境界部分ならそのライブラリ名に関するプリフィックスとか。
606デフォルトの名無しさん
2019/02/27(水) 19:12:35.49ID:8imVoWCJ
初心者ですみません、こんなコードをみたのですが2点わかりません。
char packet[1500];
memset(buf, 0, sizeof(buf));
ether_header *eh;
eh = (struct ether_header *)packet;

たぶん、1500byteのメモリを確保して0埋め、ether_header構造体のポインタを宣言してpacketのアドレスを渡す、としたいのだと思います。

分からないのは0埋め対象が宣言されていない変数bufであること、packetのアドレスを渡すのにわざわざether_header型のポインタにキャストしている2点です。よろしければ教えてください。

https://qiita.com/marufeuille/items/81f323a52a6fd3bd530c
607さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/02/27(水) 19:18:47.40ID:AjY/hWvK
bufはpacketの間違いか? 多分。
608デフォルトの名無しさん
2019/02/27(水) 19:25:41.76ID:uRVYM9rZ
キャストしてるのはwarning回避じゃないか?
609デフォルトの名無しさん
2019/02/27(水) 19:41:57.94ID:vHAcjSp1
>>606 の引用元を見るとコード片だから、実際にはコンパイルしてないんだな。

char packet[1500];
memset(buf, 0, sizeof(buf));
は、packet と buf が同じもので、正しくは

char packet[1500];
memset(packet, 0, sizeof(packet));

なんだと思う。最初は両方とも buf と書いてあったけど
「もっと自ら語る変数名にしよう」と packet に変えたはいいが、
memset() の方では直し忘れた、というお話かと。


(struct ether_header *) のキャストは、コンパイラの警告対策だな。
…って言うか、これキャストしないでも警告だけで通るのね。
610デフォルトの名無しさん
2019/02/27(水) 19:48:31.45ID:cPR259KO
やってきたパケットのうち 頭のEthernet Header にフォーカスしてる意図でのキャストかな?

最終的には char [1500] で受け取ったパケットの配分を(パディング無しで)
 struct TCPpacket {
  Ethernet_Header eth;
  IP_Header iph;
  TCP_Header tcph;
  char* TCP_payload[]; /* 末尾可変サイズ */
 };
に配分したいんだろうけど、手を抜くなら union にしそうだわ

union Packet {
struct TCPpacket tcp;
char* packet[1500];
};
611603
2019/02/28(木) 00:25:33.39ID:OS/9xoBt
>>604
>>605
ご提案ありがとうございます!
何らかのプリフィクスで識別が妥当そうですね。
ローカル名前空間みたいな概念があると便利そうですが・・・。

local namespace XM
{
  XMFLOAT2 fPos;
}

float2 fPos( 1.0f, 2.0f );

XM::fPos = { fPos.x, fPos.y };
612デフォルトの名無しさん
2019/02/28(木) 09:35:29.75ID:KtBFXYBy
どうせ長ったらしい関数書いてんだろ
それがそもそもの間違い
613デフォルトの名無しさん
2019/02/28(木) 12:25:31.13ID:o9FaNCnF
>>607
>>608
>>609
ありがとう、cがとんでもなく難しい言語かと誤解するところだった。
614 ◆QZaw55cn4c
2019/02/28(木) 20:15:42.34ID:FII1Vkt+
>>583
http://2chb.net/r/tech/1549160513/
にお題がいっぱい転がっています…
615デフォルトの名無しさん
2019/02/28(木) 22:42:25.23ID:chn/XevV
いやーCは簡単な言語だけどC++はとんでもなく難しい言語だと思うぞ
解説本が電話帳より分厚いなんてな自然言語超えてる
616デフォルトの名無しさん
2019/02/28(木) 22:46:25.10ID:UN7NGNSN
そんな解説本あるのかw
617デフォルトの名無しさん
2019/02/28(木) 23:11:49.78ID:LM7UlKO7
それはあいつが悪いだろ‥
618デフォルトの名無しさん
2019/03/01(金) 00:09:02.27ID:TIzWjpCx
しかも、言語仕様の改訂が3年ごとと早すぎて、
邦訳解説本はもちろん、原書でもリリースがおいつかず、
仕様改訂を繰り返すたびについてこれないユーザーをふるい落とす恐るべき言語
仕様改訂の世代を重ねるごとに中国以上の人口減少率でユーザー数が減少する既に終わった少子化言語ww
619デフォルトの名無しさん
2019/03/01(金) 01:01:16.39ID:SPEgyt6t
なんか皆C++はむずかしいむずかしいっていうが、そんなむずかしいか?
俺的には今時のECMAScriptと各種フレームワークの使い方のほうがよほどむずかしい。
2、3年もすると何だかイノベーションがどうのこうのいってまるっきり別物のコンセプトのがでてくるし・・。
C++なんて基本概念はもう何十年もかわらんだろ。あとはその都度必要なstlとかの機能覚えればいいだけ。
楽なもんだよ。
620デフォルトの名無しさん
2019/03/01(金) 01:51:54.22ID:ejlMN09K
今何も見ずにラムダ式書ける?
621デフォルトの名無しさん
2019/03/01(金) 01:55:24.44ID:aAd1thXX
有名所のライブラリでラムダ式使ってるの見たことない
622デフォルトの名無しさん
2019/03/01(金) 06:22:49.33ID:TGgsjFNR
『プログラミング言語C++』第4版は電話帳より厚いね。
あれは解説書だよな。1300ページ以上ある。

ちょうど新しい電話帳が届けられたばかり。
田舎住まいだから都市部に比べて電話帳が薄いってこともあるけど。
623デフォルトの名無しさん
2019/03/01(金) 07:01:09.26ID:TGgsjFNR
C++は新しい言語仕様が次々に追加されるせいで、
同じ細かな処理をするにも人によって書き方が色々になって、
「同じ言語で同じ処理をしてるはずなのにソースは似ても似つかない」
「自分で書くには便利だけど、他人の書いたプログラムは読み解けない」
てな状況になってるんと違うかな。

わざわざストラウストラップ先生が「言語の全部を知らなくても、
徐々に理解しながら使えばいい」と書いてくれてるけど、
他人のソースを読む際には役に立たないアドバイスだよね。
624デフォルトの名無しさん
2019/03/01(金) 13:03:30.11ID:ozM8zBQ9
>>615
CもC++も仕様は簡単
ライブラリやアルゴリズム考えるのが面倒で生産性が低いだけ
それを難しいと勘違いしてるだけ
625デフォルトの名無しさん
2019/03/01(金) 13:21:26.51ID:5w/5u0Tx
こういうc++の危険さをまったく認識できてないやつが一番困る
std::forwardの意義を誰にでもわかるように説明してみろよ
626デフォルトの名無しさん
2019/03/01(金) 15:52:20.02ID:3z2kkMi4
C++11以降とそれ以前で違い過ぎるのが問題では?
627はちみつ餃子 ◆8X2XSCHEME
2019/03/01(金) 16:02:10.84ID:Vq7maKYR
>>623
「徐々に理解しながら」は、 C を既に知っている人を明らかに想定していて、
今では C がそんなに支配的でもないという状況を思うと適切な動線とは言えないという意味でも
あまり役に立たなくなってきていると思う。

ただ、追加された機能を見ると、
新しい書き方の方が間違い難くて綺麗で一貫していることが多いので、
肥大化するから追加するのをやめろとも言い難いんだよな……。
628デフォルトの名無しさん
2019/03/01(金) 16:17:07.89ID:yZJ4Zkhu
皆、ドワンゴ江添亮の本を読んでいないから、C++ の恐ろしさがわからないのだろう

詳細を突っつくと、無限にややこしいものが出てくるw
だから江添でさえ、詳細は省略しますって書いてあるw

>>610
1バイトずつ、check sum を計算するような場合は、そういうように、union にするのが定番
629デフォルトの名無しさん
2019/03/01(金) 17:25:35.13ID:tC4m5Wn4
●ワンゴ倒産の危機わろすω
630588
2019/03/01(金) 17:56:26.55ID:VPz6Y2H0
udpパケットを送れるようにはなったのですが、wiresharkで確認するとudpフレームのchecksumが未定義となっていました。。。
そこで1からやりなおしたいのですが、ソケットはrawで開くべきなのでしょうか。いまはudpなのでdgramで開いてsockaddr_inのインスタンスをつかってsendtoしています。
631デフォルトの名無しさん
2019/03/01(金) 18:11:15.15ID:a4IFMTFx
checksum計算して値入れてから送れよ
632デフォルトの名無しさん
2019/03/01(金) 18:18:10.83ID:6LDVvTwi
enumについて教えてください
enum { ..\..\VAL1, VAL2 };
このような書き方でコンパイルが通る環境はありますか?
case ..\..\VAL1:
というのも許される環境はありますか?
c/c++
633デフォルトの名無しさん
2019/03/01(金) 18:57:53.08ID:p6eROYwf
よくわからんが、識別子の定義を変えたいということか?
634632
2019/03/01(金) 19:04:29.12ID:6LDVvTwi
どこかで見た覚えがあります
635588
2019/03/01(金) 19:14:27.70ID:VPz6Y2H0
>>631
調べた方が足りませんでした、NICのTCP offloadingという機能が有効になっていたせいで、NICより手前でキャプチャするとunverifiedとなっているようです。大変失礼しました。
636デフォルトの名無しさん
2019/03/01(金) 19:23:28.99ID:HVxvwZsK
>>619
>今時のECMAScript
いや、ハードウェアに固定されたバイナリーですらなく、ソフトウェア上で決められた決め事になんら意味を見出せないのですが、それでも javascript とかに熱意を抱けるコツがあったら教えてください
637デフォルトの名無しさん
2019/03/01(金) 19:25:06.34ID:HVxvwZsK
>>629
いいかげんにニコ動をなんとかしてほしいです、昔も重かったけれども今も重い、これはなんとかならないのですか?
638デフォルトの名無しさん
2019/03/01(金) 19:27:08.91ID:YTopxKYT
>>636
>>619の書き込みのどの部分を読んでその質問がでてきたんだ?なんかバグってね?
639デフォルトの名無しさん
2019/03/01(金) 21:35:36.90ID:Y8fj+4tW
引数のmove受け一つとってもrustの3倍くらい難しくなってるわな。
シンタックスが特殊だし、オーバーロードはされるわ、特殊な右辺値に対してのみ動作するとか
根本からおかしい。
640デフォルトの名無しさん
2019/03/02(土) 09:08:32.90ID:NYNVQHNm
物作った事の無い人の重箱の隅つつき+詳細未記載本なんて
時間の無駄だというのが良くわかった。
石田晴久の通信プログラムとか技術書展の方がマシ
641デフォルトの名無しさん
2019/03/02(土) 11:46:55.44ID:jZcAiOx4
ソース書くときに気を付けるのはとにかく引き継ぎしないといけなくなったときに楽になるようにって点かな。
上から読み下していったときにわかりやすければなんでもいいと思ってる。
642デフォルトの名無しさん
2019/03/02(土) 12:38:56.25ID:+L4gK20K
構造体で例えば
struct POINT{
int x, y;
};
があるとき
struct POINT p = {1, 2};
と定義と代入を同時に出来ますが
一度代入したものを後から書き換えるとき
p = {3, 4};
と書くとエラーになるみたいで
p.x = 3, p.y = 4;
と書かないといけないのが面倒です

先生なんとかなりませんか?
643デフォルトの名無しさん
2019/03/02(土) 12:45:48.83ID:+L4gK20K
ああできた
p = (struct POINT){3, 4};
これでいけました
644デフォルトの名無しさん
2019/03/02(土) 13:27:28.31ID:NYNVQHNm
構造体一括代入はANSI以降の機能だからOS/9とかCP/M68K
のC言語では当然のように動かない
645デフォルトの名無しさん
2019/03/02(土) 13:49:52.82ID:+L4gK20K
C++だと
p = POINT(3, 4);
もいけるかな
646デフォルトの名無しさん
2019/03/02(土) 13:50:54.37ID:+L4gK20K
>>644
たぶんそうだったと思います
ありがとうございます
647はちみつ餃子 ◆8X2XSCHEME
2019/03/02(土) 14:04:36.97ID:tMatklv8
>>645
C++11 以降なら p = {3, 4}; でもいけるよ。
648デフォルトの名無しさん
2019/03/02(土) 14:07:27.41ID:kDivPjLV
片山さんは何で改名したんですか?
649デフォルトの名無しさん
2019/03/02(土) 16:04:24.12ID:uz1yhwTy
C の p = (struct POINT){3, 4}; は、構造体の一括代入に違いないけど、
(struct POINT){3, 4} の部分が「複合リテラル」compound literal だから
使えるのは C99 以降だね。
650デフォルトの名無しさん
2019/03/02(土) 16:10:37.25ID:EmfZa2jP
>>643
理由が"面倒"だったのに、文字数増えてるよねそれ
651 ◆QZaw55cn4c
2019/03/02(土) 16:12:43.27ID:Ud+LwFnR
>>649
これは、C++ に合わせてほしかったな、と思うのです
652デフォルトの名無しさん
2019/03/02(土) 21:57:47.90ID:nqwTLRnH
>>650
要素数によるやろ
653デフォルトの名無しさん
2019/03/03(日) 10:43:47.19ID:lzyzpNmU
C++の規格で使いたいならC++使えで
654デフォルトの名無しさん
2019/03/03(日) 10:52:31.28ID:BbxzBxVK
c++の規格って言ってもその辺、c++のいつの規格だよって話になるんじゃないの?
655デフォルトの名無しさん
2019/03/03(日) 12:23:44.49ID:eB5he6fi
>>629
会社の売り上げに貢献せず、警察を提訴するような
キチガイ高卒社員が資産食い潰してるんじゃね?wwww
656デフォルトの名無しさん
2019/03/03(日) 12:30:17.98ID:eB5he6fi
>>622
すでに3版でも電話帳より厚いよ
まともに読む気になるのは2版までだな。
熱意あるうちはともかく、ふと我に返ると俺何してんだろって。
そんで、言語覚えただけじゃプログラムてかけないしな。
657デフォルトの名無しさん
2019/03/03(日) 12:36:20.23ID:0vjeZZiI
C++でまともなWebサービス作れるエンジニアなんて相当単価高そう
もうオワコン動画の便所掃除やりたがる奴なんていないだろうし
658デフォルトの名無しさん
2019/03/03(日) 14:17:56.07ID:ilhG1tLW
オワンゴとは良く言ったものだな
659はちみつ餃子 ◆8X2XSCHEME
2019/03/03(日) 14:31:57.32ID:XzFmXWmd
サービスを書くのに C++ の比率は高くないかもしれんが、
サービスを支えるインフラには C++ を使うことだってあるだろう。
660デフォルトの名無しさん
2019/03/03(日) 15:36:52.66ID:WlpYxc7g
普通はJavaじゃなかろうか。
661デフォルトの名無しさん
2019/03/03(日) 15:58:13.68ID:E4UxtVYi
Javaは糞
662デフォルトの名無しさん
2019/03/03(日) 16:24:07.50ID:D2G4oQ9F
副業解禁で激変する若者世代とマネージャー世代のキャリア観
https://www.businessinsider.jp/post-107782
フリーランスの職種20個の仕事内容と平均年収をわかりやすく解説
https://www.proof0309.com/entry/shokushu
時給1万円のバイトも。会社員向きのプチ副業を、“バイト芸人”が教える
https://headlines.yahoo.co.jp/article?a=20190226-00127948-bizspa-bus_all
副業が「会社にバレる人」と「バレない人」の大差
https://headlines.yahoo.co.jp/article?a=20190303-00268007-toyo-bus_all
正社員の10%以上が副業 中には過重労働で体調崩す人も
https://headlines.yahoo.co.jp/hl?a=20190227-00010000-wordleaf-bus_all
「副業で年2000万円稼ぐ男」に学ぶキャリア戦略
https://headlines.yahoo.co.jp/article?a=20190221-00266856-toyo-bus_all
加速する「副業社会」正社員の4割が「副業したい」 気になる収入はどれくらい?
https://headlines.yahoo.co.jp/hl?a=20190218-00010001-danro-life
おすすめ副業22選を現役フリーランスが解説【在宅も可能】
https://www.proof0309.com/entry/zaitaku-hukugyou
会社を辞めてフリーランスで働きたいあなたが知っておくべき10のこと
https://www.businessinsider.jp/post-165731
フリーランスと会社員、働き方の根本的な差 広がる「雇用されない働き方」の課題とは何か
https://toyokeizai.net/articles/-/263055
フリーランス人口は増える!今後は仕事もプロジェクト単位になる!?
https://freelance.mts-career.com/population/
663デフォルトの名無しさん
2019/03/03(日) 16:40:10.01ID:QDmbu/k4
言語を使う側なのに、大声でJavaは嫌い()
664デフォルトの名無しさん
2019/03/03(日) 23:12:33.70ID:PvgSI+1g
>>629
焼そば屋?
665デフォルトの名無しさん
2019/03/04(月) 04:52:56.59ID:DAN4+o0x
「困った」と
「助けたい」をマッチングする

新たな出会い系アプリか?
666デフォルトの名無しさん
2019/03/04(月) 21:58:39.97ID:jKyydNU9
最近はスノボにご熱心。
667デフォルトの名無しさん
2019/03/05(火) 04:05:49.01ID:/9uzsfIc
まあJavaは糞これは間違いない
Java使うぐらいならC#使うほうが10倍まし
668デフォルトの名無しさん
2019/03/05(火) 06:49:23.03ID:O5wD/kWC
そんなことあるわけない

100倍は違う
669デフォルトの名無しさん
2019/03/05(火) 06:58:59.78ID:kisxcMe6
Javaはコボラーと同じく湿った猫のような臭いがします
670デフォルトの名無しさん
2019/03/05(火) 14:00:13.11ID:CkJINn0N
Java並に大規模な開発事例ってC++にはあるの?
671デフォルトの名無しさん
2019/03/05(火) 15:25:41.23ID:fIhIM0AX
Windows
672デフォルトの名無しさん
2019/03/05(火) 17:12:45.41ID:YmAHbq9k
>>670
人月商売をやってるだけで大規模()とは言わない
Linuxカーネルほど大規模なのはJavaではない
673デフォルトの名無しさん
2019/03/05(火) 17:33:37.15ID:/9vlYliD
LinuxカーネルってCじゃないのか?
674デフォルトの名無しさん
2019/03/05(火) 17:42:59.75ID:zQd5qKqX
javaって大規模なの?
675デフォルトの名無しさん
2019/03/05(火) 18:51:08.44ID:t42KPL8W
unreal engineとかクッソ大規模に見えるけどどう?
676デフォルトの名無しさん
2019/03/05(火) 19:03:00.43ID:fIhIM0AX
工数でいえばそんなもんクフ王のピラミッドには遠く及ばないだろう
677デフォルトの名無しさん
2019/03/05(火) 19:03:04.57ID:VOhJ9aa0
そもそもjreの基幹部分とかc++だろ
678デフォルトの名無しさん
2019/03/05(火) 19:33:34.31ID:5rQQuIbo
クフ王のピラミッドがなんか関係あるのか?
679デフォルトの名無しさん
2019/03/05(火) 19:57:12.64ID:RSECco33
甘い
甘いなぁ
人月換算だと同じだよ
死者数すらも一致してる
680デフォルトの名無しさん
2019/03/05(火) 22:23:27.02ID:kisxcMe6
20年前で70万ステップぐらいでビルドに1Hぐらいだったなあ
681デフォルトの名無しさん
2019/03/06(水) 00:39:47.70ID:oR6mPeK7
むしろ>>670が思う大規模なjavaプロジェクトを知りたい
682デフォルトの名無しさん
2019/03/06(水) 00:47:13.50ID:URVwFrjm
人数かけて、webページの遷移ごとに別人が開発して、似たような処理をするコードが100倍くらいに膨れ上がって収集つかないようなのが大規模なんじゃね
683デフォルトの名無しさん
2019/03/06(水) 02:24:32.10ID:bd8igJ/M
そう言われると、それまさにコボルだなw
684デフォルトの名無しさん
2019/03/06(水) 09:21:38.79ID:Bk9kaTOY
コボル島ってどっかになかったっけ
685デフォルトの名無しさん
2019/03/06(水) 09:50:15.63ID:mg6kC0Yg
c++じゃなくてcでnamespaceって使えますか?あるいはnamespace相当の機能ってどうすれば実現出来ますか?
686デフォルトの名無しさん
2019/03/06(水) 09:53:13.16ID:mg6kC0Yg
重力波を検出するのに世界中の電子望遠鏡を接続してリアルタイムに通信してるようだけど
ああいうシステムのコードって何で書かれてるの? FORTRAN ?
687デフォルトの名無しさん
2019/03/06(水) 10:10:00.89ID:TjQtzcPT
>>685
cでは使えない
ほぼ上位互換だからc++使えばいいじゃん
688デフォルトの名無しさん
2019/03/06(水) 11:25:59.41ID:1+PBsWw4
>>686
マジレスすると、ああいうのはファイルに落として時々バッチ処理してるだけ
言語はだいたいFortranかC++が多いだろうね
689デフォルトの名無しさん
2019/03/06(水) 13:12:20.46ID:+Sk++sfs
C++だけは絶対にないな
690はちみつ餃子 ◆8X2XSCHEME
2019/03/06(水) 13:15:53.62ID:7/fqDaVy
そうか。
691デフォルトの名無しさん
2019/03/06(水) 23:36:07.84ID:rIL6SiiZ
std::chronoにnanoseconds取り扱う型があるけど
これってwindowsでもナノ秒の精度ちゃんと取り扱えるの?
692デフォルトの名無しさん
2019/03/06(水) 23:39:51.80ID:NglcYyrq
c++11以降はあれ明らかに生産性下がってんだろ。。
誰か本当のことを言ってやれよ。。
693デフォルトの名無しさん
2019/03/06(水) 23:41:05.32ID:ARyk7IvZ
構造化束縛はありがたい
694デフォルトの名無しさん
2019/03/06(水) 23:42:11.68ID:TjQtzcPT
>>691
自分で試してみたら?
695デフォルトの名無しさん
2019/03/06(水) 23:52:49.64ID:07omsi5c
>>691
表現できるだけ
計測できるとは言っていない
696デフォルトの名無しさん
2019/03/07(木) 04:25:32.55ID:hEEon6In
じっさいにやったらわかるが、結局 Windows API の持ってる精度までしかでない
あたりまえっちゃーあたりまえだが
697デフォルトの名無しさん
2019/03/07(木) 05:42:28.93ID:mVKClUMz
>>694
試そうと思ったらどう試すのがいいんだ?
698デフォルトの名無しさん
2019/03/07(木) 06:28:12.40ID:beHWBAJY
短時間、というか連続で何度も時刻の値を入手して、
値の下の方の桁がかならずゼロ並びになってるとか、
時刻同士の差を取って、ある値より小さな数が出ないことから、
解像度の見当を付けるくらいかな。

もっと良いやり方を知ってる人は教えてください。
699デフォルトの名無しさん
2019/03/07(木) 09:17:09.23ID:0XBNAuOg
差をとってその偏差を見ればいいんでは
高解像度タイマーならたぶんcpuのクロック程度の解像度じゃないの
パフォーマンス測定に普通使うし
個人的にはchrono使わずにosのapiかコンパイラの組み込み関数使う
そっちの方が信頼できるし、chronoは型がガチガチすぎて面倒くさい
700デフォルトの名無しさん
2019/03/07(木) 09:44:34.06ID:MJ46GSxE
アナログ出力してオシロで確認
701デフォルトの名無しさん
2019/03/07(木) 19:42:23.39ID:41TL6wBf
std::vectorの最初の要素数は
std::vectro<foo> bar(12);
みたいにコンストラクタで指定できますが、同様に
std::vector<std::vectro<foo>> bar
のように入れ子になったvectorの両方の要素数をコンストラクタで指定する方法はありますか?
702デフォルトの名無しさん
2019/03/07(木) 20:10:03.40ID:rioBJ/QG
結構難しいと思うがね。
最近のCPUはターボブーストいうてサボるし、命令順序入れ替えるし、キャッシュの乗り方でnano秒程度は簡単にズレるだろうし。
703デフォルトの名無しさん
2019/03/07(木) 20:45:12.44ID:xMxnKQAI
>>701
std::vector<std::vector<foo>> a(100, std::vector<foo>(200));
704デフォルトの名無しさん
2019/03/07(木) 20:50:20.24ID:pnI3L7PU
>>702
最近のは対策入ってる
705デフォルトの名無しさん
2019/03/07(木) 22:54:09.91ID:qMT9Q04c
>>703
ありがとござます!
706デフォルトの名無しさん
2019/03/09(土) 07:43:53.39ID:L5yO1DTL
Cで書かれたライブラリから来た構造体にスマポをあてる方法はありますか?
707デフォルトの名無しさん
2019/03/09(土) 09:00:25.13ID:jz9xUaFa
どうなんだろ?
普通に考えたらデストラクタでfreeを呼べばいいから、それ用のライブラリがありそうな気はするけど。
708デフォルトの名無しさん
2019/03/09(土) 10:46:03.96ID:ABNsWlsO
>>706
スマポ弄ってアロケートだけしないようにすればいいんじゃね?
709デフォルトの名無しさん
2019/03/09(土) 11:36:20.07ID:4ewQpv+T
「来た」というのが構造体へのポインタをfree責任ごと渡されたという意味ならカスタムデリータだろうな。
710706
2019/03/09(土) 12:16:02.29ID:L5yO1DTL
ありがとうございます
カスタムデリータは知りませんでした
Cで書かれたライブラリにmallocしたポインタを返してくる関数があって生ポいやだなあと思っていたところでした
711デフォルトの名無しさん
2019/03/09(土) 14:06:24.90ID:YAm1zwse
最近スマポ使えスマポ使えってうるさい割にはカスタムデリータ指定出来ることも知らなかったりするんだな
自分が使ってるもののリファレンスすら読んでない奴が安全性とかどの口で言ってるんだろう
712デフォルトの名無しさん
2019/03/09(土) 15:07:55.58ID:23Hi4jvz
わかってない奴ほど、声がデガイんだよ。
713デフォルトの名無しさん
2019/03/09(土) 17:13:56.74ID:kfZA3URW
codecvt_utf8
codecvt_utf16
codecvt_utf8_utf16
こいつらの糞加減に
714デフォルトの名無しさん
2019/03/09(土) 17:33:22.12ID:anJ4ej+i
最近カスタムデリータ知ったから嬉しがってる奴がいるなw
715デフォルトの名無しさん
2019/03/09(土) 17:49:56.48ID:23Hi4jvz
>>711
すいませんね、リファレンスなんかそっちのけで、ネット情報だけで、プログラム組んでます。
716デフォルトの名無しさん
2019/03/09(土) 19:59:53.92ID:YAm1zwse
>>714
図星だったか、すまんな
というかマウント取るための屁理屈考えてる暇あったら手動かした方がいいよ
717デフォルトの名無しさん
2019/03/09(土) 20:10:27.73ID:eJu7ZZw8
図星しとか意味分からん
ひょっとして>>711 disってるのか? w
718デフォルトの名無しさん
2019/03/09(土) 20:14:07.94ID:9vZTtl18
最近図星って言葉を覚えたので使いたいんだろう
察してやれ
719デフォルトの名無しさん
2019/03/09(土) 20:21:16.84ID:YAm1zwse
>>711で言ったことが図星だったか?という意味なんだが
アホが多いインターネッツですね
720デフォルトの名無しさん
2019/03/09(土) 20:32:45.58ID:kU0Uws1z
今度はインターネッツという言葉を覚えたのか
どんどん賢くなっていくな
721デフォルトの名無しさん
2019/03/09(土) 20:39:00.33ID:ABNsWlsO
カスタムデリータごときでよくそこまでドヤれるもんだなw
722デフォルトの名無しさん
2019/03/09(土) 20:46:58.79ID:YAm1zwse
それ俺に言ってんの?w
723デフォルトの名無しさん
2019/03/09(土) 21:23:16.03ID:jx9iLAiD
そもそもSTLの基幹部分とかJavaだろ。
724デフォルトの名無しさん
2019/03/09(土) 21:36:18.70ID:jz9xUaFa
実際c++やるやつのほとんどの動機がマウントとりたい以上のものではない。
725デフォルトの名無しさん
2019/03/09(土) 22:31:55.52ID:u5Pk3KZw
> 俺に言ってんの?
意識しまくりすぎだろw
726デフォルトの名無しさん
2019/03/09(土) 22:41:21.04ID:Tm/Y9JxW
大学四年かけてC++と機械学習学べば年収1000万とか本気で言ってる奴らだからな()
727デフォルトの名無しさん
2019/03/11(月) 22:26:31.27ID:QlHozVZM
相談なのですが

テキスト形式のライセンスファイルへのファイルパスを渡さないと使用できないライブラリA
そのライブラリAを使用するライブラリB

私が作成しているのはライブラリBです。お客さんに使ってもらうものなんですが、「ライセンスファイルをセットで提供して適切な場所に置いて使ってもらう」という手間を省きたくてライセンスファイルをライブラリBに埋め込めないかと思案しています。
とりあえずライセンスファイルの中身をソースにベタ書きし、実行時に一時ファイルとして作成しライブラリAにそのパスを渡すことで上手くいっているのですが、もっとスマートな方法はないでしょうか?
ファイルパスを渡さないといけないので無理ですかね…
728デフォルトの名無しさん
2019/03/11(月) 22:57:10.81ID:9rO3q8tQ
納入時にファイル一つなんか?
実体なんやねん
729デフォルトの名無しさん
2019/03/11(月) 23:06:05.03ID:zGphoT2G
ライブラリAが要求するのは
ファイルシステムに認知されるファイルの形式でないといけない
だから中間ファイルに書き出して、そのファイルパスを渡すしかない


つかライセンスを埋め込んだ場合何がしかの事情で
ライセンス変更の必要が迫られた場合ライブラリBを構築しなおすことになるんだが
そういう管理でいいのけ?
730デフォルトの名無しさん
2019/03/11(月) 23:06:05.25ID:CMHDEYzk
>>728
ヘッダーと共有ライブラリのセットです。
731デフォルトの名無しさん
2019/03/11(月) 23:11:06.21ID:CMHDEYzk
>>729
やっぱ他にないですよね…

継続的にバージョンアップ重ねて提供してるんですが、ライブラリAについては今後も使い続けるか微妙なんでお客さんに〜のように運用してくださいってお願いするのはまだやめておきたいんですよ。
まあその面倒ごとを避けようとするスタンスが一番よくないのかもしれませんね。
732デフォルトの名無しさん
2019/03/11(月) 23:14:01.28ID:CMHDEYzk
というか自分がお客さんの立場にたってみれば、「カレントディレクトリにライセンスファイル置いて使ってください」と言われたら「はいOKです」ですむ問題ですよね。
やはりちゃんとライセンスファイル提供して使ってもらうべきかと思ってきました。
733デフォルトの名無しさん
2019/03/11(月) 23:20:45.86ID:9rO3q8tQ
>>730
どう配布すんのかしらんけど
共有ライブラリと同じとこに置いて固めるなり、インストーラー書くなりすれば十分やろ
たいして報われん努力やと思うわ

それよりライブラリAは何がしたいんか気になるわ
意味あんのかそれ
734デフォルトの名無しさん
2019/03/11(月) 23:23:05.53ID:CMHDEYzk
>>733
ライブラリAはwebAPI叩くからその時にアクセス権限チェックでライセンスファイルを使うようです。
735デフォルトの名無しさん
2019/03/11(月) 23:36:41.67ID:9rO3q8tQ
>>732
ロードされてる共有ライブラリのパスはとれるはずやから、
そこにライセンスファイル置いておく手はある
736デフォルトの名無しさん
2019/03/12(火) 01:51:07.02ID:xlgLjh5J
変数と型についてなんだがメモリは2進数でデータを記録していて、それを何byteで区切って、どういう意味を持つか(正の整数のみとか)を型で決めてるんだよね?だとしたらポインタに型があるのはなぜ?どれもアドレスを示すんだからある意味int型でいいと思うんだけど
737はちみつ餃子 ◆8X2XSCHEME
2019/03/12(火) 02:03:10.03ID:tBEUjULM
>>736
そういう言語もあったよ。
でも、ポインタを経由しただけで型がわからなくなるんじゃ、
型システムが意味を成さないだろう。

元と違った型としてアクセスしようとしたときに、
型情報がなけりゃコンパイラが捕捉しようもない。

それはプログラマの責任で正しく扱うってのならそれでもいいし、
実際、 C/C++ はプログラマがやりたければポインタを整数に型変換することも出来るけど、
(言語仕様としてはほとんど保証はないが。)
人類は間違うのでな。

型が合わないエラーなんてたびたび出しちゃうもんだろ。
もし型がなければそれはスルーされてわけのわからない挙動をするプログラムになるんだぞ。
そういうのはもうやめようって話。
738デフォルトの名無しさん
2019/03/12(火) 02:06:26.71ID:i1gu3hXZ
>>736
ポインタに格納されるアドレス値は32bitとか64bitとかの整数でそれ自体は同じ型として扱えるとしても、そのポインタの指す先にある物の型が分からないと色々困るでしょ。
ポインタ型としてvoid*だけでプログラムを書こうとすればその必要性がわかるはず。
同じバイト表現だからといって同じ型で表さなければならない道理はない。用途や演算結果が異なるのだから別の型として扱うのはある意味自然なことだと思うよ。
739デフォルトの名無しさん
2019/03/12(火) 07:03:19.32ID:1t7NN+JI
>>736
参照はずし、つまり*演算子で「ポインタの指す内容」を取り出すときに
そのポインタがどんなデータを指すポインタか分からないと困るでしょ。
構造体を指すポインタで p->menber とかする場合も同様。

>>738 の「void*ポインタだけ使って書いてみる」ってのは、
ポインタに型のある有り難さを実感できる良い課題だね。
740デフォルトの名無しさん
2019/03/12(火) 07:35:06.24ID:nPeHxcg9
Cのポインタ型はK&Rのプログラミング言語Cに書いてある通り、単なるアドレスを保持する型じゃなくて配列の仲間なのよ。
例えば
char *cp =“abc”;

*(p+1)の様に書くと、ちゃんとcharサイズ分ずらしたアドレスを指してくれる。
その本には
(当時の)優れたプログラマたちがやってた事を言語仕様として取り込んだと、という様な事が書いてあったと思う。
ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。
741デフォルトの名無しさん
2019/03/12(火) 07:35:25.54ID:nPeHxcg9
Cのポインタ型はK&Rのプログラミング言語Cに書いてある通り、単なるアドレスを保持する型じゃなくて配列の仲間なのよ。
例えば
char *cp =“abc”;

*(p+1)の様に書くと、ちゃんとcharサイズ分ずらしたアドレスを指してくれる。
その本には
(当時の)優れたプログラマたちがやってた事を言語仕様として取り込んだと、という様な事が書いてあったと思う。
ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。
742デフォルトの名無しさん
2019/03/12(火) 07:37:59.58ID:nPeHxcg9
>>741
>>741
>*(p+1)の様に書くと、ちゃんとcharサイズ分ずらしたアドレスを指してくれる。

*(cp+1)の間違い
743デフォルトの名無しさん
2019/03/12(火) 08:23:28.38ID:xHFKV8QO
>>737
>>738
>>739
>>740
ヒューマンエラー防止
型のないポインタを宣言すると中身のbyte長が不明
ってことかありがとう
740のコードを見て疑問に思ったんだけど*cpは一つのアドレスしか記録できないから配列の先頭(文字a)のアドレスを記録するよね。このとき配列の長さが3だという情報はどこにあるの?(脱線するけどNULL終端も数えて長さ4?)
744デフォルトの名無しさん
2019/03/12(火) 08:29:27.03ID:i1gu3hXZ
>>743
ポインタが指す先にいくつ分の領域があるか(いくつ分を参照してよいか)は記録されてないから、プログラマが自分の責任で管理するしかないよ
745デフォルトの名無しさん
2019/03/12(火) 08:41:29.44ID:7SPfMi3X
>>743
直接長さを示す情報はどこにもないよ
だから、cの「文字列」は単なる文字の配列だけではなく、0終端が必要

>(脱線するけどNULL終端も数えて長さ4?)
その通り
(NULLはnullptrとしてのみ使ったほうがいいよ
混同してないならいいんだけどね)
746デフォルトの名無しさん
2019/03/12(火) 09:29:32.99ID:nPeHxcg9
>>740
>>741
>ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。

サイズって型のサイズでした、すみません。

配列長さは
sizeof(*cp) / sizeof(型)で取ってねって書いてあったよね?
747デフォルトの名無しさん
2019/03/12(火) 09:32:06.13ID:u0RxZCyH
\0終端が来るまで確保されていると想定して受け取り側は動作する
だから終端記号がないと色々まずい
(ので、バッファ長も指示する関数が後から増えた)
748デフォルトの名無しさん
2019/03/12(火) 09:32:15.05ID:xVickGeK
便乗質問でごめんやけど

delete [] p;
この場合deleteはどうやってサイズ調べてんの?
749デフォルトの名無しさん
2019/03/12(火) 09:33:32.91ID:i1gu3hXZ
>>746
char *cpで宣言してるならその計算じゃ配列サイズはとれないよ。
750デフォルトの名無しさん
2019/03/12(火) 09:33:42.86ID:u0RxZCyH
要素数の算出は
sizeof(配列) / sizeof(配列[0]) または sizeof(配列) / sizeof(*配列)
ではなかろうか?
751デフォルトの名無しさん
2019/03/12(火) 09:47:35.09ID:Nd0ou12Q
除算は遅いからなぁ
752デフォルトの名無しさん
2019/03/12(火) 10:18:57.28ID:u0RxZCyH
コンパイル時に確定する値だから
実行時には定数として埋まってるんでないの?
(ほんとんどの環境で インタープリターはしらんw
753デフォルトの名無しさん
2019/03/12(火) 10:22:41.05ID:Nd0ou12Q
sizeof(配列)は動的でしょう
754デフォルトの名無しさん
2019/03/12(火) 12:15:07.37ID:7lezZ5hH
sizeofは演算子だから動的じゃないかな
最適化で消し飛ぶ可能性はあるのかもしれんけど
755デフォルトの名無しさん
2019/03/12(火) 12:42:52.96ID:Gedrqwi7
>>748
実装依存だと思うけど、p[-1]とかに長さが書いてあったりする
756デフォルトの名無しさん
2019/03/12(火) 12:45:54.40ID:xHFKV8QO
アンカー長くなるから省略するけど
みなさんありがとう
757デフォルトの名無しさん
2019/03/12(火) 13:32:00.51ID:6Uu2j9Xc
インクリメントするときに困る
758752
2019/03/12(火) 14:52:24.67ID:u0RxZCyH
VLAのこと完全に忘れてた sizeof(配列) は動的だわ
759はちみつ餃子 ◆8X2XSCHEME
2019/03/12(火) 15:09:12.69ID:tBEUjULM
sizeof の結果は動的な判断が必要な場合 (いわゆる VLA) を除いて整数定数であることは保証される。

C++ には VLA は無いので sizeof が動的であるかどうかを心配する必要はないんだけど、
それは置いといて、 C++ で配列の大きさを知りたいときは std::extent の方がよくない?
760デフォルトの名無しさん
2019/03/12(火) 15:29:35.28ID:xWv5Y9zk
>>756

>>744-755
というアンカー表示方法も、知っておいてね。
761デフォルトの名無しさん
2019/03/12(火) 22:48:56.35ID:SU/8eF4+
昔はstd::extent持ち出したりしたが今はstd::sizeだな
762デフォルトの名無しさん
2019/03/12(火) 23:05:04.16ID:/eUnUFro
uint8_t *addrb =(uint8_t *)0x00F00000;
uint16_t *addrw =(uint16_t *)0x00F00000;
*addrb = 0x10;
*addrw = 0xF0F0;

0x00F00000番地に0x10と0xF0F0を書き込むコードらしいのですが、最初の2行がよく分かりません。アドレスが4バイトなのにポインタはそれより小さくて問題ないのでしょうか。右辺のキャストは何を行っているのでしょうか。
よろしくお願いします。
763デフォルトの名無しさん
2019/03/12(火) 23:29:55.31ID:RU0tEwI6
>>762
・整数だから昇格するよ
・整数即値をポインタ型に変換してるよ
ポイント先のデータは多分、バイト型だよ

マップドIO系のCPUではよく見るパターンだね
764デフォルトの名無しさん
2019/03/12(火) 23:37:26.58ID:y5WX6T5u
>ポインタはそれより小さくて問題ないのでしょうか。

*addrb = 0x10;
*addrw = 0xF0F0;
この文を見て上の疑問に到達したのかな?

ポインタは addrb や addrw で その変数の器の大きさはアドレスを格納できる大きさ

*addrb で アドレスにさされた先の内容を示す 内容の大きさはその型による

*addrb は uint8_t 型でおそらく1バイト (1オクテット)
*addrw は uint16_t 型でおそらく2バイト (2オクテット)
765デフォルトの名無しさん
2019/03/13(水) 18:31:26.55ID:yPp5BeL1
ありがとうございます。
理解できました。
そもそもアドレス自身のサイズがあるものと勘違いしてました。
766デフォルトの名無しさん
2019/03/14(木) 06:41:14.61ID:SGfhnH0M
アドレス自身にもサイズはあるけどね。
sizeof(*addrb) == たぶん 1 (8bit)
sizeof(*addrw) == たぶん 2 (16bit)
sizeof(addrb) ... 近頃のPCでは 4 (32bitアドレス) か 8 (64bitアドレス) かのう。
767デフォルトの名無しさん
2019/03/14(木) 12:20:30.31ID:Yw9IVRaM
メモリ消費についてききたい。
8byteのa,b,cっていう変数と、それを結合した24byteのdっていう変数をクラス内で扱いたいんだけど、素直にやると48byteメモリ消費だよね?
代わりに24byteのdと、8byte型のポインタ(4byte)3つ宣言したら36byteのメモリ消費で12byte/オブジェクトの節約になると思うんだけど、最適化したければ意識するべき?
あるいはコンパイラがその辺は上手にやってくれて最小限のメモリ消費になる?
768さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/03/14(木) 12:26:16.05ID:1+g2CCuw
>>767
ポインタ先をチェック・確保するのにヒープメモリーと計算コストが掛かる。
769デフォルトの名無しさん
2019/03/14(木) 13:52:59.75ID:M+miX7Aw
>>767
宣言次第ですね。
メモリ節約だとdを配列にしておくといいかなとおもいました。
770デフォルトの名無しさん
2019/03/14(木) 14:39:59.26ID:3EvgP48J
>>767
それ実体の24byteが別に要るだろ…
771デフォルトの名無しさん
2019/03/14(木) 14:43:45.46ID:q8OuUl64
下のソースをコンパイルしてコマンドプロンプト(cmd)で実行すると「鷗」の字が出力されません

int main(int ac, char **av){
setlocale(LC_ALL, "");
fwprintf(stdout, L"[%c]\n", 0x3042); // [あ] と表示される
fwprintf(stdout, L"[%c]\n", 0x9dd7); // [?] と表示される
return 0;
}

同じコマンドプロンプト(同じwindowsインスタンス上)で
python3 からだと(スクリプト経由でもIDEでもどちらも)
print(f'[{0x3042:c}]') # [あ]
print(f'[{0x9dd7:c}]') # [鷗]
表示されます

setlocale(LC_CTYPE, "en_US:utf8");
にしても同じでした

python3 からだと表示出来るということは
fwprintf に問題があるということでしょうか?
772デフォルトの名無しさん
2019/03/14(木) 14:57:23.81ID:tsxAqnNH
Windows は、Visual Studio だろ

TCHAR マクロで、sjis/Unicode を切り替える。
Windows用の環境を揃えないと、無理だろ
773デフォルトの名無しさん
2019/03/14(木) 15:10:14.13ID:q8OuUl64
UNICODE
_UNICODE
とかは定義してあります
それに[あ]の方は表示されてるので
TCHAR が char と誤認識とかめっちゃ的外れな指摘だと感じます
774デフォルトの名無しさん
2019/03/14(木) 15:25:54.72ID:s2YvJJWc
fwprintf
ワイド文字を書き込む場合、ファイルはバイナリー・モードでオープンするか、
o_ccsid または codepage パラメーターでオープンする必要があります。
これにより、ワイド文字に対して変換が発生しないことが保証されます。
775デフォルトの名無しさん
2019/03/14(木) 17:04:07.47ID:DMc/T5SW
>>767
もしかして windows で 24bitカラーを取り扱いたい話? union で楽する

#pragma pack(push,1)
typedef union {
BYTE e[3];
struct { BYTE B, G, R; };
} BPP24_t;
#pragma pack(pop)
776デフォルトの名無しさん
2019/03/14(木) 19:02:32.98ID:wP1B/x23
>>768-770 >>775
ありがとう説明不足だった
厳密にはL2フレームを実装したくて
DMAC6byte
SMAC6byte
TYPE2byte
とかを結合して送りたい。
んだが、結合用の変数を用意するとメモリ消費二倍な気がしていやだなと。
で、それぞれはポインタにして結合用の変数の0、6、8byteめを指定してやればいい気がして聞いてみた
777デフォルトの名無しさん
2019/03/14(木) 19:26:19.44ID:lcdumzgu
>>776
プロトコルスタックでそういうデザインはよくある
nicにわたすときのdmaもそんな感じ
しかしその数バイトの処理はこだわるところじゃない
778デフォルトの名無しさん
2019/03/14(木) 20:21:10.72ID:2vbDdJqi
規格で標準ライブラリ中のメソッドがconst指定されていない場合これをconst指定するのは規格違反ですか?

具体的にはuniform_int_distributionのconstなインスタンスを生成してoperator()(URNG& g)を呼び出すとMSVC(VS2017)のみ通り、gcc4.3.2とclang4.0ではコンパイルエラーになりました

N4140及びN4659を参照した限り、上記のオペレータはconst指定されていませんでした
779デフォルトの名無しさん
2019/03/14(木) 20:28:14.30ID:gIuDI0vP
>>776
フレームの組み立ては迷うことなくstructでいいと思うのですがどうでしょう。ちなみにpingではは素直にstructで組み立ててあります。
780デフォルトの名無しさん
2019/03/14(木) 20:30:26.12ID:V4l0GHvB
>>777
確かに数バイトなんだけどね
>>779
cppで書いててクラスのプライベート変数として持ってます
結合どうするかだけ悩ましい
781デフォルトの名無しさん
2019/03/14(木) 21:00:14.82ID:gIuDI0vP
>>780
ああ、なるほど。structでガワ作っておいて、ペイロード書き換えてバッファに溜めていくって感じでしかやった事しかないですけどケースバイケースなんでしょうね。
782デフォルトの名無しさん
2019/03/14(木) 21:58:48.11ID:VY0DZD81
コンソールがSJISだから無理
783デフォルトの名無しさん
2019/03/14(木) 23:31:25.66ID:u00Rfoqy
C++難しすぎねえか?
こんなの新機能を網羅してる人どんだけいるんだか・・・
784デフォルトの名無しさん
2019/03/14(木) 23:39:23.56ID:CLlwPgIu
奥義を究めると尊敬されます(カモ)
785はちみつ餃子 ◆8X2XSCHEME
2019/03/14(木) 23:47:20.81ID:mXS2OKIJ
>>783
別に網羅せんでも使えるところだけ使えば良い。
常に新しい機能を把握しておく必要はない。
使わない方が良い機能というのは有るので、駄目な部分を把握する方が大事だと思う。
(その結果として新しい機能に行きつくこともあるけど。)

新しい機能を使わないと回りくどくなるだけだが、
駄目な機能は致命傷になる (という可能性をコンパイル時にエラーに出来ない) こともあるので。

今の C++ で nullptr でなく NULL を使う理由は全然ない、みたいなのとか。
786デフォルトの名無しさん
2019/03/14(木) 23:49:54.51ID:Gk3KilXE
てかコンセプトが待ち遠しい
templateの黒魔術っぷりが大幅に改善されるよね
エラーメッセージが分かりやすくなるのが大きい
787はちみつ餃子 ◆8X2XSCHEME
2019/03/15(金) 00:08:50.55ID:q2a9nFaz
コンセプトとモジュールは C++er の悲願って感じだからな……。
今まで土壇場での延期を繰返した経緯を考えると次も本当に入るのか
疑わしい気はするけど。
788デフォルトの名無しさん
2019/03/15(金) 02:19:09.67ID:f+LcC8HT
配列のアドレスが表示できません。何が悪いのでしょうか。結果はからになります。
unsigned char a[100];
cout << hex << &a[5] << endl;
789デフォルトの名無しさん
2019/03/15(金) 02:52:40.51ID:nvk7uoI+
a+5
790さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/03/15(金) 04:49:34.55ID:CgPhXsZt
(void *)
791デフォルトの名無しさん
2019/03/15(金) 06:53:21.47ID:F3jqlZHF
>>788
&a[5] は「unsigned char を指すポインタ」なので
cout << では「'\0'で終端する文字列」として表示しようとするのよ。
なもんで >>790 の通り void* にキャストして、
具体的なデータを指さない「単なるアドレス」扱いしてくれと指示。
ちなみに >>789 は効果ないでしょ。

でも C++ の作法としては static_cast<void*>(&a[5]) と
長々しい名前付きキャストを使うべきなんじゃろか。
個人的には static_cast<const void*>(&a[5]) まで書きたいけど。

inline const void *to_voidptr(const void* p) {return p;}
てな具合に、字数を減らすための変換用の関数でも使うか。


…何か標準的で短い書き方があったりするのかしら。
792デフォルトの名無しさん
2019/03/15(金) 08:07:08.74ID:fLDhqMRG
文字はcharだけでsigned/unsignedは整数扱いするとかしてくれりゃよかったのにな。
793デフォルトの名無しさん
2019/03/15(金) 09:38:53.54ID:MV2geWC9
coutなんて使うのが悪い
printf()でおk
794デフォルトの名無しさん
2019/03/15(金) 10:50:58.56ID:nvk7uoI+
qDebugばっか使ってたからcoutの使い方なんて忘れてたわw
795デフォルトの名無しさん
2019/03/17(日) 06:21:33.06ID:Q6jWm6hE
そういえば「cout << &a[5] でアドレス値が表示されない」ってのは
char 系の配列やポインタの場合だけで起きる特殊例なのかな。

ユーザーが operator<<(ostream&, T*) の再定義をしない標準の状態で、
オブジェクトのアドレス値を送ったらアドレス値以外の何かが表示される型って
標準か有名どころのライブラリで、何か知ってる?
796デフォルトの名無しさん
2019/03/17(日) 12:02:02.30ID:ZVJiTVd1
operator<<(ostream&, T*) の再定義をしないライブラリで
オブジェクトのアドレス値を送ったらアドレス値以外の何かが表示される型を定義しているものは?

という質問に置き換えてみた
797デフォルトの名無しさん
2019/03/17(日) 13:17:40.49ID:4LIjOkKH
gccのiostreamのソース辿れば全部書いてあるよ。
798 ◆QZaw55cn4c
2019/03/17(日) 14:11:06.99ID:8PHb1ymW
>>797
ほう、どこに書いているのかわかってそう言っているのですね、それはすごいですね
799デフォルトの名無しさん
2019/03/17(日) 14:22:23.04ID:rD0zueCH
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/ostream
800はちみつ餃子 ◆8X2XSCHEME
2019/03/17(日) 14:50:03.46ID:aA4z/LNt
ライブラリのソースコードを辿っていくとビルトイン関数だったりして萎えることもあるので、
まずは仕様をちゃんと読もうな。
801795
2019/03/17(日) 15:05:24.52ID:Q6jWm6hE
>>799
ostream のヘッダ単独は意外に分量少なくて一通り見られたよ。
char系以外には...

operator<<(nullptr_t); // #if __cplusplus >= 201703L で条件コンパイル
operator<<(__streambuf_type* __sb);

があるみたい。本当にこれだけか確実ではないけど。

nullptr_t の方は「nullptr が送り込まれたら "nullptr" と表示しろ」だと思うが
__streambuf_type* __sb は分からん(定義は別ファイル、みたいだし)。
802デフォルトの名無しさん
2019/03/17(日) 15:17:33.67ID:9G7IgbIM
痛レータが呼ばれるんじゃね
803デフォルトの名無しさん
2019/03/17(日) 19:25:05.63ID:wQNvtjPu
現在アルゴリズムの勉強をしています
ソートアルゴリズムで有名な基本挿入法で与えた5つの整数を小さい順に並べるプログラムがうまく動きません
基本選択法、基本交換法(バブルソート)は書けるのですが…
ソートアルゴリズム、アルゴリズムそのものは図で正しく書けるとは思うのですが、コードに落とし込むのがうまくいきません
書いたコードは稚拙ですが以下のものです おかしな点を教えてくだされば幸いです

#include<stdio.h>
//基本挿入法
int main(void){
int temp=0,j,i;
int ary[5]={9,6,1,5,2};
for(i=1;i<=4;i++){
temp=ary[i];
for(j=i-1;j>=0;j--){
if(ary[j]>ary[i]){
puts("aaa");
ary[j+1]=ary[j];
}else{
puts("jais");
j--;
break;
}
}
j++;
ary[j]=temp;
printf("a[%d]は%d a[%d]は%d¥n",j,ary[j],i,ary[i]);
}
for(i=0;i<=4;i++){
printf("%d¥n",ary[i]);
}
return 0;
}
804デフォルトの名無しさん
2019/03/17(日) 19:26:08.56ID:wQNvtjPu
puts(“aaa”)やputs(“jais”)はprintf(“a[%d]は%d 〜”)の3つは、プリントデバグのために書いたものです…消し忘れました
すみません
805 ◆QZaw55cn4c
2019/03/17(日) 21:48:00.62ID:8PHb1ymW
>>803
https://ideone.com/gIcJzp
納得がいくまで printf() を仕掛けるのはいいことだと思います。
806デフォルトの名無しさん
2019/04/01(月) 21:33:07.89ID:iIi946R+
class C
{
public:
 void f(){}
};

C* pc= new C;

pc.f();

コンパイルエラーが出るってことは、コンパイラはpcがポインタであることを
知ってる

なのになぜ、->と記述させるの?
807デフォルトの名無しさん
2019/04/01(月) 21:44:58.77ID:32G7a9z6
std::invoke使え
808デフォルトの名無しさん
2019/04/01(月) 21:52:40.40ID:7SOsx0TI
ClassAのメンバにClassBがあってコンストラクタかsetterで外部から与えたいんだけど、
ClassBが大きくてできるだけコピーしたくない場合はどうするのがベストですか?
コピーコンストラクタが呼ばれた場合に初めてコピーされるようにしたいです
unique_ptr<ClassB>型にするとスコープを外れるときに落ちました
Class ClassA{
public:
 ClassA(ClassB &b) { m_b.reset(&b); };
 ClassA(const ClassA a) : m_b(new ClassB(a.m_b)){};
・・・
private:
unique_ptr<ClassB> m_b;

main(){
・・・
{
ClassB b;
ClassA a(b);
} // ここで落ちる
・・・
}
809デフォルトの名無しさん
2019/04/01(月) 22:09:12.99ID:oZ4uWA1m
> m_b.reset(&b);

ヒープオブジェクトじゃないものをunique_ptrに突っ込んだらダメ。
カスタムデリータ用意するなら別だけど。
810デフォルトの名無しさん
2019/04/01(月) 22:22:19.12ID:7SOsx0TI
>>809
この場合にスマートポインタは違うようですね
メンバは実体にして渡すときにムーブすればコピーは発生しないという認識は正しいですか?
811デフォルトの名無しさん
2019/04/01(月) 22:30:43.95ID:0T+gZcjq
ClassAはClassBそのものを所有するのか
それとも外部のClassBへの参照を保持するだけなのか?
そのものを所有するなら外部から与えるのではなく
ClassAの中でClassBを構築するのも検討してみれば

// ClassAのコンストラクタ
// 11以降ならムーブとかも
ClassA(ClassBの構築に使う引数) : m_b(前記の引数) {}
812さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/04/01(月) 22:30:51.94ID:OIWsA4Np
>>810
スマホ使う前にオブジェクトの所有権を明確にせよ。
813デフォルトの名無しさん
2019/04/01(月) 22:51:52.32ID:7SOsx0TI
ClassBの構築に使う引数も大きいためコピーを避けたいところです
基本的には参照を保持するだけにしたいところですが、ClassBがスコープを外れて破棄される場面ではClassAに実体をコピーできるようにしたいです
814デフォルトの名無しさん
2019/04/01(月) 22:59:26.12ID:oZ4uWA1m
なんでそこでわざわざコピーしたいの?
最初からnewでヒープに確保すりゃコピー必要ないのに。
815デフォルトの名無しさん
2019/04/01(月) 23:35:23.75ID:32G7a9z6
AにB*とunique_ptr<B>を作って
AがBを使うときは常にB*経由でアクセス
Bを所有させたいときだけunique_ptrにヒープ管理だけさせる
816デフォルトの名無しさん
2019/04/01(月) 23:37:44.29ID:7SOsx0TI
2つ持つという発想はありませんでした
試してみます
817デフォルトの名無しさん
2019/04/04(木) 17:56:45.10ID:4dlKQxP/
昔、openGLを使ってC++出遊んでたんですけど、また最近触りたくなりました
皆さんC++で何作ってますか?
個人開発規模でお願いします
818 ◆QZaw55cn4c
2019/04/04(木) 19:24:27.16ID:+9gozOKQ
>>817
昔作ったツールがひょんなことで役立っています…
あるディレクトリを別のドライブにコピーするだけのことなんですが、いや、まあ、Windows はなかなか御しがたく、path 文字列長が一定範囲を超過すると止まってしまう変てこなコマンドラインツールが未だに現役だったりするのです…
http://2chb.net/r/tech/1434079972/53
819デフォルトの名無しさん
2019/04/04(木) 20:14:39.57ID:vPLFSwkc
>>818
システムコールってやつですか?
オブジェクト指向と並列処理を勉強したいと思ってるのでQtもいいかなと思ってます
どうでしょうか?
820デフォルトの名無しさん
2019/04/04(木) 20:22:00.68ID:USs/shwk
Qtのデメリットはライセンスだけだから個人でやる分には良い選択
821デフォルトの名無しさん
2019/04/12(金) 11:39:32.60ID:K5RuTlhq
オブジェクト指向を学ぶのにRubyあたりを使うのは
どういうデメリットが?

Pythonは「バージョン違いによる仕様変更」に
入門書レベルのコードが影響されるのであれば「良い選択とは言えない」ことになりそーだけど
822デフォルトの名無しさん
2019/04/12(金) 12:37:54.42ID:oOSdboOz
>>821
せっかく新しい言語を学ぶなら、近い将来役に立たなくなる言語より他の役に立つ言語を選んだ方が合理的だと思う
823デフォルトの名無しさん
2019/04/12(金) 13:47:38.12ID:+CDO09PL
pythonて破壊的な変更があったのは20年近く前なのに、未だに古い仕様で書かれた入門書が出回っているなら、オブジェクト指向学習に最適化どうかとは別に、問題な気が。
824デフォルトの名無しさん
2019/04/12(金) 14:05:10.56ID:VR9mZ4dF
rubyは古い言語
825デフォルトの名無しさん
2019/04/12(金) 14:50:54.53ID:K5RuTlhq
Qt5.12.2はLGPLライセンスでインストールしとけばok?
他のライセンスは初見
826デフォルトの名無しさん
2019/04/12(金) 14:56:36.82ID:rTBxcnf6
追加パッケージを使わないのならLGPLでおk
827デフォルトの名無しさん
2019/04/12(金) 15:06:17.42ID:K5RuTlhq
"Qt Creator 4.8.2 CDB Debugg..." と "MinGW 7.3.0" 64-bit" 入れたら Hello World の窓が表示できるようになったけど、
練習ならそんなかんじでok?
828デフォルトの名無しさん
2019/04/12(金) 15:28:10.39ID:VR9mZ4dF
しばらく正常に動いてるように観えてても
あとで問題が顕在化して困るパターン
829デフォルトの名無しさん
2019/04/12(金) 15:38:10.46ID:K5RuTlhq
どのような問題が発生しうるのでしょう?
もっぱら個人用の練習用とする予定
830デフォルトの名無しさん
2019/04/12(金) 15:54:14.03ID:rTBxcnf6
Qt始めるならとりあえずこのシリーズ読もう
https://blog.qt.io/jp/category/getting-started-with-qt/
831デフォルトの名無しさん
2019/04/12(金) 17:06:12.27ID:K5RuTlhq
私の場合は、インストール〜 "Hello World" については
https://qiita.com/yasumodev/items/399ec89b7205e3c0bab1
https://qiita.com/yasumodev/items/104446261114e9a7352c
を参考にしました。続きについては、御提示のリンク先を試してみますね
832デフォルトの名無しさん
2019/04/13(土) 12:09:38.16ID:r7SUy1hn
ID:K5RuTlhq です

>>826
https://www3.sra.co.jp/qt/licence/index.html を見て『グラフ作成パッケージQt Charts入れておいた方が便利かも』と思い
いったんアンインストールしてみたのですが、

[Qt 5.12.2 のセットアップ] の画面で

Qt Charts
Qt Data Visualization
Qt purchasing
Qt Virtual Keyboard
Qt WebEngine
Qt Network Authrozation
Qt WebGL Streming Plugin

にチェックを入れたとしても LGPL が選べるようです
サードパーティーの追加パッケージで問題となりうる…?
833デフォルトの名無しさん
2019/04/13(土) 12:11:50.81ID:r7SUy1hn
>>828
具体的に「どのような問題が顕在化」し「どのように困る」ことになるのでしょうか
クラスとメンバ関数のみの指摘でも構わないので、示していただけませんか?

また、その問題を回避する方法は何なのでしょうか?
834デフォルトの名無しさん
2019/04/13(土) 13:57:08.11ID:TvmgiEsJ
>>832
LGPLを選べたとしてもQt Chartsを使っていればGPLv3
GPLと非互換のライセンスのライブラリを使うなら問題になる
だがそもそも練習段階ならライセンスなど気にせずどんどん書け
835デフォルトの名無しさん
2019/04/13(土) 20:47:38.59ID:r7SUy1hn
昔は知らんが5.12.1ならQt ChartsはLGPLで許諾されるよ?
836デフォルトの名無しさん
2019/04/13(土) 20:48:56.62ID:r7SUy1hn
5.12.2だった
837デフォルトの名無しさん
2019/04/13(土) 23:19:58.42ID:TvmgiEsJ
はっきりとGPLv3と書かれてる
https://www.qt.io/download
Open Source->Additional features->Data visualization の?を参照
838デフォルトの名無しさん
2019/04/14(日) 00:04:08.34ID:El+pt49w
条項はこれから確認する

>>837
インストールの操作手順からしたら
不意打ちも良いとこだなあ

Qt Charts をチェックした状態で[次へ(N)]ボタンを押したときに
「修正を受けたGPLv3」以外のラジオボタンが無効になってないと
UIとしておかしくねえか

あと「100%GPLv3と一致で修正条項なし」なん?
そうだとしたら、なおさらおかしい
839デフォルトの名無しさん
2019/04/14(日) 00:07:28.45ID:El+pt49w
そういえば

LICENSE

などと大文字ファイル名にしないと効力が発生しないとする「糞判例がある」と聞いたことがあるけど、日本の裁判所?
ググっただけでは見つからなかった
最高裁判例なら検索結果の判決文をPDFで読める訳だがなあ

そのようなケースを敷衍すると、帰結として、Qt chartsはLGPLとなりうる
GPLv3 については逐条解説もあるから、そっちの内容も確認してみてちょ(あくまで「解説」)
840デフォルトの名無しさん
2019/04/14(日) 00:54:57.43ID:El+pt49w
純粋に「Qt のライセンス」の話なのでスレチ?



copyright notice の表示方法の適切性について、GPLv3って基本的には明確には記載してなくね

ただし今回のケースだと、「インストーラが LGPL によるライセンスを表示した状態」で先に進める以上
0. Definitions. の第8パラグラフ(1) 反対解釈により、「GPLv3は適用されない」と読む余地がある
実際、GPLv3 につき "displays an appropriate copyright notice" してないもの
841デフォルトの名無しさん
2019/04/14(日) 00:56:08.63ID:El+pt49w
書き込み制限受けたので続き。多分コレで終わり。

あのインストーラが表示している著作権表示は明確に LGPL だから適用条件満たしてないと解釈する余地がある、と
…わたしはただの学習者だから大騒ぎすることでもねえんだがねえ…
842デフォルトの名無しさん
2019/04/15(月) 21:39:53.28ID:L7qqGgg7
int& a;
int &a;
どっちにすべきでしょうか
843デフォルトの名無しさん
2019/04/15(月) 21:52:39.66ID:zTAvdEPs
好きな方で書け
844デフォルトの名無しさん
2019/04/15(月) 21:56:00.71ID:dimPC8Ge
「すべき」というのは規格表での『shall』のことですか?
それとももっと別の意図がありますか?
845デフォルトの名無しさん
2019/04/15(月) 22:02:16.06ID:1nT5zSFt
int & a;
int * b;
846はちみつ餃子 ◆8X2XSCHEME
2019/04/15(月) 23:26:36.86ID:94OTneyx
std::add_lvalue_reference<int>::type a;
847デフォルトの名無しさん
2019/04/16(火) 07:00:13.97ID:xjyBK9QH
そんなこと気にする前に参照の変数を未初期化で使おうとするなよ。
みたいなツッコミを入れたくなるけど、コンパイル時にエラーが出る
間違いは必ず見落としなく直せるから実際は大きな問題じゃないよね。

「ポインタ宣言の * を型名に寄せるか変数名に寄せるか」と同じで
一貫した書き方をするかぎり、どっちでも構わんでしょ。
個人的には「変数名に寄せる」派だけど。
848デフォルトの名無しさん
2019/04/16(火) 08:18:02.67ID:hl7GJiol
int& a, &b;
int &a, &b;
自分も後者の方がいい
849デフォルトの名無しさん
2019/04/16(火) 08:20:49.86ID:GDkTCt4E
>>847
> 未初期化で使

コレの解釈は揺れそうだが、たとえば

int *i;

とか、
int *i;
int j;
i = &j;

とかいうかんじのことかしらん
850デフォルトの名無しさん
2019/04/16(火) 11:22:25.45ID:vZl8q5zB
>>848
+1
ほんそれ
851デフォルトの名無しさん
2019/04/16(火) 12:24:17.44ID:uqcfe1Iw
わからない事をここで質問しようとレスを書いてる最中に「わかった!」
ってなることが多々あるんだが、この謎の現象は何なんだ・・・
852デフォルトの名無しさん
2019/04/16(火) 12:28:15.56ID:4RjIOnLA
自己解決パターン

質問するときに頭の中が整理される→解決
質問するために再現する必要最小限のコードを書く→問題の切り分けが出来る→解決

いろいろあるが
853はちみつ餃子 ◆8X2XSCHEME
2019/04/16(火) 13:21:34.50ID:XnNfa6Fy
>>851
何が駄目なのかわかれば解決法は自明であることが多い。
逆に言えば、解決法がわからないときは問題が何であるかわかってなかったりするんだよ。
だから、きちんとした形に質問をまとめれたなら、それはもうほとんど解答でもあるんだ。

この手法を利用してバグを取り除くやり方としてラバーダックデバッギングというものが知られている。
854デフォルトの名無しさん
2019/04/16(火) 13:51:09.84ID:WfxisTJA
C++erならRust学べって風潮嫌い
なんで学習コストがある言語を2つも学ばないといけないのかと思うし
855847
2019/04/16(火) 17:31:42.92ID:xjyBK9QH
>>849
あんまり大それた意見とではなくて
void func()
{
 int &a;
...
}
と宣言したら、参照先不明の &a を作ろうとしてるから
必ずコンパイルエラーになるじゃろ、程度の指摘。

…ただ、この投稿を書こうとして気がついたんだけど、
class samp {
 int &a;
...
};
てな具合に、クラスのメンバとしての宣言ならエラーにならないね。
ちゃんとコンストラクタで a に参照先を与えるなら許される。


要するに >>847 の前半部分は間違ってた、ということ。
正しい場合もあるけど、常に正しいわけじゃない。
856デフォルトの名無しさん
2019/04/16(火) 17:55:46.56ID:LqBdGBd1
その場合でもコンストラクタで初期化してなかったらエラー出るんだから
説明自体は間違ってない
857デフォルトの名無しさん
2019/04/16(火) 21:38:13.69ID:5Rly8M3u
>>853
テディベアをおいておくというエピソードなら有名だね
858デフォルトの名無しさん
2019/04/16(火) 22:14:36.94ID:dFuxCqAG
>>854
難しいことも違った方向から見るとわかりやすくなることもある。
859デフォルトの名無しさん
2019/04/19(金) 11:24:45.99ID:qKKG75KJ
質問です。
cinの戻り値のistream&がなんでif(cin)みたいに真偽判定に使えるのかが発端です。
https://stackoverflow.com/questions/8117566/why-istream-object-can-be-used-as-a-bool-expression
こことか見たんですけど、
1.istreamはbasic_iosを継承してて、
2.basic_iosで型変換演算子explicit operator bool() const;が定義されてる
ってとこまでは理解しました

ここからが質問なんですけどこの型変換ってのは勝手に行われるもんなんですかね
if(something)って書いたらif(bool(something))っていつもやってるんでしょうか
860デフォルトの名無しさん
2019/04/19(金) 11:40:22.57ID:ymX8VCBl
intで参照したらEOF
861デフォルトの名無しさん
2019/04/19(金) 12:05:08.07ID:r9r2BfdP
型変換以前に0やnullポインタを評価するとfalse、0以外の値はtrueと評価されると決まっているからだろ。
あと暗黙の型変換はよく起こる。
862デフォルトの名無しさん
2019/04/19(金) 12:08:35.86ID:lgg24wim
if 文の条件判定部は bool 型を要求してる前提で解釈,翻訳してるんじゃない
863はちみつ餃子 ◆8X2XSCHEME
2019/04/19(金) 12:13:29.89ID:mypEidUJ
>>859
yes.
条件部はブールを要求し、もしブールでない場合は常に型変換する。
864デフォルトの名無しさん
2019/04/20(土) 09:49:03.76ID:9bTTnEnG
前橋和弥さんのC言語ポインタ完全制覇という本で、
PCの環境(CPUの種類など)によってデータのメモリ上の配置は異なる
(構造体のパディングをはじめ、ただの単体のintでさえバイトオーダーが異なる(ワークステーションではビッグエンディアン採用だったりする))
ので、メモリの内容をバイナリでディスク上のファイルに出力したデータは別環境で読み込んで使おうと思ってはいけない
というような事が書いてありましたが、この話はWindows以外の環境や古い環境を前提とした話なのでしょうか?
同書にWindowsではBMPファイルをfwriteでファイルへダンプしていていかにもWindowsらしいとも書いてあるので、
Windows環境ならゲームのセーブデータとしてクラスをまるごとfwriteでバイナリ出力したファイルを別PCでロードしても問題ないのでしょうか?
(Xeonとかワークステーションマザーとか関係なしに、IntelCPU&Windowsの環境ならばリトルエンディアンで統一されている?)
(Macではビッグエンディアンになるが、Windows環境のみ対応のゲームを作る上では無視してよい?)
という認識は間違っているでしょうか?
パディングの違いなどもWindowsやVisualStudioが自動で良きに計らってくれるのならありがたいのですが…
865デフォルトの名無しさん
2019/04/20(土) 09:54:32.44ID:gSzU4BUh
windows間だから「別環境」ではなく「同じ環境」
だからwindowsでも同じ
そのbmpデータをmacに持って行っても使えない

なので磁気コアをダンプして永続化したようなデータは、他の全ての環境で使えない
60年代くらいから知られている
866デフォルトの名無しさん
2019/04/20(土) 12:00:13.06ID:9bTTnEnG
>>865
Windows環境であれば、別PC(別ハード)でも同環境とみなして良いのですね

>>WindowsではBMPファイルをfwriteでファイルへダンプしていていかにもWindowsらしいとも書いてある
読み直したら、違ってましたm(_ _)m
可変長構造体の節で、
WindowsではBMPをfwriteなどで可変長構造体まるごとダンプしていて、
BMPのような他の環境にもっていく可能性が高いファイルを構造体まるごとダンプしているのがWindowsらしい
というような内容でした

Windows級の一流プログラマーでも構造体まるごと出力を使っているのであれば、
ゲームのセーブデータで構造体やクラスをまるごとバイナリ出力しても問題ないととらえてよいのかな?
867デフォルトの名無しさん
2019/04/20(土) 12:30:10.75ID:4KhiFNHT
>>866
bmpファイルには仕様があるので「Windowsのプログラマがどうたら」なんぞ関係無く仕様に従って読み書きすべし
(現実には仕様に従わない入出力をやらかすアプリ毎に対処することはあるが)

自分で定義した構造体でも外部に公開するなら仕様を決めそれに準ずるべし
公開しないならそれこそ構造体丸ごとダンプなり好きにすれば良い
実際にそういう実装は珍しいものじゃない
どうせ環境の変化で困るとしてもそれは自分だけだからね
868デフォルトの名無しさん
2019/04/20(土) 12:41:44.36ID:YI/oz/6Z
>>864
今でもそうだよ
書いたコードがたまたま正常っぽく動くからと言って
仕様にない動作を期待するコードは糞
869デフォルトの名無しさん
2019/04/20(土) 13:30:16.46ID:9bTTnEnG
つまり、後で困りたくなかったら、フォーマット(読み書きするサイズと順番?)を決めて
構造体のメンバ変数ひとつひとつ読み書きしていかないとだめなのか
…めんどくさいなー
870デフォルトの名無しさん
2019/04/20(土) 13:36:22.54ID:VX0Nm4MT
異なる環境で扱う可能性のあるファイルならフォーマットを決めるのは当然だが
メンバ毎にアクセスしなければならないかどうかは処理系によるだろう。
仕様さえ合えば構造体で読み書きしてもいいわけで。
871デフォルトの名無しさん
2019/04/20(土) 13:50:12.18ID:bN8wmmjE
構造体まるごと fread/fwrite した後に
環境に応じて必要な場所だけLE/BE の変換をかける
htons とか htonl とか使う
872デフォルトの名無しさん
2019/04/20(土) 14:02:21.45ID:lwUZZddo
どういう読まれ方をするか分からない時はXML型式のテキストファイルにしてしまう
873デフォルトの名無しさん
2019/04/20(土) 14:59:40.99ID:9bTTnEnG
>>871
有能!
と思って調べたら、ホスト トゥー ネット(ホストのバイト順(リトルエンディアン)からネットワークのバイト順(ビッグエンディアン)への変換)ですか。
バイトオーダーはこれで問題なさそうですね。
でも、まだです!まだですよー回答者様!
次はCPUによってアライメントの行い方(パディングの量)が違う問題についてです!
fread/fwriteで構造体まるごとバイナリ読み書きする時のパディング値が別PCで異なる場合に良い対処法を教えて下さいませ!

ないなら諦めて
>>872さん
のオススメのXMLを勉強します!
874デフォルトの名無しさん
2019/04/20(土) 15:15:30.02ID:n+3CNjUJ
自分では使ったことないけど、BoostのSerializationは?
875はちみつ餃子 ◆8X2XSCHEME
2019/04/20(土) 16:21:19.89ID:7hm/FBJ7
パーサコンビネータはバイナリファイルに使ってもいいんだよ。
あとは protobuf とかのジェネレータ系のツールもありかな。
876デフォルトの名無しさん
2019/04/20(土) 18:28:05.65ID:wS9Za22Y
VC++用に使ってるマシンのCPUがivy bridgeのi5の3570なんだけど、
そのマシンでは8の倍数バイトを境界としてパディングが入ってるかんじなんだけど、
Core2Duo世代のCPUだとどうなんだろう?
4の倍数バイトを境界とする様な古いCPUがネットバースト世代以前とかの相当古い環境だとしたら、もう動作対象環境から外しても良い気がしてきた
そうだとしたら、クラスまるごとバイナリ読み書きでよいのかな
877デフォルトの名無しさん
2019/04/20(土) 18:51:11.02ID:IzYZbHJM
>>876
E8400の機があるから調べてみよっか?
何で検索したら調べ方出てくるか教えてくれたらやってみるよ
878デフォルトの名無しさん
2019/04/20(土) 19:22:01.02ID:wS9Za22Y
>>877
ありがとう
これでどうかな?
//-------------------------------------------------
#include <stdio.h>
#include <conio.h>

class ClassName
{
public:
int int_1;
double double_1;
char char_1;
double double_2;
};

int main(void)
{
ClassName class_obj;
printf("クラスインスタンスのサイズ:%d\n",sizeof(class_obj));
printf("int_1のアドレス:%p\n",&class_obj.int_1);
printf("double_1のアドレス:%p\n",&class_obj.double_1);
printf("char_1のアドレス:%p\n",&class_obj.char_1);
printf("double_2のアドレス:%p\n",&class_obj.double_2);
_getch();
return 0;
}
//-------------------------------------------------
クラスインスタンスのサイズが24なら4の倍数バイト、32なら8の倍数バイトの境界になってると思う
(8の倍数バイトの境界なら、各メンバのアドレス(16進数表示)が全部8違いになってるはず)
879デフォルトの名無しさん
2019/04/20(土) 20:52:42.24ID:IzYZbHJM
>>878
ソースありがとう

クラスインスタンスのサイズ:32
int_1のアドレス:0036F7A0
double_1のアドレス:0036F7A8
char_1のアドレス:0036F7B0
double_2のアドレス:0036F7B8

これで情報足りるかな?
【初心者歓迎】C/C++室 Ver.104【環境依存OK】 	->画像>3枚
880デフォルトの名無しさん
2019/04/20(土) 21:11:23.94ID:wS9Za22Y
>>879
どうもありがdd
Core2Duoで8バイト境界になってるなら、もう4バイト境界の環境の事は無視しても大丈夫なのかもね
思ったんだけど、もしかしたら、32bit(4バイト)のみ対応のCPUと32bit/64bit(8バイト)両対応のCPUの違いなのかな?
違うかな?そんなに単純な話ではないか・・・
881デフォルトの名無しさん
2019/04/20(土) 21:42:31.24ID:QAu79rb4
https://docs.microsoft.com/ja-jp/cpp/build/reference/zp-struct-member-alignment
https://docs.microsoft.com/ja-jp/cpp/preprocessor/pack

だいたい sizeof(class_obj) がコンパイル時定数なことくらいC++やってりゃわかるだろ・・・
882デフォルトの名無しさん
2019/04/21(日) 00:19:13.52ID:WKly27nG
本質じゃないがxmlじゃなくてjsonがオススメ
もっと突っ込むならyamlがオススメ
883はちみつ餃子 ◆8X2XSCHEME
2019/04/21(日) 01:03:10.69ID:v5pFgDlL
YAML は人間が読むこともあるなら可読性とのバランスで選ぶことはあるかもしれんが、
機械可読であればよいような場面で選択する理由は無いんじゃないかな。

既存のライブラリを使えばどれでも手間は大差ないとは思うけど、
バイナリ表現だと MessagePack とか Bencode とかいった選択肢もあるし、
どうして色々なフォーマットが登場したのかというとなんだかんだで「場合による」としか言い様がないからなんで、
まあ主要なやつを一通り特徴を把握しといた方が良いよね。
884デフォルトの名無しさん
2019/04/21(日) 01:14:51.26ID:VOTCwJrR
yamlって何に使うの?
885デフォルトの名無しさん
2019/04/21(日) 03:00:37.96ID:dJmpMhpq
yamlよりはjsonかなぁ
886デフォルトの名無しさん
2019/04/21(日) 08:42:04.15ID:nzBarAq0
何にじゃねえな
yamlはperl
jsonはjavascript
時代の流れでjsonが優勢になった
出来ることや表現力はあんまり変わらない
887デフォルトの名無しさん
2019/04/21(日) 09:55:35.58ID:0mpGXc/m
yamlは最近dockerとかkubanetessとかansibleとかインフラ/環境系ツールのせいでやたら触る事が多い
888デフォルトの名無しさん
2019/04/21(日) 11:02:24.76ID:rR+Epd4r
もう16バイト境界なんてのも出てきてるのか
VisualStudioのプロジェクトのプロパティのC/C++のコード生成で
構造体メンバのアライメントを8にするか、
コード上で #pragma pack(8) とすれば
強制的に8バイト境界にできるみたいだけど、
マシンに最適な既定値のアライメントから変更する事で速度が遅くなったり
何か不具合が生じたりするものかな?
889デフォルトの名無しさん
2019/04/21(日) 11:17:14.94ID:iFY66t+o
既定のアライメントというのはふつう、メンバの単純型のサイズに合わせられるはず。
16byteの単純型を使うのでなければ16byte境界にする必要もない。
890デフォルトの名無しさん
2019/04/21(日) 11:17:32.77ID:rR+Epd4r
問題ないなら旧環境との互換性重視で4バイト境界にするのもありかな?
891デフォルトの名無しさん
2019/04/21(日) 11:52:51.02ID:iFY66t+o
互換性重視なら、各メンバを自然なアライメントに配置して手でpaddingを挿入して#pragma pack(1)。

>マシンに最適な既定値のアライメント

少なくともx86の場合、それが4とか8とか決まっているわけじゃない。
892 ◆QZaw55cn4c
2019/04/21(日) 12:27:57.49ID:MozNv5pX
>>891
#pragma pack なんて MS の方言でしょう?そんなのを使いながら「互換性重視」とか矛盾してませんか?
893デフォルトの名無しさん
2019/04/21(日) 12:45:11.23ID:iFY66t+o
そこはポイントじゃないから勝手に読み替えて。
894デフォルトの名無しさん
2019/04/21(日) 15:46:14.10ID:ECfCuHga
C言語ならともかくC++なのに例外を避けようとする人ってあたまおかしいのかな
標準ライブラリもその他のライブラリも例外を投げる前提なのに頑なに例外を避けようとするってそうとうに筋が悪い非合理的な選択肢だよね
895 ◆QZaw55cn4c
2019/04/21(日) 15:56:42.10ID:MozNv5pX
>>894
例外の実装方法の一つ sjlj に抵抗を感じるのなら、それは感覚として正常だと思います
C で sjlj を使用しての例外実装コードが書けますか?書けない場合は >>894 は単なる馬鹿か宗教者だと思います
896デフォルトの名無しさん
2019/04/21(日) 16:03:56.39ID:dJmpMhpq
>>895
何が言いたいのかわからん
sjljが重いのが嫌なのか
あの仕組み自体が気色悪くて嫌なのか

でも今時sjljで例外実装なんてしていないよね
わざわざ選ばない限り
897デフォルトの名無しさん
2019/04/21(日) 16:08:40.35ID:ECfCuHga
SJLJの話じゃないです
例外を避けてオレオレエラーコードを返す迷惑な人達の話です
898デフォルトの名無しさん
2019/04/21(日) 17:16:18.32ID:ZtsKSKQ7
例外もまともにキャッチされないので
どっちもクソです
899デフォルトの名無しさん
2019/04/21(日) 17:17:33.88ID:ym7YjNtF
エラーの発生頻度によるのでは?
throwは高コストだから発生頻度が高い場合は戻り値で処理した方がいい
900デフォルトの名無しさん
2019/04/21(日) 17:22:58.19ID:nzBarAq0
システムによる
航空機の運航システムでのエラー処理はどうすりゃいいわけさ
901デフォルトの名無しさん
2019/04/21(日) 17:53:59.57ID:ECfCuHga
>>899
入力の検証、パース以外で頻繁に発生するエラーって例えば何でしょうか?
そもそもthrowはコストそんなに高くないのでは?
エラー情報(コード、メッセージ、下位エラー情報、スタックトレース等)を戻りでコピーしまくるほうが高く付くと思います
902 ◆QZaw55cn4c
2019/04/21(日) 18:22:36.24ID:MozNv5pX
>>896
自分で実装できないものを、その仕組みもわからないのにホイホイ使ってしまってもいいのでしょうか?
他の言語ならともかく、C/C++er がそういうところに無自覚なのは大いに問題があるのでは?
そんなことでデバッグできますか?
903 ◆QZaw55cn4c
2019/04/21(日) 18:23:33.96ID:MozNv5pX
>>896
>今時sjljで例外実装なんてしていないよね
じゃあ win32api の構造化例外sehでも許容しますよ
904デフォルトの名無しさん
2019/04/21(日) 18:28:33.16ID:ECfCuHga
>>902
内部構造がわからないものでもAPIドキュメントを読んで使えるようになるのが正しいプログラマでは?
905デフォルトの名無しさん
2019/04/21(日) 18:34:32.58ID:dJmpMhpq
まあそういう賢いプログラマなら当然の様にSpectreの可能性に気づいて対策していたんだろうね。
きっと
906 ◆QZaw55cn4c
2019/04/21(日) 18:40:14.32ID:MozNv5pX
>>904
他の言語ならそうですね
でもC/C++ において、そんな態度でいいのですか?
907デフォルトの名無しさん
2019/04/21(日) 18:41:53.50ID:dJmpMhpq
つまりすべてのAPIをスクラッチでかける人間以外使うなと言うことなんだな
908デフォルトの名無しさん
2019/04/21(日) 18:42:38.56ID:ECfCuHga
>>906
いいですよ
DRYを守ってください
909デフォルトの名無しさん
2019/04/21(日) 18:44:31.12ID:dJmpMhpq
大体sj,ljが肝なのだから、そこ丸投げしたら同じようなもの
910デフォルトの名無しさん
2019/04/21(日) 18:51:39.35ID:ECfCuHga
内部構造まで把握してなきゃ使っちゃだめなんていう烏滸がましい思想を持ってると
実装に強い影響を受けるエラーコード返し方式を選んでしまうのだろうな
911デフォルトの名無しさん
2019/04/21(日) 18:52:38.66ID:idC8t1Zb
なんかライブラリ使ってるだけの輩がイキリ出しとるなw
確かにライブラリによってはそのライブラリの単体テストなり書いといた方が良いこともある。
912はちみつ餃子 ◆8X2XSCHEME
2019/04/21(日) 18:57:06.46ID:v5pFgDlL
静的例外の提案がある。

使える例外オブジェクトに制限があるし、
静的例外を投げる可能性がある関数は型として明記しないといけないけれど、
見かけ上は例外の構文を使いつつ
実質的に返却値と合わせて例外オブジェクトを受け渡すような方法をとれる。

https://cpplover.blogspot.com/2018/07/c.html

江添氏もこれには期待しているらしいことを書いている。
913デフォルトの名無しさん
2019/04/21(日) 18:59:12.07ID:ECfCuHga
>>911
SOLIDを実践しないからそんなおかしなテストを書くはめになるんでしょうな
914デフォルトの名無しさん
2019/04/21(日) 19:03:01.42ID:dJmpMhpq
例外便利だけど、例外が高確率で起こる場面じゃ使うと遅くなるから、仕方なく結果コード判定してとかの糞コード書かなきゃいけなくなる。
915デフォルトの名無しさん
2019/04/21(日) 19:10:10.25ID:ECfCuHga
>>912
いいアイデアですね
早く実現して普及して欲しいものです
エラーコードを返す非常識なコードが世界から駆逐されますように
916デフォルトの名無しさん
2019/04/21(日) 19:10:58.11ID:ym7YjNtF
俺は戻り値をboolにするかbool*のout引数を用意してエラー内容はメンバに記憶しておき、
成否だけで十分な場面では単純にbool値だけを見て、詳細が必要な場面だけエラー内容を取得する
ってやり方が気に入ってる
917デフォルトの名無しさん
2019/04/21(日) 19:12:17.54ID:ECfCuHga
>>914
入力の検証、パース以外でそんな場面ありますか?
それと、その場面は一般的なシステムでもよく採用されるのでしょうか?
918デフォルトの名無しさん
2019/04/21(日) 19:16:05.70ID:ym7YjNtF
ファイルシステムでパスが存在するかとか権限があるかとか
リソースを確保できるかどうかとか
いくらでもあるでしょう
919デフォルトの名無しさん
2019/04/21(日) 19:17:16.59ID:ECfCuHga
>>916
例外を使わないとこうやってエラー処理がガラパゴス化するんですよね
私が今日弄ったシステムでも一部のコードだけ中途半端に特殊なエラー処理ルールを採用しています
本当に困ります
胃が痛いです
920デフォルトの名無しさん
2019/04/21(日) 19:38:20.06ID:iFY66t+o
そりゃそのシステムの問題じゃね?
例外なら「中途半端に特殊なエラー処理ルール」にならないというわけでもあるまい。
921デフォルトの名無しさん
2019/04/21(日) 19:45:15.97ID:ECfCuHga
>>918
ボトルネックになるほど存在しない確率が高いファイルに連続アクセスしているならそんな小さな最適化前に見直すべきところがありそうですね
リソースについても同様といえます
922デフォルトの名無しさん
2019/04/21(日) 19:47:17.19ID:ECfCuHga
>>920
人間のやることなので完璧は無理でしょうな
比較の問題になります
例外とエラーコード返しを比べればどちらが標準的な型式に収まりやすいか?という問題なら例外が圧倒的に優勢でしょう
923デフォルトの名無しさん
2019/04/21(日) 20:14:16.72ID:sE/qbOcV
例外にすればエラー検知は簡単になるでしょうが
そのエラーに対してどう処理するのかはケースバイケース
標準的な方法なんて無いと思うけど
そこが肝心な所で優勢かどうかは些末のことだと思うよ
924デフォルトの名無しさん
2019/04/21(日) 20:21:35.36ID:ECfCuHga
例外はcatchで標準化されますが?
その後のことは例外とエラーコードの比較って文脈で語ることじゃないな
強いて言えば例外の方が再通知の仕方もより標準的と言えるが
925デフォルトの名無しさん
2019/04/21(日) 20:24:46.24ID:ym7YjNtF
戻り値がboolならそれが正常終了したかどうかを表していることは誰にでもわかる
呼び出し元を正常系と異常系の単純な分岐にでもしておけば致命的なバグになることはない
例外の場合はその発生率が極めて低い場合にtry-catch忘れが起こると致命的なバグを含んだままリリースされかねない
926デフォルトの名無しさん
2019/04/21(日) 20:34:33.10ID:ECfCuHga
>>925
boolの解釈は人それぞれ
bool is_invalid() const;みたいなのもあるよね
あるいはただのビットフラグのON/OFFを示してるかもかもしれない
そもそもそれが処理の成否を表しているかどうかすら統一されてない

リターンコード方式ではリターンコードと分岐の洪水による目くらましでコーディングミスが多発する
それは必要なcatchを書き忘れる確率よりもずっと高い確率で発生する
例外は処理すべきものだけしか書かないから見通しが良く仕様書との比較もしやすい
リターンコード形式では何もしなくてもいいのに定型処理を書かねばならず
それによってどのエラー処理が仕様書に書かれた本当に必要なエラー処理なのか目で見てわかりにくい
927デフォルトの名無しさん
2019/04/21(日) 20:43:33.90ID:baAUkWKA
catch 以降でエラー内容に応じて振り分ける訳ですか?
気が遠くなりませんか?
928デフォルトの名無しさん
2019/04/21(日) 20:47:31.48ID:ECfCuHga
>>927
あぁ
そもそも例外の文法すら知らないのか
929 ◆QZaw55cn4c
2019/04/21(日) 20:56:54.94ID:MozNv5pX
>>919
リターン値方式に比べて exception のメリットは何でしょうか?
そしてそのメリットは本当にメリットでしょうか?
930 ◆QZaw55cn4c
2019/04/21(日) 20:57:56.41ID:MozNv5pX
>>916
エラー値を取得するタイミングがずれるようだとスレッドセーフを保障できなくなるのでは?
931 ◆QZaw55cn4c
2019/04/21(日) 21:00:30.98ID:MozNv5pX
>>922
>標準的な型式
なにを「標準的」とするかは世代差があるのではないですか?
java や c# に慣れた人は exception を推すでしょうし

ここで >>922 を私が強く非難している理由は、「標準的」というバズワードで自説を合理化する、その自分勝手さという点にあります
932 ◆QZaw55cn4c
2019/04/21(日) 21:04:29.00ID:MozNv5pX
>>925
>try-catch忘れ

>>925 が return-value 派か exception 派かはここでは問題にしません

しかし、この「try-catch」忘れ、という単語の存在そのものが、exception の利点が利点になっていないことを如実に表現していると思います
忘れないようにするための exception が忘れるもとになってしまっている、とか、全然おかしいんじゃないのでしょうか
933デフォルトの名無しさん
2019/04/21(日) 21:08:36.84ID:ECfCuHga
>>929
レスを読んでください

>>931
異なる世代の衝突があった場合は今を優先すべきでしょう
過去の過ぎ去ったことにいつまでも縋り付いては先へ進めません

ちなみにC++の標準ライブラリは例外を採用しました
934デフォルトの名無しさん
2019/04/21(日) 21:11:37.57ID:ECfCuHga
>>932
例外はエラー対応を忘れないようにするためのものではありません
例外はエラーの通知方法を標準化することとコーディングの労力を大幅に低減するための機構です
エラーコード形式でも分岐を忘れることはありえます
むしろ不要な分岐も定型処理として書かなければならないエラーコード形式ではノイズが多くミスや忘れが多く発生します
935 ◆QZaw55cn4c
2019/04/21(日) 21:22:08.96ID:MozNv5pX
>>933
>レスを読んでください
どのレスかアンカーをいただけませんか?

>>933
>異なる世代の衝突があった場合は今を優先すべきでしょう
>過去の過ぎ去ったことにいつまでも縋り付いては先へ進めません

「今の方が昔よりよくなった」という世界観に立脚しているのであれば、その説は説明できますが
「今よりも悪くなった」と考えている人を説得することができないのではないでしょうか?

>>933 が必要なのは「今の方がよくなった」と言い切れるメリットがなにか具体的に明示することだと思います。
単に「新しい方がよい」という主観だけを振り回しても、アンチ exception の意見を持つ人は納得できません

>>933 は具体的なメリットを明示することをせずに「新しい方がよい」という主観ばかり述べているのだから、議論の仕方をしらない「馬鹿な文系」に私からはみえるのです…
936 ◆QZaw55cn4c
2019/04/21(日) 21:28:56.88ID:MozNv5pX
>>934
私の考えるところの exception の利点の一つは、exception の発生した階層から遠く離れたところでも、その exception を catch して処理を記述できるところにある、と考えています
もう一つは exception を catch するとき指定するのは class だから、このエラークラスを派生関係として階層化することで、エラー体系の構造化ができるところでしょうか(派生クラスでも基底クラスでも catch できる、という点です)

しかし exception の話が持ち上がる度に、私の思う上記二点の excption の利点は言及されたためしがありません…
これでは exception の本当にいいところがメリットとして理解されていない、というか、メリットになり得ていないようですね…

exception は単なる無駄コスト食らいなんじゃないですかね…
937デフォルトの名無しさん
2019/04/21(日) 21:29:57.46ID:ECfCuHga
>>935
沢山あるので面倒です
今日のレスを読み直してください


悪くなったのが事実であれば新しいものが普及する前に消えるでしょう
普及してしまった時点で一部のロートル以外は良くなったと考えている証拠です
938デフォルトの名無しさん
2019/04/21(日) 21:34:59.57ID:ECfCuHga
>>936
離れた位置で捉えられる点はコーディングの省力化に暗に含まれると考えていいでしょう
全ての階層で定型処理を書かなくてもいい==離れた階層でも捉えたいところでだけ処理を書けばいい
ということです

例外の階層化についてはその通りですね
地味なので忘れがちですが便利です
939 ◆QZaw55cn4c
2019/04/21(日) 21:36:10.23ID:MozNv5pX
>>934
>エラーの通知方法を標準化することとコーディングの労力を大幅に低減する

ここでもバズワード「標準化」を使っていますね、漠然とした抽象的な単語を並べればいい、という思考の粗さが気になります
それに異常系の記述はどうあがいても、場合わけして都度逐一記述するしかないのは、return-value 派にしても exception 派にしても同じで、記述する中身が減るわけじゃありません
それとも exception で書けば記述が減るというのなら、何か書いてみてください

>>934 を読むにつけても、>>934 は本当に物事を突き詰めて考えているのですか?
世間がこういっている、とか、Java や C# ではそうしている、とかいう空気の読みあい、ポジション取りの忖度しかしていないのでは?

>>934 はたぶん文系プログラマなんでしょうね、私には強くそう推察されるのです…
940 ◆QZaw55cn4c
2019/04/21(日) 21:36:33.69ID:MozNv5pX
>>937
アンカーを書くことくらいもできないのですか?
941 ◆QZaw55cn4c
2019/04/21(日) 21:38:47.42ID:MozNv5pX
>>937
>悪くなったのが事実であれば新しいものが普及する前に消えるでしょう

google のコーディング規約では exception を推奨しないようですよ
https://ttsuki.github.io/styleguide/cppguide.ja.html#Exceptions

悪いものでも消えずに、もっと悪いことには悪疫として蔓延しているものもありますよ、もしかすると C++ の exception もその一つなのでは?
942デフォルトの名無しさん
2019/04/21(日) 21:38:57.23ID:ECfCuHga
ちなみに例外はもうすでに新しいものではありません
長年多くのプログラマによって効果が実証され続けてきた枯れた機能です
例外に変わるエラー処理機構が流行らなかったという事実が例外の完成度の高さを裏付けています
943デフォルトの名無しさん
2019/04/21(日) 21:41:14.44ID:ECfCuHga
>>939
エラーに対するハンドリングのコードについては例外とエラーコードの比較の外だとすでになんどか書きました
例外によって削減されコードは無意味な定型処理のことです
944デフォルトの名無しさん
2019/04/21(日) 21:41:34.96ID:dJmpMhpq
googleが例外使わない理由は、例外を否定する類いのものでは無かったような
945 ◆QZaw55cn4c
2019/04/21(日) 21:45:14.38ID:MozNv5pX
>>942
>例外に変わるエラー処理機構が流行らなかった

というか exception そのものが流行らなかった、というべきでは…
なんども繰り返しますが「新しいものがいいもの」「枯れた機能」とかいう主観はいらないから、「exceptionの具体的な利点」を書くべきです

>>943
言っている意味がわかりません、お手数ですが、少し字数を使って説明いただけますでしょうか?
946 ◆QZaw55cn4c
2019/04/21(日) 21:46:42.42ID:MozNv5pX
>>944
「例外安全」を保障するのが、これは滅茶苦茶しんどいので、その一点で嫌われているんだとおぼろげながら感じています
947デフォルトの名無しさん
2019/04/21(日) 21:52:11.67ID:ECfCuHga
>>941
googleが常に正しいわけではないでしょう

例えばそのページでは、例外安全性を考慮していないコードのリスク、つまりリソースリークについて書かれてますがリターンコード形式でも解放を忘れればリークするのは同じことです
そして、さっきも書きましたがリターンコード形式では余計な定型処理がノイズとなってそういったミスをしやすくなることが問題です
コントロールフローが追跡難化するリスクも全く逆でダラダラと必要ない定型処理を書かれた方が追跡が難しくなります

自分で考えずに権威を盲信する人を文系と揶揄することがありますが
もしかしてあなたも文系なのでしょうか?
948デフォルトの名無しさん
2019/04/21(日) 21:56:08.07ID:ECfCuHga
>>945
例外を受け取ると何もせず上位に通知するメソッドを考えてください
例外形式ではコーディング量は0です
リターンコード形式では少なくともリターンコード値が正常系か異常系か判断して戻す分岐が必要です
これは少なくとも1行の無意味な定型処理を追加しなければならないということです
実際にはそのプロジェクトの規約によって1行どころでは済まないことが多いのですが…
949デフォルトの名無しさん
2019/04/21(日) 21:56:49.72ID:ym7YjNtF
>>947
リターンコード形式で発生する余計な定型処理のノイズの例と例外でそれを回避できるケースの例をください
書かなきゃいけないコード量は本来大差ないはずです
950デフォルトの名無しさん
2019/04/21(日) 21:57:05.52ID:dJmpMhpq
例外安全というか、googleで想定しているリソース解放漏れって要はRAIIになっていないって事だよね
951デフォルトの名無しさん
2019/04/21(日) 22:02:25.75ID:ECfCuHga
>>946
リターンコード形式でも例外安全性(エラー安全性とでもいうのでしょうか)を守るには大きな労力がかかるはずです
リターンコード形式なら自動的にリソースが安全に解放されて全ての状態が実行前にロールバックされるといったことはありません
例外でもリターンコード形式でもリソースの解放と状態のロールバックの責任はプログラマあります
952 ◆QZaw55cn4c
2019/04/21(日) 22:03:22.86ID:MozNv5pX
>>947
>例えばそのページでは、例外安全性を考慮していないコードのリスク、つまりリソースリークについて書かれてますがリターンコード形式でも解放を忘れればリークするのは同じことです

そこで exception の実装に話が戻るのです
exception の実装(例えば sjlj, seh のどちらかひとつでいい)はどうしても(隠れたところに)グローバル変数を必要とするのではないですか?
これはスレッドセーフや例外安全を考えるときに、大きな癌になりうるでしょう

一方、return-value 方式は、頑張ればローカル変数だけで記述できる
return-value 方式の方が考えるのが楽ではないですか?




>自分で考えずに権威を盲信する人を文系と揶揄することがありますがもしかしてあなたも文系なのでしょうか?

かりにそうだったとしても最初は「新しいものはいいものだ」で押し通そうとした、あなたには言われたくないですね…
953デフォルトの名無しさん
2019/04/21(日) 22:06:18.26ID:ECfCuHga
>>949
例外の場合
T val = f(...);

エラーコード場合
T val;
int ret = f(..., val);
if (is_error(ret)) return ret;

最小だとこの程度でしょう
とはいえ膨大なコードベースになるとこれだけでもうんざりしますが
954 ◆QZaw55cn4c
2019/04/21(日) 22:10:06.06ID:MozNv5pX
>>948
その例外の上位への素通し、って、確かに >>936 では私も例外の利点だと書いてしまいましたが、でも実際には嫌われることなんではないですか?
java は下位ルーチンが発生させる例外(のうちのある種類)は、上位側で catch しとかないとコンパイラが怒るんではないでしょうか?
955デフォルトの名無しさん
2019/04/21(日) 22:12:03.58ID:ym7YjNtF
>>953
try文を含めれば大差ありませんね?
956デフォルトの名無しさん
2019/04/21(日) 22:12:10.36ID:dJmpMhpq
嫌われないよ
RAIIじゃない場合
一度キャッチしてリソース解放したあとスローし直さなきゃリソース漏らすというだけ
957 ◆QZaw55cn4c
2019/04/21(日) 22:15:52.45ID:MozNv5pX
>>956
なるほど、だとすると、>>936 で書いた「exception の発生した階層から遠く離れたところでも、その exception を catch」できる、というのは無条件では c++ では利点にならないですね、return-value 式とほとんど変わらない…
958デフォルトの名無しさん
2019/04/21(日) 22:20:25.10ID:ECfCuHga
>>952
たとえグローバル変数を使った実装だったとしても例外の利用者にとっては透過的なので問題はありません
スレッド処理でも問題はありません
同じスレッドでは利用者は何も気にせずに例外使えます
スレッドを結合するところでは例外を転送してください
そのための標準的な方法も用意されています
エラーコード形式の場合はスレッド間転送も標準のない独自形式になるのでより難しそうですね
959デフォルトの名無しさん
2019/04/21(日) 22:34:00.26ID:ECfCuHga
>>954
Javaには例外時に自動でリソースを閉じるための構文が存在しない時期がありました
検査例外はそのときの名残です
GCされるまで自動で閉じられることはないからちゃんと手動で解放しろと注意喚起する意味では検査例外にも価値があります
逆に言うとRAIIやusing/IDisposeのような機構が適切に使われている場合はうっとおしいお節介でしかないわけです

ちなみにリターンコード形式場合はリソースを確保していない場合でも定型処理を書かなければなりません
したがってそのうっとおしさは検査例外とは比較にならないほどの負担になります
960デフォルトの名無しさん
2019/04/21(日) 23:25:54.10ID:2X82VWTJ
いつもはうっとうしいQZ某が、今日は概ね論理的な物言いをしているように感じる。
対する例外推しの彼は、饒舌だが自説を貫こうとするだけで相手を納得させるような説明はしようとせず、議論をしていつもりで議論できてない人のように見える。リアルなフォーク准将を見ているような気持ち悪さがあるよ。

ちなみに俺は例外も戻り値も適材適所で使い分けて一貫性がとれていればいいんじゃね、という意見だけど、議論に加わる気は無いのでスルーしてくれ。
961デフォルトの名無しさん
2019/04/22(月) 00:23:12.59ID:W/PqoVz0
納得させる気は最初からないからね
ただ単に事実を語っただけ
962デフォルトの名無しさん
2019/04/22(月) 01:28:16.24ID:zAZ+Y0tC
機械学習とかアプリケーションレイヤの開発をしてて普段はJavaとかpythonで書いてるんだけど相談。
手間や保守を考えるといくら早く動作しても全部cで実装は厳しくて、複雑な計算とかだけcに渡そうと思うんだけど、このレイヤだとそんなもんだろうか?実際の仕事での使われ方の例があれば教えてほしい。
963はちみつ餃子 ◆8X2XSCHEME
2019/04/22(月) 05:12:41.91ID:oO3SHMUw
例外安全という言葉には色々と含まれるけど、
とりあえず最低限度の保証としては「リソースリークが起こらないこと」とすると、
C++ ではデストラクタで後始末するのが基本だ。
(RAII)

私が強調しておきたいのは、リソース管理の配慮はクラス定義に押し込めることが出来るということと、
可能な限り押し込めるべきだということ。

エラー発生の通知に使うのが返却値であれ例外であれ、
エラーへの対処の中にリソース回収のコードを書かなきゃならないようならその時点でダメなコードだ。
デストラクタで回収されることをあてにしたい。
(bad_alloc のような致命的なやつはちょっと話が違ってきたりとか、単純ではない場面はあるけど……。)

で、デストラクタでリソースを後始末するというのが出来ているという前提であれば、
例外を使うか返却値を使うかの差は対処のためのコードをどこにかくかの違いに過ぎなくなる。
Java と違って関数が送出する例外を型システムで管理してくれないわけだし、
引数をチェックしているかどうかもプログラマが気を付けるしかないので、そんなに違いはないと思う。

違いはないがどちらかに一貫させるのが望ましいと考えると、
C++ の基本的なライブラリに併せるべきだということになって例外を使うのが妥当という判断になる。

ちなみにグーグルのガイドラインが例外を避けることになっているのは
グーグルで使っている既存のコードが例外への配慮を充分にしてないから
やむを得ずそれに合わせるためでフルスクラッチに出来れば違う判断をするかも
ってことも書いてあるので、例外を避ける根拠としては弱い。
964デフォルトの名無しさん
2019/04/22(月) 07:22:42.90ID:kinTds5M
ON ERR GOTO 100
965デフォルトの名無しさん
2019/04/22(月) 08:55:56.47ID:H+0HJxEG
#define return goto
966 ◆QZaw55cn4c
2019/04/22(月) 16:34:18.66ID:UIaMmjmK
>>960
>いつもはうっとうしいQZ某が、今日は概ね論理的な物言いをしているように感じる。
あれ?れれ?
おっかしーなー、私もプログラムを書く人だし最低限自分の作ったバグくらいはさっさと片付けたいので、そのためにも、いつも論理的でありたいと願っているのですが…
967デフォルトの名無しさん
2019/04/23(火) 13:32:34.33ID:TjU3QAMI
そういうとこだよ
こういうのってたいてい本人は自覚してないもんだからやっかい
968 ◆QZaw55cn4c
2019/04/23(火) 19:01:53.94ID:JSYnwir1
>>963
>違いはないがどちらかに一貫させるのが望ましいと考えると、
>C++ の基本的なライブラリに併せるべきだということになって例外を使うのが妥当という判断になる。

この意見に対しては私は痛烈な批判を浴びせることになるでしょう
曰く、C/C++ の人なら言語的な統一感よりもコスト、というか単純性を優先したくなるのではないですか?
UML のグジャグジャ感をみるにつけても、「言語法律家」なるものはきわめて忌むべき存在と私は考えています

exception を実装するためには、隠れグローバル変数をどうしても準備しなければならない
シングルコアで exception の履歴を単一スタックに全部のせることができるのなら、ローカルで sjlj を駆使して、あるいは書き手からみえないところで純ローカル変数的世界に納めることもできたかもしれませんが、
今やマルチコアで実際に複数のスタックとプログラムカウンタが走る時代で、exception の実装は OS に丸投げの複雑怪奇、ついでにコストも複雑怪奇でパンピーには理解が及ばない…

そんな巨大かつ複雑なスケールの実装を必要とするのに見合った exception のメリットは何か、今も自問自答を繰り返しているのです
969デフォルトの名無しさん
2019/04/23(火) 19:28:11.67ID:TE76XOKd
単純さを選んだら例外になったというお話だったのさ。ちゃんちゃん
970デフォルトの名無しさん
2019/04/23(火) 19:47:47.79ID:BSgCsXpz
なぜsjljにこだわるのか
コルーチンとか標準化されても使わなそうだな
971デフォルトの名無しさん
2019/04/23(火) 19:58:30.12ID:TE76XOKd
c++の言語仕様に例外の実装にはグローバル変数使えとかSJLJ使えなんて縛りあったっけ?
972 ◆QZaw55cn4c
2019/04/23(火) 20:09:00.36ID:JSYnwir1
>>971
実装方法までは言語仕様に記述されないでしょうね…
973デフォルトの名無しさん
2019/04/23(火) 20:23:18.80ID:TE76XOKd
>>972
ということは例外の実装にまで踏み込んで考えるのはナンセンスなのでは?
974デフォルトの名無しさん
2019/04/23(火) 21:32:22.59ID:lLaZpSEH
>>968
例外がos丸投げってのは事実誤認
975デフォルトの名無しさん
2019/04/23(火) 21:35:59.14ID:lLaZpSEH
ちなみにおれはc++の例外は大規模開発でworkしないと思ってるから
経験上ひたすら面倒な事態になる
言語仕様決めてるやつらは言語オタクで大規模開発の経験ないと思ってる
976はちみつ餃子 ◆8X2XSCHEME
2019/04/23(火) 21:51:05.06ID:K0ADJPpo
>>968
いつの話をしてるんだよ。 モダンな環境では例外送出の実行コストは充分に小さい。

特別な環境で特別な対処をしなきゃならない場合を例に出しても意味がないぞ。
ふーん、そういう場合はそうするんですねとしか言いようが無い。
977デフォルトの名無しさん
2019/04/23(火) 21:58:50.41ID:lLaZpSEH
>>976
sjljでない場合
例外がおこらない分にはオーバーヘッドないけど、起こったときのスタック巻き戻しが重い
こういうこと知らずにクリティカルなとこで気軽に例外発生させるバカをよく見る
978デフォルトの名無しさん
2019/04/23(火) 21:59:02.76ID:TE76XOKd
抽象化ができずどんな粒度でも低級のセオリーを通そうとする
早すぎる最適化がとにかく大好き

C++erに多いねこのタイプ
979デフォルトの名無しさん
2019/04/23(火) 22:01:01.11ID:TE76XOKd
>>977
クリティカルってどんな時?
980デフォルトの名無しさん
2019/04/23(火) 22:03:19.80ID:lLaZpSEH
>>979
リアルタイム性が求められるとき
981デフォルトの名無しさん
2019/04/23(火) 22:04:43.29ID:lLaZpSEH
>>978
アホみたいにmap使いまくって後でひどい目に遭うアホもよく見るな
982デフォルトの名無しさん
2019/04/23(火) 22:12:51.54ID:TE76XOKd
>>980
それが必要なのってC++コード全体からすると何パーセントくらいなの?
983デフォルトの名無しさん
2019/04/23(火) 22:15:51.20ID:lLaZpSEH
>>982
しらないけどクリティカルな処理ないならc++使わなくていいんじゃないの
なんでわざわざこんなしんどい言語使う?
984デフォルトの名無しさん
2019/04/23(火) 22:18:09.81ID:TE76XOKd
>>981
別にmap使いまくってもいいよ
ちゃんと抽象化しとけば後でチューニングするのは簡単だから
985デフォルトの名無しさん
2019/04/23(火) 22:21:23.75ID:lLaZpSEH
>>984
まさかw
データ構造大事だよ初心者さん
986デフォルトの名無しさん
2019/04/23(火) 22:26:00.43ID:5E3fgZzA
痛い目に遭ったのかw
987デフォルトの名無しさん
2019/04/23(火) 22:28:35.69ID:TE76XOKd
>>985
君はまだ話の流れを理解してないようだ
988デフォルトの名無しさん
2019/04/23(火) 22:34:01.99ID:lLaZpSEH
合ってるね
スクリプト言語あがりと一緒に仕事すると高い確率でそうなる
同じ事をいうんだよ
最初は抽象度高く作ってあとで最適化って
結局しないからね
だいたい薄く広く積もったオーバーヘッドは表面化しないから
んでもっさりアプリの出来上がり
であとで精鋭集めて作り直し
989デフォルトの名無しさん
2019/04/23(火) 22:36:43.29ID:TE76XOKd
>>988
そこで作り直すから低スキルなんだよな
前任者がせっかく変更に強いシステムを組んでやったのに台無しにするんだ
990デフォルトの名無しさん
2019/04/23(火) 22:43:26.94ID:lLaZpSEH
>>989
変更に強いとかの内輪の都合よりUXの方が大事だよ
初心者さん
991デフォルトの名無しさん
2019/04/23(火) 22:44:12.87ID:5E3fgZzA
システム解析能力が無いせいじゃないか
992さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/04/23(火) 22:47:06.24ID:DAl4rXky
そろそろ次スレ
993デフォルトの名無しさん
2019/04/23(火) 22:49:51.07ID:TE76XOKd
>>990
その大事な大事なUXを向上させるために抽象化するんだよ新人君
994デフォルトの名無しさん
2019/04/23(火) 22:59:41.83ID:be9PrXZY
さすがにそれは意味不明では?
過剰なオブジェクト指向でダメになったプロジェクトは数知れず
995デフォルトの名無しさん
2019/04/23(火) 23:01:47.82ID:TE76XOKd
>>994
やっぱり流れを理解してないね
996デフォルトの名無しさん
2019/04/23(火) 23:05:38.01ID:lLaZpSEH
そういうのいいから
説明できないならそこでおしまい
997デフォルトの名無しさん
2019/04/23(火) 23:13:00.31ID:TE76XOKd
UXの向上にはフィールドバックと変更のループが必要
度々の変更を容易たらしめるためには適切な抽象化が必要
最初から速度最適化に傾倒して抽象性を失ったシステムは変更しにくいゴミUXを抱え続ける
998デフォルトの名無しさん
2019/04/23(火) 23:47:41.32ID:NBxQbW0f
御託ご苦労さん
でそれどっからの流れなの?

お前さんに一度map乱用ボトルネックを一晩でtableに置き換える作業やらせてみたいわ
多数のモジュールと繋がってるやつな
最初から見積り立てて設計しとけよボケってどなられるやつな
999はちみつ餃子 ◆8X2XSCHEME
2019/04/24(水) 00:43:26.47ID:kf0sNkPB
>>977
そりゃあクリティカルなところという特別な場合には特別扱いが必要ですねって
だけのことで、そんなこともわからんやつは例外を使おうと使うまいと駄目だよ。
1000はちみつ餃子 ◆8X2XSCHEME
2019/04/24(水) 00:43:48.92ID:kf0sNkPB
>>1000 なら長門は俺の嫁
ニューススポーツなんでも実況



lud20251107071455ca

ID:fPDnzLoPのレス一覧:


209デフォルトの名無しさん
2019/01/19(土) 08:51:08.36ID:fPDnzLoP
戻り値形式ではそもそも式として書けないから参照透過性もクソもないということをまずは理解しろ

int h(P const & p, Q const & q, Z & out_z) {
X x;
Int ret_f = f(p, x); // out ref x
if (is_error(ret_f)) return ret_f;
Y y;
int ret_g = g(q, y); // out ref y
if (is_error(ret_g)) return ret_g;
z = x * y;
return RET_OK;
}

↑例外を使わない下品すぎるコード
↓例外を使ったスーパーエレガントなコード

Z h(P const & p, Q const & q) { return f(p) * g(q); }
210デフォルトの名無しさん
2019/01/19(土) 09:21:20.09ID:XwZdf3Vk
Real Programmers Don't Use Exception.
211デフォルトの名無しさん
2019/01/19(土) 12:10:48.67ID:gJ7zJmkH
>>206
rust
swiftは最初なくて後で追加
積極的に使うスタンスでない
212デフォルトの名無しさん
2019/01/19(土) 12:13:26.40ID:gJ7zJmkH
>>209
そこに丹念なエラー処理を追加していくと、あら不思議どっちもあまりかわらない
213デフォルトの名無しさん
2019/01/19(土) 13:16:34.67ID:+IqL7b8U
>>211
それってやっぱりいるじゃん
ってことだよね w

>>212
え?
何言ってるの?
エラー処理ってなんのこと?
具体的に書いてみて
214デフォルトの名無しさん
2019/01/19(土) 14:04:33.44ID:gJ7zJmkH
>>213
エラー処理って言ったらまぎらわしかった
異常系の対応ってこと
215デフォルトの名無しさん
2019/01/19(土) 14:08:49.01ID:fPDnzLoP
何にでも丹念なエラー処理が必要になることはないし
丹念なエラー処理も例外の方がやりやすい
216デフォルトの名無しさん
2019/01/19(土) 14:30:15.46ID:+IqL7b8U
>>214
エラー処理でも異常系の対応でもいいから具体的に書いてくれよ
>>209程度ならたいしたことないだろ
217デフォルトの名無しさん
2019/01/19(土) 14:50:30.01ID:FscMnE/k
案の定、参照透過性は関係ない話だった。
218デフォルトの名無しさん
2019/01/19(土) 16:58:07.69ID:gJ7zJmkH
>>216
具体的にするには前提がいるでしょ

f、gは外部から与えられてる関数で中身を書き換えることはできない
かつ至る所で使われている
p、qは誤りを含んでいる可能性があって、異常(エラー/例外)が起こりうる
異常の場合は何かおかしかったの後で調査できるようにログに残す、
または人間にフィードバックしてリトライさせる必要がある

製品レベルのソフトウェアならいたって普通の前提と要件
これを実現するとどうなるかは想像つくでしょ?

おれは例外否定派ではないよ
役に立つところは限定的と言う主張
>>188 がおれだから
まぁ確かにどちらかで言えばなくてもいいとは思ってる
ただ現状C++の標準ライブラリは例外ありきの設計に突き進んでいるから
エラーコードで突き進むのは筋が悪いのは確か
219デフォルトの名無しさん
2019/01/19(土) 17:14:14.89ID:+IqL7b8U
>>218
> p、qは誤りを含んでいる可能性があって、異常(エラー/例外)が起こりうる
意味わからん
220デフォルトの名無しさん
2019/01/19(土) 17:16:52.76ID:fPDnzLoP
コード書けないならそう言えば?
長文で言い訳してないでさ
221デフォルトの名無しさん
2019/01/19(土) 17:33:46.39ID:XYN5JTgF
普通は馬鹿に割く時間がもったいないからコード書けません
222デフォルトの名無しさん
2019/01/19(土) 17:53:36.92ID:+IqL7b8U
そう言ういいわけ要らんし
223デフォルトの名無しさん
2019/01/19(土) 18:31:39.45ID:fPDnzLoP
信者ですらわずかなサンプルコードを書くのをためらうほどには戻り値スタイルは厄介な代物ということがわかったね
くだらない言い訳で長文を書く労力よりも高くつくということがはっきりした
224デフォルトの名無しさん
2019/01/19(土) 20:10:32.29ID:XwZdf3Vk
普通signalで実装するよね〜
225デフォルトの名無しさん
2019/01/19(土) 20:17:23.95ID:gJ7zJmkH
勝利宣言の後で申し訳ないけど
h()でハンドルするとしたら単に

  Z h(P const & p, Q const & q) {
    try {
      return f(p) * g(q)
    } catch (exception_invalid_arg_f e) {
      throw exception_invalid_arg("arg p is invalid");
    } catch (exception_invalid_arg_g e) {
      throw exception_invalid_arg("arg q is invalid");
    }
  }

みたいにリアス海岸になるわけでしょ
でもこれはpとqの異常の区別が下からあがってくる例外で区別できてしまう特殊例

  Z h2(P const & p, Q const & q0, Q const & q1) {
    return f(p) * g(q0) * g(q1);
  }

だとより複雑になる
じゃあこれ次の人やってみて

レス:1-200 201-400 401-600 601-800 801-1000 ALL

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

TOPへ TOPへ  

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


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

 
  ↓この板の人気?スレ↓(一覧)
 
【古典的モダン】Perlについての質問箱 51箱目
プログラミングがわからなすぎる
TypeScript part3
C言語なら俺に聞け 150
AIはやっぱり役に立たないんじゃね?コロナウイルス
WinFromとか未だに持ち上げられてる社会のゴミ
teratailもりあがっtail? 78問目
プログラミング雑談 - 初級編
Access VBA 質問スレ Part1
関数型プログラミング言語Haskell Part31
【MT5/MT4】 EA研究開発 Q&A 1 【売買自動】
Excel VBA 質問スレ Part74
これってどうすればよいの
ちょっとした役に立つプログラムを配布し合うスレ
数学者が技術者にプログラムを書いてもらうスレ
インデントはタブかホワイトスペースか?
【統計分析】機械学習・データマイニング29
コーディング、テスト、デバッグ、エディタ技術総合
スクリプト言語のソース、何MBだとデカイと思う?
スマホでプログラミングできますか?
Message Passing Interface (MPI) 統合スレ
亡くなられた声優さんをVOICEROIDで再現出来ますか?
WPF(.NET, WinUI) GUIプログラミング Part26
英語の技術書読めちゃうプログラマ
【高速】 LiteSpeed Web Server その1【LSWS】
これからプログラミングを始める人をサポートしたい
埋め立てスクリプトってRubyで作れますか?
OpenGL/Vulkanスレ Part22
【マック】Macintoshプログラミング質問箱
03:32:32 up 24 days, 18:54, 0 users, load average: 148.50, 160.89, 144.15

in 0.68393516540527 sec @[email protected] on 111617