[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2ch.scのread.cgiへ]
Update time : 04/20 12:41 / Filesize : 255 KB / Number-of Response : 872
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.104【環境依存OK】



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

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

前スレ
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/

2 名前:デフォルトの名無しさん mailto:sage [2018/12/28(金) 06:06:22.84 ID:ufThBpcD.net]
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 名前:デフォルトの名無しさん mailto:sage [2018/12/28(金) 07:22:25.34 ID:br5v3uv4.net]
わけのわからん言語をこねくり回して、つまらんことしてちゃ、つまらん。

4 名前:デフォルトの名無しさん [2018/12/28(金) 11:40:52.89 ID:sicn3fFV.net]
O2

5 名前:デフォルトの名無しさん [2018/12/28(金) 11:42:24.93 ID:VQYieTPu.net]
つまんね

6 名前:デフォルトの名無しさん [2018/12/28(金) 11:48:00.87 ID:e5XGwJ2H.net]
>>997
UTF-8 は char * に入れるもの
char32_t * ならぎりぎりセーフ

wchar_t * は wcs 用
UTF-32 を wchar_t * に入れる

7 名前:デフォルトの名無しさん mailto:sage [2018/12/28(金) 12:09:16.93 ID:qtS4fp6w.net]
utf8は漢字仮名に3バイト使ってることわかってんのか
処理を簡単にするためいったんwchar_t使うのは普通のこと
でなければ文字数のカウントすら文字コードを調べる羽目になる

8 名前:デフォルトの名無しさん [2018/12/28(金) 12:17:53.33 ID:sicn3fFV.net]
その用途ならchar32_t*ってことじゃね

9 名前:デフォルトの名無しさん mailto:sage [2018/12/28(金) 12:21:31.54 ID:I8tv0Dcv.net]
調べる羽目になるっていうけど、たったそれだけのことでしかない
当然、パフォーマンス的に最適な方法は場合による

10 名前:デフォルトの名無しさん mailto:sage [2018/12/28(金) 13:36:08.91 ID:qtS4fp6w.net]
>>8
c++17は調べてないが、
char32_tだと文字列処理のライブラリも正規表現も使えないだろ。
既存のライブラリ使うためにまた変換するのか?

>>9
たったそれだけて、文字列処理なんか主たる作業じゃないC/C++プログラマにとっては、
utf8の文字コード常に思い浮かべながらコーディングするなんてのは不快極まるだろ。
*x == 'あ'
これが書けないことがたったそれだけかよ



11 名前:デフォルトの名無しさん [2018/12/28(金) 13:40:58.79 ID:VQYieTPu.net]
endian でドツボですねわかります

12 名前:デフォルトの名無しさん mailto:sage [2018/12/28(金) 13:46:43.01 ID:qtS4fp6w.net]
そもそもchar32_tてutf32用だろwwww

13 名前:デフォルトの名無しさん [2018/12/28(金) 14:07:56.51 ID:e5XGwJ2H.net]
判ってないなお前

14 名前:デフォルトの名無しさん mailto:sage [2018/12/28(金) 22:03:45.49 ID:n6DxUiN/.net]
このなかで一番美人なのって真ん中だよね?深キョンレベルだと思うのだが
ちなみに向かって右は目も鼻も整形してるって本人が公言してるけどそれ抜きにして誰が一番美人だと思う?
bigsta.net/media/1933567086757747003_3564907098

15 名前:デフォルトの名無しさん mailto:sage [2018/12/29(土) 09:44:06.88 ID:ixKuXlJx.net]
VSだとwchar_tは16ビットだろ。
だから3バイト以上/文字あるutf8だとおいしくもなんともないが、
unixは32ビットなんで、シェル出力をfgetwsでwchar_tで受け手、時にwstringで処理すると、
fgets->charより格段に楽に処理できる場合がある。
環境依存であんまり人に推奨できないだろうけど、unix, gcc限定なら正しく処理できる
もちろんwslでも使える

16 名前:デフォルトの名無しさん [2018/12/29(土) 12:44:13.02 ID:EK4sWEwk.net]
次から次へと嘘を並べるのがウリナラ

密漁船を捜索中だった→密漁船は既に発見し救出中(実際は瀬取り中?)だった
レーダーは水平以下へ照射していた→上空へレーダー飛んだのはなぜ
機体は真上を飛んでいた→実際は1km以上遠方だった
カメラを向けただけで照射はしていない→レーダーも回転して対面していた

17 名前:デフォルトの名無しさん mailto:sage [2018/12/29(土) 13:22:25.41 ID:Ol/xTs6w.net]
環境:Win10/VC++2015

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

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

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

なぜrecvfrom()はブロックされたままなのでしょうか?

18 名前:デフォルトの名無しさん mailto:sage [2018/12/29(土) 13:25:48.49 ID:EK4sWEwk.net]
selectしてないから

19 名前:17 mailto:sage [2018/12/29(土) 13:51:03.81 ID:Ol/xTs6w.net]
>>18
selectは「複数ソケットのとき」という先入観があったのですが、
1ソケットのときでも使うんですね。
ありがとうございました!

20 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 13:06:57.06 ID:bhbCdqKe.net]
gccでしか確認してないが、warningは出るんだが
前にu8をつけない'あ' は int (4バイト)展開されるんだな
u8つけてしまうと下位1バイトしか処理されないんで正しく処理されない。

wchar_t buf[0x100];
としとくと
buf[i] == L'あ'
ではwarningすらでない.



21 名前:デフォルトの名無しさん [2018/12/30(日) 16:05:04.48 ID:FqO1nm3e.net]
文字リテラルにu8プレフィックスは使用できない。

22 名前:デフォルトの名無しさん [2018/12/30(日) 16:10:42.14 ID:kRHvhG4M.net]
【TOKIOがまた被曝を応援】 「不勉強」「操られている」のはローラではなく、安倍と食事した奴
rosie.5ch.net/test/read.cgi/liveplus/1546137382/l50

23 名前:デフォルトの名無しさん [2018/12/30(日) 16:13:30.28 ID:Y/PcKL5Q.net]
https://cpplover.blogspot.com/2012/02/blog-post_16.html

24 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 16:43:37.53 ID:bhbCdqKe.net]
>>21
いったいいつの時代の話してるんだ古すぎるんだよ情弱
C++17から問題なく使用できる

25 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 16:50:02.84 ID:bhbCdqKe.net]
情弱がねごとほざくからそのたんびにイラン労力強いられることとなる
ちったぁ情報収集してこいよダニ

26 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 16:50:18.97 ID:bm6ZOgnS.net]
どうせだったら、utf8専用のchar8_t型も用意しといてくれたら良かったのに。
ascii文字圏の連中にはどうでもいいことなんだろうけどw

27 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 23:19:20.59 ID:+xBVE+bB.net]
教えてください。
C++のvectorについてです。
あるvectorの要素を自分自身に追加したいとき、どうすればよいのでしょうか。
例えば、v.push_back(v[2]);のようなことをしたいのです。

28 名前:デフォルトの名無しさん mailto:sage [2018/12/30(日) 23:25:38.38 ID:fEPs2N4H.net]
それでいいんじゃね?

29 名前:デフォルトの名無しさん mailto:sage [2018/12/31(月) 07:35:40.55 ID:fsnZuStD.net]
>>27
それ以外の何を望むの?
特定場所への挿入v.insertぐらいしかないじゃん

30 名前:デフォルトの名無しさん mailto:sage [2018/12/31(月) 07:57:31.16 ID:kcuDnRZu.net]
27です。レスありがとうございます。v.insertでうまく行きました。
v.push_back(v[i])だとなぜか空の要素が追加されてしまい、困っていました。



31 名前:デフォルトの名無しさん mailto:sage [2018/12/31(月) 08:53:01.66 ID:Ls1ZsSUM.net]
>>27
https://stackoverflow.com/questions/18788780/is-it-safe-to-push-back-an-element-from-the-same-vector

32 名前:デフォルトの名無しさん mailto:sage [2018/12/31(月) 09:18:55.86 ID:Ls1ZsSUM.net]
>>30
まともなpush_backの実装なら対策されているので問題ないはず。
無対策でも明示的にコピーコンストラクタを呼べばうまくいかくも。(要素の型をTとする)
v.push_back(T(v[2]));

33 名前:デフォルトの名無しさん mailto:sage [2018/12/31(月) 09:25:50.67 ID:rwDIj1dr.net]
あ〜そういうことか
俺もハマりそうだなそれ
でもそれはvectorの実装側の責任になるか

34 名前:デフォルトの名無しさん mailto:sage [2018/12/31(月) 10:05:21.41 ID:fsnZuStD.net]
>>27
意図しないエレメントが追加されてしまうC++は何?バージョンも併せて教えてよ

35 名前:27 mailto:sage [2018/12/31(月) 10:10:54.60 ID:kcuDnRZu.net]
環境書くのを忘れてました。すみません。
Win7、Visual Studio 2008です。

36 名前:デフォルトの名無しさん mailto:sage [2018/12/31(月) 10:19:59.32 ID:fsnZuStD.net]
>>32
まともでない実装ってのはどのテンプレート?つかコンパイラ?

37 名前:デフォルトの名無しさん mailto:sage [2018/12/31(月) 10:27:09.66 ID:fsnZuStD.net]
>>35
thx
なるほど10年前のコンパイラならstlにバグ残ってる可能性あるわな
2011、2014、2017でずいぶん新しくなってるよ
仕事で2008指定されてるとかじゃなければ2017入れて損することあんまないと思うけど

38 名前:デフォルトの名無しさん mailto:sage [2018/12/31(月) 10:27:22.88 ID:Ls1ZsSUM.net]
さすがにvectorではまともでない実装にお目にかかったことはない。
VisualStudio2010のMFC独自コンテナCArrayで同じ問題ではまったことがあっただけ。

39 名前:デフォルトの名無しさん mailto:sage [2018/12/31(月) 11:04:33.38 .net]
マジかよ MFC 最低だな!
失望しました。WPF 使うの止めます

40 名前:デフォルトの名無しさん mailto:sage [2018/12/31(月) 11:44:30.10 ID:zd5ZDQG6.net]
vsに2011ってのもあったのか、いやあ勉強になるなぁ



41 名前:デフォルトの名無しさん mailto:sage [2018/12/31(月) 11:46:37.75 ID:sEEumFv8.net]
C++の規格と混同しているっぽい。

42 名前:デフォルトの名無しさん mailto:sage [2018/12/31(月) 11:58:04.83 ID:fsnZuStD.net]
C++の規格の話

43 名前:デフォルトの名無しさん mailto:sage [2018/12/31(月) 12:28:15.56 .net]
つまり江添亮の話

44 名前:デフォルトの名無しさん mailto:sage [2018/12/31(月) 20:39:25.62 ID:kcuDnRZu.net]
>>31
参考になりました。ありがとうございます。

45 名前:デフォルトの名無しさん mailto:sage [2019/01/01(火) 03:54:37.57 ID:vBi+DP3M.net]
元日記念カキコ

46 名前:デフォルトの名無しさん mailto:sage [2019/01/01(火) 15:38:58.76 ID:tgQbht6s.net]
gnuのobstackってざっくり理解するなら普通にデータ構造としてのstackのいち実装って認識であってますか?

47 名前:デフォルトの名無しさん mailto:sage [2019/01/01(火) 17:39:02.76 ID:i/vicifv.net]
うん

48 名前: [2019/01/01(火) 18:06:26.08 ID:kK3EzG3m.net]
はっキネン

49 名前:デフォルトの名無しさん mailto:sage [2019/01/03(木) 02:16:07.41 ID:oIrbeINi.net]
Privateにメンバ関数を置くのって別にいいですか?

50 名前:デフォルトの名無しさん mailto:sage [2019/01/03(木) 02:25:02.88 ID:rCo9hP60.net]
いいんじゃね?
そのクラスの中のみでよく使われる関数とかprivateにする



51 名前: mailto:sage [2019/01/03(木) 03:52:58.78 ID:moS/XERj.net]
zen2 5GHz が来た!
https://wccftech.com/amd-ryzen-3000-zen-2-cpus-ryzen-9-3900x-ryzen-7-ryzen-5-listed-online/

52 名前:デフォルトの名無しさん mailto:sage [2019/01/03(木) 15:12:15.57 .net]
誤爆しました

53 名前:デフォルトの名無しさん mailto:sage [2019/01/04(金) 00:19:38.87 ID:C/NwCX/x.net]
デバッガってどう動いたら正常なんでしょうか
vscodeでハロワしてみてブレークポイントで止まる→これでいいんだよな?となりまして

54 名前:デフォルトの名無しさん mailto:sage [2019/01/04(金) 00:50:16.36 ID:ihBPygyi.net]
リクツを語ると
デバッガにデバッガを適用するとバグかどうかを検出できない

55 名前:デフォルトの名無しさん mailto:sage [2019/01/04(金) 20:57:44.72 ID:leXZv0J4.net]
Win32APIなんですが、
ウィンドウクラスにアイコンハンドルを設定してWS_OVERLAPPEDWINDOWスタイルで
CreateWindow()すると問題なくタイトルバーにアイコンが表示されるのですが、
WS_POPUPスタイルでCreateWindow()した後にSetWindowLong()でWS_OVERLAPPEDWINDOWスタイルに変更すると、
タイトルバーにアイコンが表示されません。
WM_SETICONをSendMessage()しても変わりませんでした。
どうすれば表示されるようになるでしょうか?

56 名前:デフォルトの名無しさん mailto:sage [2019/01/04(金) 23:35:35.15 ID:GKwYgY3X.net]
>>55
つ Win32API質問箱

57 名前:55 mailto:sage [2019/01/05(土) 00:28:56.43 ID:1yzAmca9.net]
>>56
そちらはスレが盛んでないので、こちらでお聞きしました・・・

58 名前:デフォルトの名無しさん mailto:sage [2019/01/05(土) 08:53:49.71 ID:b8ezfK6l.net]
じゃあ自力で頑張って下さい

59 名前:デフォルトの名無しさん [2019/01/05(土) 12:19:51.40 ID:wMTnOPNR.net]
>>55
eternalwindows.jp/control/controlbase/controlbase06.html
chokuto.ifdef.jp/urawaza/api/SetWindowLong.html
SetWindowLong 関数で変更されたそのデータは SetWindowPos 関数が呼び出されるまで反映されません 👀
Rock54: Caution(BBR-MD5:79b7e0206b0fd5ffcfddd514fa488d36)


60 名前:55 mailto:sage [2019/01/05(土) 22:25:41.89 ID:1yzAmca9.net]
>>59
SetWindowLong()後にSetWindowPos()はコールしていたのですが、
WM_SETICONをSendMessage()するときのアイコンハンドル取得方法がまずかっただけでした(汗)
(LoadIcon()のHINSTANCE引数が正しくなかった)
今は問題なくアイコンが表示できています。
お騒がせしました!



61 名前:デフォルトの名無しさん mailto:sage [2019/01/06(日) 01:50:50.63 ID:crl+XFhH.net]
>>60
https://g.co/kgs/ZEZu9X 👀
Rock54: Caution(BBR-MD5:36abcc1a7fb24404caf692865ab3af18)


62 名前:デフォルトの名無しさん mailto:sage [2019/01/06(日) 13:24:20.28 .net]
>>57
盛んでないなら先ず盛んにしろよ
欲しい者は先ず自ら与えると言うぞ

63 名前:デフォルトの名無しさん mailto:sage [2019/01/06(日) 16:05:17.54 ID:s8+QTrGL.net]
難癖つけ太郎

64 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 19:00:48.26 ID:29GPlbw0.net]
ツケタロサァン

65 名前:デフォルトの名無しさん mailto:sage [2019/01/09(水) 15:58:07.62 ID:LoPBTm2D.net]
C++て3年周期で新規格リリースされるんだなC++20が来年発表て、
えーかげんもうついていけんわ
家電のモデルチェンジじゃあるまいし。言語の追っかけなんかやってられん。

66 名前:デフォルトの名無しさん mailto:sage [2019/01/09(水) 18:23:48.31 ID:h/UgfZoi.net]
C言語の需要はそういうところじゃねえの
もうこれ以上進歩しないが大抵のことはできる
適度に難しいところもある

67 名前:はちみつ餃子 mailto:sage [2019/01/09(水) 18:30:18.01 ID:wEN9wc2j.net]
>>65
もしそうしたければ古い版の規格で書いてもええんやで。
C++20 が出ても C++11 が消滅するというわけでなし。
まあ主要なコンパイラがサポートしなくなったらしょうがないけど……

68 名前:デフォルトの名無しさん mailto:sage [2019/01/09(水) 22:38:39.03 ID:teyoDIou.net]
C++11が神過ぎる。
それまでとは雲泥の差。
これだけでずっと戦える。

69 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 07:42:30.84 ID:JUlDRUM2.net]
>>67
言語って自分だけで済まんだろ
キャッチアップしていかんと人の書いたコードが読めなくなる
こんな短期間でアップデート繰り返すんじゃなくもっと精査した上で規格変更しろといいたい
アップデート繰り返す度にユーザ減少してるだろ

70 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 07:53:15.61 ID:JUlDRUM2.net]
>>66
new/delete無造作に使ったコードを組込なんかで書くと、
メモリフラグメント作りまくるだけだからな。
ハードウェアの一部としてRTOS上で安定動作させるためには、
ポインタ使いまくりのbetter Cとして書くしかない。
4kB メモリのRL78でコード書いてみろと



71 名前:デフォルトの名無しさん [2019/01/10(木) 11:58:03.74 ID:+qf2Eno1.net]
>>69
C++の良かったのは仕様が枯れてることだったのにな
今は逆を逝っててどんどん人が離れて逝ってる

72 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 13:39:40.00 ID:AlpMGZ50.net]
utf-8の文字コードが格納されてるchar配列から、デコードされた文字をstd::string型に入れる方法を教えてください
以下のような変換を実装したいです

char ai[] = {0xe3, 0x81, 0x82, 0xe3, 0x81, 0x84}; // "あい"のutf-8コード
std::string str = ??
std::cout << str << "\n"; // prints "あい"

73 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 14:15:08.46 ID:XfqugDbL.net]
>>72
aiの最後にnull文字は入れないの?
入れないなら
srd::string str { ai, sizeof(ai)/sizeof(ai[0]) };

74 名前:デフォルトの名無しさん [2019/01/10(木) 14:38:26.46 ID:f6PjJx/6.net]
>>72
wstringに入れろ

75 名前:はちみつ餃子 mailto:sage [2019/01/10(木) 17:13:07.72 ID:2cm4ZQb/.net]
>>69
時間を掛けたら扱う項目 (提案) も増えるからどっちでも同じだよ。
一度の変更が大量になるよりは小さな変更を頻繁にした方が良いというポリシー。
その方が実際の運用で出た問題をフィードバックしやすいという利点もあるしな。

>>73
配列の大きさを知るには std::size か std::extent を使えよ。

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

「C++ならテンプレート使えばできますよ」的な情報は色々あるけど、
結局、移植性を考えると古典的な sizeof 割り算が便利だったり。

77 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 19:00:06.40 ID:K/rzzMpV.net]
ちょっと知ったかは、よくよく初心者を馬鹿にする。
自分も、初めは、初心者だったくせに。

78 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 19:11:35.64 .net]
スタティックおじさんにならないように戒めなければ

79 名前:デフォルトの名無しさん [2019/01/10(木) 20:37:36.88 ID:WIE9C9TP.net]
ヒカキンの年収が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まとめ
tokyohitori.hatenablog.com/entry/2016/10/01/102830
あのPewDiePieがついに、初心YouTuber向けに「視聴回数」「チャンネル登録者数」を増やすコツを公開!
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 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 22:25:25.90 ID:jgU/jZru.net]
std::sizeが使えなかったとしても(主要なゲーム機の環境の1つはC++14止まりだし)、テンプレートで取得するのはC++の移植性には影響しなくないか?



81 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 22:41:00.66 ID:poVh1zdG.net]
ていうかGUIとかマングリングの統一とかvtblが最初に来ることとか
テンプレート周りばっかりじゃなくて解決して欲しい問題いっぱいあるんだけどなぁ
あと個人的にはプロパティとかも欲しい

82 名前:はちみつ餃子 mailto:sage [2019/01/11(金) 00:50:02.24 ID:le18Krsa.net]
配列の要素数を取得するだけのものを自分で書くならこんな感じかな。

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 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 01:26:18.63 ID:bUNhmYA9.net]
C++標準じゃないけどVC++の_countofが重宝してる

84 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 07:47:16.24 ID:PueFbUtC.net]
>>75
>時間を掛けたら扱う項目 (提案) も増えるからどっちでも同じだよ。

同じ訳ないだろが、
仕様変更、追加したものの、さんざん使ったあげくそんなもん使うなってのはいくらでもあるだろ。
auto_ptrはどーした。
だから3年なんて製品のモデルチェンジ並の仕様変更じゃなく、言語オタク共がもっと時間をかけて精査して、
10年に一度ぐらいの変更にしとけってこった。
そもそもCのプリプロセスだったわけで、
Cとの整合性は確保した上で双方同時に仕様変更しろといいたい。
だいたいどっち見て仕様変更してんの?言語オタクのセンズリか?wwww

85 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 11:25:51.10 ID:saOHWwmK.net]
3年ごとなのはいいと思うけど、クラステンプレートの引数推定なんか
関数テンプレートみたいに推論できないテンプレート引数が残る形に出来ない上に
エイリアステンプレートには使えないしクラステンプレートの参照にも使えないし
デフォルトテンプレート引数では省略できないしで・・

便利だけど、あまりにも片手落ちじゃね?と思うことはある

86 名前:はちみつ餃子 mailto:sage [2019/01/11(金) 13:40:13.69 ID:le18Krsa.net]
>>84
> 同じ訳ないだろが、
> 仕様変更、追加したものの、さんざん使ったあげくそんなもん使うなってのはいくらでもあるだろ。

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

> auto_ptrはどーした。

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

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

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

https://i2.wp.com/ds3.jp/wp-content/uploads/2017/07/023.jpg

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

そうならないために言語オタクにゆだねない (実際の運用で見極める) という選択なのに、
お前はもっと言語オタクに活躍しろって言ってんだぞ。
おかしいだろ。

87 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 14:33:07.36 ID:iMdUEP7b.net]
仕様変更が止まってる言語はともかくとして仕様策定のない言語に比べればC++の更新スパンは割と長い方という認識がある

これより長いのメジャーどころだとC11(1,20年)/Fortran2008(5年)/Ada2005(10年)/Haskell(5年前後)くらい?
Haskellなんかは処理系拡張ゴリゴリだしアテにならないし他はもう古めかしさを感じるなぁ

88 名前:デフォルトの名無しさん [2019/01/11(金) 14:56:08.31 ID:9UT8ehvY.net]
これ以上Dをdisるのはやめて

89 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 16:08:50.25 ID:c9plSaZI.net]
まぁ、TypeScriptは年6回updateしてるけど次が待ち遠しいな。

90 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 20:26:13.94 ID:KLK+GnJ4.net]
426名無しでいいとも!@放送中は実況板で2019/01/10(木) 18:17:49.03ID:b7PfIJnh0

新しい物好きな人は、よく、古いもの馬鹿にする。
古いものに、大切なものがあることが、
よくあることを、知らない人が多い。



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

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

個人的には草案で嬉しそうな機能を追加します!って言いながら実際の仕様では無限に延期される方が嫌

92 名前:デフォルトの名無しさん [2019/01/12(土) 13:08:56.44 ID:k/r1EiKa.net]
これな
youtube
qqwgldvnNlk
#t=41m41s

93 名前:388 mailto:sage [2019/01/12(土) 23:22:31.27 ID:0iVYXuy3.net]
>>82
配列の参照のsizeofは配列のサイズじゃないから害はあるな()

94 名前:388 mailto:sage [2019/01/12(土) 23:28:35.62 ID:0iVYXuy3.net]
>>84 は面白いよな、散々使うことで問題が見付かるって自分で初っ端から言ってるのに「だからスパンを長くしろ」つまり散々使うことが出来ないようにしろって言ってる
そして最後には言語オタクのセンズリかって、言ってる事が弾けまくってるな。

言語オタクのセンズリになってるのが不味いから、積極的に一定毎に更新するようにしていってるんだがな

95 名前:デフォルトの名無しさん mailto:sage [2019/01/13(日) 09:10:56.47 ID:47MX21Fj.net]
何が言いたいのか分らん

96 名前:デフォルトの名無しさん mailto:sage [2019/01/13(日) 09:35:19.34 ID:e8OabTpu.net]
箇条書きでよろ

97 名前:デフォルトの名無しさん mailto:sage [2019/01/13(日) 14:11:24.44 ID:goGtxYMD.net]
おれは >>84 に同意だな
数年で更新ってそれがどれだけワークしてるのさ
だいたいどれだけ認知されてるのかようわからん小さい機能追加が山盛りな一方で
大規模なconstexprとかひかえめにいって大クソじゃん?
理論もなければ、現実のワークフローなにも考慮にはいってない
結局オナニーでしょ、何オタクかはしらんが

98 名前:デフォルトの名無しさん mailto:sage [2019/01/13(日) 15:03:59.93 ID:lykUAvmZ.net]
1.仕様が確定してからでなければ実務には使われない
2.実務で使われないと良し悪しは分からない

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

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

期間が長ければその間に普及する概念も多くなるし(少なくともc++はそれを取り込む方針の言語なので)あんまり長くすると大変だと思うよ

99 名前:デフォルトの名無しさん mailto:sage [2019/01/13(日) 16:52:54.35 ID:bhcZ5Z4Z.net]
>>97
c++14のconstexprは条件分岐とかループにも対応してるから、そこそこ使えるよ。
文字列リテラルの長さを取得する関数とかも定数化できるし。
テンプレートの非型引数をあれこれする関数を定数化したりとか。

100 名前:デフォルトの名無しさん mailto:sage [2019/01/13(日) 16:58:40.56 ID:goGtxYMD.net]
機能追加したい人が、ブランチして機能追加して実務で実証して、
それから正式に仕様を提案すりゃいいじゃん
なんで仕方なく業務でC++使ってるだけなのにベータテストみたいな
仕様更新に巻きこまれなきゃならないのさ



101 名前:デフォルトの名無しさん mailto:sage [2019/01/13(日) 17:05:15.75 ID:zLcYabhS.net]
そんなことよりrvoを強制してほしい…

102 名前:デフォルトの名無しさん mailto:sage [2019/01/13(日) 17:05:25.96 ID:bhcZ5Z4Z.net]
仕様を確定させないと各コンパイラでの実装と互換性チェックとか出来ないし、
既存のコードが動かなくなるわけでもなし、
10年くらい経って十分枯れた機能を使ってれば良いだけでは?

103 名前:デフォルトの名無しさん mailto:sage [2019/01/13(日) 17:06:11.78 ID:goGtxYMD.net]
>>99
その程度の最適化はコンパイラが勝手にやればよくね?
もっと大規模なことしたいからわざわざconstexprなんてキーワード追加して
かつ人間様がわざわざそれを指定するんだろ?
で大規模なことをできる仕様か?あれが?
どうせみんなデバッグするときにconstexprをはずしてんだろ?
アホと思わないか?

104 名前:デフォルトの名無しさん mailto:sage [2019/01/13(日) 17:10:55.99 ID:bhcZ5Z4Z.net]
>>103
Visual Studioでしか試してないけど、わざわざ外さなくてもデバッグビルドでは定数化されないのが普通じゃないの?

105 名前:デフォルトの名無しさん mailto:sage [2019/01/13(日) 17:11:37.75 ID:zLcYabhS.net]
constexpr相当を勝手にやられたら、参照してるほうがリコンパイルが必要か判断できなくなるんじゃないの?

106 名前:デフォルトの名無しさん mailto:sage [2019/01/13(日) 17:27:56.15 ID:bhcZ5Z4Z.net]
constexpr指定を使わずに同じような定数化を自動でやるとなると、
一度全ての関数を定数化可能か調べるためのプレビルドみたいなことをしないと無理だよね。

107 名前:デフォルトの名無しさん mailto:sage [2019/01/13(日) 17:43:24.56 ID:goGtxYMD.net]
定数畳み込みなんて古典的な最適化手法だし、
gccはstrlenの最適化やるだろ
だからもっと大規模なことをやるためのconstexprだろと言ってる

108 名前:デフォルトの名無しさん mailto:sage [2019/01/13(日) 17:50:38.42 ID:bhcZ5Z4Z.net]
その最適化をコンパイラ依存でなく標準規格化したことに意味があると思うんだけど。
gccで出来ればあとは何でも良いの?

109 名前:デフォルトの名無しさん mailto:sage [2019/01/13(日) 18:13:13.67 ID:goGtxYMD.net]
珍説どうも
その程度の最適化技術を持たないコンパイラベンダなんてどうでもいいな
clangのバックエンド自分で作った方が早い

110 名前:はちみつ餃子 mailto:sage [2019/01/14(月) 02:10:17.55 ID:ybeYuaGe.net]
constexpr 相当のことはコンパイラが最適化で頑張るのが筋だというのは
まったく正当な意見だと思うんだが、本当に速度が必要な個所のチューニング
をしたいとき、つまりコンパイラの最適化以上のことがしたいときに
打てる手段が無かったりだとか処理系の拡張構文を使わなければならないというよりは、
不格好でも constexpr の方がマシ。

C++ は現実的に使えることを指向した言語で、現実はクソなんで、
クソを少しマシに書けるようにするってのは妥当な選択肢。
コンパイラが十分に賢いだとかいうような
理想的な世界で生きてる人は別に constexpr を使わなくてもいいよ。



111 名前:デフォルトの名無しさん mailto:sage [2019/01/14(月) 06:19:38.07 ID:S0iGLcvV.net]
pythonやmatlabみたいに配列やvectorを:とかでスライス抽出できないんですか?

112 名前:デフォルトの名無しさん mailto:sage [2019/01/14(月) 07:17:53.28 ID:4qrkuOlT.net]
技術スキンだけ高い奴が、できる奴と思い込んでるチキン。

113 名前:デフォルトの名無しさん mailto:sage [2019/01/14(月) 09:22:28.84 ID:UgNfZwvf.net]
>>111
それをアセンブラで書いてみてくれ

114 名前:デフォルトの名無しさん mailto:sage [2019/01/14(月) 10:26:42.41 ID:3TGcl/LH.net]
++20のfilterでスライスみたいな事ができるようになる
しばし待たれよ

115 名前:デフォルトの名無しさん mailto:sage [2019/01/14(月) 13:02:31.28 ID:BcFaCsuL.net]
>>110
constexpr指定はコンパイラにはわからない関数呼び出し先で
定数化できる計算であるとコンパイラに教えられるので
指定できるならした方がいいだろうけど

>本当に速度が必要な個所のチューニング
そういう個所がコンパイル時にわかってる定数だけで構成されてる例なんて
まず滅多にないんだけどね

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

constexpr はコンパイラに対するヒントであるだけでなく、プログラマにとっての制約でもある。
「そういう (速度が必要な) 箇所」であるにもかかわらず実行時の値に依存しているということを
プログラマが気づくことが出来る (ので分離するなどの工夫をする機会があるかもしれない)
というのは十分に便利だよ。

117 名前:デフォルトの名無しさん mailto:sage [2019/01/14(月) 13:39:03.52 ID:BcFaCsuL.net]
わかってないな
本当に解決しなきゃいけないボトルネックが、たかだか定数の畳み込みだけで
解決出来ることなどまず無いと言ってんの

ただの数回、数十回の普通の演算はそのままやっても十分速いんだよ
むしろ定数化できるとこを全部定数化したせいで、(即値にならないような構造体の場合)定数を読みに行くコストの方が大幅に高くなる可能性もある
constexprというか言語の機能を盲信しすぎ

118 名前:デフォルトの名無しさん mailto:sage [2019/01/14(月) 13:47:53.15 ID:BcFaCsuL.net]
あと、
>「そういう (速度が必要な) 箇所」であるにもかかわらず実行時の値に依存しているということを
ファイルから読んだ内容、mainに渡された引数、ネットワークから受け取ったデータ
そういうの(および一度でもそれらと関わった変数)全て実行時の値だってわかってる?

119 名前:デフォルトの名無しさん mailto:sage [2019/01/14(月) 22:35:17.67 ID:SOyXSPCI.net]
オフラインで複雑な計算して、結果をバイナリで埋め込んでおくことはよくやる
ゲームなら当たり前にやるワークフローだよな
しかしそういう典型的な用途にconstexprは向いてないという間抜け具合
C++でなんでもやるというのが目的になってんだよね
こういうのをオナニーって言う

120 名前:はちみつ餃子 mailto:sage [2019/01/15(火) 09:17:36.65 ID:f9+1p0X/.net]
>>117-118
やりたいときに出来る方法があるというのは無いより「マシ」と私は >>110 で述べたが、
それが君にとっての妄信なのかい?
要するに、 constexpr の成果は限定的すぎると言いたいんだろ?
ほとんどの機能は個別に見ればどうでもいいような些細なものなのは普通のことだ。



121 名前:デフォルトの名無しさん mailto:sage [2019/01/15(火) 09:57:48.09 ID:fPstZ0f7.net]
何度も言ってきたが、負けを認めたら死ぬ病気なのか?君は

122 名前:デフォルトの名無しさん mailto:sage [2019/01/15(火) 10:02:02.52 ID:fPstZ0f7.net]
ついでに言えば、俺は「指定できるならした方がいい」と書いた
俺が成果を限定的だと貶してるんじゃなくて、
君が過信してるの

123 名前:はちみつ餃子 mailto:sage [2019/01/15(火) 10:05:46.91 ID:f9+1p0X/.net]
>>122
じゃあ何が問題なんだい?
指定できるならした方がよくて、指定できるようになってるのは指定できないより良いというのなら意見は一致してるじゃないか。

124 名前:デフォルトの名無しさん mailto:sage [2019/01/15(火) 10:23:37.90 ID:p3r+u4ET.net]
>本当に速度が必要な個所のチューニング
>をしたいとき、つまりコンパイラの最適化以上のことがしたいときに
>打てる手段が無かったりだとか処理系の拡張構文を使わなければならないというよりは、
>不格好でも constexpr の方がマシ。

125 名前:デフォルトの名無しさん mailto:sage [2019/01/15(火) 10:26:22.74 ID:fPstZ0f7.net]
(途中送信してしまった)
本当に"速度"が必要なときに速度より移植性やC++標準への準拠を優先してconstexprマンセーする
これを過信と言わずして何と言う

126 名前:はちみつ餃子 mailto:sage [2019/01/15(火) 10:40:35.59 ID:f9+1p0X/.net]
>>125
速度が必要な個所が「なるべく」移植性が高い形で表現できればそれに越したことは無いし、
更にそれ以上が欲しいなら移植性を犠牲にすることも出来るんだから、
constexpr の導入に何の問題もないだろ?

127 名前:デフォルトの名無しさん mailto:sage [2019/01/15(火) 19:01:25.37 ID:CKmovdLr.net]
何でC++スレはプログラム板で勢いあるんですか?

128 名前:デフォルトの名無しさん mailto:sage [2019/01/15(火) 19:02:26.94 ID:CKmovdLr.net]
C++で有名人になりたいです
どうすればいいでしょうか?

129 名前: mailto:sage [2019/01/15(火) 21:38:31.55 ID:niK8DUcQ.net]
>>128
c++ のコンパイラを c で記述すれば、それだけで有名になれると思います
gcc が c から c++ になったときは心底残念に思っていました

130 名前:デフォルトの名無しさん mailto:sage [2019/01/15(火) 22:36:39.63 ID:CKmovdLr.net]
>>129
それって無理では‥



131 名前:デフォルトの名無しさん mailto:sage [2019/01/16(水) 01:23:29.16 ID:CLrL7dI7.net]
>>130
つ ttps://www.amazon.co.jp/dp/4797344369

132 名前:デフォルトの名無しさん mailto:sage [2019/01/16(水) 04:10:04.96 ID:GtMBox+p.net]
>>94
はちみつなんとかもそーだけど、
おまえもほんま馬鹿やね。表面しか読めないんだな。
10年間、言語オタを隔離してしまえといってるのだよ間抜けちゃん。
世の中から隔離された世界でせんずりこいてろといってる。ザーメン臭でくさいやつは地上に出るな。

大体、大規模プログラミングはすでにC++には向かないことが露呈して久しく、
せいぜいbetter Cとして生き残るぐらいしか道はないのにどういう意図を持っての3年ごとの改訂なんだ。
ポリシーなき改訂ははた迷惑なだけ
これだけ頻繁に改訂されると、スペック以外の解説本では、すでにストラウストラップ本自体改訂をキャッチアップできてない。
その邦訳ともなればますます現行仕様から浦島太郎になるのは必至。せっかく覚えた頃に新スペックの登場か?
C++初心者はいったいどの本買ってるのさ?キチガイ言語オタ江添本でも買うのか?
結局、ユーザー減少させてるだけだろうが

133 名前:デフォルトの名無しさん mailto:sage [2019/01/16(水) 04:55:20.85 ID:M8dG57eU.net]
他人をけなす人には、なりたくないな
https://lavender.5ch.net/test/read.cgi/pav/1534982458/

134 名前:デフォルトの名無しさん mailto:sage [2019/01/16(水) 05:13:03.61 ID:CLrL7dI7.net]
なるな人間になるな

135 名前:デフォルトの名無しさん mailto:sage [2019/01/16(水) 09:06:01.53 ID:Cj0f6L/5.net]
もしかして、最初の「なる」はNULLと掛かってる?
中身のない人間、アクセスしちゃダメな奴、みたいな意味で。

ちなみに自分は「ヌル」派。
だってNULLを「ナル」と読んだら「ぬるぽ」と言えなくなるもの。

136 名前:デフォルトの名無しさん mailto:sage [2019/01/16(水) 09:58:04.96 ID:qfBMRYbT.net]
>>131
一応買ってみました
でもどうせコンパイラ作るならC++でClangとかの実装を勉強したい

137 名前:デフォルトの名無しさん mailto:sage [2019/01/16(水) 12:17:10.07 ID:qfBMRYbT.net]
C++好きな人って、C‡‡、Java嫌いな人が多いのって偏見ですか?
関数型言語かRustの話しかしてない気がします

138 名前:デフォルトの名無しさん mailto:sage [2019/01/16(水) 13:56:12.46 ID:CLrL7dI7.net]
>>135
回文

139 名前:はちみつ餃子 mailto:sage [2019/01/16(水) 15:05:52.98 ID:kJO3cJ8H.net]
>>132
C++ の言語としてのポリシーはこのように提示されている。
Stroustrup 自身がその著書に書いたもの。
委員会の公式な文書にするとかどうとかいう議論はあったけど、
結局どうなったのかは知らない。

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

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

そのポリシーを気に入らないでいる自由はあるし、それはどんどん主張して良いが、
ポリシーが無いというのは事実誤認だし、自分にとって妥当ではないからといって
必要としている人を侮辱するべきではないよ。

140 名前:デフォルトの名無しさん mailto:sage [2019/01/16(水) 15:25:10.37 ID:mUX6kDFm.net]
俺が以前「D&E読んでないのか」、って言ったせいではちみつはD&Eの受け売りするようになったな・・・

ttp://i-saint.hatenablog.com/entry/20101012/1286822888
「あるプログラム言語を使うためにその言語の弁護人になるべきではない。」
そういうただの弁護人になってるバカは大抵C++を実用レベルで使ってない人間ばっかりだ



141 名前:デフォルトの名無しさん [2019/01/16(水) 15:27:49.73 ID:vTKVQdGX.net]
そやな

142 名前:はちみつ餃子 mailto:sage [2019/01/16(水) 15:39:55.50 ID:kJO3cJ8H.net]
>>140

このスレで言われたから読んだということは無いはずだが、どの発言のこと?
正確に覚えてないけど
私が持ってるやつは (日本語版の) 初版だからたぶん 2006〜2007 年頃には読んでるはず。

143 名前:はちみつ餃子 mailto:sage [2019/01/16(水) 15:56:46.23 ID:kJO3cJ8H.net]
現実的な問題があるならそれは解決されなければならない問題であって、
改定を先延ばしにすることを要求するのはおかしな話じゃない?

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

constexpr が限定的に過ぎるとかいうのはわかってる話で、
だから制限を緩くしたり consteval を検証したりしてるんだろ。
それでも必要だと判断したから入れたんだから、
そこに文句付けたって今更な話で擁護もクソもない。
駄目な部分があるのは知ってるっつーの。 それでも要るんだよ!

144 名前:135 mailto:sage [2019/01/16(水) 17:16:27.25 ID:Cj0f6L/5.net]
>>138 回文には気づかなかった。
「なるな」「人間に」がそれぞれ反転同一で、
それらフレーズを反転同一になるように並べて作成した回文か。
「人間になるな人間に」でも構造的には同じね。

いくらかPPAPな感じがしないでもない。
あと、正規表現のパズルっぽくもある。

145 名前:はちみつ餃子 mailto:sage [2019/01/16(水) 17:26:40.42 ID:kJO3cJ8H.net]
酢にピリッとした風味を足すのに使えます

_人人人人人人_
> スピリタス <
 ̄Y^Y^Y^Y^Y^Y ̄

146 名前:はちみつ餃子 mailto:sage [2019/01/16(水) 17:28:13.10 ID:kJO3cJ8H.net]
>>145
すまん。 誤爆した。

147 名前:デフォルトの名無しさん mailto:sage [2019/01/16(水) 17:58:49.69 ID:Cj0f6L/5.net]
はちみつと関係ないと思ったけど、餃子の方には関係ありそう。

しかし、C++スレッドでの真摯な態度と裏腹に、
他所ではどういうキャラクタなんだろ、と思わせる投稿ね。

148 名前:デフォルトの名無しさん mailto:sage [2019/01/16(水) 18:12:30.55 ID:mUX6kDFm.net]
真摯かねぇ・・・・希望的観測で詳しくないことに首突っ込んだり
自分の間違いや認識の誤りは絶対に認めないクソコテなのに

まぁそれも俺の主観だから他の人がどう思うかは知らんけど。

149 名前:デフォルトの名無しさん mailto:sage [2019/01/16(水) 18:41:54.90 ID:YdXHJCw6.net]
>>145
風味って鼻から空気が出る時に感じる食べ物の香りかと思ってたわ

150 名前:デフォルトの名無しさん mailto:sage [2019/01/16(水) 20:40:09.12 ID:iaQOejPk.net]
c++が対象にしてる現実問題って何だ?
c++使う大規模プロジェクトってゲームがまずあると思うけど
例外禁止未だに普通だし標準ライブラリも限定的にしか使わないよ



151 名前:デフォルトの名無しさん mailto:sage [2019/01/16(水) 20:47:01.61 ID:Tucl/crz.net]
c++で書かれたc++のコンパイラのことだろ
ここが0.001%早くなるだけで世界から年間100000時間くらいが節約できるんじゃねえの

152 名前:デフォルトの名無しさん mailto:sage [2019/01/16(水) 21:54:11.46 ID:gQtWsPR9.net]
じゃあLLVMのコーディングスタンダードこれな
https://llvm.org/docs/CodingStandards.html

例外、RTTI、iostream使わない
現実に使えるソフトってのはこういう制約で作るわけだ
C++の標準化やってる連中はメタプログラミングで遊んでるだけ
現実問題なんて何もわかってない

153 名前:デフォルトの名無しさん mailto:sage [2019/01/16(水) 23:10:45.86 ID:4t4UncJr.net]
例外使わないとかないわー
初心者かよ

154 名前:デフォルトの名無しさん mailto:sage [2019/01/16(水) 23:12:36.63 ID:Xh3PQjx5.net]
だから、ブラウザ、ロケット射的距離のシミュレーション、機械学習

155 名前:デフォルトの名無しさん mailto:sage [2019/01/16(水) 23:36:41.52 ID:gQtWsPR9.net]
>>153
初心者ってのはC++の例外のバイナリモデル説明できねーやつのことな

156 名前:デフォルトの名無しさん mailto:sage [2019/01/16(水) 23:44:05.56 ID:gQtWsPR9.net]
>>154
でC++がそれらに対してどんな問題解決してくれたんだ?

157 名前:はちみつ餃子 mailto:sage [2019/01/17(木) 01:07:41.88 ID:/VOhvfFp.net]
>>152
そこらへんはしゃーない。 便利な機能も害悪な場面は有るし、
ある時点では有用だったものが後には足を引っ張ることもある。
あるプロジェクトで縛りを設けるからといって
それが現実の全てというわけではない。

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

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

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

Go や Rust は最初からそういう方向だし。

158 名前:デフォルトの名無しさん mailto:sage [2019/01/17(木) 02:01:31.97 ID:l+wuAult.net]
このスレ、初心者を見下す者ばかりだし、

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

そう言うと、「何にもそんなことしてないよ」
とか、レスが来る。
子供スレ。

159 名前:デフォルトの名無しさん mailto:sage [2019/01/17(木) 08:10:37.95 ID:qOfK2eXQ.net]
optionalはヒープ使わないだけでnullと大差ない
せっかく静的にnot nulが保証されてるとこを壊してしまう
ほとんどアンチパターン

160 名前:デフォルトの名無しさん mailto:sage [2019/01/17(木) 08:21:29.72 ID:4hvMH0x4.net]
業務でC++使ってない雑魚の意見なんて無視しろ



161 名前:デフォルトの名無しさん mailto:sage [2019/01/17(木) 08:22:23.19 ID:4hvMH0x4.net]
趣味でC++齧ってるやつと本気で仕事としてやってるやつじゃ格が違うんだよ

162 名前:デフォルトの名無しさん mailto:sage [2019/01/17(木) 08:22:55.36 .net]
C++では好きなだけ効率を犠牲にして安全を手にすることができる
効率を犠牲にして安全を手にすることを余儀なくされている言語とは区別すべきだ

163 名前:デフォルトの名無しさん mailto:sage [2019/01/17(木) 08:47:23.41 ID:qOfK2eXQ.net]
業務で使ってない素人は平気で例外禁則とか言って返り値チェックで死ぬほど汚いコード書くんだよな

164 名前:デフォルトの名無しさん mailto:sage [2019/01/17(木) 09:07:15.76 ID:CHgbqTPA.net]
まぁ業務と違って趣味は時間を無駄につぎ込めるから
人によっては素人の方がレベル高かったりするけどな

そういうのと比較するのはホントやめて欲しい

165 名前:デフォルトの名無しさん mailto:sage [2019/01/17(木) 09:09:21.72 ID:4hvMH0x4.net]
>>164
は?業務と趣味でやってる奴が一番最強

166 名前:デフォルトの名無しさん mailto:sage [2019/01/17(木) 10:35:25.89 ID:iQ0t94Qh.net]
>>159
optionalの理解間違ってるよ

167 名前:デフォルトの名無しさん mailto:sage [2019/01/17(木) 10:39:29.94 ID:iQ0t94Qh.net]
>>163
例外禁止されるのは業務の方だろ
一見汚くなるがそちらの方がバグが少なくメンテしやすいという判断で
トップダウンで強制される
趣味なら最新の機能ばんばん使って自由にやりゃいい

168 名前:デフォルトの名無しさん mailto:sage [2019/01/17(木) 12:13:15.88 ID:oU9OMPiG.net]
実際には例外を禁止するとバグが増えてメンテしにくくなるんだけどな

169 名前:デフォルトの名無しさん mailto:sage [2019/01/17(木) 13:51:39.37 ID:l+wuAult.net]
そのソフトが気に入らないなら、
そのソフトを使わなきゃ良いだけだし。
そんなことも、いい年になって、わからないのか。

170 名前:デフォルトの名無しさん [2019/01/17(木) 14:34:02.57 ID:DbtLCT5r.net]
このスレ卒業死体



171 名前:デフォルトの名無しさん mailto:sage [2019/01/17(木) 14:43:25.66 ID:n6FY+cyG.net]
スレばいいじゃない

172 名前:デフォルトの名無しさん mailto:sage [2019/01/17(木) 15:55:58.66 ID:K5aWd8xj.net]
setjmp 使えばよろし

173 名前:デフォルトの名無しさん mailto:sage [2019/01/17(木) 17:20:21.35 .net]
遂に中級者になるのか……

174 名前:さまよえる蟻人間 mailto:sage [2019/01/17(木) 20:25:15.31 ID:e9w/TFC0.net]
>>173
なんでID消えてるの?

175 名前:デフォルトの名無しさん mailto:sage [2019/01/17(木) 20:47:04.58 ID:iJuNblTy.net]
浪人で消してるんでっしゃろ

176 名前:デフォルトの名無しさん mailto:sage [2019/01/17(木) 21:54:16.18 ID:yb/OKoP7.net]
単なるエラーを返すのに例外機構みたいな大域脱出って牛刀感あるよな。

177 名前:デフォルトの名無しさん mailto:sage [2019/01/17(木) 22:25:28.97 ID:zQ8cL02f.net]
エラーコードの取り間違いやチェック漏れがないように書くにはすごい集中力が必要で神経をすり減らす作業
スローすれば僅かな労力で安全に済むところをわざわざ戻り値にするのは事を大げさにするだけ

178 名前:デフォルトの名無しさん mailto:sage [2019/01/17(木) 23:05:50.61 ID:K5aWd8xj.net]
つ errno

179 名前:デフォルトの名無しさん mailto:sage [2019/01/17(木) 23:24:18.46 ID:yb/OKoP7.net]
なあに、例外のcatch漏れや例外安全を欠いていないか注意するのと比べたら
たいてい局所的に判断できるから大したことない。

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

検査例外じゃない例外機構でそれを保証するのも簡単じゃないと思うがな。
まぁ、一人開発で投げるのもcatchするのも全部把握しているという前提ならわからんでもないが。

180 名前:はちみつ餃子 mailto:sage [2019/01/18(金) 00:32:34.20 ID:ZqjXe4yq.net]
>>179
そのへんはチェックするツールとかあったりしない?
知らんけど。



181 名前:デフォルトの名無しさん mailto:sage [2019/01/18(金) 00:49:25.33 ID:HmTdANXo.net]
実はキャッチ漏れは戻り値処理漏れよりはるかに少ない
戻り値処理はその場でエラー処理したくない場合にも一度変数に受け取って分岐を入れて呼び元に返すということを繰り返さなければならない
なので処理漏れを起こしうる確率が呼び出し箇所の数に比例して増えていくことになる
そして本当のエラー処理をしたい場所が隠れてしまいコードの可読性が低下する
可読性が低下すればミスがさらに増える
例外なら処理したくない場合は何も書かなくていいので間違えようがないので安心
またエラー処理をしたいまさにその箇所だけに処理を書けばいいのでコードの見通しが非常に良くなりミスも激減する

エラーコード戻し安全なコードを書くことは実は非常に難しい
エラーコードチェックのせいで無駄な変数と分岐が大増殖するので正確にシステムの状態を追うことが困難になりミスが増える
例外を使えばフローが非常に単調で綺麗になるので安全なコードを書くのも簡単になる

182 名前:デフォルトの名無しさん mailto:sage [2019/01/18(金) 01:03:26.14 ID:0w3MYNkW.net]
同じ理由で、忌み嫌われてるgoto文も、実はけっこう便利だと思う

183 名前:はちみつ餃子 mailto:sage [2019/01/18(金) 01:11:53.91 ID:ZqjXe4yq.net]
正しく使えば何だって便利だし、
駄目な使い方をすれば何だって駄目だっていう
すごく当たり前すぎる話

184 名前:デフォルトの名無しさん mailto:sage [2019/01/18(金) 08:10:56.74 ID:VfzPRVfV.net]
>>183
>>180
プログラミング辞めてツールでチェックしてもらえば?

185 名前:デフォルトの名無しさん mailto:sage [2019/01/18(金) 08:14:02.62 ID:BmxrQ6cX.net]
>>180
それが検査例外じゃないかな。
いろいろ批判もあるけど、例外の内容に応じてそれぞれ異なるリカバリを確実に行うことを
保証する手段としては今のところそれ以外無いかなと思う。
まぁ、erlang/swiftあるいはgoのpanicのように、エラーの種類なんて気にせず「この下の
処理が失敗した」とだけ捉えるのが例外の扱いとして妥当なところかも。

186 名前:デフォルトの名無しさん mailto:sage [2019/01/18(金) 09:51:47.22 ID:LyFbxqMk.net]
>>181
使い捨てでないまともなプログラムはいたるところにエラーリカバリー処理が入る
つまり例外だといたるところにtry catchかつ外に投げる例外は誰がcatchするのか仕様が複雑
仕事で大規模なプロジェクトに関わったことない人はこういうのが理解できていない

187 名前:デフォルトの名無しさん mailto:sage [2019/01/18(金) 10:01:53.52 ID:LyFbxqMk.net]
例外押しのやつはどうせほとんどcatchせずにそのままexitさせてるだろ
exitするぐらいなら異常が発生した場所でabortする方がはるかにいい
確実にスタックダンプが残せる

188 名前:デフォルトの名無しさん mailto:sage [2019/01/18(金) 10:41:00.50 ID:cHsPUmRi.net]
例外が有用なのってネットワークとストレージのioぐらいという認識
それ以外で必要性を感じない
配列外アクセスとかで例外とばすなと思う

189 名前:デフォルトの名無しさん mailto:sage [2019/01/18(金) 11:40:22.57 ID:6lA8mErY.net]
>>188
そういうバグが原因の例外はcatchしなければいいんでは?

190 名前:デフォルトの名無しさん mailto:sage [2019/01/18(金) 13:31:14.01 ID:cHsPUmRi.net]
>>189
だから現実的にそういうのに例外をなげる仕様にありがたみがないでしょ



191 名前:デフォルトの名無しさん mailto:sage [2019/01/18(金) 13:49:33.80 ID:6lA8mErY.net]
>>190
なんで?SEGVも起こさずに潜在的なバグとして残り続けるよりよくない?

192 名前:デフォルトの名無しさん mailto:sage [2019/01/18(金) 13:57:52.52 ID:cHsPUmRi.net]
>>191
自分でcatchするならtry catchがうざい
バグ扱いでcatchしないならそもそも例外投げずにpanicされた方が調査が楽
また下手にどこかでcatchされたらバグに気づかない危険性がある

以上の理由により

193 名前:デフォルトの名無しさん mailto:sage [2019/01/18(金) 16:42:12.57 ID:MrHOaa15.net]
gotoなんか品質チェックに問答無用で引っ掛かる

194 名前:デフォルトの名無しさん mailto:sage [2019/01/18(金) 16:50:08.01 ID:e8mi14LA.net]
お間抜けな品質チェックだこと

195 名前:デフォルトの名無しさん mailto:sage [2019/01/18(金) 17:34:28.42 ID:dGgLcYHd.net]
ID:cHsPUmRi ってcatchで全ての例外がキャッチされると思ってるのか?

196 名前:デフォルトの名無しさん mailto:sage [2019/01/18(金) 17:42:49.84 ID:e8mi14LA.net]
例外が発生しました

「このPCの電源が入っていません」

197 名前:デフォルトの名無しさん mailto:sage [2019/01/18(金) 17:59:44.06 .net]
例外機構は誰がキャッチするのか別の問題を作った
問題先送りで日本人らしい
結局本質的には何の解決ももたらさなかった
例外機構はオカルトだったんだ。占いの類

198 名前:さまよえる蟻人間 mailto:sage [2019/01/18(金) 18:01:08.56 ID:eisM0hGT.net]
例外なくしてOS作れるか?

199 名前:はちみつ餃子 mailto:sage [2019/01/18(金) 18:48:44.03 ID:ZqjXe4yq.net]
>>197
エラーを返却値で返すことにしたところでそれは同じでしょ。
どこまで上に (返却値によって) 伝播すべきかってのは
どこでキャッチすべきかと問題は同じだよ。

200 名前:デフォルトの名無しさん mailto:sage [2019/01/18(金) 18:57:17.35 ID:X3ceYQ3H.net]
ダウソファイルのファイル名置換する簡単なプログラムをC++とC#で書いてみた(C++で作って、それ見ながらC#に変換した)
もともとシェルスクリプトでもいいようなプログラムなんで実行速度とかどーでもいい
コンパイル時間長が
C# <<< 超えられない壁 <<< C++
C++のコンパイル時間と比べるとC#は一瞬で完了する。これは、快適性がだんちだな。



201 名前:デフォルトの名無しさん mailto:sage [2019/01/18(金) 19:12:22.57 ID:seZYByET.net]
if文使うな。
ということか?

202 名前:デフォルトの名無しさん mailto:sage [2019/01/18(金) 20:07:49.64 ID:BPWAMvDw.net]
リターンコードスタイルにすると


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

デメリットだらけ

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

例外ならそれが解決すると考えているならちょっとやばい。

204 名前:デフォルトの名無しさん mailto:sage [2019/01/18(金) 23:06:15.78 ID:BPWAMvDw.net]
>>203
返り値でエラー通知するようなセピア色の世界にいるとわからんかもしれんが普通に解決するぞ

205 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 01:49:00.66 ID:gJ7zJmkH.net]
参照透過性ってそういう意味だっけ?w
最近例外ない言語増えてる事実はどう考える?

206 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 07:07:12.07 ID:+IqL7b8U.net]
>>203
リターンコード方式や例外と参照透過性になんの関係があるんだろう…

>>205
> 最近例外ない言語増えてる事実はどう考える?
Go以外にあったっけ?

207 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 07:37:40.03 ID:FscMnE/k.net]
まぁ、実際関係ないね。
同じ入力に対して常に同じエラーコードを返すなら参照透過性があると言えるし、
入力によらず場合によって例外を返すことがあるなら参照透過じゃない。

208 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 07:43:37.22 ID:WVD5Mi4y.net]
「呼び出し元を精査」とかプログラム内のデバッグに例外使ってるような書き方やね
例外処理は外部的要因(ハード、通信等)のエラーのように自分の責任外のエラーを積極的に通知するために使うべきだと思うけどな

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

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 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 09:21:20.09 ID:XwZdf3Vk.net]
Real Programmers Don't Use Exception.



211 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 12:10:48.67 ID:gJ7zJmkH.net]
>>206
rust
swiftは最初なくて後で追加
積極的に使うスタンスでない

212 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 12:13:26.40 ID:gJ7zJmkH.net]
>>209
そこに丹念なエラー処理を追加していくと、あら不思議どっちもあまりかわらない

213 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 13:16:34.67 ID:+IqL7b8U.net]
>>211
それってやっぱりいるじゃん
ってことだよね w

>>212
え?
何言ってるの?
エラー処理ってなんのこと?
具体的に書いてみて

214 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 14:04:33.44 ID:gJ7zJmkH.net]
>>213
エラー処理って言ったらまぎらわしかった
異常系の対応ってこと

215 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 14:08:49.01 ID:fPDnzLoP.net]
何にでも丹念なエラー処理が必要になることはないし
丹念なエラー処理も例外の方がやりやすい

216 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 14:30:15.46 ID:+IqL7b8U.net]
>>214
エラー処理でも異常系の対応でもいいから具体的に書いてくれよ
>>209程度ならたいしたことないだろ

217 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 14:50:30.01 ID:FscMnE/k.net]
案の定、参照透過性は関係ない話だった。

218 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 16:58:07.69 ID:gJ7zJmkH.net]
>>216
具体的にするには前提がいるでしょ

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

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

おれは例外否定派ではないよ
役に立つところは限定的と言う主張
>>188 がおれだから
まぁ確かにどちらかで言えばなくてもいいとは思ってる
ただ現状C++の標準ライブラリは例外ありきの設計に突き進んでいるから
エラーコードで突き進むのは筋が悪いのは確か

219 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 17:14:14.89 ID:+IqL7b8U.net]
>>218
> p、qは誤りを含んでいる可能性があって、異常(エラー/例外)が起こりうる
意味わからん

220 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 17:16:52.76 ID:fPDnzLoP.net]
コード書けないならそう言えば?
長文で言い訳してないでさ



221 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 17:33:46.39 ID:XYN5JTgF.net]
普通は馬鹿に割く時間がもったいないからコード書けません

222 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 17:53:36.92 ID:+IqL7b8U.net]
そう言ういいわけ要らんし

223 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 18:31:39.45 ID:fPDnzLoP.net]
信者ですらわずかなサンプルコードを書くのをためらうほどには戻り値スタイルは厄介な代物ということがわかったね
くだらない言い訳で長文を書く労力よりも高くつくということがはっきりした

224 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 20:10:32.29 ID:XwZdf3Vk.net]
普通signalで実装するよね〜

225 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 20:17:23.95 ID:gJ7zJmkH.net]
勝利宣言の後で申し訳ないけど
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 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 20:34:58.74 ID:DlKBTFO2.net]
天狗だ天狗が出たぞぉ

227 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 21:39:06.68 .net]
やっぱり例外機構はオカルトだった。皆が長い間この迷信に惑わされ疲弊した

228 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 22:11:28.98 ID:+IqL7b8U.net]
疲弊してるのは君みたいだけど w

229 名前:デフォルトの名無しさん mailto:sage [2019/01/19(土) 22:15:24.45 ID:wCv/sLww.net]
>>227
少し休め
人生は長いぞ

230 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 09:40:39.15 ID:GKseTsKF.net]
>>225
例外の使い方知らないのか



231 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 10:17:17.63 ID:0AQxsU+K.net]
具体的に書いてくれよ

232 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 10:50:52.46 ID:mVpLWWyp.net]
>>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 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 11:19:55.89 ID:GKseTsKF.net]
ほらな言った通りになった

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

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

そして戻り値スタイル派の人々は自分達が戻り値スタイルの常識にしたがって書いた例外スタイルの酷いコードを見てこう言うのだ
「ほらやっぱり例外はダメじゃないか」
とね

234 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 11:22:27.27 ID:GKseTsKF.net]
ちなみに言った通りのレスは>>181のことな

235 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 13:52:10.31 ID:Y8m3wOFq.net]
>>232
> > だとより複雑になる
> なんてことはない

具体的にコードで書けよw
要件は >>218
h()が異常処理の責任を持つ前提でな
上に例外伝搬させてるだけでは問題は何も解決しねーから

236 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 14:06:11.05 ID:Y8m3wOFq.net]
あと
>>225
で例外投げなおしてるのは本質じゃない
単にそこでなにかしら異常系の対応をするという意味合い

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

そこをそのまま exception_invalid_arg_f を上に伝搬させればいいだろと思うのはど素人
h() から外部ライブラリの exception_invalid_arg_f、exception_invalid_arg_g がそのまま
あがってくるというのは一般的にソフトウェアのレイヤー構造を崩してる
もちろん自分が担当している範囲ならありだが、
h() を外部に公開するような場合は仕様の責任をもつために自分で定義した例外で
投げなおすのは当たり前

237 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 14:24:17.92 ID:mVpLWWyp.net]
とりあえず戻り値スタイルでコード書いてくれよ
例外版に直してあげるからさ

238 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 14:29:19.26 ID:GKseTsKF.net]
>>235
ほら何もわかってない
エラー発生箇所でなんでも解決しなきゃならないと洗脳されてんだね
何もなくてもエラー処理コードを書かなければならない戻り値スタイルの書きすぎで感覚がおかしくなってる

239 名前:デフォルトの名無しさん [2019/01/20(日) 14:32:48.63 ID:Q8jHF7yk.net]
printfの戻り値もチェックしろよ

240 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 14:40:21.16 ID:GKseTsKF.net]
>>236
戻り値スタイルに慣れるとレイヤー境界がどこかも定義せずに例外変換をしてしまうようになっちゃうのかな
そして本当に変換が必要な例外は何かということも考えなくなってしまう
必要かどうかわからないけど何かしなきゃって強迫観念に苛まれてるのだろうね
戻り値スタイルだと伝達処理が必須だから例外スタイルになると不安になるのだろうな



241 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 17:06:39.20 ID:z2xvgkTe.net]
戻り値って何?

242 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 17:27:50.05 ID:wW/QZhoY.net]
戻り値を使う例

printf("%d\n",printf("1+2+3="));

243 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 17:45:51.48 ID:Q2ecPa0m.net]
配列・ポインタ・構造体・クラス→「プログラミング楽勝ンゴwwwwww」

スレッド・コルーチン・テンプレート→「あばばばば・・・」

244 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 21:20:28.02 ID:Y8m3wOFq.net]
はい誰もコード書かないw
お前らちっさいコードとか異常系の甘いコードしか書いたことないから例外マンセーなんだよ

245 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 21:31:17.80 .net]
やっぱり例外機構はオカルトだった。皆が長い間この銀の弾丸を装った迷信に惑わされ疲弊した

246 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 21:52:33.91 ID:mVpLWWyp.net]
>>244
だから後出し条件出されると困るから戻り値スタイルでコード書いてくれ
って書いてあるだろ
例外とあまり変わらないんだから書けるよね?

247 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 22:13:54.05 ID:GKseTsKF.net]
>>244
>>209

248 名前:はちみつ餃子 mailto:sage [2019/01/20(日) 22:17:29.98 ID:/TyOXJfP.net]
あのなぁ、俺は他の機能についての話で何度か書いてるけど、
適切な場面で適切に使えってだけの話で、
どんな機能だってそんなに万能だと思ってるやつなんていねぇよ。

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

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

当たり前すぎて主張するのがアホくさいんだけど、
そんなことは場合によるとしか言いようが無いだろ。

249 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 22:18:21.76 ID:GKseTsKF.net]
異常系の処理がシビアになればなるほど例外が有利になる
リターンコードスタイルは複雑化した分岐と大量の変数のせいでミスを誘発しまくる
例外ならば必要な時に必要なだけ異常系の処理を書けばいいので混乱することはない
例外スタイルにはまったく過不足がない
やりたいことをジャストそのまま書けばよろしい

250 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 22:25:39.40 ID:GTDVzsz1.net]
>>248
中身のない長文は要らんよ



251 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 22:33:30.46 ID:ps+hJNCY.net]
例外はその機構が重いから極端な異常系にしか使わないようにしてるのも今は昔の考え方なのかな

252 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 22:36:51.24 ID:XHg9p3tl.net]
>>250
ここ数10レスほど続いていた中身のない不毛なやり取りより>>248の1レスの方が有意義だと思うぞ

253 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 22:39:23.56 ID:GTDVzsz1.net]
>>252
お前もな〜

254 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 22:55:26.02 ID:GKseTsKF.net]
>>251
そもそも正常系では例外の方が速い

255 名前:デフォルトの名無しさん mailto:sage [2019/01/20(日) 23:31:58.94 ID:PO2ZqArQ.net]
>戻り値スタイルに慣れるとレイヤー境界がどこかも定義せずに例外変換をしてしまうようになっちゃうのかな

レイヤーの境界やエラーの粒度の違いに頓着しないのは、どっちかというと安直に例外投げれば良いと
考えている方のような気がするがな。
この一連の発言見ても、投げた例外が誤ってレイヤー境界を越えてしまわないようどう保証するかなんて
言及してた人いないでしょ。

256 名前:はちみつ餃子 mailto:sage [2019/01/21(月) 00:00:25.72 ID:seIeK7lJ.net]
>>251
例外にもいくつかの方式があって、SJLJ ってやつは例外を投げないときもやたら遅いが、
他のほとんどの方式は例外を投げないときはゼロに近いコストのはず。

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

要するに例外の処理速度は場合によるが、
普通のデスクトップコンピュータで SJLJ を使わざるを得ないようなみみっちいツールチェイン、ハードウェアって
ことはあんまりなかろうと思う。 (ある?)

257 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 00:16:50.05 ID:xYP7RvSv.net]
>>255
リターンコードスタイルはレイヤ境界どころか体系的にエラー処理を考えるということをしないからなぁ
例外スタイルの人はじゃあどこで処理すんのということもちゃんと考えてる

258 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 02:42:47.97 ID:sP4gcHu6.net]
例外でイベント発生させて、イベントハンドラで受けるのはど?

259 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 06:13:04.33 ID:NbFzEAOW.net]
>>255
> この一連の発言見ても、投げた例外が誤ってレイヤー境界を越えてしまわないようどう保証するかなんて
> 言及してた人いないでしょ。
保証は言語側でやってくれるから言及する必要がないだけのこと
そもそも例外は>>249の言う通りその場所で必要なものをキャッチして処理をすればいいだけ

260 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 07:28:30.34 ID:sP4gcHu6.net]
swith caseで分岐する場合もあれば、
関数へのポインタテーブル作って、ジャンプさせる場合もあるわけで、
例外も戻り値分岐も両方普通に使わないか?

C++てイベントとかイベントハンドラは環境とかboost任せで、言語仕様としては未だに確定してないのか?
C++11でようやくマルチスレッドや排他制御が仕様に盛り込まれたり、
テンプレートの仕様いじくるよりこっちの方がよっぽど大事なんじゃないのか?



261 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 08:25:41.60 ID:vJCo0PxF.net]
>保証は言語側でやってくれるから言及する必要がないだけのこと

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

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

そこでプログラマが考える「必要なもの」から漏れた例外は上位へ渡されてしまう。
それを防ぐためには呼び出し先から送られる可能性のあるすべての例外を把握する必要があるが、
検査例外がないなら動的型付言語のように投げる側と受け取る側とで平仄を合わせてやるしかない。

262 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 08:37:50.82 ID:Kndge7xV.net]
大前提が間違ってる
例外なんか最終的にはフレームワークが最上位で纏めてキャッチすりゃいいんだよ
途中でキャッチして処理するのはあくまでベターなオプションであり、それを必須とするような作りにしてはいけない

263 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 08:55:24.27 ID:NbFzEAOW.net]
>>261
> catch忘れたらそのまま上まですっ飛んでいくだけ。
闇雲にキャッチしたいならcatch(...)ってやればいいだけ w
> そこでプログラマが考える「必要なもの」から漏れた例外は上位へ渡されてしまう。
本来キャッチが必要な例外を漏らしているならそれはバグ
それは戻り値スタイルでも同じ話
違うのは例外はキャッチする必要の無い例外についてはそこで考慮する必要はない、自動的に上位に渡されるから上位の然るべき場所で考慮すればいいから
それが>>249の言う
> 例外ならば必要な時に必要なだけ異常系の処理を書けばいいので混乱することはない
ってこと

264 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 08:56:49.38 ID:vJCo0PxF.net]
>>262
半分同意。
結局のところエラーの種類に応じてきっちり対処するなら検査例外的な仕組みが必要になるが
そうでなければエラーの内容など見ずにlet it crash的に対処するしかない。
どっちつかずが一番ダメなやつ。

265 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 08:58:29.41 ID:Kndge7xV.net]
(検査例外とかいうJava自身も認める失敗作は論外として、)例外機構は正しく使えばエラー処理に対する関心の分離に有効なんだよ。
ところがC++では例外を煩わしいノイズと見做す人が多い。これは即ち関心の分離ができてないわけだ。
その一番の原因は、例外型がロクに標準化されてないことだろうね。
最上位での集約処理を実現するには、下位の全てのコードが制御下になければならない。
これは膨大な既存資産と貧弱な標準ライブラリを持つC++においては非現実的な前提である。

266 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 08:58:39.64 ID:unEY8tjt.net]
すべての例外を把握する必要はない
回復可能かつ回復が要件に含まれるなら個別に処理すべき
それ以外はアスペクトで処理すればいい

267 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 09:04:47.90 ID:nVlZ7k5e.net]
>>247
だからさ、比較できるように例外スタイルで一度きちっと異常系対応して
かつスーパーエレガントなのを書いてくれよって言ってんの
お前のは体よく異常系の処理全無視してるだけじゃん

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

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

最後にもう一度言っておくけどおれは例外を完全否定してるわけじゃねーから
使える場所は限られるって意見ね

268 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 09:07:50.76 ID:nVlZ7k5e.net]
>>262
> 大前提が間違ってる
> 例外なんか最終的にはフレームワークが最上位で纏めてキャッチすりゃいいんだよ

これがど素人の意見
ソフトウェアの品質について考えたことがない

269 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 09:11:48.87 ID:nVlZ7k5e.net]
「不正な入力です」
「ネットワークでエラーが発生しました」
「書き込みに失敗しました」

こういう情けないダイアログが表示させて終わりのアプリを作るやつね

270 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 09:19:18.64 ID:9okmCQOj.net]
>>269
それでも正常に回復できてるならそれでいいケースは多い
例外の最大の利点は例外安全さえ死守できていればアドホックな例外処理が必須でなくなることで、
より丁寧な処理が必要になれば後から追加すればよい
まあ組み込みとかやってる人には馴染まない考え方だろうね



271 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 09:35:09.59 ID:9okmCQOj.net]
まあC++開発者が未処理例外=クラッシュと短絡的に考えてしまう気持ちはよく分かるよ
呼び出し階層の途中に一つでも if (hoge() != SUCCESS) errorhandle(); があれば例外安全は破綻するわけで、あまりにも非現実的

272 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 09:54:05.98 ID:NbFzEAOW.net]
>>267
仕様は>>218が決めるんだから>>218がコードを提示すべき
>>236みたいに後出しの条件出されても困るからな

273 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 10:02:59.35 ID:+Z2Zhk1G.net]
>>267
> 例外発生場所から遠くなればなるだけ何が原因で例外が発生して、
> その回避はどうすればいいかが不明瞭になっていくってのは
> 散々語られてる例外の欠点
それ戻り値スタイルでも同じだろ

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

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

> 見ればすぐわかるんだから
お前の能力がな w

274 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 12:21:37.48 ID:Di3L4KSP.net]
>>267
例外を使いこなせていないね

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

それと大規模開発をしたことがないのはそちらだろう
関数コールするたびにずらずらと変数や分岐を書かれたらあっという間に管理不能になる
大規模だからこそ標準的なコード、必要十分なコードというのが大切になる

275 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 12:52:23.62 ID:Di3L4KSP.net]
リターンコードスタイルをレビューに出すと袋叩きにされるぞ

・ノイズが多すぎて正常系のレビューが不可能
・同じくどのエラーが上位伝達、エラー変換、共通対応、個別対応なのか見てすぐにわからない
・同じく要件漏れを見落としやすい
・正常系、異常系、判断、伝達などあらゆる要素が密集して強く結合しているため仕様変更があった場合の影響が大きすぎてレビューしきれない

276 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 13:00:29.05 ID:9okmCQOj.net]
>>275
考え方自体には同意するけど、>>271で示したように例外安全が破綻しているケースについてどう考える?
エラーコードを前提にクリーンアップ処理が記述されているコードが混入しているような場合ね
あくまでC++に限った話だけど、大規模開発で完全な例外安全を維持するのは極めて困難だか実際には絵に書いた餅と思ってる

277 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 13:01:15.22 ID:9okmCQOj.net]
>>276
訂正
極めて困難で、実際には絵に描いた餅

278 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 13:05:57.47 ID:eQbQQa6X.net]
レビュアーの経験値不足って感が否めない

279 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 13:14:15.22 ID:NbFzEAOW.net]
>>276-277
必要なら直せばいいだけ
非常に稀な事象についてまで例外安全を遵守する必要はないでしょ
そもそもそういう変なコードが混入してる体質の組織で何を言ってるんだよ? って話だと思うけど

280 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 13:20:41.40 ID:9okmCQOj.net]
>>279
文化と素養の問題だよ
例外の是非でこれだけ荒れる現状を見てれば、例外のスルーなんて怖くてできねえよ
そりゃあんたが全てのコードをレビューしてマサカリ投げまくってくれるなら別だけどねえ



281 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 13:46:08.82 ID:NbFzEAOW.net]
>>280
ごめん、言ってることがよくわからん
そもそも
if (hoge() != SUCCESS) errorhandle();
なんてコードがあったら戻り値スタイルでもどうしようもない
例外は魔法の杖じゃないんだから何でもかんでも例外使えば解決するわけじゃなくて戻り値スタイルより楽にできるというだけの事だよ
プログラムがデカくなるほどその差は開くけど

282 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 15:00:28.97 ID:9okmCQOj.net]
>>281
result = hogehoge();
if (failure(result)) エラー処理();
リソース解放();
これhogehogeが例外起こしたらリークするだろ

283 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 15:09:35.03 ID:NbFzEAOW.net]
>>282
スマートポインタ使うなりcatchしてリソース解放して例外再送出するなりいくらでもやりようはあるだろ…
ちょっとレベル低くね?

284 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 15:25:30.15 ID:9okmCQOj.net]
>>283
だからそれが例外安全だよ
勉強になったね

285 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 15:27:04.68 ID:NbFzEAOW.net]
流石に恥ずかしくね? w

286 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 15:51:37.78 ID:GjW/cezm.net]
>>283
基本的にデストラクタやリソース開放系は例外投げられると大変なことになる
catchしてなんて簡単にいってるけどもcatch(...)をそこに入れることになるのはわかるかね

287 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 16:15:33.27 ID:NbFzEAOW.net]
で、そんな当たり前のことを言って何が言いたいの?
聞きかじりの知識を披露してるとしか思えないんだが… w

288 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 18:01:37.80 .net]
例外機構は宗教
多くの人が正しいと盲信しているに過ぎない

289 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 21:32:31.75 ID:sP4gcHu6.net]
戻り値でイベント投げるという選択肢がない言語使用自体くそじゃね?

290 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 22:06:05.18 ID:5kYBxhZB.net]
Cにそんな機能あったっけ?
それとも別の言語の信者が折伏に来ているの?



291 名前:デフォルトの名無しさん mailto:sage [2019/01/21(月) 23:00:01.73 ID:vJCo0PxF.net]
>>265
そう、検査例外を正しく使うのはしばしば困難で批判も多いな。ただ、呼び出す処理がどのような
例外を返すか、静的な型検査による保証を与えてくれる仕組みとしては他に無いのも事実。

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

292 名前: mailto:sage [2019/01/21(月) 23:52:35.55 ID:N0KGcgmj.net]
>>291
>プログラマの努力で整合をとってやる(>>261の最後)カウボーイ的プログラミングになる。



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

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

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

throw 13;

293 名前:はちみつ餃子 mailto:sage [2019/01/22(火) 02:54:09.24 ID:FdSNzm47.net]
例外の処理速度については、こういう提案もある。

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

要するに、投げるオブジェクトが条件を満たすときは、
暗黙の返却値のような形で例外を伝播する仕組み。
バイナリレベルの取り扱いも ABI を決めさえすれば済むだろうし、
互換性も確保しやすそうに思う。

294 名前:デフォルトの名無しさん mailto:sage [2019/01/22(火) 07:12:53.52 ID:c7vqWXz4.net]
どう見ても例外否定派の方が宗教がかってる…

295 名前:デフォルトの名無しさん mailto:sage [2019/01/22(火) 08:50:21.38 ID:Z/sMOZE7.net]
環境の方の質問NGなら完全スルーでお願いします

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


Windows98SE の方に Visual C++ 6.0 & SP6 をインストールしても良いのかも知れませんが
DLL の整合性とか不安
VC++ 2005 は iso 持ってるだけ…Windows98SE で動くバイナリが生成できるとか何とか

296 名前:デフォルトの名無しさん mailto:sage [2019/01/22(火) 09:09:13.74 ID:Z/sMOZE7.net]
業務で使った経験は一切ないです
使い捨てレベルのものを書くのが目的です

297 名前:デフォルトの名無しさん mailto:sage [2019/01/22(火) 12:47:22.45 ID:beRmTaV+.net]
TEST::TEST()
{
 うんたら
}

ってコンストラスタがあって、このクラスにパラメータ付のコンストラスタを追加したいとき
C# だったら
TEST::TEST(int param) : this()
{
 増やす機能
}
みたいに書きますが C++ の場合はどうやって書きますか

298 名前:デフォルトの名無しさん [2019/01/22(火) 13:28:39.91 ID:/wbMKv3O.net]
TEST::TEST(int param) : クラスのパラメータ(param)
{
 増やす機能
}

299 名前:デフォルトの名無しさん mailto:sage [2019/01/22(火) 14:01:29.45 ID:mZt3aCP3.net]
>>297
委譲コンストラクタでググると出てくると思う。
たしかC++11で追加された機能。

300 名前:はちみつ餃子 mailto:sage [2019/01/22(火) 14:03:25.02 ID:FdSNzm47.net]
>>295-296
LSI-C試食版 って Windows 用どころか MS-DOS (16bit) の、しかもスモールモデルしか作れないじゃん。
使い捨ての、いいかげんな富豪的プログラミングしたらすぐメモリ足りなくなるぞ。

ワイとしては Open Watcom C++ を推すやで。



301 名前:デフォルトの名無しさん [2019/01/22(火) 14:11:32.02 ID:/wbMKv3O.net]
>>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 名前:デフォルトの名無しさん mailto:sage [2019/01/22(火) 15:51:04.50 ID:DsO4NZlu.net]
LSI-Cとかなっつw
昔の勉強用コンパイラといったらこれだったな

303 名前:デフォルトの名無しさん mailto:sage [2019/01/22(火) 16:10:30.87 ID:3oaAhSoC.net]
LS愛ちゃん

304 名前:はちみつ餃子 mailto:sage [2019/01/22(火) 16:47:15.38 ID:FdSNzm47.net]
>>302
Cマガの付録CDに常に収録されてたよな!

305 名前:デフォルトの名無しさん [2019/01/22(火) 17:01:23.17 ID:8l7UUA+M.net]
LatticeCとかBDS-Cとか使ってたわ

306 名前:デフォルトの名無しさん mailto:sage [2019/01/22(火) 17:22:22.39 ID:beRmTaV+.net]
>>298-299

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

で出来ました。ありがとうございました。

307 名前:デフォルトの名無しさん mailto:sage [2019/01/22(火) 18:21:52.81 ID:Z/sMOZE7.net]
bcc32c でコンパイルしたバイナリが Win98SE 上で動くことを確認…
Win98SE 上だと Turbo C が動くことを確認…

Open Watcom C++ というのは存じませんでした
確認してみます

308 名前:デフォルトの名無しさん mailto:sage [2019/01/22(火) 18:30:45.76 ID:hELj0NVW.net]
森公一郎さん、4年前に亡くなってる

309 名前:デフォルトの名無しさん mailto:sage [2019/01/22(火) 18:51:51.72 ID:c7vqWXz4.net]
>>295
> VC++ 2005 は iso 持ってるだけ…Windows98SE で動くバイナリが生成できるとか何とか
なんで試さんの?

310 名前:デフォルトの名無しさん mailto:sage [2019/01/22(火) 20:54:28.21 ID:Z/sMOZE7.net]
DLL hell に躊躇



311 名前:デフォルトの名無しさん mailto:sage [2019/01/22(火) 23:43:17.99 ID:f8uEJHYw.net]
LSI-C試食版www
懐かしいなあ
あの頃はものすごくCPU遅かったよね
486にして感激したからな
もうC言語でプログラムはしたくない
C++だ・・・

312 名前:デフォルトの名無しさん mailto:sage [2019/01/23(水) 03:50:30.92 ID:2NaZdHzA.net]
コメントに//が使えない時点でもうダメだな俺はw

313 名前:デフォルトの名無しさん mailto:sage [2019/01/23(水) 06:49:23.93 ID:u7DJzLvn.net]
古いOSでも動作させたいけど、ソースは新しい規格で書きたい、
と言うのは要望としてはありうるな。

>>295 はLSI-C試食版(C89相当だっけ?)を使ってるようだから、
そのクチではないのかも知れんけど。

314 名前:デフォルトの名無しさん mailto:sage [2019/01/23(水) 07:14:34.51 ID:aGw/aeEH.net]
>>310
今時なら仮想マシンでやればいいだけだろ

315 名前:デフォルトの名無しさん mailto:sage [2019/01/23(水) 08:57:06.72 ID:A4LjhfFf.net]
>>312
コメント前に // つけるより
/*
コメント
*/

あるいは

#if 0
コメント
#endif

のほうがすっきりしないか?

316 名前:315 mailto:sage [2019/01/23(水) 08:57:45.81 ID:A4LjhfFf.net]
コメントが複数行にわたる前提ね

317 名前:デフォルトの名無しさん mailto:sage [2019/01/23(水) 09:18:31.94 ID:NxchbiGL.net]
だから何?
それに同意しようがしまいが単一行コメントのときに面倒なのは変わらないよね
個人的にはエディタがコメントの一括付け外しに対応してるなら複数行でも//の方が見やすいと思ってるけど

318 名前:デフォルトの名無しさん mailto:sage [2019/01/23(水) 09:36:35.20 ID:WSWjtujW.net]
C言語の a=b; って
アセンブラで言うと、メモリ→レジスタ→メモリって移し替えてるのと同じ?
メモリ→メモリにデータコピーする時って、必ずレジスタを経由しないとだめなのかな?
アセンブラ勉強初めたばっかで何言ってんだこいつ的な感じだったらごめん。

319 名前:はちみつ餃子 mailto:sage [2019/01/23(水) 10:06:54.98 ID:+T2/7smM.net]
>>318
CPU の種類による。

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

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

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

コンピュータの設計の根本を左右する方針の違いなので、
理解があやふやとはいえ、ここに引っかかりを感じたというのは才能を感じる。

320 名前:デフォルトの名無しさん mailto:sage [2019/01/23(水) 15:54:30.09 ID:WSWjtujW.net]
>>319
自分が勉強してたCPUがたまたまレジスタ必要とするものだったということですね。ありがとうございます。

あと、intelとryzenは、どちらのCPUであっても殆どのソフトは動作しますが
この2つのCPUのアーキテクチャオペランドは同じということでしょうか?
ゲームなんかは高速化の部分でアセンブラ使う場所も頻繁にあるんじゃないかなと思うのですが。



321 名前:デフォルトの名無しさん mailto:sage [2019/01/23(水) 16:07:56.74 ID:WSWjtujW.net]
すみません自己解決。
x64ですね。

322 名前:デフォルトの名無しさん mailto:sage [2019/01/23(水) 22:57:36.31 ID:A4LjhfFf.net]
>>317
wwww
逆に、だから何?
エディタが/* 入力と同時に
*/ を自動挿入してくれるなら全く変わらないだろ
それともおまえのエディタは / 入力で
もひとつ/ を自動挿入するように設定でもしてるのか?
ゆとりもここまで来るとどーしよーもねーな。

323 名前:デフォルトの名無しさん mailto:sage [2019/01/23(水) 23:18:56.27 ID:A4LjhfFf.net]
>>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 名前:デフォルトの名無しさん mailto:sage [2019/01/23(水) 23:20:08.21 ID:A4LjhfFf.net]
アンカー違い
× >>319
>>320

325 名前:デフォルトの名無しさん mailto:sage [2019/01/23(水) 23:21:30.54 ID:MK/3pF0O.net]
>>322
自分で複数行が前提だと言っときながら何言ってんの君

326 名前:デフォルトの名無しさん mailto:sage [2019/01/24(木) 00:07:57.67 ID:sZmPY6bv.net]
>>325
*/の自動補完は複数行だろうが単一行だろうが関係ないだろが。
おまえがエディタ支援による入力補助を持ち出したから応じてやっただけだろゆとり
入力の手間はむしろ/* */の方が楽なんだよお馬鹿さん

327 名前:デフォルトの名無しさん mailto:sage [2019/01/24(木) 00:17:17.17 ID:sZmPY6bv.net]
>>325
それとさ俺が複数行限定といってるのに
>>317
>単一行コメントのときに面倒なのは変わらないよね

また単一行の話をしてるのはそっちだろーが。
おまえは朝鮮人か?それともボケてんのか?

328 名前:はちみつ餃子 mailto:sage [2019/01/25(金) 04:31:55.12 ID:D9LdM3uI.net]
まあ例えばインテルアーキテクチャでも、
機械語の命令列を内部で μop に分解して最適化してから実行したりするので、
機械語のレベルなんてまだまだ高級な層。

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

Z80 の牧歌的な世界を知ってると隔世の感がある。
実際、演算能力で言えば何百倍とか何千倍とかいう規模で違うもんな……

329 名前:デフォルトの名無しさん mailto:sage [2019/01/25(金) 04:48:14.16 ID:RBnOR415.net]
Z80Aで、おおむね4Mhzだったような
無印Z80は知らない

日本人だとZ80AよりμPD870Cの方が普及???

330 名前:デフォルトの名無しさん mailto:sage [2019/01/25(金) 05:29:09.86 ID:VVNAHEZ9.net]
>>329
μPD780C-1な。870だと電卓チップになってしまう。

詰めが甘いな :-P



331 名前:デフォルトの名無しさん mailto:sage [2019/01/25(金) 09:28:14.11 ID:U8XeH6tm.net]
>>328
自分もこの結論に達した

332 名前:デフォルトの名無しさん mailto:sage [2019/01/26(土) 10:50:23.69 ID:ibgF9MiT.net]
初心者です
関数の引数の1つとして3種類の構造体を受け入れたいという場合オーバーライドで3つ書くのよりスマートなやり方ありますか?

333 名前:デフォルトの名無しさん mailto:sage [2019/01/26(土) 11:07:13.35 ID:MaEquCGy.net]
オーバーロードで3つ書く方がスマートですよ

334 名前:デフォルトの名無しさん mailto:sage [2019/01/26(土) 11:19:38.97 ID:UuAHSy+r.net]
関数テンプレートというものが一応存在する。

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

このように記述すると、型に応じたオーバーライドをコンパイラが自動で作成してくれるという機能。
ただ、実際に呼び出すコードを書かないと(型が確定してないから)コンパイル対象にならなず限定的なエラーチェックしか行われない、
エラーが出た時に問題が関数内なのか呼び出し元なのかが分かりづらい、エラーメッセージもわけわからない、という欠点があるので、
あまり初心者向きとは言えない。すごく便利なんだけどね。

335 名前:デフォルトの名無しさん mailto:sage [2019/01/26(土) 13:38:51.24 ID:ibgF9MiT.net]
>>333-334
ありがとうございます
オーバーロードでしたね^^;

336 名前:デフォルトの名無しさん mailto:sage [2019/01/26(土) 17:08:07.75 ID:a/6Wmtam.net]
>>335
Variantが使えるならVariant
対照的にunionはおすすめしない

337 名前:デフォルトの名無しさん mailto:sage [2019/01/26(土) 18:04:32.62 ID:wmp8xlgD.net]
結局中で分岐だろ

338 名前:デフォルトの名無しさん mailto:sage [2019/01/27(日) 04:46:54.79 ID:tVyD3cTv.net]
>>336
variant勉強します
ありがとうございます

339 名前:デフォルトの名無しさん mailto:sage [2019/01/27(日) 23:53:20.30 ID:PNYmCs1E.net]
投機実行がセキュリティホールになるなんて
当時の技術者は予見できたのだろうか

340 名前:デフォルトの名無しさん mailto:sage [2019/01/30(水) 21:22:57.38 ID:pEOkr0Qg.net]
いやー
論文ネタに困った情報系の役にたたん学者がひねり出したネタだろ
投機実行を攻撃に使った実例なんてあるのか?



341 名前:デフォルトの名無しさん mailto:sage [2019/01/31(木) 10:11:52.05 .net]
煽ってたら論文ネタに困った情報系の役にたたん学者が投機実行を攻撃に使った実用法をひねり出したらどうすんだ

342 名前: mailto:sage [2019/01/31(木) 23:01:04.87 ID:GI5VQ7Hx.net]
>>340
手元にようやく SandyBridge(IvyBridge) を確保しましたのでいろいろ試してみようと思っています

343 名前:デフォルトの名無しさん mailto:sage [2019/01/31(木) 23:07:28.54 ID:sIpyZVmV.net]
Googleだったっけ、見つけたのは?
役に立たない暇な部門があったんだ

344 名前:デフォルトの名無しさん [2019/02/01(金) 03:34:40.30 ID:fFpCRDyYq]
twitter で見かけたのですが、a[i++] = 0; って定義済みですよね?

345 名前:デフォルトの名無しさん mailto:sage [2019/02/02(土) 08:27:42.12 ID:tJohl//6.net]
C++って未だにasync,awaitがないんだな?
江添とかtemplate使えないC++プログラマはポインタを使えないCプログラマと同じゴミとかいってるんだが、
templateは確かに面白いし頭の体操になるけど、templateはひな形があれば、泥臭くエディタちょい編集して使い回したり、
yacc/lex使うとか、ループのアンロールはスクリプトで展開するとかいくらでも手段はあるので、
どう考えてもasync,awaitあたりの実装の方が重要だと思うけどな。

346 名前:デフォルトの名無しさん mailto:sage [2019/02/02(土) 08:50:29.54 ID:UyxpbyFe.net]
futureでいいんじゃね。C#のawaitもFutureパターンの実装でしょ。

347 名前:デフォルトの名無しさん mailto:sage [2019/02/02(土) 11:01:27.11 ID:tJohl//6.net]
>>346
.net動いてるのとそれが前提でないC++では全く同じにはいかんのだろな
教えてくれてありがと

348 名前:デフォルトの名無しさん mailto:sage [2019/02/02(土) 11:23:05.73 ID:ZfwOhOL2.net]
コルーチン拡張は提案段階なんだっけ?
MS界隈ならC++/WinRTで使用例があるけど

349 名前:デフォルトの名無しさん mailto:sage [2019/02/02(土) 11:47:15.38 ID:qgXcCvEo.net]
>>347
いや別に
C#のasync/awaitって単なるステートマシンジェネレータだし
標準化は至難だろうけど技術的にはC++でできない理由はない

350 名前:デフォルトの名無しさん mailto:sage [2019/02/02(土) 13:08:31.83 ID:cZfjknnV.net]
>>345
再帰includeとdefineの組み合わせでも大抵はなんとかなったりするなw

templateは型に縛られてるから安全な反面、不便なこともあるよね。
sjisとutf8が区別できないし。なぜchar8_tを作らなかった…(´・ω・`)



351 名前:デフォルトの名無しさん [2019/02/02(土) 13:11:59.53 ID:OjPcxytf.net]
テンプレートよりObjective-Cのやり方の方が好き

352 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 12:10:14.76 ID:JIYTTgNa.net]
江添なんて最新仕様知ってる俺スゲーやりたいだけの奴だからな。
まともに使えるプログラムを書いてるわけじゃない。

353 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 14:07:26.32 ID:IhqR/Csp.net]
でもプログラム書くなんて誰でも出来るじゃん

354 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 14:11:00.19 ID:s/ZudwPt.net]
おまえのgithubさらせよ

355 名前:デフォルトの名無しさん mailto:sage [2019/02/03(日) 14:15:39.93 ID:IhqR/Csp.net]
>>354
お前が先に晒せ

356 名前:デフォルトの名無しさん [2019/02/03(日) 14:56:06.74 ID:nprxb46h.net]
きっとはぶられる

357 名前: mailto:sage [2019/02/03(日) 15:08:24.54 ID:t4xt++Qj.net]
>>354
そろそろ github に移行しようか…
https://mevius.5ch.net/test/read.cgi/tech/1434079972/

hibari.2ch.net/test/read.cgi/tech/1289715349/
hibari.2ch.net/test/read.cgi/tech/1295273862/
hibari.2ch.net/test/read.cgi/tech/1309527259/
peace.2ch.net/test/read.cgi/tech/1313183984/

358 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 12:56:22.82 ID:Y0slw8we.net]
>>352
江添とか書いてることみてるとムカっ腹立たないか?
何様だこいつ。しかもやってることキチガイだろ

359 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 13:07:21.17 ID:qU4d2Hmv.net]
>>358
は?お前じゃあ江添より仕様に詳しくてC++のコンパイラを実装出来るような能力なのかね?ええ?

360 名前:デフォルトの名無しさん [2019/02/04(月) 14:02:36.47 ID:zmkNdOJF.net]
工学部生よりましやろ



361 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 14:08:27.48 ID:n76odGjc.net]
例え世界一の物知りでもそんな口の効き方をする人とは
付き合いたくないな
RMSにはEMACSやgccといった作品があるから許される

362 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 14:56:20.34 ID:iZ37iel0.net]
この3冊は、日本人が作った神の書。
皆、基地外。基地外しか、こんな本を書けない

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

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

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

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

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

C++テンプレートテクニック 第2版、
επιστημη(えぴすてーめー)・高橋 晶、2014

363 名前:デフォルトの名無しさん [2019/02/04(月) 15:06:30.08 ID:zmkNdOJF.net]
ステマ宣伝乙
5ちゃんでは禁止

364 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 15:58:27.96 ID:n76odGjc.net]
Linuxの黎明期にman page 書いていたのは janneさん事、中谷千絵さんだよ
エピスメーテーさんは昔っから雑誌に記事を書いていたな
The Basicだった?

真ん中の人は知らないけどどんな貢献をしたの?

365 名前:はちみつ餃子 mailto:sage [2019/02/04(月) 16:09:06.48 ID:kMmgpke2.net]
>>364
ざべは読んだことないけど、Cマガでεπιστημηの名前はよく見たな。
今では Teratail で C++ の質問をするとたまに回答者として出現するよ。

366 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 16:27:32.33 ID:n76odGjc.net]
>>365
そうでしたか、CUJJとかは買っていたけど...CMAGは
時々だったので

367 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 17:40:44.94 ID:Y0slw8we.net]
>>362
えぴすてーめーと高橋のC++テンプレ本は神だわ。
なんというか、読者に理解させてあげたいという熱意が伝わってくる
江添とは大違い
江添にお布施するつもりは毛頭ない。死ねばいいのに

368 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 17:42:39.71 ID:Y0slw8we.net]
>>359
本人様のご登場wwww

369 名前:361 mailto:sage [2019/02/04(月) 18:14:10.83 ID:iZ37iel0.net]
>362 の3冊は、単なる規格の文章ではなく、それをソースコードの実例にした所がすごい!
だから、プログラマーは皆、Kerrisk の本を枕にして寝ろって、言われている

たぶん、江添やMISRA‐C の本も、外国で発売されていれば、大絶賛されるはず!

370 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 19:01:28.11 ID:GH1lEwiX.net]
エピスや高橋ageて江添sageってのもよくわからんな
立ち位置違うし江添は委員会の人間だから
仕様や提案について素晴らしいとかクソとか言う権利や責務がある
それをsageるってことは「現行仕様マンセー、標準規格に欠点など無い!」みたいなことか?



371 名前: mailto:sage [2019/02/04(月) 19:11:50.08 ID:CLpqTC7n.net]
>>362
エピさん単著は買わないですね、エピさんの文章は今の言葉で表現するとすれば「ポエマー」が近い

同じくポエマーに分類される私がいうことではないのですけど…

372 名前:361 mailto:sage [2019/02/04(月) 19:22:56.32 ID:iZ37iel0.net]
元々は、Kerrisk も、江添やMISRA‐C のメンバーも、
規格をソースコードの実例で、表示してやろうという、とんでもない企画!

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

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

こういうのは、忍耐力がある日本人が得意なんだろう。
外人は、まずやらない

373 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 19:24:18.62 ID:n76odGjc.net]
MISRA はBOSCH を引き込み損なった時点で絵に描いた餅でしょうね
デンソーが勝利すれば勝ちの目も出て来るかもしれないが

374 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 19:29:03.26 ID:Y0slw8we.net]
>>372
>規格をソースコードの実例で、表示してやろうという、とんでもない企画
いや言語の解説本は規格をわかりやすく、ソースコードを例示して解説するでしょ。
それがなければ、規格だけでいいわけで、解説にならない。

わかりやすく書こうとしてるけど、そこの熱意の持ち方と、おつむのレベルでほんとにわかりやすいかどうかが問題なんだろ。

375 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 19:32:47.98 ID:GH1lEwiX.net]
そら商業目的の本だったらわかりやすく書くの当たり前だろ
江添の本は読んだことないから分からんけど
売られてる本とブログで比較してないか?

376 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 19:36:24.60 ID:Y0slw8we.net]
>>372
>こういうのは、忍耐力がある日本人が得意なんだろう。
>外人は、まずやらない

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

何もプログラム言語だけじゃないわ。人に説くこと、伝道師のようなwriterは日本人よりむしろ、英米人に多い。
クヌースの The Art of Computer Programmingあたり読んでみ。

377 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 19:46:25.23 ID:Y0slw8we.net]
>>375
反響見て、読んだやつにバグだしさせてたあとブログ印刷物なり、ebook販売するんだから
金取ろうが、無償でやるかはどーでもいい話
日本語のコンピュータ書籍なんて販売数からしてとてもとてもメシ食えないから
ほぼ実益のないめんどくさいだけの作業
ブログでわかりにくければ本になってもわかりにくいことは保証する

378 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 19:48:43.30 ID:9WmylojK.net]
クヌースの4-1巻目は、かなりの分量をZDD/BDDの説明に割いていて
このアルゴリズムは北海道大学で日本人が考えた物だね

で、その江添さんという方はどの様な技術貢献をしたの?

379 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 20:02:32.24 ID:Y0slw8we.net]
>>378
警察に喧嘩売って訴訟おこしたこと以外知りませんがな
きちがいの所業なんざ

380 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 20:32:13.56 ID:GH1lEwiX.net]
まぁC++テンプレートテクニックがわかりやすい良書なのは同意するけど
高橋晶ってたまにテクニックのメリットを語るときに
デメリットに気づいてない(またはスルーしてる)ことがあるんだよな
わかりやすくても鵜呑みには出来ない



381 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 20:36:58.42 ID:Y0slw8we.net]
ま、江添が好きならどーぞご勝手に俺は願い下げってだけ

382 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 20:39:36.21 ID:GH1lEwiX.net]
好きとは言ってないよ
結局役に立つ&正確な情報を書いてるかどうかが全てだ

383 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 20:41:05.88 ID:GH1lEwiX.net]
というか江添のブログでも「あれ?おかしくね?」みたいなことあったから
どっちがどうとも言えないけど

384 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 21:00:45.66 ID:Y0slw8we.net]
だいたい

ドマンコ

とかいう社名が下品すぎる

385 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 22:23:14.32 ID:ZVfvG47Q.net]
>>365
毎月題材がカウンタークラスの人…

386 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 23:23:10.64 ID:Y0slw8we.net]
https://qiita.com/dc1394/items/d2b8de600a304664cdb5
実に参考になった

387 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 23:47:34.63 ID:xjVdC68S.net]
型指定するのが嫌だから最初にautoを使うc++入門書籍を書こうとしてたり、
まともにプログラム開発してたら最新の仕様を追えないので開発しないとか言い出す奴とか
普通の精神してりゃ信用せんわな。
根本的にありゃ馬鹿だよ。

388 名前:デフォルトの名無しさん mailto:sage [2019/02/04(月) 23:59:20.89 ID:GH1lEwiX.net]
>まともにプログラム開発してたら最新の仕様を追えないので開発しないとか言い出す奴とか
江添みたいに標準化委員会に属してたら正しいと思うけどね
何もコミュニティに貢献しない趣味グラマだったりライターでもない奴が言ってたらアホだが

389 名前:デフォルトの名無しさん mailto:sage [2019/02/05(火) 01:34:09.47 ID:PwKFrksX.net]
趣味グラマにドワンゴが給料払ってるんだろwww

390 名前:デフォルトの名無しさん [2019/02/05(火) 06:14:00.98 ID:sYtbTM3p.net]
すみません
n秒ごとに関数foo()を繰り返し実行するような、かつ「低負荷な」方法を教えてください。
n秒は、精度はだいたいでよくて、たぶんnは600(つまり10分)程度にしたいと思っています。

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

よろしくお願いいたします



391 名前:はちみつ餃子 mailto:sage [2019/02/05(火) 06:20:20.09 ID:VmiK9YL/.net]
>>390
SetTimer API を使って WM_TIMER イベントの発生を待つのが妥当な方法だと思う。
イベントが発生するまでは何もせずに待つだけなので低負荷。

392 名前:389 [2019/02/05(火) 06:57:10.23 ID:sYtbTM3p.net]
>>391
windows API をつかう方法で行ってみます
ありがとうございます。
標準C++ で導入された
thread とchrono を用いて、while (1 )を回すという方法がGoogle検索で 出てきますが、低負荷な方が良いので、windows API で行ってみます。
ありがとうございます。

393 名前:デフォルトの名無しさん mailto:sage [2019/02/05(火) 07:12:26.12 ID:kZRbw8C2.net]
whileは単なる無限ループじゃなく、スレッドが立ち上がるまで、sleep で CPU を眠らせてるんじゃないの?
whileだけだと、負荷かかるし、sleep一発だと、繰り返し待ちできないから

394 名前:デフォルトの名無しさん mailto:sage [2019/02/05(火) 07:23:19.83 ID:kZRbw8C2.net]
https://ja.cppreference.com/w/cpp/compiler_support
gccは並列STLまだ実装できてないんだな。がかーり
C++2xは後回しでいいから先に実装してもらいたいな
msvcがしらん間にgccを上回るC++17準拠状況になってるんだな
msがかなり頑張ってるのがかなり意外

395 名前:デフォルトの名無しさん mailto:sage [2019/02/05(火) 10:24:17.44 ID:Jquzc2Ph.net]
趣味グラマーって本職が焼そば職人だっけ

396 名前:デフォルトの名無しさん mailto:sage [2019/02/05(火) 10:36:43.43 ID:PCiHKxWL.net]
MSが標準をわざと外して潰し合う戦略を取ってたのは遥か昔
今は協調してシェアを取り込んでから独占する戦略がメイン

397 名前:デフォルトの名無しさん mailto:sage [2019/02/05(火) 13:32:56.11 ID:HSCecGQW.net]
>>395
ブロガーで良くね?

398 名前:デフォルトの名無しさん mailto:sage [2019/02/05(火) 18:47:37.04 ID:VoURnPvV.net]
スパゲッティーでは?

399 名前:デフォルトの名無しさん mailto:sage [2019/02/05(火) 21:03:29.46 ID:6rjCuhxB.net]
>>397
つ ttps://cpplover.blogspot.com/2016/05/2016.html

400 名前:デフォルトの名無しさん mailto:sage [2019/02/06(水) 08:14:04.23 ID:QvJUH+Yd.net]
>>395
Oishii Sru Paの話?



401 名前:デフォルトの名無しさん mailto:sage [2019/02/07(木) 11:49:12.65 ID:nCm+DDSJX]
【製作中 の wasm(WebAssembly)/MS Windows 共通の Window System】

nowsmartsoft.atwebpages.com/


ひきこもりの L より。

402 名前:デフォルトの名無しさん mailto:sage [2019/02/07(木) 12:01:48.93 ID:nCm+DDSJX]
>>401
何日か前から5chで公開した(「つもり」だ)けど、Ninja Analyzer によれば、そのリンク先
を訪れたユニークユーザー数は、今のところ「1」。

どうなってるの。

403 名前:デフォルトの名無しさん mailto:sage [2019/02/09(土) 10:04:34.12 ID:Js3eMSlM.net]
6
だまれ朝鮮人
失せろ

404 名前:デフォルトの名無しさん [2019/02/09(土) 13:43:15.52 ID:n731AUSx.net]
Class TA{
public:
TB B;
}
Class TB{
・・・
}
Class TA::TA(){ //コンストラクタ
B = new TB;
}

で、TAのデストラクタが走った時点でBも一緒に消えるんですかね。
それともTAのデストラクタで delete B が必要なんですかね。

405 名前: mailto:sage [2019/02/09(土) 14:02:51.11 ID:1JWnTnfH.net]
>>404
new したのなら delete は必ず書かないといけない
https://ideone.com/z0IYgT

406 名前:デフォルトの名無しさん mailto:sage [2019/02/09(土) 14:24:00.17 ID:6TG0Gkwe.net]
必ずというわけではないよ

407 名前: mailto:sage [2019/02/09(土) 14:36:03.78 ID:1JWnTnfH.net]
>>406
理解はしますが薦める気にはならないのです…

408 名前:デフォルトの名無しさん mailto:sage [2019/02/09(土) 15:47:27.40 ID:YAWSonmT.net]
>B = new TB;

エラーになるんじゃね?

409 名前:デフォルトの名無しさん mailto:sage [2019/02/09(土) 16:20:31.91 ID:NnmcfWng.net]
>>408
それぐらいは忖度してやれよ

410 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 13:20:38.44 ID:MWi64iyD.net]
メンバ変数にクラスを持つときはポインタ型にしてコピーコンストラクタを作るべきですか?
それともクラスの実体を持たせても大差ありませんか?



411 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 13:21:20.82 ID:XMMc9iis.net]
クラスと用途による

412 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 13:40:02.39 ID:Ix0Ul5tp.net]
実体で用が足りるならすべて実体でよい
効率云々はまず一通り動くものが出来上がった上でそこが問題になってから考えろ

413 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 13:41:09.49 ID:MWi64iyD.net]
わかりました
ありがとうございます

414 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 14:15:19.12 ID:0+1G/wKU.net]
値型とエンティティを意識して作って下さい
エンティティはスマポで管理、値型は実体を持たせるべきでしょう

415 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 14:26:23.71 ID:KPch74RC.net]
エンティエィって何?
定性的な定義を頼むわ

416 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 14:30:03.09 ID:0+1G/wKU.net]
>>415
インスタンスがアイデンティティを持つならエンティティ

417 名前: mailto:sage [2019/02/10(日) 15:14:36.29 ID:nGIVWkyn.net]
>>416
実数はエンティティですか?
符号付整数はエンティティですか?

418 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 15:16:29.18 ID:sKzQuR0e.net]
あーやだやだ
こういう宗教じみた設計論語るやつ

419 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 15:16:40.47 ID:0+1G/wKU.net]
>>417
値です

420 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 15:17:40.51 ID:0+1G/wKU.net]
>>418
現実を見据えて追求すると自然と出てくる答えです



421 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 16:25:18.62 ID:scT3207q.net]
親クラスとライフサイクルが同じか数値型なら実体、そうでないならポインタでいいだろ。

動的確保よりコピーやmoveのほうがコストが低い場合とか検討の余地はあるけど、考えすぎると禿げる。

422 名前:デフォルトの名無しさん [2019/02/10(日) 16:31:34.44 ID:25jgEgQt.net]
>>404
デストラクタは virtual に汁

423 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 20:26:50.17 ID:EWmLbbO6.net]
どうせそこまで最適化も厳密なメモリ管理も必要なプログラムじゃないだろ。

424 名前:デフォルトの名無しさん mailto:sage [2019/02/10(日) 21:57:11.00 ID:sKzQuR0e.net]
>>420
ほらね、こういう精神論がでてくる

425 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 01:02:52.04 ID:QKPibkAC.net]
組み込み以外に使い道あるんですか?

426 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 07:24:34.72 ID:KN5ZTrY9.net]
OS作ったり、ブラウザ作ったり、3Dバリバリのゲームを作ったり、他の言語向けに機械学習や科技計算等のライブラリを作ったり、いろいろあるよ

427 名前:デフォルトの名無しさん [2019/02/11(月) 12:01:51.83 ID:itY+kGJR.net]
RubyはC++が嫌いだからCで書かれている

428 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 12:06:46.94 ID:QKPibkAC.net]
>>426
天才達だけに許された言語なのでしょうか?
もっと身近なプロダクトはないんですか?

429 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 12:32:11.46 ID:PRVQuzHN.net]
古い例だとニコニコ動画がC++
まあおかげで開発がスケールせずオワコン化したわけだが

430 名前:デフォルトの名無しさん [2019/02/11(月) 12:32:14.48 ID:itY+kGJR.net]
the door is open



431 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 12:43:40.65 ID:MmPS3pUZ.net]
>>428
聞いてばっかりじゃなくてお前がどういうものを探しているか書いたら?

432 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 13:10:19.37 ID:Y0EVtjJ+.net]
CADとか画像処理とかビット演算系アルゴリズム(cf.ZDD)なんかは
まだまだ他の言語には負けないね

433 名前: mailto:sage [2019/02/11(月) 13:44:01.42 ID:HT+vwAFW.net]
>>429
>開発がスケールせずオワコン化した
これってどういう意味ですか?

434 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 13:51:23.27 ID:awXFg/MG.net]
JavaからC++勉強中です
C++の場合、他のクラスのオブジェクトを複数持たせるときは、一般的にどうするんでしょうか

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

辺りをネットで読ませてもらいましたが、こんな感じで良いんでしょうか?
不勉強な上、他のオブジェクト持つという基本的なことなので、なんかもっと簡単な方法を見落としてる気がしてしまいまして

435 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 13:54:24.78 ID:QKPibkAC.net]
>>434
時と場合によりますので一般的な答えはありません

436 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 14:06:14.14 ID:fD0IDjkv.net]
>>434
Javaのオブジェクト参照はC++のポインタに該当する。
C++のオブジェクトは、型を持ったバイト列だと考えていい。
C++で自動変数を宣言すると、スタックにバイト列が割り当てられる。
newやスマポやコンテナを使うと、ポインタによりヒープでメモリーが割り当てられる。
ポインタも型を持ったバイト列。ポインタは配列のように周りのメモリーにアクセスできる。
C++のクラスは構造体に関数群を追加したもの。C++でクラスを継承すると、関数群とバイト列を引き継いだサブクラスになる。

437 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 14:12:14.41 ID:0TxoCFW6.net]
>>434
大体、その3つの通りで、そこに述べられたものの上から優先的に選ぶ。
つまり、普通にメンバ変数にオブジェクトとして宣言するのがC++では
最も効率が良くて伝統的な書き方。それでは問題が生じる場合にオブジェクトの
ポインタとして持たせる。スマートポインタは後になって導入されたもので、
人気があるものではないので無視して良い。

二番目のポインタとして持たせるのは、例えば、今定義している最中の
クラス(自分自身)と同じ型のデータで、子どもや親にあたるデータへ
リンクを作りたいようなときか、または、ある基本クラスを継承した
色々なクラスのオブジェクトを持ちたい場合に用いる。

438 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 14:16:41.10 ID:fD0IDjkv.net]
C/C++では、sizeofキーワードを使えば、簡単にvoid以外の型のサイズがコンパイル時に取得できる。Javaではオブジェクトのサイズを簡単に取得することはできない。
C/C++はよくオブジェクトのサイズやバイトの並びを意識してプログラミングする。

439 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 14:17:25.55 ID:a3vDiVrE.net]
結局CのポインタってJavaとかの言語で表すなら何なんだ?

440 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 14:23:20.42 ID:fD0IDjkv.net]
なぜなら、例えばスタックに巨大なデータを割り当てると、スタックオーバーフローというエラーが発生するし、
ヒープだって、巨大なデータの割り当ては失敗することがある。
また、構造体を変更すると、構造体のサイズやデータ構造が変化して、互換性の問題が発生することがある。



441 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 14:24:23.31 ID:awXFg/MG.net]
>>437氏他
丁度今、ウェブ上のC++で書かれたCompositeパターンのソースを読ませて頂いてました
正に2番目で実装されてましたが、都度メモリ解放処理書くくらい当たり前なんですね、流石C++です

独学なもんで、こうはっきり言ってもらえると本当にありがたいです、使い分けて行きたいと思います
他の皆様もありがとうございました、勉強になりました

442 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 14:34:10.39 ID:fD0IDjkv.net]
>>439
Javaの動的配列はCのポインタに近いが、Javaの配列では危険なアクセスは制限されているし、参照カウントで管理されている点が異なる。
Javaのオブジェクト参照は、参照カウントで管理されており、C++の構造体/クラス型に対するstd::shared_ptrに該当する。

443 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 14:37:16.50 ID:BEdrdhIs.net]
しかし、std::shared_ptrはヌルポを指定できるが、Javaはできない。

444 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 14:49:43.57 ID:0TxoCFW6.net]
>>441
C++ は、デストラクタに必ずメモリ解放処理を書いておけば、そんなに
メモリーリークを気にすることはない。多くの場合にはそれで完全に処理できるから。

次のように書くだけで、ほとんどの場合、メモリーリークは起きない:
class CMyClass {
 BYTE *m_pBuf;
 CMyClass() {  // コンストラクタ
   m_pBuf = NULL;  // メモリをまだ未割り当てであることをマークするためにこうしておく
 }
 ~CMyClass() {  // デストラクタ
  if ( m_pBuf != NULL ) {
   delete [] m_pBuf;   // メモリの解放
  }
 }
}

445 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 14:52:47.12 ID:dGdUrFsa.net]
すごく古い書き方だ

446 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 14:54:57.57 ID:BEdrdhIs.net]
>>444
ナマポの場合、代入したらまずいよ。例外安全にも問題があるし。

447 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 14:55:46.62 ID:DnOcmNTU.net]
確かに、人に教えるレベルじゃないね

448 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 14:56:36.09 ID:0TxoCFW6.net]
>>444
正しくは、次のようにアクセス制御のための「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;
のようにする。

449 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 14:58:34.69 ID:BEdrdhIs.net]
>>448
ダメだこりゃ。

450 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 15:03:05.98 ID:MkFOBvt9.net]
良い子のみんなは>>444の危険性が理解できるまではスマートポインタを使ってね
おじさんとのお約束だよ



451 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 15:11:57.93 ID:Qk3j4qw0.net]
>>448のデストラクタでnullチェック必要?
nullポインタをdeleteしても問題ないはずだが
二重解放防止にはならんし意味わからん

452 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 15:18:49.80 ID:BEdrdhIs.net]
>>451
超独自仕様の組み込み開発とか、メモリー管理がbuggyなプログラムでは意味があるらしい。
例えば解放したメモリーブロックをアクセスするような行儀の悪いプログラムでは意味がある。

453 名前:はちみつ餃子 mailto:sage [2019/02/11(月) 15:19:34.89 ID:eS7AzULV.net]
>>444 >>448
・ 初期化を初期化リストでやらずに代入でやるのは邪悪。
・ delete に NULL を渡した場合には何もしないことが保証されているので、
  無駄にヌルチェックする必要はない。
・ ポインタ型や整数型の値もまたそういう型の「オブジェクト」である。
  (元質問者が Java から入ってきてるから「Java の用語で言うところの」という意味?)

454 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 15:19:51.73 ID:3tLemvMU.net]
初心者なので確認
コンストラクタの中に飛び込む前のメンバの初期化で例外発生したら m_pBuf は中途半端になるから
コンストラクタの中で代入するんじゃなく、メンバ初期化子で初期化しろ
という認識でいいのかしら

455 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 15:29:14.84 ID:BEdrdhIs.net]
>>454
「C++ 例外安全」でググれ。ナマポを使わずに、素直に生配列、コンテナ、スマポのどれかを使えば済むこと。マネージされてないナマポは村八分にしろ。

456 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 15:39:02.97 ID:3tLemvMU.net]
なんとなくわかった   ような気がする
生ポそのものはコンストラクタもデストラクタに何ら操作しないから宙ぶらりんこになるのか

457 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 15:41:57.41 ID:dGdUrFsa.net]
ちょっち理解は大変だけど生ポはスマポにドンドン置き換えたい

458 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 15:43:11.94 ID:BEdrdhIs.net]
スマポならコピーコンストラクター・代入のややこしさからも解放される。

459 名前:はちみつ餃子 mailto:sage [2019/02/11(月) 15:52:25.23 ID:eS7AzULV.net]
まあまあ。
スマートポインタを活用しろというのはその通りだが、
ポインタ (や例外機構) を理解せずに
思考停止してスマートポインタを使うのはあかんやろ。

ここの元質問者はまだそこを理解しようとしている
ところなんだから、スマートポインタを使わなかった場合にどう書けば良いのか、
きちんと書くと面倒くさすぎるという体験も必要だろ。

460 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 16:16:38.24 ID:fD0IDjkv.net]
所有権の管理は人類には早すぎる。
所有権が変動するときは、スマポでOK.



461 名前:さまよえる蟻人間 mailto:sage [2019/02/11(月) 16:28:46.52 ID:fD0IDjkv.net]
こんなときはナマポを使ってもよい:

処理の中で所有権が移動・消滅しない場合。
バイナリーデータやPODを生で扱う場合。
処理系がナマポやトークンやハンドルの入力を要求する場合。

462 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 16:36:19.07 ID:QKPibkAC.net]
生ポはスマポのオーバーヘッドすら許容できないときに使うものです
だから初心者は無理して生ポを使わなくていいです

463 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 16:59:08.84 ID:V2lM2C5l.net]
>>437
スマポは後になって導入されたもので人気がない、なんて意見は一般的ではないので無視して良い

464 名前:デフォルトの名無しさん mailto:sage [2019/02/11(月) 18:19:37.85 ID:j549IniP.net]
スマポをC#のusing感覚で使ってる

465 名前:デフォルトの名無しさん mailto:sage [2019/02/12(火) 13:19:56.52 ID:VqanzRzk.net]
エアプwwwwwwwww今は参照カウントじゃねーよw残念だったなクソ蟻wwww

466 名前:デフォルトの名無しさん mailto:sage [2019/02/12(火) 13:20:43.00 ID:VqanzRzk.net]
それで、Cの生ポってC/C++以外で表現するなら何なんだ?

467 名前:デフォルトの名無しさん mailto:sage [2019/02/12(火) 16:02:24.32 ID:VerJGrBE.net]
>>466
native int

468 名前:デフォルトの名無しさん mailto:sage [2019/02/12(火) 17:27:09.82 ID:VqanzRzk.net]
>>467
仮装アドレス的な意味で来るとは思ってなかったwでも本質はそうだよなあ

469 名前:デフォルトの名無しさん mailto:sage [2019/02/12(火) 17:29:23.18 ID:t+DTqVP+.net]
CALL -151

470 名前:デフォルトの名無しさん mailto:sage [2019/02/13(水) 06:16:37.08 ID:2WlGbphz.net]
>>466 今の言語は極力「生のポインタ」が見えないようにしてるからなぁ。
オレの乏しい知識で無理矢理ヒネリ出すなら、
「古いBASICの peek, poke のアドレス指定に変数を使った場合」かのう。
型のない単なるアドレスって言うか数値だけど。



471 名前:デフォルトの名無しさん [2019/02/13(水) 15:13:52.62 ID:Yg4iFXpY.net]
upvar

472 名前:デフォルトの名無しさん mailto:sage [2019/02/13(水) 15:46:18.41 ID:SgfrIpbp.net]
>>466
BYTE  ptr = アドレス値;

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


*ptr  --->  MEM[ptr]  // ptr は MEM[] 配列の添え字

473 名前:デフォルトの名無しさん mailto:sage [2019/02/13(水) 15:46:56.07 ID:GHq8zte2.net]
訂正:

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

474 名前:デフォルトの名無しさん mailto:sage [2019/02/13(水) 15:48:00.46 ID:GHq8zte2.net]
訂正:

Uint32  ptr = アドレス値;

475 名前:デフォルトの名無しさん [2019/02/13(水) 18:19:07.37 ID:QnNf1eu6.net]
恥の上塗り

476 名前:デフォルトの名無しさん mailto:sage [2019/02/13(水) 19:18:53.91 ID:BFnAt9lr.net]
intptr_t とか、INTPTRとか。

477 名前:デフォルトの名無しさん mailto:sage [2019/02/13(水) 19:41:39.99 ID:D91GFqhb.net]
eax

478 名前:デフォルトの名無しさん [2019/02/13(水) 22:43:21.58 ID:8CyDgeqf.net]
行儀よく バッファなんて 守れやしなかった
夜のサーバ オーバフロー起こしてまわった
*印見て アナルといわれた 早く添え字になりたかった
信じられぬ カーニハンとの 争いの中で
許しあい いったい何 解りあえただろう
うんざりしながら それでも過ごした ひとつだけ解ってたこと
このポインタからの 卒業

479 名前:デフォルトの名無しさん mailto:sage [2019/02/14(木) 07:38:16.87 ID:fSoz/vTj.net]
まあstatic変数やglobal変数使ってリークしてないとか言い張るバカよりかは
ナマポ使えやとは思う。
それならまだコード修正効くからな。
初心者にスマポ使わせればリークしないコード書かせることができるって考えははっきりいって幻想だわ。

480 名前:デフォルトの名無しさん mailto:sage [2019/02/14(木) 22:35:36.88 ID:vW9ukCJU.net]
昔研究室の後輩でポインタがわからないから全部グローバル変数でプログラム作ってるって奴がいて、
それはそれである意味すごいなって思ったわ。
マルチメディア系ライブラリを触る必要がある研究室なのだが。
元々組込系が得意な奴だったってのもあると思うけど。



481 名前:デフォルトの名無しさん mailto:sage [2019/02/14(木) 22:50:47.58 ID:tlcLfILV.net]
COBOLERだったんじゃね

482 名前:デフォルトの名無しさん mailto:sage [2019/02/15(金) 00:04:29.72 ID:tnuHGyjk.net]
一度切りの使い捨て用途とかなら全然よくね

483 名前:デフォルトの名無しさん mailto:sage [2019/02/15(金) 00:36:18.42 ID:kpfA4lgp.net]
>>479
スマートポインタを使うとコード修正効かなくなるの?どういうこと?

484 名前:デフォルトの名無しさん mailto:sage [2019/02/15(金) 00:46:46.72 ID:TR5VS7Vw.net]
mp4boxをちょこっといじったのを作ろうとしたんだけど、
signed int32の計算で -2112000 / 48000 の結果が 89434 になるんですが。
VS2015のx64です。

485 名前:デフォルトの名無しさん mailto:sage [2019/02/15(金) 06:57:51.95 ID:OZ8Dcboc.net]
>>484 「-2112000 / 48000 の結果が 89434」

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

被除数の -2112000 を64bitで表現する際に
符号拡張 0x_ffff_ffff_ffdf_c600 とすべきなのに
ゼロ拡張 0x_0000_0000_ffdf_c600 にしちゃって、
その後の計算は64bit正数でやってる感じかな。

486 名前:デフォルトの名無しさん mailto:sage [2019/02/15(金) 07:20:58.81 ID:1DfV94Wg.net]
>>483
本人がスマポ理解できてないってオチだろ

487 名前:デフォルトの名無しさん mailto:sage [2019/02/15(金) 07:22:53.73 ID:1DfV94Wg.net]
>>480
組み込みが得意でポインタがわからない後輩
設定に無理がありすぎw

488 名前:482 mailto:sage [2019/02/15(金) 07:53:28.61 ID:OZ8Dcboc.net]
再び >>484 「-2112000 / 48000 の結果が 89434」 (間違いを訂正)

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

-2112000 を32bitで表現すると 0xffdfc600 であり、
これをゼロ拡張した 0x_0000_0000_ffdf_fc600 == 4292855330 を
48000 で割り算して小数部を捨てれば 89434 という答えが出る。
ということなら合ってるかな。

489 名前: mailto:sage [2019/02/15(金) 07:57:48.46 ID:8MeM2Ami.net]
>>484
コードを https://ideone.com/ に貼っていただけませんか?

490 名前:デフォルトの名無しさん mailto:sage [2019/02/15(金) 09:49:31.73 ID:tuwIijw4.net]
>>484
どうせ48000がunsignedなんじゃねーの
それにつられて -2112000もunsignedになって4292855296
その結果が薬師美代ちゃん



491 名前:デフォルトの名無しさん [2019/02/15(金) 13:45:38.25 ID:TNDmXWGM.net]
>>482
自分が何してるか判って使う分には問題無いな
適材適所だ

492 名前:デフォルトの名無しさん mailto:sage [2019/02/15(金) 21:13:40.77 ID:kkRd+/gL.net]
>>483
>スマートポインタを使うとコード修正効かなくなる
どういう風に読むとそういう理解になるのか。。
まずは日本語の理解が必要だな。

493 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 07:14:37.91 ID:KxX3tJEE.net]
超初歩的な質問になるのですが
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;
}
}

494 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 07:30:35.53 ID:a45/WyPQ.net]
for(i=0;i<20;i++) if (scanf("%d",&num[i]) != 1) break;

495 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 09:09:16.12 ID:uZDoAvc4.net]
>>493
scanfや標準ライブラリの関数など、参考書とかで普通の使い方はわかると思うけど、細かい仕様をmsdnやmanコマンドで調べるようにするとかなり理解が広がると思うよ。

496 名前:デフォルトの名無しさん mailto:sage [2019/02/17(日) 22:37:58.74 ID:O/E0SKNM.net]
中途半端なUI使うよりもcsvパーサーを作るかどっかからとってくるかすれば?

497 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 00:02:29.61 ID:yZfkTbdS.net]
autoってコンパイル遅くなりますか?

498 名前: mailto:sage [2019/02/18(月) 00:59:53.43 ID:aN2QSVsl.net]
>>497
むしろ遅くなる方に振れるでしょうけれど、そんなのどうでもいいのでは?

499 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 01:22:44.39 ID:c9cLPpQ7.net]
autoって変数の型宣言の話だよね?
コンパイルは遅くなるのか
速くしたい時はどうすりゃ良いの?

500 名前:はちみつ餃子 mailto:sage [2019/02/18(月) 01:27:51.06 ID:ViRlfcsh.net]
C++ の auto は右辺と一致させるように推論するだけの単純機構で、
ややこしい演算で推論するわけではないので、
コンパイル速度ではほとんど差はないと思うよ。



501 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 01:30:04.86 ID:tKsXQ0K5.net]
autoはむしろコンパイル速くなるんじゃない?
いちいち型を解決せずとも、既に解決済みの型を右から左へコピーするだけでいいんだから
C++でコンパイルを速くするのは簡単で、単純にソースファイル数とインクルードするヘッダを減らせばいい
C++のコンパイルが遅いのは主にコンパイル単位という時代遅れで極めて非効率なコンパイル戦略に起因しており、実はコードの複雑さ自体はわりとどうでもいい

502 名前: mailto:sage [2019/02/18(月) 01:31:11.50 ID:aN2QSVsl.net]
>>499
C++を言語として選択した時点で「記述の時間やコンパイル時間を投資して実行時間を稼ぐ」という思想なのでは?コンパイル時間を短くする努力はする気がないと思います

503 名前: mailto:sage [2019/02/18(月) 01:32:21.67 ID:aN2QSVsl.net]
>>501
>いちいち型を解決せずとも、既に解決済みの型を右から左へコピーするだけ
この記述はコンパイル時を想定しているの?それとも実行時を想定しているの?
はっきりさせたいので念のために確認します

504 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 05:41:12.34 ID:KTgkm+s5.net]
>>493 サーバーの 503 エラーに引っかかって昨日のうちに書けなかったんだが…。

>>494 の方法だと 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個ずつ数値を拾いつつ、地道にポインタ進める方が良いかも。

505 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 05:53:27.02 ID:KTgkm+s5.net]
>>503 自分は >>501 の人じゃないけど。
ごく簡単な場合ながら、例えば
int val_a = func(para); // func() がint互換の値を返すかチェックが必要
auto val_b = func(para); // func() の返す型そのまんまで val_b を作ればいい

てな具合に考えると auto で定義した方がコンパイル時の手間が少ない、
という考え方にも一理あるかと。

506 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 08:39:38.41 ID:KTgkm+s5.net]
瑣末なことだけど val_a, val_b って変数名は良くなかったね。
変数 variable の例なんだから var_a, var_b だわな。
というか、この場合は a, b で十分だ。

507 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 10:06:03.91 ID:PGieQvh3.net]
まず計測しろよ

508 名前:491 mailto:sage [2019/02/18(月) 13:24:52.92 ID:fHtoi1qq.net]
>>504
ありがとう。ちゃんと確認してなかったわ。
タブに空白に改行はスキップしやがるんでしたか

別案としては fgets() ⇒ sscanf() になるんかな

509 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 13:29:17.97 ID:fHtoi1qq.net]
505の後半は無しで
1文字ずつ切り出して解析してったほうがよさそうね

510 名前:デフォルトの名無しさん [2019/02/18(月) 15:27:41.58 ID:bbNHvPxv.net]
コンパイル時間にリンク時間は含まれますか?



511 名前:デフォルトの名無しさん [2019/02/18(月) 15:28:58.14 ID:bbNHvPxv.net]
>>504
scanf は禁止

>>508 が正しい

512 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 15:34:26.17 ID:c9cLPpQ7.net]
人間の様な邪悪なものからの入力でscanfは使うなと、ばっちゃは言ってた

513 名前: mailto:sage [2019/02/18(月) 20:54:12.82 ID:aN2QSVsl.net]
>>505
>func() の返す型そのまんまで val_b を作ればいい
この発想は実行時なのでは?

>てな具合に考えると auto で定義した方がコンパイル時の手間が少ない、
実行時の発想をコンパイル時に適用していいのでしょうか?

514 名前: mailto:sage [2019/02/18(月) 20:54:41.05 ID:aN2QSVsl.net]
>>507
コンパイル時間を計測するのですか?…

515 名前: mailto:sage [2019/02/18(月) 20:57:23.82 ID:aN2QSVsl.net]
>>512
賛成です、そういうのは1ラインを秘術を尽くして何とか読み込み、後で sscanf() とかを使うべき

516 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 21:15:24.03 ID:JRPNr6+t.net]
>>515
今回の例(>>493) のように可能な限り %d で抜き出して打ち切るとなると sscanf 単発では面倒
なんとか行単位でバッファに詰めた後
連続空白などでトークンに区切ってそのトークン単位で sscanf をぶんまわすような
ほのかな中途半端感が

517 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 21:20:31.62 ID:etvvcICH.net]
>>513
別に実行時の発想じゃないでしょ
型を書けばコンパイラはその型名に対応する型を解決しなければならないし、
型変換の要否や可否のチェックも必要

518 名前: mailto:sage [2019/02/18(月) 23:19:20.43 ID:aN2QSVsl.net]
>>517
>型変換の要否や可否のチェック
これは10中8, 9 コンパイル時にすることなのでは?

519 名前:デフォルトの名無しさん mailto:sage [2019/02/18(月) 23:37:20.44 ID:Q29xkQ9H.net]
>>518
初めからずっとコンパイル時間の話をしている。お前さんだけ噛み合ってないから、もう黙っててくれ。

520 名前:デフォルトの名無しさん mailto:sage [2019/02/19(火) 15:32:09.41 ID:Hz70ZqtS.net]
C++です
インクルードガードがあっても関数の定義がヘッダに書かれていればヘッダが複数回読み込まれていた場合リンク時に多重インクルードでエラーが出る

ここまではわかるのですが、同じことをクラス関数で実験した結果エラーになりませんでした
具体的にはヘッダのクラス内に関数定義を書いて複数のファイルからインクルードしました
これはどういうことなのでしょうか?



521 名前:デフォルトの名無しさん [2019/02/19(火) 16:00:36.20 ID:uP1odnYQ.net]
>>520
クラス定義の中に書かれたメンバ関数の定義は
自動的にインライン関数になる(関数の実体の定義ではない)

この場合は、複数の場所にメンバ関数の実体が作られるわけじゃない、
という説明でどうかな。

522 名前: mailto:sage [2019/02/19(火) 17:19:54.69 ID:BVj1SDNF.net]
>>519
そもそも「実行時」「コンパイル時」の区別がついていないのでは、コンパイル時間の話なんかできないのでは?
だから「実行時」「コンパイル時」どちらを適用するかに執着しているだけです

523 名前:デフォルトの名無しさん mailto:sage [2019/02/19(火) 17:23:21.85 ID:Hz70ZqtS.net]
>>521
なるほど
クラス内に定義を書くとインライン関数になって普通の関数としては扱われないんですね

もう少し理解するために調べたのですが、インライン関数は内部リンケージのみを持つものとしてコンパイラに解釈されるらしいですね
だからコンパイラはファイル間での関数の重複を調べようとしない
そしてインクルードによって複数のファイルで同じものを読み込んだとしてもエラーにはならないと・・・
理解です
勉強になりました
ありがとうございました

524 名前:502 mailto:sage [2019/02/19(火) 17:39:36.16 ID:uP1odnYQ.net]
失礼、なぜか >>513 を見逃してて(黙殺するような意図はまったくなかった)。

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

実行時まで返り値の型が決まらない関数って作れるんだっけ?
これは純粋に質問、教えを乞いたい。
あんまり高度な話だと振り落とされるかも知れないけど。

525 名前:デフォルトの名無しさん mailto:sage [2019/02/19(火) 17:48:52.81 ID:h1wI7nx1.net]
型推論が実行時に行われるとかトンチキこいてるやつが一人騒いでるだけ

526 名前:デフォルトの名無しさん mailto:sage [2019/02/19(火) 18:43:18.16 ID:+3biNeIC.net]
>>524
おそらく君の書いた「func()の返す型〜」をqz某が勝手に勘違いしているだけだからスルーしていいよ。
初心者が必ずしも正確な用語を使わないことくらい想像つくだろうし、文脈からして普通ならそんな勘違いはしないはずなのだが。

527 名前:はちみつ餃子 mailto:sage [2019/02/20(水) 00:20:40.27 ID:C98K3aY7.net]
>>524
出来ない。
強いて言えば C++17 からは std::any があるけれど、
これはこれで実行時に型が決まるわけではなくて
コンパイル時に std::any 型であることは確定する。

528 名前:デフォルトの名無しさん mailto:sage [2019/02/20(水) 00:28:15.76 ID:qDW9CRq2.net]
>>523
> もう少し理解するために調べたのですが、インライン関数は内部リンケージのみを持つものとしてコンパイラに解釈されるらしいですね

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

https://timsong-cpp.github.io/cppwp/n4659/dcl.inline#footnote-94
> The inline keyword has no effect on the linkage of a function.

529 名前:デフォルトの名無しさん mailto:sage [2019/02/20(水) 00:47:02.04 ID:rsRaa5eC.net]
>>528
IBMのサイトに書いてありました・・・
と思って今見返したらこれはIBMの統合開発環境のページなのでその開発環境の仕様かもしれないですね
失礼しました

https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_72/rzarg/inline_linkage.htm
>インライン関数は内部リンケージを持っているものとして処理されるので

530 名前:デフォルトの名無しさん mailto:sage [2019/02/20(水) 09:09:52.38 ID:qDW9CRq2.net]
>>529
「C のみの始まり」〜「C のみの終わり」で囲まれているとおり、それはCの仕様だね。



531 名前: mailto:sage [2019/02/20(水) 19:50:21.82 ID:P8vN2pc3.net]
>>528
それは inline キーワードで束縛された関数は、inline 展開される多数の実体と、外部リンケージによって外部からコールできるものとで別の実体をコンパイラは作成する、ってことですか
まあ inline しまくって無駄にバイナリーを増やすくらいだったら、ついでに1 個の外部リンケージで呼べる実体を追加したって、いろいろな面で大差がない、とはいえますね

532 名前:デフォルトの名無しさん mailto:sage [2019/02/21(木) 01:44:35.45 ID:HXHB3ZEN.net]
>>531
「それ」が何を指して言ってるのかよくわかんないけど、 inline 関数に対して
インライン展開されてない「実体」を生成するのもしないのもコンパイラの自由。

外部リンケージを持つ関数について複数のコンパイル単位でアドレスを取って
==, != で比較した場合には一致させないといけないので、アドレスを取られた場合には
そういうコード生成をするのが一般的だろうとは思う。

533 名前:デフォルトの名無しさん [2019/02/21(木) 14:52:33.25 ID:68lFGCx0t]
主にc++でJSON editor作ってみた mac専用だけど
www.quite-funny.com/

534 名前:デフォルトの名無しさん mailto:sage [2019/02/22(金) 22:57:05.70 ID:LZ/mWRas.net]
引数や関数にはconstつけられるところは全部つけるべきですか?

535 名前:デフォルトの名無しさん mailto:sage [2019/02/23(土) 00:51:14.65 ID:CdF18mGW.net]
つけて問題ないならつけるべきだけど、まあ実際は面倒くさくなければという程度…

536 名前:デフォルトの名無しさん mailto:sage [2019/02/23(土) 10:37:02.21 ID:6erMuDJl.net]
>>534
内部で書き換えないポインタや参照の引数には必ずconstをつけるべき。より自己文書化されるし、付けてないと使う側の手間が増える。>>535は元javaプログラマ

537 名前:デフォルトの名無しさん mailto:sage [2019/02/23(土) 10:39:40.19 ID:Iy1q86mj.net]
今は良いけど、半年後の自分は既に他人だと思わないと

538 名前:デフォルトの名無しさん [2019/02/23(土) 11:45:29.73 ID:+DV3f+Dk.net]
const連鎖まんどくせ

539 名前:デフォルトの名無しさん mailto:sage [2019/02/23(土) 12:40:33.73 ID:aRr2CtyI.net]
530みたいな質問する奴はそもそもconst気にする前に関数が長すぎたり
参照と実値渡しの違いもわかってないと思われるのでその辺をしっかりやった方が良い。

540 名前:デフォルトの名無しさん mailto:sage [2019/02/23(土) 17:32:16.44 ID:7GKXwuwj.net]
入門書の類が、最初のうちは const なしで説明しておいて、
本の後半でおもむろにポインタの引数に const つけることを
載せてたりするせいかもな。
高度な、マニアックな話題みたいな感じで。

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

const の一般的な価値が分かれば、メンバ関数での func() const {...} の
ありがた味もすぐ飲み込めて const つけまくり派になるでしょ。



541 名前:デフォルトの名無しさん [2019/02/23(土) 21:02:55.45 ID:kvfLWeS8.net]
戻り値を const char* してても、
char* const してなければさほど意味がない。

542 名前:デフォルトの名無しさん mailto:sage [2019/02/23(土) 21:20:57.14 ID:JpeZVvP/.net]
それは質問なの初心者君?

543 名前:デフォルトの名無しさん mailto:sage [2019/02/23(土) 23:45:27.99 ID:Z+wYSHT9.net]
クソミソみたいなjavaのconstと違ってC++のconstは
コードの安全性を高めるのに必須といっていいぐらいのキーワード
とりあえず片っぱしから全部const付けて、どう頑張ってもここは
constはずさないと動くコードにできないよな・・ていうぐらいの
時だけはずす。このぐらいの気構えでコードを書けば、かなり安全な
コードになってる。他のやつが書きかえちゃダメなものをいじろうと
しても、強引なキャストでもしない限りどうやってもコンパイルが
通らなくなる。強引なキャストしてでも無理矢理強姦してくる強姦魔は
そもそも犯罪者気質なのでそんなやつに仕事をやらせてる時点で間違い

544 名前:デフォルトの名無しさん mailto:sage [2019/02/23(土) 23:48:50.01 ID:Iy1q86mj.net]
「かなり安全な」

ここで思わず笑ってしまったではないか

545 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 00:00:52.25 ID:qLJosHl4.net]
残念ながらバカはmutable使い出すから無意味。

546 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 00:06:41.22 ID:2wDVhIfR.net]
俺は書換られたりはしない たぶんしないと思う
しないんじゃないかな ま、ちょっと覚悟はしておけ

547 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 00:47:53.06 ID:ORSkBdqU.net]
constっていちいち書くのめんどい

548 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 00:48:50.68 ID:haqs87u6.net]
>>541
何を言ってるのか分かりません

549 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 01:15:50.47 ID:is7scwjD.net]
いやまてまて・・このスレの99%はネタでできてるけど
そこ分からないのはダメだぞ
まさに初心者向けの話題ではある

550 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 07:21:28.17 ID:kwD2lttR.net]
>>545
mutable使ったらいかんのか



551 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 08:50:14.25 ID:FFCpIhtq.net]
こいつ能力低いなと思う奴のソースを見ると、
constなんて全く付いていない場合が多い

552 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 09:00:44.87 ID:eyx8DEIH.net]
>>547
ちょっとわかるわw
あと3文字くらいが良かった

553 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 09:02:28.69 ID:zE1f0a65.net]
cnst

554 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 09:40:01.37 ID:4ommn3XM.net]
constはキーボード入力の観点からはそんなに苦じゃない
stdとかarrayが割りと入力しづらい
左右均等に割り振られてると楽な感じ

555 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 09:57:22.91 ID:FGRIaiAP.net]
const char* a = "hoge";
const char* const a = "hoge";

の違いがわからんやつは死ねとよい

556 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 10:22:22.64 ID:qLJosHl4.net]
そんな違いを意識しないと読めないコード書く方がバカだと思う。

557 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 10:24:20.55 ID:eyx8DEIH.net]
(そんな初歩中の初歩でマウンティングドヤ顔して大丈夫っすか先輩)

558 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 10:37:36.70 ID:haqs87u6.net]
>>549
>>548のこと言ってるの?
>>541は、ポインタの指し先だけでなく、戻り値を格納する変数自体を定数にしなければさほど意味がないっていう主張だと理解したけど、合ってる?
ローカル変数を定数化したければ呼び出し元が勝手にやればいいし、戻り値をconst char*にする重要性に比べたらそれをする必要性なんてごく僅かで"さほど意味がない"なんてとても言えないと思うけど

559 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 12:08:33.20 ID:6sZPiHms.net]
>>555
ドヤ顔して噛むなよ

560 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 12:15:09.98 ID:sIV9Z0cV.net]
C++ってC言語の負の遺産を引き継いだ言語だろ?
constは廃止すべき



561 名前:デフォルトの名無しさん [2019/02/24(日) 15:05:59.28 ID:uFOuUY9d.net]
constみたいな糞どうでもいい些末なことより
配列のサイズとオーバーフローの管理を強化するべきだったんだよ
互換性捨てなきゃならんが

562 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 15:35:26.16 ID:2tRfk65D.net]
>>561
そこはCの負の遺産を引き継いだのではなく、可能な限り実行時オーバーヘッドを小さくする実装手段を提供するというCの基本スタンスを継承しただけだろう。それが負の遺産というなら他の言語の方が適切なんだからそれを選択すればいいよ。
C++を使いたく、ある程度の実行時オーバーヘッドが許容できるときはstd::vectorという選択肢があるけど、それじゃダメなのか?

563 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 16:47:00.15 ID:RgZ/0jGo.net]
>>560
const に関しては C++ で新規導入された仕様を ANSI C に逆輸入、
みたいな感じじゃなかったっけ?
そのせいか、定数としてconst変数を使えないとか中途半端になってる。
C++ が C の負の遺産を切り捨てるべきだったとしても、
const はその「C の負の遺産」の範疇に含まれないかと。

いずれにせよ、今さら言っても、現に存在する C++ はどうもならんよね。
そういう新プログラミング言語が出ても、それは C++ じゃない別物ってことで。

564 名前:デフォルトの名無しさん [2019/02/24(日) 16:57:30.90 ID:2fcQjxFq.net]
そういうのはDで良いと思う

565 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 17:18:54.78 ID:NUlc6EOn.net]
とりあえず数値以外はconst参照渡しが基本でおk?

566 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 17:34:26.40 ID:qxqTarkR.net]
>>561
at()使え。
>>560
constが負の遺産とか頭おかしい。
ドキュメントにこの変数は内部で変更しませんとか書くよりよっぽど楽だろ

567 名前:はちみつ餃子 mailto:sage [2019/02/24(日) 17:36:09.20 ID:gUJTdPsI.net]
>>566
負の遺産だよ。
const キーワードを廃止して
デフォルトの挙動を const に出来れば
どれほど良いことか。
という意味で。

568 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 17:40:12.42 ID:qxqTarkR.net]
>>567
それなら同意するけど>>560にそんな意図はないでしょ

569 名前:はちみつ餃子 mailto:sage [2019/02/24(日) 17:43:09.22 ID:gUJTdPsI.net]
>>568
皮肉っぽい言い回しをしてみたかっただけ。

570 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 17:48:01.19 ID:qxqTarkR.net]
いやん



571 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 18:48:30.19 ID:qLJosHl4.net]
そこまで挙動を変えるなら別言語でやれば良いし、実際rustとか他の言語としてあるだろ。

572 名前:デフォルトの名無しさん mailto:sage [2019/02/24(日) 18:53:22.05 ID:2wDVhIfR.net]
使わないで済ませる事ができるなら、使わないで置く方がうまく行く

573 名前:デフォルトの名無しさん [2019/02/24(日) 19:20:28.43 ID:iK4D+UQi.net]
>>567

>>571 も書いてるけど、それ何てRust?と思った。

574 名前:はちみつ餃子 mailto:sage [2019/02/25(月) 01:48:46.07 ID:LzC1voP1.net]
負の遺産でも互換性とのトレードオフだしな。
いいことばかりじゃないけど、悪いことばかりでもない。

とりあえず const は付けれるだけ付けとけというのが
ベストプラクティスだと思う。

575 名前:デフォルトの名無しさん mailto:sage [2019/02/25(月) 12:52:11.08 ID:y5m/9TYH.net]
>>567
引数だけなら同意してもいいけど変数はどうするんだ?
for(variable int i = 0; i < 10; i++){
とかはあまり書きたくないぞ

576 名前:はちみつ餃子 mailto:sage [2019/02/25(月) 13:56:12.72 ID:LzC1voP1.net]
>>575
まあそこはもしもの話だから。
最初から const なら文法もそれに
沿ったものになってただろうさ。

577 名前:デフォルトの名無しさん mailto:sage [2019/02/25(月) 17:39:50.14 ID:ubojwQhV.net]
確かに、関数内で作ったローカル変数だけデフォルト変更可能、
他所から持ちこんだ、ポインタの先や参照、グローバル変数へのアクセスは
基本的に読み出しのみ許可で、明示した場合だけ変更できる、なら
「勝手に書き換えたのは誰だ!?」ってバグは減りそうだね。

578 名前:デフォルトの名無しさん mailto:sage [2019/02/25(月) 18:51:13.68 ID:y5m/9TYH.net]
>>577
ああ、それなかなかいいかも

579 名前:デフォルトの名無しさん mailto:sage [2019/02/25(月) 20:42:12.40 ID:lqvZQt+c.net]
そうそう、だから普通にC++書いてる人は
とりあえず引数に全部 const つけるでしょ
それはそういうことだよ

580 名前:デフォルトの名無しさん mailto:sage [2019/02/25(月) 20:44:41.85 ID:x+rkal0w.net]
引数じゃなく method の const は後悔することがちょいちょいと

class foo {
public:
void method() const;
};



581 名前:デフォルトの名無しさん mailto:sage [2019/02/25(月) 20:50:25.72 ID:1EOktSCH.net]
constつけときゃいいってのもなんか胡散臭い印象しかないな。
そんなことよりも変更や生成を行う場所、タイミングを局所化するってのが本質だと思うが。

582 名前:はちみつ餃子 mailto:sage [2019/02/25(月) 20:56:50.13 ID:LzC1voP1.net]
const が必要なところに付けるって考えるよりは
const では駄目なところでは外すという考え方の方が
安全っぽいという話であって、
適切に使い分けろというのは大前提のことだってことは補足しておく。

const が当たり前だって気持ちになると
変更が必要な個所は自然に局所化されるでしょ。

583 名前:デフォルトの名無しさん mailto:sage [2019/02/25(月) 21:58:02.00 ID:rMTHv0xs.net]
const連鎖くらったらほどほどでいいやと思うようになる

584 名前:デフォルトの名無しさん mailto:sage [2019/02/25(月) 22:14:33.44 ID:1EOktSCH.net]
なんというかもう修正が一切されないコードしか想定してない印象を受ける。

585 名前:デフォルトの名無しさん mailto:sage [2019/02/25(月) 22:37:43.55 ID:rMTHv0xs.net]
やりすぎオブジェクト指向といっしょで
事故起こりにくいとこでこだわっても変更に弱くなるだけ

586 名前:デフォルトの名無しさん mailto:sage [2019/02/25(月) 22:51:58.14 ID:ki6l711j.net]
複雑怪奇で理解不能にしておくと、
変な改造されないで済む

587 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 00:51:25.18 ID:wcHiR3Ib.net]
初心者で申し訳ないんですが、c/c++を学ぶため何か作りたいのですが、cで作る意味のあるいいお題はないでしょうか。JavaやC♯、rubyは一通りかける感じですがcはmallocなど知ってはいても使ったことはないレベルです。よろしくお願いします!

588 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 01:02:30.50 ID:Ujo6lghI.net]
>>587
ビットマップ画像を読み込んでブラーをかけてビットマップ画像として出力

589 名前:はちみつ餃子 mailto:sage [2019/02/26(火) 01:30:28.38 ID:azIRgqwp.net]
>>587
いきなり「実務的な」プログラムを書くのはオススメしないよ。
C/C++ には歴史的経緯によってクソな落とし穴と「未定義」がたくさんあるので、
たとえ期待通りに動いたとしても正しくないプログラムであることは多い。
初心者向けのしょうもない (他の言語でやる入門と大差ないような) 題材で小さなプログラムを書いて
ブログとか Qiita とかに書いておけばベテランがよってたかって指摘してくれるさ。
そういうので基本的な落とし穴くらいは理解してから進んだ方が良いと思う。

590 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 01:35:07.18 ID:F6jD76wH.net]
HDDの中を検索するプログラムとか、整理するプログラムとか
こういうのがあったら便利だなっていう物を考えて作ってみる
途中分からなくなったら、ここに相談に来ると良い
親切な人が教えてくれる、かもしれない
あてにはしないこと



591 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 01:49:53.01 ID:2prSgTvN.net]
おっさんらジイさんらの世代だと
「こういうのあったら便利だよな」と思って作りはじめるパターンは有効だったけど
今はそういうの探したらほとんどあるからある意味不幸だよな
しかも自分で作ってたらとてもここまで作ってるヒマないっていうぐらい高機能なのが多いし

592 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 01:50:17.99 ID:wcHiR3Ib.net]
>>588
>>589
>>590
ありがとうすごく参考になりました。デスクトップランチャーとかほしいと思って作るならWPFだし、Cで実用的なほしい物ってむつかしいんですよね。初心者向けの小さなプログラムは上記のブラーとかでしょうか?Cで書く意味がある題材ってわからなくて。。。

593 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 01:59:04.98 ID:H+xdnOpD.net]
>>592
そもそも自分がC/C++を身につける意味があるかというとこらから見直した方がいいのでは?
直ちに必要な訳ではないが将来的に身に付けたいというなら、先に他の人が言っていたようにいきなり実用的なプログラムから入るより練習問題レベルの小品をコツコツ作っていった方がいいと思う。

594 名前:はちみつ餃子 mailto:sage [2019/02/26(火) 02:00:19.43 ID:azIRgqwp.net]
どうしても自分が欲しくて既存のものがないってケースでも、
既存のものをバッチファイルで繋げればできるって程度のものだったりするもんな。
そういう意味じゃ、日常ではスクリプト言語の方が使うことが多いとは思う。
俺が一番最近に書いた C のプログラムもスクリプト言語の拡張パッケージだし。

595 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 02:19:19.20 ID:F6jD76wH.net]
>>592
例えば容量の大きなHDDだと、同じファイルが複数場所にあったりするじゃない?
そういうのを見つけて、チェックした後削除すれば容量節約という実利もあるよ

596 名前:はちみつ餃子 mailto:sage [2019/02/26(火) 02:22:08.89 ID:azIRgqwp.net]
>>592
C/C++ で書く意味ということに最初は拘らなくてよいと思う。
こだわらなくてもプログラムの構成の仕方、書き方には確実に違いがあるから、
むしろ比較しながら学んだ方がいいかもしれない。

597 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 02:40:55.07 ID:OTQ63qDn.net]
C/C++使う必要性がわからないならやらないのが正解
今だにこんなクソ言語使ってるのはそれしか選択肢がないから
あるいは物好きな言語マニアか

598 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 03:33:39.99 ID:belfWXD5.net]
先に他の言語やらんとC++の必要性はわからんと思う

599 名前:588 mailto:sage [2019/02/26(火) 08:48:58.01 ID:+14u2RP+.net]
こんなにレスもらえると思いませんでした、他の言語スレや板だともっと殺伐としてます。。。ありがとうございます。
低レイヤを高速で処理できるのが魅力だと思うので最終的には任意のパケットを送受信できるデーモンを作りたい。ので、>>595のいう同名ファイル検索デーモンから始めようと思います。

600 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 09:06:06.17 ID:OTQ63qDn.net]
ならechoサーバーから入ってhttpサーバーという定番ソケットプログラミングコースもおすすめ
まぁでもその検索デーモンとやらでファイルの扱い勉強してからでいいだろうな
高速化に興味あるならC/C++の標準ライブラリでなくOSのnativeのapiを積極的に使うのもいい
ファイルならメモリマップドファイルを使ったり(ファイル名調べるだけなら不要だけど)
他には検索アルゴリズムに凝る方向とかね



601 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 11:48:20.70 ID:9FjD9aLm.net]
>>599
同じファイルというのをどう判定するかだな
ファイル名なのかハッシュ(中身)なのか

602 名前:デフォルトの名無しさん [2019/02/26(火) 14:41:46.79 ID:8+7ktUtN.net]
globalに宣言されてる変数と同じ型同じ名前で
関数内にlocalに宣言されたものがあるとき
警告出してくれるオプションって何だっけ

603 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 16:05:20.40 ID:5MxkS3P7.net]
>>599
なんで、そんな面倒くさい事をしなきゃならないんだ?

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

ruby -run -e httpd . -p 8080

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

localhost:8080

604 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 16:39:31.27 ID:2RZ4BMiv.net]
>>603
お前は相手の意図を理解する気がまったくなく、人とのコミュニケーションができないことをさっさと理解して、巣にかえって閉じ籠っていてくれ。
ここはお前に用がある奴は一人もいない。

605 名前:588 mailto:sage [2019/02/26(火) 17:33:10.46 ID:+14u2RP+.net]
みなさんありがとう
今日は会社で暇だったのでコピペベースながらUDPで任意のメッセージ送受信出来るようになった
ヘッダでincludeする構造体って宣言済みのクラスみたいな感じで使えることを理解しました。(udphdrを使わずにsendしたからか、送れたけどudpチェックサムは自動で計算されなかった)

tcpは、というかhttpサーバは難しそうですが頑張ります!

606 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 17:44:16.64 ID:MNG9zBp3.net]
>>602
gcc/clang だと -Wshadow だな。
-Wall -Wextra とは別に指定する必要があるようだ。
細かいことを言えば、同じ型でなくても、名前が隠される場合は警告が出る。

今ネットで調べて確認、これからオイラも使うことにする。

607 名前:デフォルトの名無しさん mailto:sage [2019/02/26(火) 23:22:44.06 ID:8Je4SUY+.net]
同じ意味だけど型が違うときの変数名ってどうされてますか?
いつも困ってます。

例)

float2 fPos( 1.0f, 2.0f );

XMFLOAT2 fPos( fPos.x, fPos.y ); ←当然同じ名前は×

608 名前:デフォルトの名無しさん mailto:sage [2019/02/27(水) 07:11:30.50 ID:tay7IMIk.net]
>>607
float2でfPosって付けてるならXMFLOAT2ならxPosとかでいいと思うが…

609 名前:デフォルトの名無しさん mailto:sage [2019/02/27(水) 07:53:03.71 ID:3Jl+ieqT.net]
>>607
よくシステムハンガリアンは悪と言われるけど、この例のように同じ内容で型名の違いに意味がある場合は、型名に関するプリフィックスをつければいいんでない?
とあるライブラリに渡す境界部分ならそのライブラリ名に関するプリフィックスとか。

610 名前:デフォルトの名無しさん mailto:sage [2019/02/27(水) 19:12:35.49 ID:8imVoWCJ.net]
初心者ですみません、こんなコードをみたのですが2点わかりません。
char packet[1500];
memset(buf, 0, sizeof(buf));
ether_header *eh;
eh = (struct ether_header *)packet;

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

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

https://qiita.com/marufeuille/items/81f323a52a6fd3bd530c



611 名前:さまよえる蟻人間 mailto:sage [2019/02/27(水) 19:18:47.40 ID:AjY/hWvK.net]
bufはpacketの間違いか? 多分。

612 名前:デフォルトの名無しさん mailto:sage [2019/02/27(水) 19:25:41.76 ID:uRVYM9rZ.net]
キャストしてるのはwarning回避じゃないか?

613 名前:デフォルトの名無しさん mailto:sage [2019/02/27(水) 19:41:57.94 ID:vHAcjSp1.net]
>>610 の引用元を見るとコード片だから、実際にはコンパイルしてないんだな。

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

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

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


(struct ether_header *) のキャストは、コンパイラの警告対策だな。
…って言うか、これキャストしないでも警告だけで通るのね。

614 名前:デフォルトの名無しさん mailto:sage [2019/02/27(水) 19:48:31.45 ID:cPR259KO.net]
やってきたパケットのうち 頭のEthernet Header にフォーカスしてる意図でのキャストかな?

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

union Packet {
struct TCPpacket tcp;
char* packet[1500];
};

615 名前:603 mailto:sage [2019/02/28(木) 00:25:33.39 ID:OS/9xoBt.net]
>>608
>>609
ご提案ありがとうございます!
何らかのプリフィクスで識別が妥当そうですね。
ローカル名前空間みたいな概念があると便利そうですが・・・。

local namespace XM
{
  XMFLOAT2 fPos;
}

float2 fPos( 1.0f, 2.0f );

XM::fPos = { fPos.x, fPos.y };

616 名前:デフォルトの名無しさん mailto:sage [2019/02/28(木) 09:35:29.75 ID:KtBFXYBy.net]
どうせ長ったらしい関数書いてんだろ
それがそもそもの間違い

617 名前:デフォルトの名無しさん mailto:sage [2019/02/28(木) 12:25:31.13 ID:o9FaNCnF.net]
>>611
>>612
>>613
ありがとう、cがとんでもなく難しい言語かと誤解するところだった。

618 名前: mailto:sage [2019/02/28(木) 20:15:42.34 ID:FII1Vkt+.net]
>>587
https://mevius.5ch.net/test/read.cgi/tech/1549160513/
にお題がいっぱい転がっています…

619 名前:デフォルトの名無しさん mailto:sage [2019/02/28(木) 22:42:25.23 ID:chn/XevV.net]
いやーCは簡単な言語だけどC++はとんでもなく難しい言語だと思うぞ
解説本が電話帳より分厚いなんてな自然言語超えてる

620 名前:デフォルトの名無しさん mailto:sage [2019/02/28(木) 22:46:25.10 ID:UN7NGNSN.net]
そんな解説本あるのかw



621 名前:デフォルトの名無しさん mailto:sage [2019/02/28(木) 23:11:49.78 ID:LM7UlKO7.net]
それはあいつが悪いだろ‥

622 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 00:09:02.27 ID:TIzWjpCx.net]
しかも、言語仕様の改訂が3年ごとと早すぎて、
邦訳解説本はもちろん、原書でもリリースがおいつかず、
仕様改訂を繰り返すたびについてこれないユーザーをふるい落とす恐るべき言語
仕様改訂の世代を重ねるごとに中国以上の人口減少率でユーザー数が減少する既に終わった少子化言語ww

623 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 01:01:16.39 ID:SPEgyt6t.net]
なんか皆C++はむずかしいむずかしいっていうが、そんなむずかしいか?
俺的には今時のECMAScriptと各種フレームワークの使い方のほうがよほどむずかしい。
2、3年もすると何だかイノベーションがどうのこうのいってまるっきり別物のコンセプトのがでてくるし・・。
C++なんて基本概念はもう何十年もかわらんだろ。あとはその都度必要なstlとかの機能覚えればいいだけ。
楽なもんだよ。

624 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 01:51:54.22 ID:ejlMN09K.net]
今何も見ずにラムダ式書ける?

625 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 01:55:24.44 ID:aAd1thXX.net]
有名所のライブラリでラムダ式使ってるの見たことない

626 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 06:22:49.33 ID:TGgsjFNR.net]
『プログラミング言語C++』第4版は電話帳より厚いね。
あれは解説書だよな。1300ページ以上ある。

ちょうど新しい電話帳が届けられたばかり。
田舎住まいだから都市部に比べて電話帳が薄いってこともあるけど。

627 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 07:01:09.26 ID:TGgsjFNR.net]
C++は新しい言語仕様が次々に追加されるせいで、
同じ細かな処理をするにも人によって書き方が色々になって、
「同じ言語で同じ処理をしてるはずなのにソースは似ても似つかない」
「自分で書くには便利だけど、他人の書いたプログラムは読み解けない」
てな状況になってるんと違うかな。

わざわざストラウストラップ先生が「言語の全部を知らなくても、
徐々に理解しながら使えばいい」と書いてくれてるけど、
他人のソースを読む際には役に立たないアドバイスだよね。

628 名前:デフォルトの名無しさん [2019/03/01(金) 13:03:30.11 ID:ozM8zBQ9.net]
>>619
CもC++も仕様は簡単
ライブラリやアルゴリズム考えるのが面倒で生産性が低いだけ
それを難しいと勘違いしてるだけ

629 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 13:21:26.51 ID:5w/5u0Tx.net]
こういうc++の危険さをまったく認識できてないやつが一番困る
std::forwardの意義を誰にでもわかるように説明してみろよ

630 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 15:52:20.02 ID:3z2kkMi4.net]
C++11以降とそれ以前で違い過ぎるのが問題では?



631 名前:はちみつ餃子 mailto:sage [2019/03/01(金) 16:02:10.84 ID:Vq7maKYR.net]
>>627
「徐々に理解しながら」は、 C を既に知っている人を明らかに想定していて、
今では C がそんなに支配的でもないという状況を思うと適切な動線とは言えないという意味でも
あまり役に立たなくなってきていると思う。

ただ、追加された機能を見ると、
新しい書き方の方が間違い難くて綺麗で一貫していることが多いので、
肥大化するから追加するのをやめろとも言い難いんだよな……。

632 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 16:17:07.89 ID:yZJ4Zkhu.net]
皆、ドワンゴ江添亮の本を読んでいないから、C++ の恐ろしさがわからないのだろう

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

>>614
1バイトずつ、check sum を計算するような場合は、そういうように、union にするのが定番

633 名前:デフォルトの名無しさん [2019/03/01(金) 17:25:35.13 ID:tC4m5Wn4.net]
●ワンゴ倒産の危機わろすω

634 名前:588 mailto:sage [2019/03/01(金) 17:56:26.55 ID:VPz6Y2H0.net]
udpパケットを送れるようにはなったのですが、wiresharkで確認するとudpフレームのchecksumが未定義となっていました。。。
そこで1からやりなおしたいのですが、ソケットはrawで開くべきなのでしょうか。いまはudpなのでdgramで開いてsockaddr_inのインスタンスをつかってsendtoしています。

635 名前:デフォルトの名無しさん [2019/03/01(金) 18:11:15.15 ID:a4IFMTFx.net]
checksum計算して値入れてから送れよ

636 名前:デフォルトの名無しさん [2019/03/01(金) 18:18:10.83 ID:6LDVvTwi.net]
enumについて教えてください
enum { ..\..\VAL1, VAL2 };
このような書き方でコンパイルが通る環境はありますか?
case ..\..\VAL1:
というのも許される環境はありますか?
c/c++

637 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 18:57:53.08 ID:p6eROYwf.net]
よくわからんが、識別子の定義を変えたいということか?

638 名前:632 mailto:sage [2019/03/01(金) 19:04:29.12 ID:6LDVvTwi.net]
どこかで見た覚えがあります

639 名前:588 mailto:sage [2019/03/01(金) 19:14:27.70 ID:VPz6Y2H0.net]
>>635
調べた方が足りませんでした、NICのTCP offloadingという機能が有効になっていたせいで、NICより手前でキャプチャするとunverifiedとなっているようです。大変失礼しました。

640 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 19:23:28.99 ID:HVxvwZsK.net]
>>623
>今時のECMAScript
いや、ハードウェアに固定されたバイナリーですらなく、ソフトウェア上で決められた決め事になんら意味を見出せないのですが、それでも javascript とかに熱意を抱けるコツがあったら教えてください



641 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 19:25:06.34 ID:HVxvwZsK.net]
>>633
いいかげんにニコ動をなんとかしてほしいです、昔も重かったけれども今も重い、これはなんとかならないのですか?

642 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 19:27:08.91 ID:YTopxKYT.net]
>>640
>>623の書き込みのどの部分を読んでその質問がでてきたんだ?なんかバグってね?

643 名前:デフォルトの名無しさん mailto:sage [2019/03/01(金) 21:35:36.90 ID:Y8fj+4tW.net]
引数のmove受け一つとってもrustの3倍くらい難しくなってるわな。
シンタックスが特殊だし、オーバーロードはされるわ、特殊な右辺値に対してのみ動作するとか
根本からおかしい。

644 名前:デフォルトの名無しさん mailto:sage [2019/03/02(土) 09:08:32.90 ID:NYNVQHNm.net]
物作った事の無い人の重箱の隅つつき+詳細未記載本なんて
時間の無駄だというのが良くわかった。
石田晴久の通信プログラムとか技術書展の方がマシ

645 名前:デフォルトの名無しさん mailto:sage [2019/03/02(土) 11:46:55.44 ID:jZcAiOx4.net]
ソース書くときに気を付けるのはとにかく引き継ぎしないといけなくなったときに楽になるようにって点かな。
上から読み下していったときにわかりやすければなんでもいいと思ってる。

646 名前:デフォルトの名無しさん [2019/03/02(土) 12:38:56.25 ID:+L4gK20K.net]
構造体で例えば
struct POINT{
int x, y;
};
があるとき
struct POINT p = {1, 2};
と定義と代入を同時に出来ますが
一度代入したものを後から書き換えるとき
p = {3, 4};
と書くとエラーになるみたいで
p.x = 3, p.y = 4;
と書かないといけないのが面倒です

先生なんとかなりませんか?

647 名前:デフォルトの名無しさん [2019/03/02(土) 12:45:48.83 ID:+L4gK20K.net]
ああできた
p = (struct POINT){3, 4};
これでいけました

648 名前:デフォルトの名無しさん mailto:sage [2019/03/02(土) 13:27:28.31 ID:NYNVQHNm.net]
構造体一括代入はANSI以降の機能だからOS/9とかCP/M68K
のC言語では当然のように動かない

649 名前:デフォルトの名無しさん [2019/03/02(土) 13:49:52.82 ID:+L4gK20K.net]
C++だと
p = POINT(3, 4);
もいけるかな

650 名前:デフォルトの名無しさん [2019/03/02(土) 13:50:54.37 ID:+L4gK20K.net]
>>648
たぶんそうだったと思います
ありがとうございます



651 名前:はちみつ餃子 mailto:sage [2019/03/02(土) 14:04:36.97 ID:tMatklv8.net]
>>649
C++11 以降なら p = {3, 4}; でもいけるよ。

652 名前:デフォルトの名無しさん [2019/03/02(土) 14:07:27.41 ID:kDivPjLV.net]
片山さんは何で改名したんですか?

653 名前:デフォルトの名無しさん mailto:sage [2019/03/02(土) 16:04:24.12 ID:uz1yhwTy.net]
C の p = (struct POINT){3, 4}; は、構造体の一括代入に違いないけど、
(struct POINT){3, 4} の部分が「複合リテラル」compound literal だから
使えるのは C99 以降だね。

654 名前:デフォルトの名無しさん mailto:sage [2019/03/02(土) 16:10:37.25 ID:EmfZa2jP.net]
>>647
理由が"面倒"だったのに、文字数増えてるよねそれ

655 名前: mailto:sage [2019/03/02(土) 16:12:43.27 ID:Ud+LwFnR.net]
>>653
これは、C++ に合わせてほしかったな、と思うのです

656 名前:デフォルトの名無しさん [2019/03/02(土) 21:57:47.90 ID:nqwTLRnH.net]
>>654
要素数によるやろ

657 名前:デフォルトの名無しさん mailto:sage [2019/03/03(日) 10:43:47.19 ID:lzyzpNmU.net]
C++の規格で使いたいならC++使えで

658 名前:デフォルトの名無しさん mailto:sage [2019/03/03(日) 10:52:31.28 ID:BbxzBxVK.net]
c++の規格って言ってもその辺、c++のいつの規格だよって話になるんじゃないの?

659 名前:デフォルトの名無しさん mailto:sage [2019/03/03(日) 12:23:44.49 ID:eB5he6fi.net]
>>633
会社の売り上げに貢献せず、警察を提訴するような
キチガイ高卒社員が資産食い潰してるんじゃね?wwww

660 名前:デフォルトの名無しさん mailto:sage [2019/03/03(日) 12:30:17.98 ID:eB5he6fi.net]
>>626
すでに3版でも電話帳より厚いよ
まともに読む気になるのは2版までだな。
熱意あるうちはともかく、ふと我に返ると俺何してんだろって。
そんで、言語覚えただけじゃプログラムてかけないしな。



661 名前:デフォルトの名無しさん mailto:sage [2019/03/03(日) 12:36:20.23 ID:0vjeZZiI.net]
C++でまともなWebサービス作れるエンジニアなんて相当単価高そう
もうオワコン動画の便所掃除やりたがる奴なんていないだろうし

662 名前:デフォルトの名無しさん [2019/03/03(日) 14:17:56.07 ID:ilhG1tLW.net]
オワンゴとは良く言ったものだな

663 名前:はちみつ餃子 mailto:sage [2019/03/03(日) 14:31:57.32 ID:XzFmXWmd.net]
サービスを書くのに C++ の比率は高くないかもしれんが、
サービスを支えるインフラには C++ を使うことだってあるだろう。

664 名前:デフォルトの名無しさん [2019/03/03(日) 15:36:52.66 ID:WlpYxc7g.net]
普通はJavaじゃなかろうか。

665 名前:デフォルトの名無しさん [2019/03/03(日) 15:58:13.68 ID:E4UxtVYi.net]
Javaは糞

666 名前:デフォルトの名無しさん [2019/03/03(日) 16:24:07.50 ID:D2G4oQ9F.net]
副業解禁で激変する若者世代とマネージャー世代のキャリア観
https://www.businessinsider.jp/post-107782
フリーランスの職種20個の仕事内容と平均年収をわかりやすく解説
https://www.proof0309.com/entry/shokushu
時給1万円のバイトも。会社員向きのプチ副業を、“バイト芸人”が教える
https://headlines.yahoo.co.jp/article?a=20190226-00127948-bizspa-bus_all
副業が「会社にバレる人」と「バレない人」の大差
https://headlines.yahoo.co.jp/article?a=20190303-00268007-toyo-bus_all
正社員の10%以上が副業 中には過重労働で体調崩す人も
https://headlines.yahoo.co.jp/hl?a=20190227-00010000-wordleaf-bus_all
「副業で年2000万円稼ぐ男」に学ぶキャリア戦略
https://headlines.yahoo.co.jp/article?a=20190221-00266856-toyo-bus_all
加速する「副業社会」正社員の4割が「副業したい」 気になる収入はどれくらい?
https://headlines.yahoo.co.jp/hl?a=20190218-00010001-danro-life
おすすめ副業22選を現役フリーランスが解説【在宅も可能】
https://www.proof0309.com/entry/zaitaku-hukugyou
会社を辞めてフリーランスで働きたいあなたが知っておくべき10のこと
https://www.businessinsider.jp/post-165731
フリーランスと会社員、働き方の根本的な差 広がる「雇用されない働き方」の課題とは何か
https://toyokeizai.net/articles/-/263055
フリーランス人口は増える!今後は仕事もプロジェクト単位になる!?
https://freelance.mts-career.com/population/

667 名前:デフォルトの名無しさん mailto:sage [2019/03/03(日) 16:40:10.01 ID:QDmbu/k4.net]
言語を使う側なのに、大声でJavaは嫌い()

668 名前:デフォルトの名無しさん mailto:sage [2019/03/03(日) 23:12:33.70 ID:PvgSI+1g.net]
>>633
焼そば屋?

669 名前:デフォルトの名無しさん [2019/03/04(月) 04:52:56.59 ID:DAN4+o0x.net]
「困った」と
「助けたい」をマッチングする

新たな出会い系アプリか?

670 名前:デフォルトの名無しさん mailto:sage [2019/03/04(月) 21:58:39.97 ID:jKyydNU9.net]
最近はスノボにご熱心。



671 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 04:05:49.01 ID:/9uzsfIc.net]
まあJavaは糞これは間違いない
Java使うぐらいならC#使うほうが10倍まし

672 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 06:49:23.03 ID:O5wD/kWC.net]
そんなことあるわけない

100倍は違う

673 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 06:58:59.78 ID:kisxcMe6.net]
Javaはコボラーと同じく湿った猫のような臭いがします

674 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 14:00:13.11 ID:CkJINn0N.net]
Java並に大規模な開発事例ってC++にはあるの?

675 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 15:25:41.23 ID:fIhIM0AX.net]
Windows

676 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 17:12:45.41 ID:YmAHbq9k.net]
>>674
人月商売をやってるだけで大規模()とは言わない
Linuxカーネルほど大規模なのはJavaではない

677 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 17:33:37.15 ID:/9vlYliD.net]
LinuxカーネルってCじゃないのか?

678 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 17:42:59.75 ID:zQd5qKqX.net]
javaって大規模なの?

679 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 18:51:08.44 ID:t42KPL8W.net]
unreal engineとかクッソ大規模に見えるけどどう?

680 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 19:03:00.43 ID:fIhIM0AX.net]
工数でいえばそんなもんクフ王のピラミッドには遠く及ばないだろう



681 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 19:03:04.57 ID:VOhJ9aa0.net]
そもそもjreの基幹部分とかc++だろ

682 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 19:33:34.31 ID:5rQQuIbo.net]
クフ王のピラミッドがなんか関係あるのか?

683 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 19:57:12.64 ID:RSECco33.net]
甘い
甘いなぁ
人月換算だと同じだよ
死者数すらも一致してる

684 名前:デフォルトの名無しさん mailto:sage [2019/03/05(火) 22:23:27.02 ID:kisxcMe6.net]
20年前で70万ステップぐらいでビルドに1Hぐらいだったなあ

685 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 00:39:47.70 ID:oR6mPeK7.net]
むしろ>>674が思う大規模なjavaプロジェクトを知りたい

686 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 00:47:13.50 ID:URVwFrjm.net]
人数かけて、webページの遷移ごとに別人が開発して、似たような処理をするコードが100倍くらいに膨れ上がって収集つかないようなのが大規模なんじゃね

687 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 02:24:32.10 ID:bd8igJ/M.net]
そう言われると、それまさにコボルだなw

688 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 09:21:38.79 ID:Bk9kaTOY.net]
コボル島ってどっかになかったっけ

689 名前:デフォルトの名無しさん [2019/03/06(水) 09:50:15.63 ID:mg6kC0Yg.net]
c++じゃなくてcでnamespaceって使えますか?あるいはnamespace相当の機能ってどうすれば実現出来ますか?

690 名前:デフォルトの名無しさん [2019/03/06(水) 09:53:13.16 ID:mg6kC0Yg.net]
重力波を検出するのに世界中の電子望遠鏡を接続してリアルタイムに通信してるようだけど
ああいうシステムのコードって何で書かれてるの? FORTRAN ?



691 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 10:10:00.89 ID:TjQtzcPT.net]
>>689
cでは使えない
ほぼ上位互換だからc++使えばいいじゃん

692 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 11:25:59.41 ID:1+PBsWw4.net]
>>690
マジレスすると、ああいうのはファイルに落として時々バッチ処理してるだけ
言語はだいたいFortranかC++が多いだろうね

693 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 13:12:20.46 ID:+Sk++sfs.net]
C++だけは絶対にないな

694 名前:はちみつ餃子 mailto:sage [2019/03/06(水) 13:15:53.62 ID:7/fqDaVy.net]
そうか。

695 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 23:36:07.84 ID:rIL6SiiZ.net]
std::chronoにnanoseconds取り扱う型があるけど
これってwindowsでもナノ秒の精度ちゃんと取り扱えるの?

696 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 23:39:51.80 ID:NglcYyrq.net]
c++11以降はあれ明らかに生産性下がってんだろ。。
誰か本当のことを言ってやれよ。。

697 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 23:41:05.32 ID:ARyk7IvZ.net]
構造化束縛はありがたい

698 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 23:42:11.68 ID:TjQtzcPT.net]
>>695
自分で試してみたら?

699 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 23:52:49.64 ID:07omsi5c.net]
>>695
表現できるだけ
計測できるとは言っていない

700 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 04:25:32.55 ID:hEEon6In.net]
じっさいにやったらわかるが、結局 Windows API の持ってる精度までしかでない
あたりまえっちゃーあたりまえだが



701 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 05:42:28.93 ID:mVKClUMz.net]
>>698
試そうと思ったらどう試すのがいいんだ?

702 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 06:28:12.40 ID:beHWBAJY.net]
短時間、というか連続で何度も時刻の値を入手して、
値の下の方の桁がかならずゼロ並びになってるとか、
時刻同士の差を取って、ある値より小さな数が出ないことから、
解像度の見当を付けるくらいかな。

もっと良いやり方を知ってる人は教えてください。

703 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 09:17:09.23 ID:0XBNAuOg.net]
差をとってその偏差を見ればいいんでは
高解像度タイマーならたぶんcpuのクロック程度の解像度じゃないの
パフォーマンス測定に普通使うし
個人的にはchrono使わずにosのapiかコンパイラの組み込み関数使う
そっちの方が信頼できるし、chronoは型がガチガチすぎて面倒くさい

704 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 09:44:34.06 ID:MJ46GSxE.net]
アナログ出力してオシロで確認

705 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 19:42:23.39 ID:41TL6wBf.net]
std::vectorの最初の要素数は
std::vectro<foo> bar(12);
みたいにコンストラクタで指定できますが、同様に
std::vector<std::vectro<foo>> bar
のように入れ子になったvectorの両方の要素数をコンストラクタで指定する方法はありますか?

706 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 20:10:03.40 ID:rioBJ/QG.net]
結構難しいと思うがね。
最近のCPUはターボブーストいうてサボるし、命令順序入れ替えるし、キャッシュの乗り方でnano秒程度は簡単にズレるだろうし。

707 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 20:45:12.44 ID:xMxnKQAI.net]
>>705
std::vector<std::vector<foo>> a(100, std::vector<foo>(200));

708 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 20:50:20.24 ID:pnI3L7PU.net]
>>706
最近のは対策入ってる

709 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 22:54:09.91 ID:qMT9Q04c.net]
>>707
ありがとござます!

710 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 07:43:53.39 ID:L5yO1DTL.net]
Cで書かれたライブラリから来た構造体にスマポをあてる方法はありますか?



711 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 09:00:25.13 ID:jz9xUaFa.net]
どうなんだろ?
普通に考えたらデストラクタでfreeを呼べばいいから、それ用のライブラリがありそうな気はするけど。

712 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 10:46:03.96 ID:ABNsWlsO.net]
>>710
スマポ弄ってアロケートだけしないようにすればいいんじゃね?

713 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 11:36:20.07 ID:4ewQpv+T.net]
「来た」というのが構造体へのポインタをfree責任ごと渡されたという意味ならカスタムデリータだろうな。

714 名前:706 mailto:sage [2019/03/09(土) 12:16:02.29 ID:L5yO1DTL.net]
ありがとうございます
カスタムデリータは知りませんでした
Cで書かれたライブラリにmallocしたポインタを返してくる関数があって生ポいやだなあと思っていたところでした

715 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 14:06:24.90 ID:YAm1zwse.net]
最近スマポ使えスマポ使えってうるさい割にはカスタムデリータ指定出来ることも知らなかったりするんだな
自分が使ってるもののリファレンスすら読んでない奴が安全性とかどの口で言ってるんだろう

716 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 15:07:55.58 ID:23Hi4jvz.net]
わかってない奴ほど、声がデガイんだよ。

717 名前:デフォルトの名無しさん [2019/03/09(土) 17:13:56.74 ID:kfZA3URW.net]
codecvt_utf8
codecvt_utf16
codecvt_utf8_utf16
こいつらの糞加減に

718 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 17:33:22.12 ID:anJ4ej+i.net]
最近カスタムデリータ知ったから嬉しがってる奴がいるなw

719 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 17:49:56.48 ID:23Hi4jvz.net]
>>715
すいませんね、リファレンスなんかそっちのけで、ネット情報だけで、プログラム組んでます。

720 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 19:59:53.92 ID:YAm1zwse.net]
>>718
図星だったか、すまんな
というかマウント取るための屁理屈考えてる暇あったら手動かした方がいいよ



721 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 20:10:27.73 ID:eJu7ZZw8.net]
図星しとか意味分からん
ひょっとして>>715 disってるのか? w

722 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 20:14:07.94 ID:9vZTtl18.net]
最近図星って言葉を覚えたので使いたいんだろう
察してやれ

723 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 20:21:16.84 ID:YAm1zwse.net]
>>715で言ったことが図星だったか?という意味なんだが
アホが多いインターネッツですね

724 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 20:32:45.58 ID:kU0Uws1z.net]
今度はインターネッツという言葉を覚えたのか
どんどん賢くなっていくな

725 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 20:39:00.33 ID:ABNsWlsO.net]
カスタムデリータごときでよくそこまでドヤれるもんだなw

726 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 20:46:58.79 ID:YAm1zwse.net]
それ俺に言ってんの?w

727 名前:デフォルトの名無しさん [2019/03/09(土) 21:23:16.03 ID:jx9iLAiD.net]
そもそもSTLの基幹部分とかJavaだろ。

728 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 21:36:18.70 ID:jz9xUaFa.net]
実際c++やるやつのほとんどの動機がマウントとりたい以上のものではない。

729 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 22:31:55.52 ID:u5Pk3KZw.net]
> 俺に言ってんの?
意識しまくりすぎだろw

730 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 22:41:21.04 ID:Tm/Y9JxW.net]
大学四年かけてC++と機械学習学べば年収1000万とか本気で言ってる奴らだからな()



731 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 22:26:31.27 ID:QlHozVZM.net]
相談なのですが

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

私が作成しているのはライブラリBです。お客さんに使ってもらうものなんですが、「ライセンスファイルをセットで提供して適切な場所に置いて使ってもらう」という手間を省きたくてライセンスファイルをライブラリBに埋め込めないかと思案しています。
とりあえずライセンスファイルの中身をソースにベタ書きし、実行時に一時ファイルとして作成しライブラリAにそのパスを渡すことで上手くいっているのですが、もっとスマートな方法はないでしょうか?
ファイルパスを渡さないといけないので無理ですかね…

732 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 22:57:10.81 ID:9rO3q8tQ.net]
納入時にファイル一つなんか?
実体なんやねん

733 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 23:06:05.03 ID:zGphoT2G.net]
ライブラリAが要求するのは
ファイルシステムに認知されるファイルの形式でないといけない
だから中間ファイルに書き出して、そのファイルパスを渡すしかない


つかライセンスを埋め込んだ場合何がしかの事情で
ライセンス変更の必要が迫られた場合ライブラリBを構築しなおすことになるんだが
そういう管理でいいのけ?

734 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 23:06:05.25 ID:CMHDEYzk.net]
>>732
ヘッダーと共有ライブラリのセットです。

735 名前:デフォルトの名無しさん mailto: sage [2019/03/11(月) 23:11:06.21 ID:CMHDEYzk.net]
>>733
やっぱ他にないですよね…

継続的にバージョンアップ重ねて提供してるんですが、ライブラリAについては今後も使い続けるか微妙なんでお客さんに〜のように運用してくださいってお願いするのはまだやめておきたいんですよ。
まあその面倒ごとを避けようとするスタンスが一番よくないのかもしれませんね。

736 名前:デフォルトの名無しさん mailto: sage [2019/03/11(月) 23:14:01.28 ID:CMHDEYzk.net]
というか自分がお客さんの立場にたってみれば、「カレントディレクトリにライセンスファイル置いて使ってください」と言われたら「はいOKです」ですむ問題ですよね。
やはりちゃんとライセンスファイル提供して使ってもらうべきかと思ってきました。

737 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 23:20:45.86 ID:9rO3q8tQ.net]
>>734
どう配布すんのかしらんけど
共有ライブラリと同じとこに置いて固めるなり、インストーラー書くなりすれば十分やろ
たいして報われん努力やと思うわ

それよりライブラリAは何がしたいんか気になるわ
意味あんのかそれ

738 名前:デフォルトの名無しさん mailto: sage [2019/03/11(月) 23:23:05.53 ID:CMHDEYzk.net]
>>737
ライブラリAはwebAPI叩くからその時にアクセス権限チェックでライセンスファイルを使うようです。

739 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 23:36:41.67 ID:9rO3q8tQ.net]
>>736
ロードされてる共有ライブラリのパスはとれるはずやから、
そこにライセンスファイル置いておく手はある

740 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 01:51:07.02 ID:xlgLjh5J.net]
変数と型についてなんだがメモリは2進数でデータを記録していて、それを何byteで区切って、どういう意味を持つか(正の整数のみとか)を型で決めてるんだよね?だとしたらポインタに型があるのはなぜ?どれもアドレスを示すんだからある意味int型でいいと思うんだけど



741 名前:はちみつ餃子 mailto:sage [2019/03/12(火) 02:03:10.03 ID:tBEUjULM.net]
>>740
そういう言語もあったよ。
でも、ポインタを経由しただけで型がわからなくなるんじゃ、
型システムが意味を成さないだろう。

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

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

型が合わないエラーなんてたびたび出しちゃうもんだろ。
もし型がなければそれはスルーされてわけのわからない挙動をするプログラムになるんだぞ。
そういうのはもうやめようって話。

742 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 02:06:26.71 ID:i1gu3hXZ.net]
>>740
ポインタに格納されるアドレス値は32bitとか64bitとかの整数でそれ自体は同じ型として扱えるとしても、そのポインタの指す先にある物の型が分からないと色々困るでしょ。
ポインタ型としてvoid*だけでプログラムを書こうとすればその必要性がわかるはず。
同じバイト表現だからといって同じ型で表さなければならない道理はない。用途や演算結果が異なるのだから別の型として扱うのはある意味自然なことだと思うよ。

743 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 07:03:19.32 ID:1t7NN+JI.net]
>>740
参照はずし、つまり*演算子で「ポインタの指す内容」を取り出すときに
そのポインタがどんなデータを指すポインタか分からないと困るでしょ。
構造体を指すポインタで p->menber とかする場合も同様。

>>742 の「void*ポインタだけ使って書いてみる」ってのは、
ポインタに型のある有り難さを実感できる良い課題だね。

744 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 07:35:06.24 ID:nPeHxcg9.net]
Cのポインタ型はK&Rのプログラミング言語Cに書いてある通り、単なるアドレスを保持する型じゃなくて配列の仲間なのよ。
例えば
char *cp =“abc”;

*(p+1)の様に書くと、ちゃんとcharサイズ分ずらしたアドレスを指してくれる。
その本には
(当時の)優れたプログラマたちがやってた事を言語仕様として取り込んだと、という様な事が書いてあったと思う。
ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。

745 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 07:35:25.54 ID:nPeHxcg9.net]
Cのポインタ型はK&Rのプログラミング言語Cに書いてある通り、単なるアドレスを保持する型じゃなくて配列の仲間なのよ。
例えば
char *cp =“abc”;

*(p+1)の様に書くと、ちゃんとcharサイズ分ずらしたアドレスを指してくれる。
その本には
(当時の)優れたプログラマたちがやってた事を言語仕様として取り込んだと、という様な事が書いてあったと思う。
ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。

746 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 07:37:59.58 ID:nPeHxcg9.net]
>>745
>>745
>*(p+1)の様に書くと、ちゃんとcharサイズ分ずらしたアドレスを指してくれる。

*(cp+1)の間違い

747 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 08:23:28.38 ID:xHFKV8QO.net]
>>741
>>742
>>743
>>744
ヒューマンエラー防止
型のないポインタを宣言すると中身のbyte長が不明
ってことかありがとう
740のコードを見て疑問に思ったんだけど*cpは一つのアドレスしか記録できないから配列の先頭(文字a)のアドレスを記録するよね。このとき配列の長さが3だという情報はどこにあるの?(脱線するけどNULL終端も数えて長さ4?)

748 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 08:29:27.03 ID:i1gu3hXZ.net]
>>747
ポインタが指す先にいくつ分の領域があるか(いくつ分を参照してよいか)は記録されてないから、プログラマが自分の責任で管理するしかないよ

749 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 08:41:29.44 ID:7SPfMi3X.net]
>>747
直接長さを示す情報はどこにもないよ
だから、cの「文字列」は単なる文字の配列だけではなく、0終端が必要

>(脱線するけどNULL終端も数えて長さ4?)
その通り
(NULLはnullptrとしてのみ使ったほうがいいよ
混同してないならいいんだけどね)

750 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:29:32.99 ID:nPeHxcg9.net]
>>744
>>745
>ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。

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

配列長さは
sizeof(*cp) / sizeof(型)で取ってねって書いてあったよね?



751 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:32:06.13 ID:u0RxZCyH.net]
\0終端が来るまで確保されていると想定して受け取り側は動作する
だから終端記号がないと色々まずい
(ので、バッファ長も指示する関数が後から増えた)

752 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:32:15.05 ID:xVickGeK.net]
便乗質問でごめんやけど

delete [] p;
この場合deleteはどうやってサイズ調べてんの?

753 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:33:32.91 ID:i1gu3hXZ.net]
>>750
char *cpで宣言してるならその計算じゃ配列サイズはとれないよ。

754 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:33:42.86 ID:u0RxZCyH.net]
要素数の算出は
sizeof(配列) / sizeof(配列[0]) または sizeof(配列) / sizeof(*配列)
ではなかろうか?

755 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:47:35.09 ID:Nd0ou12Q.net]
除算は遅いからなぁ

756 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 10:18:57.28 ID:u0RxZCyH.net]
コンパイル時に確定する値だから
実行時には定数として埋まってるんでないの?
(ほんとんどの環境で インタープリターはしらんw

757 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 10:22:41.05 ID:Nd0ou12Q.net]
sizeof(配列)は動的でしょう

758 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 12:15:07.37 ID:7lezZ5hH.net]
sizeofは演算子だから動的じゃないかな
最適化で消し飛ぶ可能性はあるのかもしれんけど

759 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 12:42:52.96 ID:Gedrqwi7.net]
>>752
実装依存だと思うけど、p[-1]とかに長さが書いてあったりする

760 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 12:45:54.40 ID:xHFKV8QO.net]
アンカー長くなるから省略するけど
みなさんありがとう



761 名前:デフォルトの名無しさん [2019/03/12(火) 13:32:00.51 ID:6Uu2j9Xc.net]
インクリメントするときに困る

762 名前:752 mailto:sage [2019/03/12(火) 14:52:24.67 ID:u0RxZCyH.net]
VLAのこと完全に忘れてた sizeof(配列) は動的だわ

763 名前:はちみつ餃子 mailto:sage [2019/03/12(火) 15:09:12.69 ID:tBEUjULM.net]
sizeof の結果は動的な判断が必要な場合 (いわゆる VLA) を除いて整数定数であることは保証される。

C++ には VLA は無いので sizeof が動的であるかどうかを心配する必要はないんだけど、
それは置いといて、 C++ で配列の大きさを知りたいときは std::extent の方がよくない?

764 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 15:29:35.28 ID:xWv5Y9zk.net]
>>760

>>748-759
というアンカー表示方法も、知っておいてね。

765 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 22:48:56.35 ID:SU/8eF4+.net]
昔はstd::extent持ち出したりしたが今はstd::sizeだな

766 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 23:05:04.16 ID:/eUnUFro.net]
uint8_t *addrb =(uint8_t *)0x00F00000;
uint16_t *addrw =(uint16_t *)0x00F00000;
*addrb = 0x10;
*addrw = 0xF0F0;

0x00F00000番地に0x10と0xF0F0を書き込むコードらしいのですが、最初の2行がよく分かりません。アドレスが4バイトなのにポインタはそれより小さくて問題ないのでしょうか。右辺のキャストは何を行っているのでしょうか。
よろしくお願いします。

767 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 23:29:55.31 ID:RU0tEwI6.net]
>>766
・整数だから昇格するよ
・整数即値をポインタ型に変換してるよ
ポイント先のデータは多分、バイト型だよ

マップドIO系のCPUではよく見るパターンだね

768 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 23:37:26.58 ID:y5WX6T5u.net]
>ポインタはそれより小さくて問題ないのでしょうか。

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

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

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

*addrb は uint8_t 型でおそらく1バイト (1オクテット)
*addrw は uint16_t 型でおそらく2バイト (2オクテット)

769 名前:デフォルトの名無しさん mailto:sage [2019/03/13(水) 18:31:26.55 ID:yPp5BeL1.net]
ありがとうございます。
理解できました。
そもそもアドレス自身のサイズがあるものと勘違いしてました。

770 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 06:41:14.61 ID:SGfhnH0M.net]
アドレス自身にもサイズはあるけどね。
sizeof(*addrb) == たぶん 1 (8bit)
sizeof(*addrw) == たぶん 2 (16bit)
sizeof(addrb) ... 近頃のPCでは 4 (32bitアドレス) か 8 (64bitアドレス) かのう。



771 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 12:20:30.31 ID:Yw9IVRaM.net]
メモリ消費についてききたい。
8byteのa,b,cっていう変数と、それを結合した24byteのdっていう変数をクラス内で扱いたいんだけど、素直にやると48byteメモリ消費だよね?
代わりに24byteのdと、8byte型のポインタ(4byte)3つ宣言したら36byteのメモリ消費で12byte/オブジェクトの節約になると思うんだけど、最適化したければ意識するべき?
あるいはコンパイラがその辺は上手にやってくれて最小限のメモリ消費になる?

772 名前:さまよえる蟻人間 mailto:age [2019/03/14(木) 12:26:16.05 ID:1+g2CCuw.net]
>>771
ポインタ先をチェック・確保するのにヒープメモリーと計算コストが掛かる。

773 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 13:52:59.75 ID:M+miX7Aw.net]
>>771
宣言次第ですね。
メモリ節約だとdを配列にしておくといいかなとおもいました。

774 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 14:39:59.26 ID:3EvgP48J.net]
>>771
それ実体の24byteが別に要るだろ…

775 名前:デフォルトの名無しさん [2019/03/14(木) 14:43:45.46 ID:q8OuUl64.net]
下のソースをコンパイルしてコマンドプロンプト(cmd)で実行すると「鷗」の字が出力されません

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

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

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

python3 からだと表示出来るということは
fwprintf に問題があるということでしょうか?

776 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 14:57:23.81 ID:tsxAqnNH.net]
Windows は、Visual Studio だろ

TCHAR マクロで、sjis/Unicode を切り替える。
Windows用の環境を揃えないと、無理だろ

777 名前:デフォルトの名無しさん [2019/03/14(木) 15:10:14.13 ID:q8OuUl64.net]
UNICODE
_UNICODE
とかは定義してあります
それに[あ]の方は表示されてるので
TCHAR が char と誤認識とかめっちゃ的外れな指摘だと感じます

778 名前:デフォルトの名無しさん [2019/03/14(木) 15:25:54.72 ID:s2YvJJWc.net]
fwprintf
ワイド文字を書き込む場合、ファイルはバイナリー・モードでオープンするか、
o_ccsid または codepage パラメーターでオープンする必要があります。
これにより、ワイド文字に対して変換が発生しないことが保証されます。

779 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 17:04:07.47 ID:DMc/T5SW.net]
>>771
もしかして windows で 24bitカラーを取り扱いたい話? union で楽する

#pragma pack(push,1)
typedef union {
BYTE e[3];
struct { BYTE B, G, R; };
} BPP24_t;
#pragma pack(pop)

780 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 19:02:32.98 ID:wP1B/x23.net]
>>772-774 >>779
ありがとう説明不足だった
厳密にはL2フレームを実装したくて
DMAC6byte
SMAC6byte
TYPE2byte
とかを結合して送りたい。
んだが、結合用の変数を用意するとメモリ消費二倍な気がしていやだなと。
で、それぞれはポインタにして結合用の変数の0、6、8byteめを指定してやればいい気がして聞いてみた



781 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 19:26:19.44 ID:lcdumzgu.net]
>>780
プロトコルスタックでそういうデザインはよくある
nicにわたすときのdmaもそんな感じ
しかしその数バイトの処理はこだわるところじゃない

782 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 20:21:10.72 ID:2vbDdJqi.net]
規格で標準ライブラリ中のメソッドがconst指定されていない場合これをconst指定するのは規格違反ですか?

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

N4140及びN4659を参照した限り、上記のオペレータはconst指定されていませんでした

783 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 20:28:14.30 ID:gIuDI0vP.net]
>>780
フレームの組み立ては迷うことなくstructでいいと思うのですがどうでしょう。ちなみにpingではは素直にstructで組み立ててあります。

784 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 20:30:26.12 ID:V4l0GHvB.net]
>>781
確かに数バイトなんだけどね
>>783
cppで書いててクラスのプライベート変数として持ってます
結合どうするかだけ悩ましい

785 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 21:00:14.82 ID:gIuDI0vP.net]
>>784
ああ、なるほど。structでガワ作っておいて、ペイロード書き換えてバッファに溜めていくって感じでしかやった事しかないですけどケースバイケースなんでしょうね。

786 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 21:58:48.11 ID:VY0DZD81.net]
コンソールがSJISだから無理

787 名前:デフォルトの名無しさん [2019/03/14(木) 23:31:25.66 ID:u00Rfoqy.net]
C++難しすぎねえか?
こんなの新機能を網羅してる人どんだけいるんだか・・・

788 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 23:39:23.56 ID:CLlwPgIu.net]
奥義を究めると尊敬されます(カモ)

789 名前:はちみつ餃子 mailto:sage [2019/03/14(木) 23:47:20.81 ID:mXS2OKIJ.net]
>>787
別に網羅せんでも使えるところだけ使えば良い。
常に新しい機能を把握しておく必要はない。
使わない方が良い機能というのは有るので、駄目な部分を把握する方が大事だと思う。
(その結果として新しい機能に行きつくこともあるけど。)

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

今の C++ で nullptr でなく NULL を使う理由は全然ない、みたいなのとか。

790 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 23:49:54.51 ID:Gk3KilXE.net]
てかコンセプトが待ち遠しい
templateの黒魔術っぷりが大幅に改善されるよね
エラーメッセージが分かりやすくなるのが大きい



791 名前:はちみつ餃子 mailto:sage [2019/03/15(金) 00:08:50.55 ID:q2a9nFaz.net]
コンセプトとモジュールは C++er の悲願って感じだからな……。
今まで土壇場での延期を繰返した経緯を考えると次も本当に入るのか
疑わしい気はするけど。

792 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 02:19:09.67 ID:f+LcC8HT.net]
配列のアドレスが表示できません。何が悪いのでしょうか。結果はからになります。
unsigned char a[100];
cout << hex << &a[5] << endl;

793 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 02:52:40.51 ID:nvk7uoI+.net]
a+5

794 名前:さまよえる蟻人間 mailto:age [2019/03/15(金) 04:49:34.55 ID:CgPhXsZt.net]
(void *)

795 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 06:53:21.47 ID:F3jqlZHF.net]
>>792
&a[5] は「unsigned char を指すポインタ」なので
cout << では「'\0'で終端する文字列」として表示しようとするのよ。
なもんで >>794 の通り void* にキャストして、
具体的なデータを指さない「単なるアドレス」扱いしてくれと指示。
ちなみに >>793 は効果ないでしょ。

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

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


…何か標準的で短い書き方があったりするのかしら。

796 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 08:07:08.74 ID:fLDhqMRG.net]
文字はcharだけでsigned/unsignedは整数扱いするとかしてくれりゃよかったのにな。

797 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 09:38:53.54 ID:MV2geWC9.net]
coutなんて使うのが悪い
printf()でおk

798 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 10:50:58.56 ID:nvk7uoI+.net]
qDebugばっか使ってたからcoutの使い方なんて忘れてたわw

799 名前:デフォルトの名無しさん mailto:sage [2019/03/17(日) 06:21:33.06 ID:Q6jWm6hE.net]
そういえば「cout << &a[5] でアドレス値が表示されない」ってのは
char 系の配列やポインタの場合だけで起きる特殊例なのかな。

ユーザーが operator<<(ostream&, T*) の再定義をしない標準の状態で、
オブジェクトのアドレス値を送ったらアドレス値以外の何かが表示される型って
標準か有名どころのライブラリで、何か知ってる?

800 名前:デフォルトの名無しさん [2019/03/17(日) 12:02:02.30 ID:ZVJiTVd1.net]
operator<<(ostream&, T*) の再定義をしないライブラリで
オブジェクトのアドレス値を送ったらアドレス値以外の何かが表示される型を定義しているものは?

という質問に置き換えてみた



801 名前:デフォルトの名無しさん mailto:sage [2019/03/17(日) 13:17:40.49 ID:4LIjOkKH.net]
gccのiostreamのソース辿れば全部書いてあるよ。

802 名前: mailto:sage [2019/03/17(日) 14:11:06.99 ID:8PHb1ymW.net]
>>801
ほう、どこに書いているのかわかってそう言っているのですね、それはすごいですね

803 名前:デフォルトの名無しさん [2019/03/17(日) 14:22:23.04 ID:rD0zueCH.net]
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/ostream

804 名前:はちみつ餃子 mailto:sage [2019/03/17(日) 14:50:03.46 ID:aA4z/LNt.net]
ライブラリのソースコードを辿っていくとビルトイン関数だったりして萎えることもあるので、
まずは仕様をちゃんと読もうな。

805 名前:795 mailto:sage [2019/03/17(日) 15:05:24.52 ID:Q6jWm6hE.net]
>>803
ostream のヘッダ単独は意外に分量少なくて一通り見られたよ。
char系以外には...

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

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

nullptr_t の方は「nullptr が送り込まれたら "nullptr" と表示しろ」だと思うが
__streambuf_type* __sb は分からん(定義は別ファイル、みたいだし)。

806 名前:デフォルトの名無しさん [2019/03/17(日) 15:17:33.67 ID:9G7IgbIM.net]
痛レータが呼ばれるんじゃね

807 名前:デフォルトの名無しさん mailto:sage [2019/03/17(日) 19:25:05.63 ID:wQNvtjPu.net]
現在アルゴリズムの勉強をしています
ソートアルゴリズムで有名な基本挿入法で与えた5つの整数を小さい順に並べるプログラムがうまく動きません
基本選択法、基本交換法(バブルソート)は書けるのですが…
ソートアルゴリズム、アルゴリズムそのものは図で正しく書けるとは思うのですが、コードに落とし込むのがうまくいきません
書いたコードは稚拙ですが以下のものです おかしな点を教えてくだされば幸いです

#include<stdio.h>
//基本挿入法
int main(void){
int temp=0,j,i;
int ary[5]={9,6,1,5,2};
for(i=1;i<=4;i++){
temp=ary[i];
for(j=i-1;j>=0;j--){
if(ary[j]>ary[i]){
puts("aaa");
ary[j+1]=ary[j];
}else{
puts("jais");
j--;
break;
}
}
j++;
ary[j]=temp;
printf("a[%d]は%d a[%d]は%d¥n",j,ary[j],i,ary[i]);
}
for(i=0;i<=4;i++){
printf("%d¥n",ary[i]);
}
return 0;
}

808 名前:デフォルトの名無しさん mailto:sage [2019/03/17(日) 19:26:08.56 ID:wQNvtjPu.net]
puts(“aaa”)やputs(“jais”)はprintf(“a[%d]は%d 〜”)の3つは、プリントデバグのために書いたものです…消し忘れました
すみません

809 名前: mailto:sage [2019/03/17(日) 21:48:00.62 ID:8PHb1ymW.net]
>>807
https://ideone.com/gIcJzp
納得がいくまで printf() を仕掛けるのはいいことだと思います。

810 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 21:33:07.89 ID:iIi946R+.net]
class C
{
public:
 void f(){}
};

C* pc= new C;

pc.f();

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

なのになぜ、->と記述させるの?



811 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 21:44:58.77 ID:32G7a9z6.net]
std::invoke使え

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

main(){
・・・
{
ClassB b;
ClassA a(b);
} // ここで落ちる
・・・
}

813 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 22:09:12.99 ID:oZ4uWA1m.net]
> m_b.reset(&b);

ヒープオブジェクトじゃないものをunique_ptrに突っ込んだらダメ。
カスタムデリータ用意するなら別だけど。

814 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 22:22:19.12 ID:7SOsx0TI.net]
>>813
この場合にスマートポインタは違うようですね
メンバは実体にして渡すときにムーブすればコピーは発生しないという認識は正しいですか?

815 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 22:30:43.95 ID:0T+gZcjq.net]
ClassAはClassBそのものを所有するのか
それとも外部のClassBへの参照を保持するだけなのか?
そのものを所有するなら外部から与えるのではなく
ClassAの中でClassBを構築するのも検討してみれば

// ClassAのコンストラクタ
// 11以降ならムーブとかも
ClassA(ClassBの構築に使う引数) : m_b(前記の引数) {}

816 名前:さまよえる蟻人間 mailto:sage [2019/04/01(月) 22:30:51.94 ID:OIWsA4Np.net]
>>814
スマホ使う前にオブジェクトの所有権を明確にせよ。

817 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 22:51:52.32 ID:7SOsx0TI.net]
ClassBの構築に使う引数も大きいためコピーを避けたいところです
基本的には参照を保持するだけにしたいところですが、ClassBがスコープを外れて破棄される場面ではClassAに実体をコピーできるようにしたいです

818 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 22:59:26.12 ID:oZ4uWA1m.net]
なんでそこでわざわざコピーしたいの?
最初からnewでヒープに確保すりゃコピー必要ないのに。

819 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 23:35:23.75 ID:32G7a9z6.net]
AにB*とunique_ptr<B>を作って
AがBを使うときは常にB*経由でアクセス
Bを所有させたいときだけunique_ptrにヒープ管理だけさせる

820 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 23:37:44.29 ID:7SOsx0TI.net]
2つ持つという発想はありませんでした
試してみます



821 名前:デフォルトの名無しさん mailto:sage [2019/04/04(木) 17:56:45.10 ID:4dlKQxP/.net]
昔、openGLを使ってC++出遊んでたんですけど、また最近触りたくなりました
皆さんC++で何作ってますか?
個人開発規模でお願いします

822 名前: mailto:sage [2019/04/04(木) 19:24:27.16 ID:+9gozOKQ.net]
>>821
昔作ったツールがひょんなことで役立っています…
あるディレクトリを別のドライブにコピーするだけのことなんですが、いや、まあ、Windows はなかなか御しがたく、path 文字列長が一定範囲を超過すると止まってしまう変てこなコマンドラインツールが未だに現役だったりするのです…
https://mevius.5ch.net/test/read.cgi/tech/1434079972/53

823 名前:デフォルトの名無しさん mailto:sage [2019/04/04(木) 20:14:39.57 ID:vPLFSwkc.net]
>>822
システムコールってやつですか?
オブジェクト指向と並列処理を勉強したいと思ってるのでQtもいいかなと思ってます
どうでしょうか?

824 名前:デフォルトの名無しさん mailto:sage [2019/04/04(木) 20:22:00.68 ID:USs/shwk.net]
Qtのデメリットはライセンスだけだから個人でやる分には良い選択

825 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 11:39:32.60 ID:K5RuTlhq.net]
オブジェクト指向を学ぶのにRubyあたりを使うのは
どういうデメリットが?

Pythonは「バージョン違いによる仕様変更」に
入門書レベルのコードが影響されるのであれば「良い選択とは言えない」ことになりそーだけど

826 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 12:37:54.42 ID:oOSdboOz.net]
>>825
せっかく新しい言語を学ぶなら、近い将来役に立たなくなる言語より他の役に立つ言語を選んだ方が合理的だと思う

827 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 13:47:38.12 ID:+CDO09PL.net]
pythonて破壊的な変更があったのは20年近く前なのに、未だに古い仕様で書かれた入門書が出回っているなら、オブジェクト指向学習に最適化どうかとは別に、問題な気が。

828 名前:デフォルトの名無しさん [2019/04/12(金) 14:05:10.56 ID:VR9mZ4dF.net]
rubyは古い言語

829 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 14:50:54.53 ID:K5RuTlhq.net]
Qt5.12.2はLGPLライセンスでインストールしとけばok?
他のライセンスは初見

830 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 14:56:36.82 ID:rTBxcnf6.net]
追加パッケージを使わないのならLGPLでおk



831 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 15:06:17.42 ID:K5RuTlhq.net]
"Qt Creator 4.8.2 CDB Debugg..." と "MinGW 7.3.0" 64-bit" 入れたら Hello World の窓が表示できるようになったけど、
練習ならそんなかんじでok?

832 名前:デフォルトの名無しさん [2019/04/12(金) 15:28:10.39 ID:VR9mZ4dF.net]
しばらく正常に動いてるように観えてても
あとで問題が顕在化して困るパターン

833 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 15:38:10.46 ID:K5RuTlhq.net]
どのような問題が発生しうるのでしょう?
もっぱら個人用の練習用とする予定

834 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 15:54:14.03 ID:rTBxcnf6.net]
Qt始めるならとりあえずこのシリーズ読もう
https://blog.qt.io/jp/category/getting-started-with-qt/

835 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 17:06:12.27 ID:K5RuTlhq.net]
私の場合は、インストール〜 "Hello World" については
https://qiita.com/yasumodev/items/399ec89b7205e3c0bab1
https://qiita.com/yasumodev/items/104446261114e9a7352c
を参考にしました。続きについては、御提示のリンク先を試してみますね

836 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 12:09:38.16 ID:r7SUy1hn.net]
ID:K5RuTlhq です

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

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

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

にチェックを入れたとしても LGPL が選べるようです
サードパーティーの追加パッケージで問題となりうる…?

837 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 12:11:50.81 ID:r7SUy1hn.net]
>>832
具体的に「どのような問題が顕在化」し「どのように困る」ことになるのでしょうか
クラスとメンバ関数のみの指摘でも構わないので、示していただけませんか?

また、その問題を回避する方法は何なのでしょうか?

838 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 13:57:08.11 ID:TvmgiEsJ.net]
>>836
LGPLを選べたとしてもQt Chartsを使っていればGPLv3
GPLと非互換のライセンスのライブラリを使うなら問題になる
だがそもそも練習段階ならライセンスなど気にせずどんどん書け

839 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 20:47:38.59 ID:r7SUy1hn.net]
昔は知らんが5.12.1ならQt ChartsはLGPLで許諾されるよ?

840 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 20:48:56.62 ID:r7SUy1hn.net]
5.12.2だった



841 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 23:19:58.42 ID:TvmgiEsJ.net]
はっきりとGPLv3と書かれてる
https://www.qt.io/download
Open Source->Additional features->Data visualization の?を参照

842 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 00:04:08.34 ID:El+pt49w.net]
条項はこれから確認する

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

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

あと「100%GPLv3と一致で修正条項なし」なん?
そうだとしたら、なおさらおかしい

843 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 00:07:28.45 ID:El+pt49w.net]
そういえば

LICENSE

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

そのようなケースを敷衍すると、帰結として、Qt chartsはLGPLとなりうる
GPLv3 については逐条解説もあるから、そっちの内容も確認してみてちょ(あくまで「解説」)

844 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 00:54:57.43 ID:El+pt49w.net]
純粋に「Qt のライセンス」の話なのでスレチ?



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

ただし今回のケースだと、「インストーラが LGPL によるライセンスを表示した状態」で先に進める以上
0. Definitions. の第8パラグラフ(1) 反対解釈により、「GPLv3は適用されない」と読む余地がある
実際、GPLv3 につき "displays an appropriate copyright notice" してないもの

845 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 00:56:08.63 ID:El+pt49w.net]
書き込み制限受けたので続き。多分コレで終わり。

あのインストーラが表示している著作権表示は明確に LGPL だから適用条件満たしてないと解釈する余地がある、と
…わたしはただの学習者だから大騒ぎすることでもねえんだがねえ…

846 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 21:39:53.28 ID:L7qqGgg7.net]
int& a;
int &a;
どっちにすべきでしょうか

847 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 21:52:39.66 ID:zTAvdEPs.net]
好きな方で書け

848 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 21:56:00.71 ID:dimPC8Ge.net]
「すべき」というのは規格表での『shall』のことですか?
それとももっと別の意図がありますか?

849 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 22:02:16.06 ID:1nT5zSFt.net]
int & a;
int * b;

850 名前:はちみつ餃子 mailto:sage [2019/04/15(月) 23:26:36.86 ID:94OTneyx.net]
std::add_lvalue_reference<int>::type a;



851 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 07:00:13.97 ID:xjyBK9QH.net]
そんなこと気にする前に参照の変数を未初期化で使おうとするなよ。
みたいなツッコミを入れたくなるけど、コンパイル時にエラーが出る
間違いは必ず見落としなく直せるから実際は大きな問題じゃないよね。

「ポインタ宣言の * を型名に寄せるか変数名に寄せるか」と同じで
一貫した書き方をするかぎり、どっちでも構わんでしょ。
個人的には「変数名に寄せる」派だけど。

852 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 08:18:02.67 ID:hl7GJiol.net]
int& a, &b;
int &a, &b;
自分も後者の方がいい

853 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 08:20:49.86 ID:GDkTCt4E.net]
>>851
> 未初期化で使

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

int *i;

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

とかいうかんじのことかしらん

854 名前:デフォルトの名無しさん [2019/04/16(火) 11:22:25.45 ID:vZl8q5zB.net]
>>852
+1
ほんそれ

855 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 12:24:17.44 ID:uqcfe1Iw.net]
わからない事をここで質問しようとレスを書いてる最中に「わかった!」
ってなることが多々あるんだが、この謎の現象は何なんだ・・・

856 名前:デフォルトの名無しさん [2019/04/16(火) 12:28:15.56 ID:4RjIOnLA.net]
自己解決パターン

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

いろいろあるが

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

この手法を利用してバグを取り除くやり方としてラバーダックデバッギングというものが知られている。

858 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 13:51:09.84 ID:WfxisTJA.net]
C++erならRust学べって風潮嫌い
なんで学習コストがある言語を2つも学ばないといけないのかと思うし

859 名前:847 [2019/04/16(火) 17:31:42.92 ID:xjyBK9QH.net]
>>853
あんまり大それた意見とではなくて
void func()
{
 int &a;
...
}
と宣言したら、参照先不明の &a を作ろうとしてるから
必ずコンパイルエラーになるじゃろ、程度の指摘。

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


要するに >>851 の前半部分は間違ってた、ということ。
正しい場合もあるけど、常に正しいわけじゃない。

860 名前:デフォルトの名無しさん [2019/04/16(火) 17:55:46.56 ID:LqBdGBd1.net]
その場合でもコンストラクタで初期化してなかったらエラー出るんだから
説明自体は間違ってない



861 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 21:38:13.69 ID:5Rly8M3u.net]
>>857
テディベアをおいておくというエピソードなら有名だね

862 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 22:14:36.94 ID:dFuxCqAG.net]
>>858
難しいことも違った方向から見るとわかりやすくなることもある。

863 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 11:24:45.99 ID:qKKG75KJ.net]
質問です。
cinの戻り値のistream&がなんでif(cin)みたいに真偽判定に使えるのかが発端です。
https://stackoverflow.com/questions/8117566/why-istream-object-can-be-used-as-a-bool-expression
こことか見たんですけど、
1.istreamはbasic_iosを継承してて、
2.basic_iosで型変換演算子explicit operator bool() const;が定義されてる
ってとこまでは理解しました

ここからが質問なんですけどこの型変換ってのは勝手に行われるもんなんですかね
if(something)って書いたらif(bool(something))っていつもやってるんでしょうか

864 名前:デフォルトの名無しさん [2019/04/19(金) 11:40:22.57 ID:ymX8VCBl.net]
intで参照したらEOF

865 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 12:05:08.07 ID:r9r2BfdP.net]
型変換以前に0やnullポインタを評価するとfalse、0以外の値はtrueと評価されると決まっているからだろ。
あと暗黙の型変換はよく起こる。

866 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 12:08:35.86 ID:lgg24wim.net]
if 文の条件判定部は bool 型を要求してる前提で解釈,翻訳してるんじゃない

867 名前:はちみつ餃子 mailto:sage [2019/04/19(金) 12:13:29.89 ID:mypEidUJ.net]
>>863
yes.
条件部はブールを要求し、もしブールでない場合は常に型変換する。

868 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 09:49:03.76 ID:9bTTnEnG.net]
前橋和弥さんのC言語ポインタ完全制覇という本で、
PCの環境(CPUの種類など)によってデータのメモリ上の配置は異なる
(構造体のパディングをはじめ、ただの単体のintでさえバイトオーダーが異なる(ワークステーションではビッグエンディアン採用だったりする))
ので、メモリの内容をバイナリでディスク上のファイルに出力したデータは別環境で読み込んで使おうと思ってはいけない
というような事が書いてありましたが、この話はWindows以外の環境や古い環境を前提とした話なのでしょうか?
同書にWindowsではBMPファイルをfwriteでファイルへダンプしていていかにもWindowsらしいとも書いてあるので、
Windows環境ならゲームのセーブデータとしてクラスをまるごとfwriteでバイナリ出力したファイルを別PCでロードしても問題ないのでしょうか?
(Xeonとかワークステーションマザーとか関係なしに、IntelCPU&Windowsの環境ならばリトルエンディアンで統一されている?)
(Macではビッグエンディアンになるが、Windows環境のみ対応のゲームを作る上では無視してよい?)
という認識は間違っているでしょうか?
パディングの違いなどもWindowsやVisualStudioが自動で良きに計らってくれるのならありがたいのですが…

869 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 09:54:32.44 ID:gSzU4BUh.net]
windows間だから「別環境」ではなく「同じ環境」
だからwindowsでも同じ
そのbmpデータをmacに持って行っても使えない

なので磁気コアをダンプして永続化したようなデータは、他の全ての環境で使えない
60年代くらいから知られている

870 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 12:00:13.06 ID:9bTTnEnG.net]
>>869
Windows環境であれば、別PC(別ハード)でも同環境とみなして良いのですね

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

Windows級の一流プログラマーでも構造体まるごと出力を使っているのであれば、
ゲームのセーブデータで構造体やクラスをまるごとバイナリ出力しても問題ないととらえてよいのかな?



871 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 12:30:10.75 ID:4KhiFNHT.net]
>>870
bmpファイルには仕様があるので「Windowsのプログラマがどうたら」なんぞ関係無く仕様に従って読み書きすべし
(現実には仕様に従わない入出力をやらかすアプリ毎に対処することはあるが)

自分で定義した構造体でも外部に公開するなら仕様を決めそれに準ずるべし
公開しないならそれこそ構造体丸ごとダンプなり好きにすれば良い
実際にそういう実装は珍しいものじゃない
どうせ環境の変化で困るとしてもそれは自分だけだからね






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<255KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef