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

C++相談室 part154 YouTube動画>1本 ->画像>1枚


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

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

1デフォルトの名無しさん2021/01/08(金) 17:54:00.55ID:0DW9z0rL
※前スレ
C++相談室 part153
http://2chb.net/r/tech/1602339500/

テンプレここまで

2デフォルトの名無しさん2021/01/08(金) 17:56:28.28ID:GG1sOSQC
おつかれー

3デフォルトの名無しさん2021/01/08(金) 19:34:40.54ID:hBRzO/B9
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

4デフォルトの名無しさん2021/01/08(金) 19:38:13.11ID:8XBZO/70
operator->*を好き勝手にオーバーロードするのは
C++厨二病なら誰しもが通る道だと思ってる

5デフォルトの名無しさん2021/01/08(金) 20:05:42.45ID:gKD5AY0L
厨二病以下だね沼二病か幼長病レベル

6デフォルトの名無しさん2021/01/08(金) 20:33:39.47ID:eZ2LT3hD
>>3
お前が死ね

7デフォルトの名無しさん2021/01/08(金) 20:55:30.03ID:lmjqKHzd
だって演算子オーバーロード楽しいし!
それSpirit作者のジョエルさんにも言えるの?

8デフォルトの名無しさん2021/01/08(金) 21:03:27.15ID:NkKDsd1u
% を三次元ベクトルのクロス積にするのはかつて自分も思いついたけど、勧められないって立場の人も居て
演算子オーバーロードが自然かそうでないかってのは人に拠るなと思った
自分の価値観で言えばiostreamの >> とかってあんまり自然じゃないが
他に何がいいかって言われてもないので仕方ない

9デフォルトの名無しさん2021/01/08(金) 21:08:29.47ID:gKD5AY0L
<filesystem>のディレクトリ区切りがoperator/なのとかオモロイやん

10デフォルトの名無しさん2021/01/08(金) 21:17:01.55ID:U7HVBqAl
絵文字プログラミングが来る
なので独自オペレータは出来た方がいい

11デフォルトの名無しさん2021/01/08(金) 21:44:49.24ID:gxkYqo9D
>>4
わしは20年ぐらい前にその道を通った
だから若者がその道を通ることについては何もいわない
ほっといて気がつかないならダメ人材だし
使える人材は自分で気がつく

12デフォルトの名無しさん2021/01/09(土) 00:35:22.39ID:8yDnsj0x
キーワードも再定義可能にしてホスイ

13デフォルトの名無しさん2021/01/09(土) 01:15:10.33ID:CT/R4i5r
#defineでイケるやろ

14デフォルトの名無しさん2021/01/09(土) 01:39:13.52ID:InkVVK6p
#define private public
ってテクニックのことか。

15デフォルトの名無しさん2021/01/09(土) 04:17:16.54ID:kjQQkk+g
>>14
それコンパイル通っちゃうの?
プリプロセスだからOKなのか・・・

16デフォルトの名無しさん2021/01/09(土) 09:21:23.56ID:c2CH7ey/
キーワードをdefineするのは規格上は未定義動作
でもだいたい通っちゃうな

17デフォルトの名無しさん2021/01/09(土) 09:27:02.27ID:lvRTpcj7
その条文どこだっけ

18デフォルトの名無しさん2021/01/09(土) 10:07:37.60ID:c2CH7ey/
この辺かなC++20ドラフトより
16.5.1.2 Headers [headers]
8 Identifiers that are keywords or operators in C++ shall not be defined as macros in C++ standard library headers.
(標準ライブラリはキーワードをマクロにすんな)
16.5.4.3.2 Macro names [macro.names]
2 A translation unit shall not #define or #undef names lexically identical to keywords, to the identifiers listed in Table 4, or to the attribute-tokens described in 9.12, except that the names likely and unlikely may be defined as function-like macros (15.6).
(キーワード・文脈依存キーワード・予約済み属性トークン(ただしlikelyとunlikelyを除く)をdefineやundefすんな)

19デフォルトの名無しさん2021/01/09(土) 11:17:12.79ID:lvRTpcj7
thx

20デフォルトの名無しさん2021/01/09(土) 20:30:21.03ID:w9vYk25X
>>13
何言ってんだおめー;;;

21デフォルトの名無しさん2021/01/09(土) 21:18:55.59ID:jpx8Mcv4
C++はプリプロセッサが発展する方向にいかなくて本当に良かった
プリプロセッサを吸収して凄いことになってる気はするが

22デフォルトの名無しさん2021/01/09(土) 21:24:33.16ID:lvRTpcj7
禿の方針だからね
スコープに従わない反逆者の排除は

23デフォルトの名無しさん2021/01/09(土) 21:37:52.40ID:Te5slSqE
(でも楽しいよね
(コンパイル直前のコードが数個のプリミティブにまで還元されちまう楽しい言語もあるしな))

24デフォルトの名無しさん2021/01/09(土) 22:11:02.76ID:w9vYk25X
プリプロセッサはC言語の目的(OSを様々なプラットフォームに移植可能な共通ソースコードとして書く)ための
必要欠く書くべからざるしくみとして導入され、できた時点で仕様としてはほぼ過不足なかった
という印象

そういう目的のブツなので、キーワードの再定義には全く不向き

25デフォルトの名無しさん2021/01/10(日) 07:00:15.18ID:NGSbpihh
プリプロセスおもしろいやん
俺プリプロセス大好き

26デフォルトの名無しさん2021/01/10(日) 07:04:45.26ID:pzwk9NYM
最近は#includeと#defineしか使ってない。

27デフォルトの名無しさん2021/01/10(日) 08:03:37.57ID:pzwk9NYM
#defineじゃなくて#pragma onceだった。

28デフォルトの名無しさん2021/01/10(日) 10:29:09.95ID:eq9L0D9i
どうやったらその2つを取り違えできるんだww
ほんとにつかってる??

29デフォルトの名無しさん2021/01/10(日) 10:29:46.47ID:Cbi+hphF
#pragma onceとか#inlude_nextとか標準に入れてほしくはある

30デフォルトの名無しさん2021/01/10(日) 10:45:39.55ID:J1w4FPK7
#pragma onceはもう標準のつもりで使ってるわ

31デフォルトの名無しさん2021/01/10(日) 11:35:58.46ID:MuZPu68S
>>25
そういう時期もあったな…(遠い目)

32デフォルトの名無しさん2021/01/10(日) 11:49:17.12ID:WbJbdET/
#pragma便利よね ライブラリのリンク指定とかも

33はちみつ餃子 ◆8X2XSCHEME 2021/01/10(日) 11:50:54.98ID:smlN1G6e
>>8
そう、 iostream は「仕方ない」と思うんだよな。

C++11 で variadic template が導入されるまでは
可変長引数を安全な型システムの中で扱えなかった。
仕方がないから演算子でなんとかそれっぽくしただけ。
演算子の中で比較的それっぽいのが << や >> だっただけ。

>>9
そういう観点から見ると、パスや日付の区切りに / を使うのは
演算子にしなければならない仕方なさは感じられない。
演算子にするなら / は比較的自然な選択ではあると思うけど。

34デフォルトの名無しさん2021/01/10(日) 11:53:18.07ID:5+d8OMjE
シフト演算なんてほとんど使わんしなあ

35デフォルトの名無しさん2021/01/10(日) 11:57:06.83ID:uVXyGOJo
ファイルパスってチェーンしたいものの筆頭格だから演算子にするのは妥当だと思うけど

36デフォルトの名無しさん2021/01/10(日) 12:20:31.40ID:pzwk9NYM
>>28
使ってるわい。

37デフォルトの名無しさん2021/01/10(日) 12:20:58.71ID:pzwk9NYM
とはいえレスくれてありがとうw

38デフォルトの名無しさん2021/01/10(日) 12:38:01.52ID:stlWAB5c
>>35
std::path だと operator/= だな。
優先順位とか戻り値の型とか理由はあるんだろうが、やはり無理してる感は拭えない。

39デフォルトの名無しさん2021/01/10(日) 23:28:34.84ID:9cXVj8qL
mutexって同時だとどうなるの?

40デフォルトの名無しさん2021/01/10(日) 23:32:27.11ID:9cXVj8qL
信用して使うしかないけど…本当に同時で来たら…どうなるのかなぁ…と思って…。

41デフォルトの名無しさん2021/01/10(日) 23:43:03.84ID:1knBg1rC
同時に入ろうとしたら同時に入るのではない別の世界線に分岐するから
結局同時にならない

42デフォルトの名無しさん2021/01/11(月) 00:43:54.84ID:KM6/Ii6v
posix平行宇宙論

43デフォルトの名無しさん2021/01/11(月) 00:44:15.09ID:AtO8PUuj
それだと…CPUの負荷や調子によって…同時になるって…事だよ…。

44デフォルトの名無しさん2021/01/11(月) 00:45:46.62ID:AtO8PUuj
mutex…危ういな…どうしよう…。運に任せて…諦めるか…。

45デフォルトの名無しさん2021/01/11(月) 00:54:29.81ID:AtO8PUuj
運任せは辛い…。

46デフォルトの名無しさん2021/01/11(月) 01:30:50.91ID:AtO8PUuj
https://stackoverflow.com/questions/7373202/what-happens-if-two-theads-lock-a-mutex-concurrently
大丈夫だと言っているが…ほんまかいな…と思います…迷信はつきもの。

47デフォルトの名無しさん2021/01/11(月) 01:37:51.07ID:KM6/Ii6v
テストプログラム作ってさっさと検証しろ無能

48デフォルトの名無しさん2021/01/11(月) 01:59:20.31ID:3nmpeNiQ
>>46
信用できないならソースやアセンブリ読めよ。ここで名無しに答えてもらっても、信用できないんだろ?

49デフォルトの名無しさん2021/01/11(月) 03:08:34.69ID:KSKcxhht
MutexはOSに依存するので絶対に大丈夫ということはないですが、数々のトラブルを引き起こし最も懸念されたLinuxが安定してきてるので、現在では実用上問題がないレベルにあると思います。

50デフォルトの名無しさん2021/01/11(月) 03:36:14.65ID:dLrb5ZQk
マルチCPUでバスリクエストが同時に出た場合の制御なんて明確に定義されてんだろうが
OS依存だハード依存だと逃げているから見えない不安に怯えることになるんだよ

51デフォルトの名無しさん2021/01/11(月) 06:01:13.69ID:vFi9Z+AQ
LinuxのMutexって使いにくいよね
俺はWindowsから入ったからMutexって名前付きが当たり前だと思ってたんだけどLinuxのMutexには名前がない
どうやって複数のプロセス間で同じMutexを使うんだよ・・・って悩んだ
共有メモリなんかでMutexのアドレスを受け渡しするらしいんだけどさ
面倒くさくなってLinux版の同期制御はファイルロックにしちゃった。。

52デフォルトの名無しさん2021/01/11(月) 06:47:08.93ID:KSKcxhht
LinuxのファイルロックはNFSで(※私たちにはバグのように見える)仕様通りの動作をするので気を付けたほうが良いですよ。

ユーザーが指定したファイルやディレクトリを不用意に使用すると再現性の無いバグに悩まされます。

53デフォルトの名無しさん2021/01/11(月) 06:56:23.61ID:vFi9Z+AQ
>>52
アドバイスありがとう
Linuxで共有メモリの使い方もよく分からなくて
共有メモリも書いてる途中で読み取りされたら困るから
「書いたよー」「読み終わったよー」ってプロセス間同期したいんだけどMutex受け渡しの前に同期処理って・・・
それで共有メモリの読み書きをファイルロックで同期してMutexを渡すかなーって考えてるうちに
もうファイルロックだけでいいんじゃないかってなってしまった

一般的にはどうやってやるのがよかったんだろ?

54デフォルトの名無しさん2021/01/11(月) 07:35:12.79ID:KSKcxhht
>>53
結局、「NFSではバグります」と注意したうえでファイルロックを使うことが一般的に行われてるみたいですよ。

逆に言うと、NFSだけ気を付ければ、問題が起きないみたいです。

55デフォルトの名無しさん2021/01/11(月) 08:06:23.60ID:RSMcM3e3
ちょっとググっただけだけどそんなに難しいかなぁ?
https://www.geekpage.jp/programming/linux-network/book/07/7-41.php

56デフォルトの名無しさん2021/01/11(月) 08:06:43.86ID:vFi9Z+AQ
>>54
ありがとう ちょと安心した

57デフォルトの名無しさん2021/01/11(月) 08:16:58.50ID:vFi9Z+AQ
>>55
コード見てみましたけどMutexの作成と共有メモリの書き込みが終わってからforkしてますね
forkした親と子ならそれでもいいんでしょうけど
実際は親子ではないプロセス間でMutex使いたくなったりするじゃないですか
Mutexが作成される前や共有メモリへの書き込み完了前にスレーブがMutexを要求しに来ると困ります

58デフォルトの名無しさん2021/01/11(月) 08:38:54.12ID:WYfXTDe9
>>51
名前付きも普通にある
sem_open
名前はセマフォだが当然mutexとして使える

目的がメッセージのやり取りならmkfifoも使える

59デフォルトの名無しさん2021/01/11(月) 08:48:31.88ID:3OtB0f6U
mutexじゃなくて名前付きセマフォなら普通にプロセス間で使えなかったっけ?

60デフォルトの名無しさん2021/01/11(月) 09:14:02.58ID:RSMcM3e3
>>57
応用力ないの?
>>58-59みたいにセマフォ使うこともできるし、名前付き共有メモリー + Mutexでもいいだろ

61デフォルトの名無しさん2021/01/11(月) 09:22:15.64ID:KSKcxhht
>>60
Linuxではファイルロックで良いよ。

62デフォルトの名無しさん2021/01/11(月) 09:28:25.14ID:vFi9Z+AQ
セマフォのほうには名前付きあったんですね見落としてました
ありがとう!

63デフォルトの名無しさん2021/01/11(月) 09:39:24.93ID:vFi9Z+AQ
あと別のところでソケットを排他リソースで使うというアイデアを教えてもらったことあります
同じポート番号をバインドできるのは1つだけだからこれを排他に使うという案

64デフォルトの名無しさん2021/01/11(月) 09:52:46.06ID:KSKcxhht
3年ぶりの建設的なスレだな。

65デフォルトの名無しさん2021/01/11(月) 10:09:50.89ID:RSMcM3e3
>>61
ファイルロックはロックしたままプロセス死ぬとリブートしても解消できないのがね

66デフォルトの名無しさん2021/01/11(月) 10:39:47.37ID:sBoV/AFh
>>51
pthread周りはなんであんな仕様なのか謎
CPUのアーキテクチャーを深く知れば合理性を得心できるのかどうか、

67デフォルトの名無しさん2021/01/11(月) 11:25:14.07ID:vFi9Z+AQ
>>65
それはファイルロック(flock関数)ではなく、単純にファイルの存在チェックをしているだけじゃないですか?
flockを使ったファイルロックならプロセス異常終了時にOSによってロックが解放されます

68デフォルトの名無しさん2021/01/11(月) 12:46:20.78ID:vpEQZDgx
ミックスジュースよりセックスジュースが好きですね

69デフォルトの名無しさん2021/01/11(月) 14:25:33.73ID:EL34sMb+
唐突に何いいだすねん君は!
(‘д‘⊂彡☆))Д´)パーン <ミックスジュースよりセックスジュースが好きですね

70デフォルトの名無しさん2021/01/11(月) 14:41:16.25ID:dLrb5ZQk
ラブジュースだろ

71デフォルトの名無しさん2021/01/11(月) 16:14:45.22ID:AtO8PUuj
39です…。
mutexの信頼性をずーと疑ってたら…POSIXスレッド…pthread_mutex_lockに行き着きました…
ブロックもするそうです…ソース見てたら…カーネルの様です…pthread_mutex_lock_fullであれば…atomic_compare_and_exchange_val_acq…などもあります…テストアンドセットです…
アトミック操作です…しかし…普通にmutexを実装してpthread_mutex_lock_fullが呼ばれるかは…
分かりません…どんなmutexライブラリも最終的に…このカーネルを呼んでるだけだと思います…
呼ばれてるのは…fullではなく…弱い方のpthread_mutex_lockだと仮定しても…カーネルを疑うなんて…
本当に…ナンセンスな話なので…一応…信用して使うことにします…。

72デフォルトの名無しさん2021/01/11(月) 16:55:02.21ID:AtO8PUuj
39です…。
結局…fullでなくても…atomic_exchange_acqが呼ばれているようです…アトミック操作です…。
なので…みなさん…安心して使いましょう…。

73デフォルトの名無しさん2021/01/11(月) 16:56:14.48ID:KSKcxhht
>>72
そこでやめずに、atomic_exchange_acqの中まで追いかけてみませんか?

74デフォルトの名無しさん2021/01/11(月) 16:56:26.10ID:AtO8PUuj

75デフォルトの名無しさん2021/01/11(月) 21:32:01.48ID:KM6/Ii6v
Debian woody の頃まで posix thread は使い物にならなかったが Debian etch からようやく使い物になった印象だな
当時から利用している身にしては

76デフォルトの名無しさん2021/01/12(火) 05:50:41.37ID:pJAexhLb
わりと最近ですね。

77デフォルトの名無しさん2021/01/12(火) 07:34:00.56ID:V95G+u6D
woodyって20年くらい前だっけ
最初はJavaVMもグリーンスレッドというVM内の仮想スレッド実装だったんだよね
あれもOSネイティブのスレッドが信用されてなかったからなのかな
もちろん、現在のJavaVMはOSのネイティブスレッド使う実装になってるけどね

78デフォルトの名無しさん2021/01/12(火) 07:44:47.10ID:pJAexhLb
Javaといえばブラック何とかプロジェクトがSUNに文句言ってなかったっけ?

79デフォルトの名無しさん2021/01/12(火) 07:45:53.88ID:pJAexhLb
Etchが2007年と書いてあるな。

80デフォルトの名無しさん2021/01/12(火) 09:08:57.41ID:e5lAHXYT
設計思想的なことについて質問があります。
クラスの使い方がよく分かりません。

僕が今何かを作ろうと思ったら、関数の集まりが引数や返り値のやり取りを通じて協調するような設計をしてしまいます。
この引数や返り値が多く複雑になったりしてきたらクラスを用いた設計を考える、という理解は正しいでしょうか?

81デフォルトの名無しさん2021/01/12(火) 09:22:47.73ID:XkW3hQXX
>>80
正しいかどうかは知らないし気にしないでいいと思うけど、
そういう場合はただのデータの集まりとして構造体(これもクラスの一種だけど)を使うだけでも簡単になるだろうね。

82デフォルトの名無しさん2021/01/12(火) 13:35:30.39ID:lxco4c0J
個人的には、一度無理にでも概念(ウインドウとか表示とか作ってるソフトの主要な概念)をクラス名にして作ってみるといいとおも
やってるうちに慣れてくる

83デフォルトの名無しさん2021/01/12(火) 14:01:10.35ID:V95G+u6D
そうだね
なにかを題材にしてオブジェクト指向やってみるのがいいと思う
でもウインドウはどうかなー そもそもUIツールキットをある程度知らないといけないし
GUIってオブジェクト指向らしからぬ部分も多いので

もっとビジネスロジック中心の題材がいいと思うよ たとえば掲示板システムとか
板には複数のスレがあって、各スレの中には複数のレスが並んでて、スレの書き込むメソッドでレスが1つ増えてーみたいな

84デフォルトの名無しさん2021/01/12(火) 15:56:33.61ID:LUlB/OIG
>>4 >>11
. を再定義したいと思った

85デフォルトの名無しさん2021/01/12(火) 17:32:55.18ID:+0XoTmdG
>>82
初歩的な質問なのですが、クラスってモノじゃなくて概念でも良いのでしょうか
つまり、歩く人のプログラムを作るとき、人というクラスが歩くというメソッドを持っていても良いし、歩くというクラスが一歩進むというメソッドを持っていても良いのでしょうか
言語の仕様上はもちろんどちらでも良いと思いますが、どちらの設計の方が筋が良いということはないと思って良いですか?

86デフォルトの名無しさん2021/01/12(火) 17:34:51.31ID:fQCYjk84
ナントカ系の関数群みたいに相互に関連し合っているものを
暗黙じゃなく明確化するのがクラスだよ

87デフォルトの名無しさん2021/01/12(火) 17:38:10.34ID:V95G+u6D
>>85
「歩く」をクラスにするよりは「歩ける」をインターフェースにしたらどうかな
人間クラスに「歩ける」インターフェースを実装することで「歩く」メソッドがあることを保証できる

対象ドメインをどのようにモデル化するかは状況や要件次第

88デフォルトの名無しさん2021/01/12(火) 19:05:06.19ID:mPDSlMxM
メタファとして生き物がよく用いられるけどなんだかなあっていつも思う

89デフォルトの名無しさん2021/01/12(火) 19:50:41.34ID:YNFRivpW
>>87
「歩け」インターフェースを定義したらインスタンスが歩ける想定であることは自明なのでは…

ちなメソッドは一般にオブジェクトの状態変化を引き起こすブツなので
命令型プログラミングの範疇であり命令形で命名すうるが正しい

※ 個人の感想です

90デフォルトの名無しさん2021/01/12(火) 19:52:42.41ID:YNFRivpW
しかしインスタンスの生成というプロセスは関数型プログラミングから拝借しており、
命令型と関数型のいいとこ取りしようとして失敗した
classベースのオブジェクト志向は

91デフォルトの名無しさん2021/01/12(火) 19:58:16.79ID:GTfU1r+6
何ベースのが成功なの?

92デフォルトの名無しさん2021/01/13(水) 09:25:15.89ID:X1FbeZvQ
場合によっては歩くクラスもありだと思うよ。
ゲームで次の行動を一つずつ記憶させたい場合とか。
commandパターン、mementoパターンでググって

93デフォルトの名無しさん2021/01/13(水) 09:45:27.73ID:D0cZCa+j
歩くということは、位置が変化する。
現在位置は人オブジェクトのプロパティなのか?
それでええのか?

94デフォルトの名無しさん2021/01/13(水) 11:14:57.57ID:XODVGtfI
>>93
良くね?


>>87
インターフェースって継承される前提のものなんですよね?
どのクラスが「歩ける」を継承するんですか?

95デフォルトの名無しさん2021/01/13(水) 12:34:30.18ID:QVnLWQ3q
>>85
数値化できるものなら何でもオーケーだ
歩行を数値化するにはN個の関節を持つM本の脚をパラメータとし時間経過ごとの接地点と関節の位置をジェネレータみたいに連続的に返すような設計が考えられる

96デフォルトの名無しさん2021/01/13(水) 13:12:01.01ID:D0cZCa+j
>>94
じゃあ将棋の駒オブジェクトはプロパティとして位置を持っているのか?

97デフォルトの名無しさん2021/01/13(水) 14:09:32.74ID:D0cZCa+j
俺の考えるOOシステムでは、駒オブジェクトは盤面オブジェクトやルールブックオブジェクトへの参照を持っいる。

駒オブジェクトへ前へ3移動とメッセージを送ると、駒オブジェクトはルールブックオブジェクトと盤面オブジェクトを用いて、移動可能であれば盤面オブジェクトへ自身を移動するようメッセージングする。

98デフォルトの名無しさん2021/01/13(水) 15:31:14.00ID:Dg6tKq+M
intを継承してmyintクラスを作ることは可能ですか?

99デフォルトの名無しさん2021/01/13(水) 15:38:23.35ID:CyYDkVRJ
システム次第でしょ。
もしも将棋の駒が自律歩行多脚戦車だったら、GPSシステムがすべての位置情報を管理してるなんておかしいし。

100デフォルトの名無しさん2021/01/13(水) 15:38:43.61ID:D0cZCa+j
enum class なら可能。

101デフォルトの名無しさん2021/01/13(水) 20:01:32.91ID:D0cZCa+j
C++はテンプレートがあるので設計の詳細を先送りできる。
その特徴を生かせるように、プッシュ型を流行らせませんか?
プッシュ型は、前提が少ないので、利用者が自由に組み合わせることが出来ます。

これは、インターフェースによって事前に詳細を設計してしまう方式と真逆かもしれないが、組み合わせによって機能を作ることが出来まっする。

102デフォルトの名無しさん2021/01/13(水) 21:14:51.93ID:XHABqTxh
プッシュ型って何?

103デフォルトの名無しさん2021/01/14(木) 06:54:42.42ID:mrWYZ3Pm
Caper や Bison でプッシュ型を調べてみるとわかると思います。

104デフォルトの名無しさん2021/01/14(木) 06:59:25.06ID:mrWYZ3Pm
あらゆるソフトウェアで使いまわされるライブラリにおいて、詳細が既に決まっているのは不自由なことです。

105デフォルトの名無しさん2021/01/14(木) 07:12:21.89ID:FFXK54Rt
templateと比べてプッシュ型の利点が分からん。

106デフォルトの名無しさん2021/01/14(木) 07:23:48.43ID:mrWYZ3Pm
>>105
プッシュ型はパーサーでよく使われます。
ユーザーが柔軟性を求めるからです。

Caperはプッシュ型、Bisonはパーサー側が文字を読む方式ですが、オプションとしてプッシュ型を選べます。
パーサにおいてプッシュ型とは、(パーサではなく)パーサを呼び出す側が文字を送り込みます。

それによって何が起きるでしょうか?
従来のパーサーは状態と共に行番号を保存します。
プッシュ型の場合、行番号を保存するのは呼び出し側です。

パーサーが読む文字とは何でしょうか?
プッシュ型において、Cではint、C++ではユニコード。コードポイントです。
文字デコードを行うのは、呼び出し側です。

では従来のパーサでは?
行番号を管理するためには、文字デコードもパーサーの仕事です。
つまりパーサーは大きな塊でアリ、組み合わせる部品ではありません。

107デフォルトの名無しさん2021/01/14(木) 07:27:04.63ID:mrWYZ3Pm
プッシュ型はUNIXに通じるものがありますが、UNIXでは実現されませんでした。

108デフォルトの名無しさん2021/01/14(木) 07:47:44.25ID:mrWYZ3Pm
パーサーは本来、構文解析が仕事です。
しかし、現状多くのパーサーは、構文解析以外の機能を密に結合している。

本来の仕事以外は分離して、小さな部品にすることで再利用性が高まる。
という感じですかね。

これはテンプレートと同じでもろ刃の剣でもあるんですよ。
詳細を設計しないんですから。

しかし、STLの寿命の長さを見て分かる通り、詳細が設計されていないという事は利用者が自由に設計できるという事で、使い出があるんです。

109デフォルトの名無しさん2021/01/14(木) 07:48:23.53ID:mrWYZ3Pm
もちろん、パーサーに限った話ではないですよ。
例です。

110デフォルトの名無しさん2021/01/14(木) 09:22:59.17ID:EIDQMz1r
みんながみんなパーサーを開発する側じゃないからなー
もっと身近な例はないですか?
このようなデザインパターンがプッシュ型だとこうなる、みたいな

111デフォルトの名無しさん2021/01/14(木) 09:29:21.76ID:mrWYZ3Pm
>>110
使う側にとって良いことなんですよ。

それと、プッシュ型は万能ではないんですよ。
一部のコンポーネントの部品化に対して利益があるのです。

112デフォルトの名無しさん2021/01/14(木) 10:01:10.49ID:mp+NLhBe
>>111
身近な例はないかという問いに対しその回答は意味不明では?

113デフォルトの名無しさん2021/01/14(木) 10:15:16.01ID:mrWYZ3Pm
まあそうですね。
すいませんでした。

114デフォルトの名無しさん2021/01/14(木) 10:22:13.84ID:FFXK54Rt
身近な例で利点があるなら広めるのに協力するのもいいが今の時点で利点が分からん。

115デフォルトの名無しさん2021/01/14(木) 15:40:36.18ID:qrpkNJTC
別にC++だけの問題じゃないんだけど…質問…例えば…エクスプローラのようにファイル一覧出すじゃん…
画像や動画は…サムネイルを出すじゃん…このサムネイルは非同期で更新になるじゃん…
一度開いたら…キャッシュから読み込みたいじゃん…このキャッシュの保存ってさぁ…一意にするのに…
ファイルパス・更新日時・サイズである程度一意になるけど…完璧な一意ではないじゃん…
同じ名前・同じ更新日時・同じサイズで上書きされたら、前の画像がサムネイルに出るじゃん…
どうすんの?

116デフォルトの名無しさん2021/01/14(木) 15:42:53.95ID:qrpkNJTC
キャッシュなんてそんなものだから…それでいいのかなぁ…

117デフォルトの名無しさん2021/01/14(木) 15:53:35.11ID:mp+NLhBe
その気持ち悪い「...」をやめてくれ

118デフォルトの名無しさん2021/01/14(木) 15:55:13.17ID:EIDQMz1r
ファイルパスと更新日時で一意になると考えていいでしょ
コンテンツが変更されれば更新日時が進むという前提で
それさえも許せないクリティカルなシステムならファイルの全バイト列から衝突率の低いハッシュ作るとかファイル読むのと変わらんことになる
クリティカルなシステムではキャッシュ使わんな

119デフォルトの名無しさん2021/01/14(木) 16:05:02.51ID:qrpkNJTC
なるほど…。

120はちみつ餃子 ◆8X2XSCHEME 2021/01/14(木) 16:09:33.34ID:9qLPLWCT
https://martinfowler.com/bliki/TwoHardThings.html
> There are only two hard things in Computer Science: cache invalidation and naming things.

計算機科学においては二つの難しいことがあります。
キャッシュの無効化と名前の付け方です。

121はちみつ餃子 ◆8X2XSCHEME 2021/01/14(木) 16:16:29.09ID:9qLPLWCT
ファイルシステムによるけど iノード番号だったり
それに近い管理機構で一意に特定できる場合もあるんじゃないの。
サムネイルくらいなら雑でいいやという割り切りもあると思うけど、
ある程度は不整合がないようにする努力もしてると思う。

122デフォルトの名無しさん2021/01/14(木) 23:16:54.98ID:9gUF6PTW
特徴的な文体はblogでも見た!

123デフォルトの名無しさん2021/01/14(木) 23:49:25.09ID:9gUF6PTW
スヌープとLRUでおk
この2つでダメだという香具師は、
スヌーピングのロジック設計をサボっているか、
メモリをケチって必要量に未達なだけ

124デフォルトの名無しさん2021/01/16(土) 08:13:56.08ID:dLwYQ6PK
おはようございますみなさま、質問させてください

ユーザー定義クラスを作成し、循環参照を防止するためweak_ptrをメンバに持たせています。
そして任意の処理でshared_ptrをweak_ptrに代入し使用したいと思っておりました。
しかし、メンバ関数内部でweak_ptrを使用すると、式にはポインタ型が必要です、旨のエラーが出てしまいます。
調べてみたところ、lock()でshared_ptrに再度権利委譲するとshared_ptr側から動くのですが、私が初心者な事もあり何か釈然としません(我が儘でしょうか……)
一度weak_ptrに落とし込んだものを再度shared_ptrに戻す部分が引っかかっているのだと思います(気にしすぎですかね)

そこでお聞きしたいのですが、クラス内部で動的に定めたいと思っているweak_ptrを使う際に、これ以外の方法はありますでしょうか?
それとも上記の通りlock()で一時的なshared_ptrに束縛した方がいいのでしょうか?

朝から長文失礼しました

125デフォルトの名無しさん2021/01/16(土) 08:49:06.94ID:ld2GCDwz
ロックしないと知らない間に参照先のshared_ptrで持ってるオブジェクトが破壊されてても文句言えないけどそれでもいいの?
weak_ptrってそういうものだぞ

126デフォルトの名無しさん2021/01/16(土) 09:17:41.99ID:dLwYQ6PK
>>125
ありがとうございます。
おっしゃる通りだと思います。
納得いたしマスター!

127デフォルトの名無しさん2021/01/19(火) 02:35:16.36ID:y82ZfCrD
移譲って要は継承せずにオブジェクトとして使うってことですよね?
なぜ「移譲」なんてわけわからない名前がついてるんですか?

128デフォルトの名無しさん2021/01/19(火) 04:45:45.04ID:KGVX5wki
移譲じゃなくて委譲な。
転送でもいいと思うよ

129デフォルトの名無しさん2021/01/19(火) 07:52:05.16ID:Uy0+fZqK
代理、丸投げ

130デフォルトの名無しさん2021/01/19(火) 09:18:39.64ID:xem4SJ/U
日本語の問題だけど移譲は同じレベルに権限等を移すこと、委譲は下のレベルに移すことらしい
委譲は継承より権限の制限があるという含みがあるんだと思う
あくまで人間の組織での比喩なんだろうけど

131デフォルトの名無しさん2021/01/19(火) 09:54:48.36ID:QmODXpTw
名前付けるほどのことか?と問われればたしかにそう思う
クラス内で他のクラスオブジェクトを使ってるだけw

132デフォルトの名無しさん2021/01/19(火) 11:29:25.06ID:Bl6CuSRR
移譲コンストラクタってC++11まで存在しなかったの?

133はちみつ餃子 ◆8X2XSCHEME 2021/01/19(火) 11:40:18.61ID:Zp03eKCw
>>132
はい。 C++11 で導入された機能です。
それまで存在しませんでした。

134デフォルトの名無しさん2021/01/19(火) 16:38:03.96ID:8JRMUdmW
C++03の頃のプログラミングめちゃくちゃ大変そうだね・・・

135デフォルトの名無しさん2021/01/19(火) 20:00:27.80ID:rn87bDt4
「オブジェクト指向?じゃあ継承しなきゃ!共通実装はみんな継承でポリモにしろ!」みたいなノリのクソ設計が溢れかえった時期があって
カウンターとして無理に継承せんでもオブジェクト持って使えばええんやでっていう事に名前付けたのが委譲とかコンポジションとか
しょうもないんだけど継承教に対抗するには名前が必要だったんよ

136はちみつ餃子 ◆8X2XSCHEME 2021/01/19(火) 21:06:03.25ID:Zp03eKCw
>>134
そのとおりだよ!
前スレで C++11 (以降) に否定的な意見も出てるが、
使える状況であえて C++03 (以前) を選択したがる感覚はわかんね。

137デフォルトの名無しさん2021/01/19(火) 22:52:29.91ID:Bl6CuSRR
テンプレート使わなければC++03でもいける(かも)

138デフォルトの名無しさん2021/01/19(火) 23:09:23.44ID:7+t4BBWY
なんか、ここはどこ私はだあれなやついるなw
なんでテンプレートが出てくるのか

139デフォルトの名無しさん2021/01/19(火) 23:29:07.70ID:LToFUUAC
C++03にはテンプレート無いしな

140デフォルトの名無しさん2021/01/19(火) 23:43:32.07ID:7+t4BBWY
何を狙ってボケてんのかわからん
解説求む

141デフォルトの名無しさん2021/01/20(水) 19:27:35.22ID:kPiTytYK
C++スゲー=俺スゲーしたいだけの学生が増えたんだろ

>>134, >>136
エアプ乙
便利にはなったが、メタプログラミングやってても委譲コンストラクタ無くてもそんなに困らんかったぞ
メンバの初期化には関数の戻り値だって使えただろ、どこで困るんだ?

142デフォルトの名無しさん2021/01/20(水) 19:33:42.85ID:kPiTytYK
あ、委譲コンストラクタが無くても、の話であって03と11がどうこうじゃないよ

143デフォルトの名無しさん2021/01/20(水) 21:35:54.62ID:UBOdXm83
constメンバの初期化をしたいとき
初期化リストで初期化すれば良いっていやー良いが
コンストラクタ毎に初期化リストを書かねばならない
メドイ…

144デフォルトの名無しさん2021/01/20(水) 21:36:27.27ID:UBOdXm83
あと参照メンバも…!

145デフォルトの名無しさん2021/01/20(水) 21:47:26.52ID:MvJ8v0/f
>>141
C++03で何が困るって、<system_error>や<filesystem>や<execution>みたいのがなかったことだよ
新機能を乱発してプログラマを喜ばせるのを慎むというハゲの主張はわかるが
あまりにも保守的すぎて現実から乖離し始めていた

146デフォルトの名無しさん2021/01/20(水) 21:48:56.40ID:MvJ8v0/f
<valarray>の立場がなくなるから<execution>をためらうとか本末転倒だろうが

147デフォルトの名無しさん2021/01/20(水) 21:57:51.96ID:kPiTytYK
>>143-144
え、そんな場面滅多に無いと思うが・・・
委譲するときは他のコンストラクタしか初期化子使えないはず・・

と思ったが非constなものは全部コンストラクタ本体で初期化、ならいけるか

148デフォルトの名無しさん2021/01/20(水) 23:00:47.64ID:UBOdXm83
>>146
同じことをするのに複数のやり方があったらプログラミング言語界のPerlになってしまう
お禿様の気持ちはワカル

149デフォルトの名無しさん2021/01/21(木) 02:42:42.14ID:/P5UVCOb
まるで Perl はプログラミング言語界の外に居るような言い方ね。

150デフォルトの名無しさん2021/01/21(木) 06:07:35.61ID:lL8gSm1b
なんだろう、スクリプト言語とかコンパイラ言語とかいうのかね

151デフォルトの名無しさん2021/01/21(木) 07:17:30.26ID:/ZdL1i9k
厄介者のperl

152デフォルトの名無しさん2021/01/21(木) 07:40:13.27ID:Z8coO7Zb
perlは遊び道具としては面白いのかもしれないけど本番で使うにはちょっと…

153デフォルトの名無しさん2021/01/21(木) 08:36:52.78ID:RnFvGHUF
Git for windowsと一緒にインストールされる遊び道具、という世界観ですね。大切にしなさい。

154デフォルトの名無しさん2021/01/21(木) 08:52:53.32ID:2LdLfW0X
へー、findやopensslは便利に使ってたけどperlまで入ってたのか。
まぁ、もう使うことはないだろうけど。

155デフォルトの名無しさん2021/01/21(木) 09:35:52.84ID:RnFvGHUF
Perlを厄介と考えるPGのほうがPerlよりも先に厄介払いされる。若いくせに向学心がないことが垣間見える。

156デフォルトの名無しさん2021/01/21(木) 10:09:36.15ID:rjSQv0Wq
向学心とかw
むしろperl使ったことあるからこその意見だろ

157デフォルトの名無しさん2021/01/21(木) 10:25:31.85ID:RnFvGHUF
Perlを難しいと思うようだとあまり伸びしろがないね。職業変えたほうがいいかもね。正直でごめんね。

158デフォルトの名無しさん2021/01/21(木) 10:51:23.68ID:/0jxrBnU
>>155はマジで言ってるのか
10年くらい眠ってたのか?

159デフォルトの名無しさん2021/01/21(木) 11:09:21.23ID:rjSQv0Wq
最近のモダン(この言い方自体が既に古いがw)な言語使ったことないんじゃね?
あとそれなりの規模の開発したことないんだろうね
perlは書捨てのツール作ったりするには便利だったけど今更新規で使うことはないわ

160デフォルトの名無しさん2021/01/21(木) 15:15:36.61ID:upjC6TmF
Perlの開発者ってタッチタイピングできなかったのかな?
なんであんなに1文字の特殊変数だらけの言語作っちゃったの?キーボード入力が楽になるとか思っちゃったのかな?
結果は可読性の低いクソースコードが量産されただけだったよね

161デフォルトの名無しさん2021/01/21(木) 16:04:26.02ID:eIfq2EBT
>>160
gnu-makeやshell scriptも同じ。
emacsも、キーバインドを丸覚え出来る人しか使えない。
作者が記憶力が桁違いにいい人だったりしてな。

162デフォルトの名無しさん2021/01/21(木) 16:22:10.60ID:jCImDRpq
>16 :デフォルトの名無しさん:2006/03/10(金) 22:15:19
>>>10
>> こんな変数名があちこちに散らばっているのがPerl
>
>大学の研究室のボスは、特殊変数の表をふ〜んと2分ほど眺めて完全に暗記した。
>
>そういうレベルの人たちのための言語なんだなと思って、トイレで血の涙を流した。

163デフォルトの名無しさん2021/01/21(木) 16:57:53.30ID:eIfq2EBT
表を見た直後なら、俺も暗記してるぞ。
しばらくたったら忘れる。
短期記憶と長期記憶の違いだ。

164デフォルトの名無しさん2021/01/21(木) 18:03:23.48ID:ukSw99eK
Perlはglobが使えるようになったらuse strictの下でも参照渡しとかできてC++的に組めるようになるからおk
しかしglobを使うことと理解することは別宇宙の話なのであった

165デフォルトの名無しさん2021/01/21(木) 18:10:26.51ID:ukSw99eK
正確には型グロブ、

166デフォルトの名無しさん2021/01/21(木) 18:24:32.27ID:RnFvGHUF
このスレ、初心者多すぎ。丸暗記なんて誰もしないぞ。何のためにオンラインヘルプあると思ってんだろう。
辞書持ち込み禁止に慣れた学生の気分なのかな。

167デフォルトの名無しさん2021/01/21(木) 18:26:55.41ID:RnFvGHUF
自身の理解力のなさを胡麻化すために大げさな言い回ししているように見える。マジでPGむいてないから転職したほうがいいよ。

168デフォルトの名無しさん2021/01/21(木) 18:30:55.76ID:RnFvGHUF
>>160 みたいな己の能力のなさを棚に上げておおげさな物言いをする人には調査の仕事を振ることすらできないんだが。

169デフォルトの名無しさん2021/01/21(木) 19:06:10.15ID:/ZdL1i9k
https://descartes-search.com/media/5-programming-languages-you-wont-use-2030/

Perlファンたちはその堅牢なパフォーマンスとスケーラビリティを主張するが、すでにPythonのような他の言語に代替され始めている。10年後にはその信者の数も減り、永久に消え去ることだろうw

170デフォルトの名無しさん2021/01/21(木) 19:17:51.03ID:RnFvGHUF
ちょっとしたことをやるのに適しているのがスクリプト言語なのに、そのスクリプト言語の初歩にさえつまづいてしまう人はPGに向いてないんだよ。
正直でごめんね。Perlだけの話してるわけじゃないんだわ。

171デフォルトの名無しさん2021/01/21(木) 21:03:47.74ID:ukSw99eK
>>169
Perl 6が出るまで無限に待たされそうな気がするから
バージョン5系の消滅は無限の未来なんじゃないかな…

172デフォルトの名無しさん2021/01/21(木) 21:28:48.83ID:cjnTDlz3
人って第一印象が重要でしょ。
言語もそうだと思うの。
Perlだけの話をするけど、Perlは第一印象で損してる感じ。
PG経験あれば直感的に避けようとする人も少なくないのでは?

173はちみつ餃子 ◆8X2XSCHEME 2021/01/21(木) 21:30:02.98ID:ooF1treM
>>171
Perl 6 は 2015 年に安定板がリリースされたぞ。
ただし、旧来の Perl と互換性は全然ないので後に Raku と改称された。
要するに別言語になってしもうた。

174デフォルトの名無しさん2021/01/21(木) 21:40:40.11ID:RnFvGHUF
>>172
ドルマークを多用するPerlはシェルスクリプトに慣れた人にはむしろ入りやすいはずだけどね。

175デフォルトの名無しさん2021/01/21(木) 21:46:06.32ID:6tk1Snw3
あわしろ氏はJavaはオワコンこれからはPerlと言ってるけどな。

176デフォルトの名無しさん2021/01/21(木) 22:21:06.42ID:rjSQv0Wq
なんでこの人自分以外はperl使えない前提なんだろ…

177デフォルトの名無しさん2021/01/21(木) 22:23:21.95ID:RnFvGHUF
知っている人も多いと思うけど、bash/zsh向けに便利な入力補完ツール fzf が存在する。
そのGitHubにはfzfにPerlを併用するサンプルコードが散見される。
https://github.com/junegunn/fzf/wiki/Examples

今やPerlは、sedやawkより多機能なちょっとしたテキスト改変ツールとして、Perl本来の役割に回帰している。
PerlをCGIを書くための言語と思っている人にはPerlがオワコンに見えるかもしれないが、現実は違う。

178デフォルトの名無しさん2021/01/21(木) 22:35:21.87ID:RnFvGHUF
python3が入っていない環境はわりとあるけどperlが入っていない環境はまずない。

179デフォルトの名無しさん2021/01/21(木) 22:35:36.69ID:Z9MWAls1
なんでC++スレでPerl, Perlと連呼するんだろう
おおかた、その心理を察することができるので草生えるwww

180デフォルトの名無しさん2021/01/21(木) 22:41:15.38ID:RnFvGHUF
本スレテーマであるC++やJavaなどのコンパイル言語のコーディングの生産性を高めるにはスクリプト言語の有効活用が欠かせない。
makeやantではかゆい所に手が届かないもどかしさは今も昔も同じなんだよ。

181デフォルトの名無しさん2021/01/21(木) 22:54:28.47ID:H50jUx0j
>>168
Perl狂信者かよ

182デフォルトの名無しさん2021/01/21(木) 22:59:11.40ID:/ZdL1i9k
うかつにもPerl厨の秘口を突いてしまった

183デフォルトの名無しさん2021/01/21(木) 23:06:26.51ID:rjSQv0Wq
>>177
> PerlをCGIを書くための言語
いつの時代の人よw

184デフォルトの名無しさん2021/01/22(金) 00:49:01.09ID:di1fs6eX
たしかルビーの素となった言語がペールでは?

185デフォルトの名無しさん2021/01/22(金) 01:19:07.37ID:55qwSi9o
macOSのソフトウェア更新ツールHomebrewはRuby製。マカーがいる限りRubyは不滅。

186デフォルトの名無しさん2021/01/22(金) 13:19:25.84ID:pJ+Dy7HC
>>157
PerlもPHPも難しいとは思わないけど
だからこそ排除すべき

187デフォルトの名無しさん2021/01/22(金) 13:20:41.30ID:pJ+Dy7HC
>>160
>1文字の特殊変数だらけの言語

Rubyのことですね判ります

188デフォルトの名無しさん2021/01/22(金) 14:12:04.30ID:aLDuncuZ
>>187
Rubyはそれはない。
Perlと間違ってないか?

189デフォルトの名無しさん2021/01/22(金) 14:18:28.68ID:WLGQ46hZ
C++のところで延々と続けるのもなんだけど、TECOってのは相当複雑怪奇だったみたいね

190デフォルトの名無しさん2021/01/22(金) 22:15:36.76ID:HHqIRAh/
C++が今後関数型プログラミングを言語としてサポートしていくことはありますか?

191デフォルトの名無しさん2021/01/22(金) 22:18:18.81ID:3W/g7okM
<functinal>で足りるんじゃね?

192デフォルトの名無しさん2021/01/22(金) 22:50:10.68ID:LtnZZu+T
こちらでどうぞ
http://2chb.net/r/tech/1427572389/

193デフォルトの名無しさん2021/01/22(金) 23:49:36.96ID:LcAiXyQN
>>192
C++の「マルチパラダイム」の中に関数型が今後入ることはあるか (あるいはもう入ってるか) という質問なんですが、変なことを聞いていますか?

194デフォルトの名無しさん2021/01/23(土) 00:00:03.65ID:rMuiLyZn
ぅえ?

195デフォルトの名無しさん2021/01/23(土) 01:38:03.71ID:PXGkLjAZ
もう入ってるでしょ?

196デフォルトの名無しさん2021/01/23(土) 04:37:52.61ID:Vx6mcd5N
Perlのソース汚いイメージしかないけどな

197デフォルトの名無しさん2021/01/23(土) 07:19:17.61ID:E7+6hgZm
std::functionとラムダ式で関数はほぼ第一級オブジェクトとして扱えるからC++はとっくに関数型言語ですよ
モナドだってやろうと思えば作れるよ

198デフォルトの名無しさん2021/01/23(土) 13:50:31.25ID:1/fAmr9E
じゃーHaskellにできることはC++でもできるし、同じように書けるって言うのかい

199はちみつ餃子 ◆8X2XSCHEME 2021/01/23(土) 13:52:40.96ID:Q+Wu8A2P
>>198
なんでそうなるのかようわからんが。

200デフォルトの名無しさん2021/01/23(土) 14:06:29.89ID:pKYkJfCY
>>160
>1文字の特殊変数だらけの言語
APL記号?

201はちみつ餃子 ◆8X2XSCHEME 2021/01/23(土) 14:54:28.68ID:Q+Wu8A2P

202デフォルトの名無しさん2021/01/23(土) 16:26:10.57ID:LPDMRZtK
>>200
懐かしいな
俺アンペールのいじってたよ

203デフォルトの名無しさん2021/01/23(土) 18:58:05.34ID:C4WlxIYr
>>198
そんなクソみたいなこと言うんだったら、まず「関数型言語」の定義から言えよ。
Lispが関数型言語じゃないとか言い始めそうだな。

204デフォルトの名無しさん2021/01/24(日) 11:36:54.35ID:wSlEv8S7
Rubyは関数型ωωω

205デフォルトの名無しさん2021/01/24(日) 12:17:53.22ID:/MPXRGah
カオスコードって意味ならc++とperlが双璧だわな。rubyは別の意味で糞だが。

206デフォルトの名無しさん2021/01/24(日) 14:46:51.42ID:bXJjYU1w
rubyの糞とrailsの糞がかけ合わさって悪臭漂う糞になる

207デフォルトの名無しさん2021/01/24(日) 21:13:47.08ID:hPeuQsPP
肛門を保護するために出る粘液はイイ匂いがするので、化学的に類似品が合成され、香水の原料になっています。
ウンコは臭いですが、ウンコの周りには良いものがあるかもしれない。

208デフォルトの名無しさん2021/01/24(日) 23:17:47.88ID:bXJjYU1w
Co-mon++

209デフォルトの名無しさん2021/01/25(月) 00:51:35.02ID:h/LmkNzq
>>207
腸液は質感、匂いともに精液に酷似してるっていうのはよく言われてるけど、それのことじゃないよね?
良い匂いの分泌液なんて聞いたことがない

210デフォルトの名無しさん2021/01/25(月) 09:53:48.54ID:RU5Fvovq
やだこのスレホモ臭い

211デフォルトの名無しさん2021/01/25(月) 10:13:42.80ID:uSgkqdKl
と言いつつ嬉しそうな吉宗であった。

212デフォルトの名無しさん2021/01/25(月) 13:06:55.63ID:sPc2eBUP
PerlとC++は、見づらいソースコードに慣れる能力を鍛えてくれる。
Perlをオワコン扱いする人は情弱である。

213デフォルトの名無しさん2021/01/25(月) 13:11:37.73ID:54hHF458
厄介者のperl厨

214デフォルトの名無しさん2021/01/25(月) 13:34:11.10ID:lM5Uli0g
糞コードに触れるとアンチパターンがわかるというのは確かにあるが、それを人に勧めるのは気がひける。

215デフォルトの名無しさん2021/01/25(月) 13:48:32.46ID:sPc2eBUP
まずい酒の味を知らない者には、うまい酒の味を見分けることはできない。

216デフォルトの名無しさん2021/01/25(月) 21:12:20.67ID:bQwFUjl3
美味い酒の味を知ったら不味い酒は飲めん

217デフォルトの名無しさん2021/01/25(月) 22:13:56.33ID:IR169uBT
酒は飲まんからようわからん

218デフォルトの名無しさん2021/01/25(月) 22:56:10.85ID:sPc2eBUP
まずい酒を飲めなくなることは、プログラミングに置きかえればクソコードのメンテナンスができなくなることを意味しており、スキル低下でしかない。

219デフォルトの名無しさん2021/01/25(月) 23:11:18.97ID:bBvI6B4m
まずい酒はわかるけどうまい酒はマジわからん…

220デフォルトの名無しさん2021/01/25(月) 23:57:21.75ID:sPc2eBUP
うまい酒については「水のように飲みやすい」というほめ表現もあるが、なら水飲んどけよという話でもある。

221デフォルトの名無しさん2021/01/25(月) 23:57:36.36ID:t4dFVxvz
<body>
!unti {nuritakuri}
<body/>

222デフォルトの名無しさん2021/01/26(火) 00:02:06.39ID:Qnn6Y+tc
<head>
<bukkake> seisi <bukkake/>
<strong> naaaaaaaaa!!!<strong/>
<head/>

223デフォルトの名無しさん2021/01/26(火) 02:05:34.14ID:wg8lZWjJ
>>220
ほんまこれ
前にカエルの肉を食ったやつが「ほんと鶏肉とおんなじようなもんだから!食べてみて!」
ってしつこいんだが、だったら鶏肉でいいだろなんでわざわざゲテモノ食わにゃならんのか??となる

224デフォルトの名無しさん2021/01/26(火) 03:51:19.13ID:uiGtA95I
寄生虫が良い風味出すから。

225デフォルトの名無しさん2021/01/26(火) 06:09:38.08ID:ZRZozNwf
macOSのHomebrewいいね。Perlが最新の5.32.1に即対応。人柱上等なところに惚れる。

226デフォルトの名無しさん2021/01/26(火) 07:49:52.25ID:ZI8ZD6Xl
安めの食材や有り合わせでうまいもん作れる腕があっても
腐ったものはどうにもできない

例えるなら、これだろ

227デフォルトの名無しさん2021/01/26(火) 07:59:37.62ID:xVPuSdRM
>>220
酔える水なら。

228デフォルトの名無しさん2021/01/26(火) 11:52:17.15ID:XuLptVzr
>>223
今ジビエなどとおしゃれに言ってるがゲテモノ食いが今の事態を招いてる

中途半端な科学信仰が何もかも迷信にしてしまって自然を正しく畏れなくなった

229デフォルトの名無しさん2021/01/26(火) 13:45:24.16ID:uiGtA95I
ちょっと腐ったほうが柔らかくなってアミノ酸も多いよ。
熟成させたと言えばグルメも安心だし。

230デフォルトの名無しさん2021/01/26(火) 13:48:13.24ID:uiGtA95I
野菜は立てておくと腐らないんだけど、その代わり成長するからね。
光合成できるかも?と思ってなけなしの養分使って葉を伸ばすんだろうけど、光合成は出来ません。

231デフォルトの名無しさん2021/01/26(火) 13:54:11.58ID:uiGtA95I
野菜の活〆を発明したら儲かるだろな。
放射線以外で。

232デフォルトの名無しさん2021/01/26(火) 21:06:31.25ID:Du8Hqhh0
いいかげんスレ違い。

233デフォルトの名無しさん2021/01/26(火) 21:46:24.92ID:ZRZozNwf
プリプロセッサマクロだらけの“汚い”コードを否定したらC/C++の強みを失うことになる。
JavaやC#はプリプロセッサマクロが貧弱なのが玉にキズだ。

234デフォルトの名無しさん2021/01/26(火) 21:51:10.66ID:ZRZozNwf
pybind11スレがないこんな世の中じゃ〜Python〜
まぁマクロの塊のような代物だが。

235デフォルトの名無しさん2021/01/27(水) 06:03:44.65ID:yQalyIAE
C++はコミュニティで発言力のある人が大抵率直にものを言い過ぎる、悪く言えば口が悪いので忌み嫌われてるとこある

236デフォルトの名無しさん2021/01/27(水) 07:30:48.85ID:eLUquqZ0
>>229
カダベリンやムスカリンが発生してたり
セレウス菌が大量にいるのは
そういう問題じゃねえぜ

237デフォルトの名無しさん2021/01/27(水) 07:48:28.28ID:4l9V085Z
でも、Linux板なんか失敗したボランティアの住所載せて、放火しろとは言ってませんよ??言ってませんよ??・・・などの書き込みあるからな。
それに比べれはだいぶ良識的では?

238デフォルトの名無しさん2021/01/27(水) 11:26:52.94ID:cJSBZXf9
C/C++のプリプロセッサも貧弱すぎ

239デフォルトの名無しさん2021/01/27(水) 17:43:27.13ID:nPuTGnvU
C++例外のスタック情報がとれないのはC++の欠点。
例外でスタック情報を使えるJava/C#/Python/Perlはエライ。

240デフォルトの名無しさん2021/01/27(水) 21:51:38.91ID:NT655YPf
おまえは二度とC++使うな

241デフォルトの名無しさん2021/01/27(水) 23:04:53.57ID:TqcnYSNG
>>239
スタックフレーム作ればイケるってば

242デフォルトの名無しさん2021/01/28(木) 09:07:27.76ID:dmDIUcy2
>>235
例えば誰?

243はちみつ餃子 ◆8X2XSCHEME 2021/01/28(木) 10:23:46.51ID:vBYpvnJx
>>239
gdb にアタッチしたことないんか?

C++23 には stacktrace が入るから
デバッガを使いこなせなくても少し楽にトレースできるかもな。

244デフォルトの名無しさん2021/01/28(木) 10:52:39.05ID:dNWrUHbO
>>223
フグは豚肉に触感似てるけどフグの方が美味い

245デフォルトの名無しさん2021/01/28(木) 10:54:00.53ID:dNWrUHbO
>>228
日本で感染爆発が起きてないのは以前からジビエが流行してたからか

246デフォルトの名無しさん2021/01/28(木) 10:55:14.42ID:dNWrUHbO
>>230-231
白菜は外の皮じゃなくて中の芯から先に食べろと言われている

247デフォルトの名無しさん2021/01/28(木) 11:40:01.79ID:eLxqvNeX
>>200
ユニコ時代だからAPLよりずっと先行ってるぞ
組み込み演算子で∩∉とか集合論の記号採用してたりアトミックな演算子は⚛++とか洒落効いてたりする
一方で古代perlのプレフィックスは緩和されてる

248デフォルトの名無しさん2021/01/28(木) 11:51:37.25ID:eLxqvNeX
∅∘∩ ⊍∪ ⊖ ⊎ ∖≅ ∈ ∉ ∋ ∌ ≡
≢ ⊂ ⊄ ⊃ ⊅ ⊆ ⊈ ⊇ ⊉ ≼ ≽.«»≠␤
他組み込みではこんな感じか
>= やらよりmずっと可読性高いと思う、エディタもvimとか高機能なのなら問題なかろう
␤文字を表示してくれるのは特に便利

249デフォルトの名無しさん2021/01/28(木) 11:58:59.45ID:kskG1wa2
>>245
さすがにコウモリはどこの地方でも食わんだろ

250デフォルトの名無しさん2021/01/28(木) 17:23:15.04ID:8Al9oSyF
なんでプリミティブ型って継承できんの?

251はちみつ餃子 ◆8X2XSCHEME 2021/01/28(木) 17:29:22.44ID:vBYpvnJx
>>250
やりたいときってあるか?

252デフォルトの名無しさん2021/01/28(木) 17:41:41.73ID:GsoT0xyU
クラスAのオブジェクトをクラスBのメンバにするときってどうやってAのコンストラクタ呼ぶの?

class B{
 A a;

public:
 B(){
  // この辺でAのコンストラクタを呼びたい
 }
};

253デフォルトの名無しさん2021/01/28(木) 17:48:00.82ID:WrE+/6so
>>252
メンバのコンストラクタの方が先に呼ばれる。だからそこでは既にAは構築済み。
どうしてもBのコンストラクタ内でAのコンストラクタ呼びたいなら、メンバ変数はポインタで持つ

254デフォルトの名無しさん2021/01/28(木) 18:07:20.07ID:IHrlZHr2
>>243
gdbはおいとくとして、Visual StudioってC++例外のスロー位置を追跡できたっけ?

255デフォルトの名無しさん2021/01/28(木) 18:50:38.47ID:Hqj+H5f7
>>252
初期化リストを使う
B() : a(hoge, piyo)

256デフォルトの名無しさん2021/01/28(木) 18:54:30.61ID:IHrlZHr2
あとで再初期化したくなること多いから、結局コンストラクタの実装を別の関数に分離すること多いよね。
コンストラクタの種類が増えたら使いまわしたくなるし。

257デフォルトの名無しさん2021/01/28(木) 19:24:37.48ID:q3mIN91/
>>243
デバッガ使いこなせないとか話にならんだろ・・

258デフォルトの名無しさん2021/01/28(木) 19:28:49.13ID:IHrlZHr2
デバッガやシンボルがない環境でもスタックトレースできたほうが良いと思うけどね。
後発言語の生産性の高さはこの辺の充実ぶりにあるでしょ。

259デフォルトの名無しさん2021/01/28(木) 19:42:24.27ID:IHrlZHr2
他プロセスと連携するシステムにはデバッガを当てにくい事が多い。
タイミング依存の不具合を追跡する場合、デバッガがまったく役に立たない。

260デフォルトの名無しさん2021/01/28(木) 20:25:47.81ID:eBfsAdOM
>>258
その手の生産性と成果物の効率はトレードオフでどっちを重視するかが違うだけでしょ

261デフォルトの名無しさん2021/01/28(木) 20:36:13.14ID:IHrlZHr2
デバッガ使いこなすとか言って悦に入ってる人と会話が噛み合わないんだが。

262デフォルトの名無しさん2021/01/28(木) 20:36:14.66ID:yp+dwtvR
>>258
だよね
むしろデバッガをアタッチできる環境ならスタックトレースはなくてもなんとかなる
ユーザー環境でスタックトレースがテキストファイルに落ちるようになってるとトラブルシューティングがしやすい

263デフォルトの名無しさん2021/01/28(木) 21:29:31.41ID:oPlwADge
>>261
ここほとんどアマチュアの人だから許してやろうやw

264デフォルトの名無しさん2021/01/28(木) 21:48:11.74ID:q3mIN91/
>>261, >>263
悪いがプロだよ
IDEの機能を使いこなせてない初心者が、先に学ぶべきことから逃げて言語だけでどうにかさせようとするような
(いつものことだが)はちみつのミスリードに釘を刺しただけだ

265デフォルトの名無しさん2021/01/28(木) 21:51:13.66ID:q3mIN91/
>>261
あと、流れを読む限り俺の発言が気に入らなくてファビョってるのは君の方だよね、俺1行しか書いてなかったし(しかも大した内容じゃない)w
何が気に障ったんだ?

266デフォルトの名無しさん2021/01/28(木) 21:51:23.69ID:oPlwADge
いやごめん、俺は流れは一切追ってなくて他意はないよ
茶化したかっただけ
気にしないで

267デフォルトの名無しさん2021/01/28(木) 23:50:09.41ID:g6qVZG7L
発狂やないかw
Perlの人かな

268デフォルトの名無しさん2021/01/28(木) 23:53:15.94ID:RfcrpqT0
>>253,255
じゃあ、Bを構築してしばらく経ってからわかる情報を使ってAを構築したいとき、Aのインスタンスをメンバとして持つのは不可能ということですか?
ポインタで持つ以外の方法はない (想定されてない?) のでしょうか

constなメンバ変数を初期化するときも近いことを思います

269デフォルトの名無しさん2021/01/29(金) 00:10:27.15ID:ZIYbfTXe
>>268
そういうコンストラクタ制約を持つクラスはけっこう多い。
WindowsのC++向けGDI+ライブラリのクラス群はまさにこれが当てはまる。
広範に存在している以上は受け入れるしかない。
今時は標準でshared_ptrなどの共有ポインタクラスを使えるので、さほど問題にならないでしょ。

270デフォルトの名無しさん2021/01/29(金) 00:19:48.35ID:SRnp44iw
>>268
Aに引数なしのコンストラクタ、コピーorムーブ代入演算子があるなら、後で作って代入でもいいけど
まぁ特に理由なければ(スマート)ポインタで持った方が無難だし楽

constはどうしようもない

271デフォルトの名無しさん2021/01/29(金) 00:22:16.89ID:MWSZTtHp
>>268
「Bを構築してしばらく経ってからわかる情報」を返すヘルパー関数を作って初期化リストの中で呼べばいいじゃない

272デフォルトの名無しさん2021/01/29(金) 07:49:13.10ID:/axUqcOX
データメンバをconstってあんまりやらないな
publicに晒すとかじゃなきゃメンバ関数を
constにするだけで足りるから

あ、staticメンバのconstはよくやるけどね

273デフォルトの名無しさん2021/01/29(金) 08:02:53.38ID:1V7SRlCX
>>251
ある
実装は同じunsigned longでも意味が違うから別クラスとして扱いたいときとか
private継承できたらナア……
現状(C++03)はプリミティブ型と同じ演算子(のうちの当座のアプリケーションで使うやつ)をいちいち実装したクラスを作って
NDEBUGマクロで実装を切り替えるみたいな涙ぐましい努力が要る

274デフォルトの名無しさん2021/01/29(金) 08:05:13.74ID:1V7SRlCX
訂正orz
誤: private継承
正: public継承かつoperator unsigned long()はprivateかつunsigned longからの構築はexplicit

275デフォルトの名無しさん2021/01/29(金) 08:08:37.91ID:1V7SRlCX
メンバをconstにして代入演算子を定義せずにいるとデフォルトの代入演算子をが定義できないとコンパイラに文句を言われる俺環、

276デフォルトの名無しさん2021/01/29(金) 09:20:50.39ID:koPyq8om
>>273
それ、継承できたとして式の中で混在しても区別されないんじゃね?
テンプレートの型引数で区別するような使い方くらいしか思いつかないが。

277デフォルトの名無しさん2021/01/29(金) 12:20:22.74ID:c2S2Mocm
メンバ変数のconstはポインタ型ならすることあるけど、値で持つメンバ変数はあんまり意味なくない?
constなくても勝手に外部から書き換えられないように、ちゃんと隠蔽しとけばいいだけでしょ

278デフォルトの名無しさん2021/01/29(金) 12:35:16.78ID:2DekME/2
>>277
class内の処理においても変更しないつもりだ、変更されることはない、と明示することで意識しておかなければならないことを少し軽減できるのだから、無駄ではないと思う。
手間をかけずにconstにできるならしておけばいいし、逆に無理して複雑なことをしてまでconstにする必要はないという程度のことかと思う。

279デフォルトの名無しさん2021/01/29(金) 12:55:03.34ID:c2S2Mocm
>>278
たしかにconst付いてればコンストラクタで設定した値がずっと変わらないことが
明示的になるから無意味ではないか

280はちみつ餃子 ◆8X2XSCHEME 2021/01/29(金) 14:10:30.45ID:heeNhc25
>>273
そういう用途なら opaque alias という提案だけは出てるけど
どう見てもグダグダなんで、場当たり的な方法のほうがマシだと思うよ。

281デフォルトの名無しさん2021/01/29(金) 16:04:20.47ID:5pIDnM+S
>>251
3値のboolean作るときってboolean継承すべき?

282デフォルトの名無しさん2021/01/29(金) 16:07:44.73ID:5pIDnM+S
>>256
言いたいことは判るが
コピーコンストラクタやムーブコンストラクタが勝手に使われるから
デフォルトに任せてると何が起こるかは判ってた方が良い

283デフォルトの名無しさん2021/01/29(金) 16:10:21.66ID:5pIDnM+S
>>259
COMサーバーというかDX用にフィルタ書いてると訳判らなくなった

284デフォルトの名無しさん2021/01/29(金) 16:56:37.48ID:RxAp4EkX
>>281
3値のbooleanを作って何するの?
boolへのポインタにしてtrue / false / nullptr の3値でなんとかならんか?

285デフォルトの名無しさん2021/01/29(金) 17:20:59.69ID:ADFs+h5F
boostにtriboolってのがあるな

286はちみつ餃子 ◆8X2XSCHEME 2021/01/29(金) 17:23:22.91ID:t7wU8l8M
>>281
仮に真偽値型を継承可能であったとして、三値型が真偽値型を継承するのはおかしいだろう。
場合によって柔軟な判断が必要な場合はあるものの、
継承は is-a 関係を表したいときに限ったほうがよろしいというのが一般的な設計原則だと思うが。

287デフォルトの名無しさん2021/01/29(金) 17:25:47.23ID:GtDK4kd8
nullableか、DBのフィールド値?

288デフォルトの名無しさん2021/01/29(金) 18:57:54.24ID:ZIYbfTXe
はちみつ餃子「スタックトレースできないならデバッガ当てればいいじゃない」

289デフォルトの名無しさん2021/01/29(金) 19:41:08.91ID:rAmh2V0K
典型的な円楕円問題だな

290デフォルトの名無しさん2021/01/29(金) 19:56:26.71ID:ZIYbfTXe
テンプレートを使えば、クラス継承に依存しない記述が可能。
iostreamが黒歴史扱いである現実を踏まえての話。

291デフォルトの名無しさん2021/01/29(金) 21:24:08.77ID:WFMo+mcm
とりあえずiostream批判しとけば訳知り顔ができた気に浸れる浅はかなやつ

292デフォルトの名無しさん2021/01/29(金) 21:35:39.96ID:nnAlz0gZ
c++ニワカあるあるだよなw
iostreamとりあえず批判奴w

293デフォルトの名無しさん2021/01/29(金) 21:39:11.47ID:ZIYbfTXe
iostreamは使いもしないメンバ変数を継承することを強要される悪い手本でしょ。

294デフォルトの名無しさん2021/01/29(金) 22:16:38.63ID:WFMo+mcm
何も説得力を示さずに突然「悪い」と言い出す

295デフォルトの名無しさん2021/01/30(土) 01:56:51.26ID:SJAC6oP5
iostreamはクソなのは正解だが別に批判するようなことでもない
なぜなら使わなければいいだけの話だからだ

296デフォルトの名無しさん2021/01/30(土) 02:06:50.03ID:OHt9F1SU
無理にクラス継承を使わずオーバーライド関数とそれを使うテンプレート関数を充実させたほうが幸せになれる。

297デフォルトの名無しさん2021/01/30(土) 02:41:04.49ID:PJvUkb6d
別に無理して継承を使っているわけではない
どっかの馬の骨が気に入らんからといって
あれを使うなこれを使うなと言われるほうが無理そのものだ

298デフォルトの名無しさん2021/01/30(土) 02:53:37.72ID:OHt9F1SU
例えば、ファイルに書き込む処理があったとする。
ファイルハンドルとして有名な型としては、int型、FILE*型、iostream型、Win32APIのHANDLE型などがあげられる。
これらを派生クラスに閉じ込めて抽象化するよりも、関数名が同じになるオーバーライド関数を作ってテンプレート関数から呼んだ方がはるかに楽。

int WriteBuffer(int fp, const char* buffer);
int WriteBuffer(FILE* fp, const char* buffer);
int WriteBuffer(ostream& fp, const char* buffer);
int WriteBuffer(HANDLE fp, const char* buffer);

template<typename FILE_OBJECT>
void WriteContent(FILE_OBJECT o)
{
WriteBuffer(o, "write test1");
WriteBuffer(o, "write test2");
}

299デフォルトの名無しさん2021/01/30(土) 03:53:39.52ID:ULcRPxme
ドヤってるところすまんがそれオーバーライドじゃない

300デフォルトの名無しさん2021/01/30(土) 04:01:05.04ID:PJvUkb6d
プゲラ

301デフォルトの名無しさん2021/01/30(土) 05:45:11.84ID:SLqQC90z
フリー関数とクラスメンバでは、インテリセンスが効くか効かないかの違いもある。

302デフォルトの名無しさん2021/01/30(土) 05:52:17.44ID:OHt9F1SU
そんなあなたに名前空間

303デフォルトの名無しさん2021/01/30(土) 06:06:53.60ID:SLqQC90z
クラスの場合、名前空間を書かなくても、インテリセンスが効く。

304デフォルトの名無しさん2021/01/30(土) 06:47:43.00ID:budoESfZ
コンストラクタの初期化リストで
class A{
 int x;

public:
 A(int x) : x(x) {}
};
みたいにしたとき、ちゃんとメンバのxがコンストラクタの引数のxで初期化されますよね?
メンバの x と同名の引数の x が同一のスコープに同居しているようで紛らわしいかなと思ったのですが、こういう書き方を避ける慣習はありますか

305デフォルトの名無しさん2021/01/30(土) 07:04:07.72ID:ULcRPxme
自分は普通にその書き方してる
避ける人も居るっぽいけど好きなようにすればいい

306デフォルトの名無しさん2021/01/30(土) 09:09:49.20ID:PHKUCpSE
iostreamマンセーバカってのは型安全ならどんな仕様でも良いと思ってるカスが多いからな。
型安全は評価する一項目に過ぎないってのに。

307デフォルトの名無しさん2021/01/30(土) 09:29:38.23ID:vDjChjwr
iostreamは整形のための情報をわざわざ状態として持たされるのがクソ
当時は状態が邪悪だっていう考え方が一般的じゃなかったからしょうがないけど

308デフォルトの名無しさん2021/01/30(土) 09:38:20.91ID:2pTx0la6
でも状態もってなかったら記述が煩雑になりすぎない?
HTMLのマークアップとまでは言わんまでも

309デフォルトの名無しさん2021/01/30(土) 09:59:20.80ID:OHt9F1SU
整形設定を記憶する変数インスタンスをiostreamインスタンスと分離すべきって話でしょ。
必要に応じて差し替えできるように参照渡しするか、逆にiostreamを参照渡しするとか色々やれたはず。

310デフォルトの名無しさん2021/01/30(土) 10:06:40.70ID:OHt9F1SU
というか他のオブジェクト指向言語だと整形情報がFormatterクラスとかに分離されているのが普通だし。

311デフォルトの名無しさん2021/01/30(土) 10:32:05.24ID:PJvUkb6d
FORTRANのFORMAT文が好きな人をどうこうしようとは思わない

312デフォルトの名無しさん2021/01/30(土) 10:40:52.47ID:hVJYorL3
初歩的な質問なのですが、stringクラスの内部バッファはデストラクタで破棄されるため自分では一切管理しなくていいという認識で良いのでしょうか?

313デフォルトの名無しさん2021/01/30(土) 11:17:24.76ID:SLqQC90z
アロケータによるけど、普通は管理しなくて良いのでは?

314デフォルトの名無しさん2021/01/30(土) 12:47:13.80ID:EWZvTk3z
>>308
状態持ってても無駄に煩雑(複雑ではない)

315デフォルトの名無しさん2021/01/30(土) 12:57:10.51ID:8FYOnD7D
iostream 型安全なのはいいけど、char/signed char/unsigned char ぜんぶ文字扱いするのはやめて欲しかった。

316デフォルトの名無しさん2021/01/30(土) 13:18:35.30ID:SLqQC90z
単項プラスで。

317はちみつ餃子 ◆8X2XSCHEME 2021/01/30(土) 13:18:38.04ID:4OMKN/Z4
>>309
入出力を直接的に司るバッファクラス (basic_streambuf) と
書式制御を司るストリームクラスを分離したデザインになっているし、
必要に応じて差し替えることも出来るよ。

iostream においてそれがわかりやすいか、良いデザインであるかは別として、
ちゃんと分離したデザインになってる。

318◆QZaw55cn4c 2021/01/30(土) 14:53:52.50ID:L1O2TNoD
>>304
私は馬鹿なのでメンバ変数とコンストラクタ引数を x, _x というふうに書き分けています、馬鹿が感染るかもしれないのでお勧めはしません

319デフォルトの名無しさん2021/01/30(土) 15:08:20.24ID:S5wIZr5N
C++でのメンバ変数は、標準的には m_xと書く。

320デフォルトの名無しさん2021/01/30(土) 16:04:40.96ID:0ahE8ZR3
>>319
何処信者だよ
ダッサw

321デフォルトの名無しさん2021/01/30(土) 16:41:05.48ID:SLqQC90z
MicrosoftとAdobeがその書き方多いですね。

322デフォルトの名無しさん2021/01/30(土) 17:13:12.28ID:S5wIZr5N
なお、_x は、命名規約上、禁止。先頭が _ の名前はコンパイラなどの
システム予約なため。

323デフォルトの名無しさん2021/01/30(土) 17:14:26.98ID:2r/QlSUC
そうだったっけ?

324はちみつ餃子 ◆8X2XSCHEME 2021/01/30(土) 17:19:55.79ID:4OMKN/Z4
>>304
>>318-319
命名規約の方法論は色々なのでプレフィクスを付けるルールが定めてある場合もあるし、
むしろ一致させていくようにしているものもある。
私自身は、少なくともメンバに値を設定するだけの単純なコンストラクタである場合には
名前を一致させていくスタイルで書く。

C++ を使う上でのガイドラインとしてよく参照されているのはグーグルのスタイルガイドで、
データメンバの名前は最後にアンダースコアを付けるようにルールを定めている。
https://google.github.io/styleguide/cppguide.html#Variable_Names

その一方では C++ の設計者である Stroustrup は型やスコープを変数名に含めるのは好ましくない
(しかし部分的に便利な場合もあることは認めている) と書いている。
https://stroustrup.com/bs_faq2.html#Hungarian

どちらの習慣が圧倒的優勢ということはないと思う。

>>322
グローバル変数としてはアンダースコアで始まる名前は予約されているけど、
そうでない場合には問題ない。

ただし、

・ アンダースコアで始まって大文字が続く名前
・ アンダースコアが連続 (名前の先頭部分以外でも) する名前

は名前の種類やスコープにかかわらずどこでも予約されている。

325デフォルトの名無しさん2021/01/30(土) 17:30:01.20ID:2r/QlSUC
互いの信仰を侵害してはならないがチーム内では統一されている必要がある
規約の背景は明確である必要がある

326デフォルトの名無しさん2021/01/30(土) 18:08:50.99ID:OHt9F1SU
>>317
まず、FILE*とostreamが一対一対応していないのがダメ。
せっかくC言語でファイル、パイプ、標準IOがFILE*型としてで統合化・抽象化されていたのに、
C++でostreamとfstreamで分離される劣化が起きた。

327デフォルトの名無しさん2021/01/30(土) 18:30:25.89ID:PJvUkb6d
ios_baseで統一する形に変わっただけ
それをFILE*がどうたらと駄々こねるのは
頭が堅すぎる実年齢に無関係の老害だ

328デフォルトの名無しさん2021/01/30(土) 18:36:35.02ID:OHt9F1SU
パイプ処理をostream系で書く奇特な人ってどのくらいいるの?

329デフォルトの名無しさん2021/01/30(土) 18:41:09.24ID:OHt9F1SU
pythonは定数がないから全部大文字の変数は定数のようにみなしましょう的な談合がある。

330デフォルトの名無しさん2021/01/30(土) 19:00:34.72ID:0ahE8ZR3
定数というか型もない

331◆QZaw55cn4c 2021/01/30(土) 19:09:23.04ID:L1O2TNoD
>>322
束縛領域が狭いローカル変数とかには、_x を使ってもいいのではないか?と考えていますが‥‥

332デフォルトの名無しさん2021/01/30(土) 20:32:34.21ID:PJvUkb6d
data_
size_

333デフォルトの名無しさん2021/01/31(日) 03:18:57.87ID:6QCY/vGM
>>331
実は#defineマクロの中で使われるケースがあってね。
_xが、アプリの中で使われてない事を前提にしないとマクロが作れない
場合とか。

334デフォルトの名無しさん2021/01/31(日) 06:52:18.40ID:gXTMTlGe
HTTPサーバーのサンプルで、関数型言語がCを凌駕して、C実装の作者が??になってるやり取りをどこかで見たのですが、わかる方いらっしゃいませんか?

おそらくC++は簡単に勝てるはずなんですが。

335デフォルトの名無しさん2021/01/31(日) 07:27:56.74ID:fCVb5Gn/
dmrが?

336デフォルトの名無しさん2021/01/31(日) 09:14:46.77ID:bSEeGU13
>>333
c++実装者がユーザから参照可能な形でそれやってるの見たことあるの?

337デフォルトの名無しさん2021/01/31(日) 09:22:03.74ID:fCVb5Gn/
>>333
#define A(_x) (std::cout << #_x)

int main()
{
int _x = 5;
A(_x);
std::cout << _x;
}
何か問題でも?

338デフォルトの名無しさん2021/01/31(日) 10:19:42.43ID:BqL9JwJS

339デフォルトの名無しさん2021/01/31(日) 10:23:16.43ID:BqL9JwJS
>>331
_で始めると激しくコンパイラ依存になる

340デフォルトの名無しさん2021/01/31(日) 10:50:22.50ID:BqL9JwJS
>>334
Erlang?

341はちみつ餃子 ◆8X2XSCHEME 2021/01/31(日) 10:57:57.30ID:+XHxoAeu
>>339
繰り返すが言語仕様上はグローバル変数ではない名前の頭がアンダースコアで始まるだけなら問題ない。

現実に出来が悪いコンパイラがたくさんあるのであれば仕方がないが、
少なくとも俺はそんなのに遭遇したことはない。

342デフォルトの名無しさん2021/01/31(日) 11:04:21.78ID:fCVb5Gn/
>>338
DLLのビルドに使ったコンパイラと
そのDLLを使うアプリをビルドするコンパイラが違っても動くんだぞ
ABIの指定は仕方ねえだろ

343デフォルトの名無しさん2021/01/31(日) 11:29:10.73ID:2WBeknRq
>>334
これか?
サーバーじゃなくてパーサー部分だけだけど
https://blog.8arrow.org/entry/2014/10/23/063044

344デフォルトの名無しさん2021/01/31(日) 12:10:02.04ID:gXTMTlGe
>>343
それです。
ありがとうございます。

345デフォルトの名無しさん2021/01/31(日) 13:12:26.22ID:ZnRwde8F
>>341
英語サイトでも、説明の仕方が誤解を招くようなものがありまして、もしかしたらそれは誤解かも知れません。
https://stackoverflow.com/questions/25090635/use-and-in-c-programs
「Here's what the C standard says (section 7.1.3):
 1. All identifiers that begin with an underscore and either an uppercase letter or another underscore are always reserved for any use.
 2. All identifiers that begin with an underscore are always reserved for use as identifiers with file scope in both the ordinary and tag name spaces.」
訳:
1. アンダースコアで始まって直後に英大文字が続くか、または、アンダースコアが連続して
 続く識別子は、いかなる使用も予約されている。

2. アンダースコアで始まる全ての識別子は、通常または、タグ名前空間における
 ファイルスコープの識別子として常に予約されている。

1. の方は、_XXX か、__xxx は予約されていると言うことですが、
2. の方は、_xxx の形式は、例え xxx の部分の先頭が小文字であっても、ファイルスコープにおける
識別子として予約されており、ローカル変数名としては使うべきではないということだと思われます。

また、C++の方では、
https://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-a-c-identifier
*Reserved in any scope, including for use as implementation macros:
10. identifiers beginning with an underscore followed immediately by an uppercase letter
11. identifiers containing adjacent underscores (or "double underscore")
*Reserved in the global namespace:
12. identifiers beginning with an underscore

この12.の書き方が(あなたに)誤解を招いた気がします。
また、11.によれば、xxx__yyy のように _ が連続するものは、識別子の中間であっても予約されている
とのことです。

346デフォルトの名無しさん2021/01/31(日) 13:18:09.37ID:ZnRwde8F
>>337
それは問題ではないんだけど、
#define a(x) { int _x = 1; _x = x * 2; printf("%d",_x);}
のようなマクロが有ったとすれば、
int y = 5;
a(y); // 10 と表示される。

int _x = 5;
a(_x); // 2 と表示される。

347デフォルトの名無しさん2021/01/31(日) 13:42:32.29ID:Rr91L/mp
int と自作クラス A の pair を priority_queue に入れようと思ったら pair<int, A> に対する less の定義(?)が要るって言われました
int だけに基づいてソートしてくれたら結構なんですが、最も簡単な書き方はどんなですか

また、自作クラス A は array を継承しているのですが、less の定義も引き継ぐ方法はないのでしょうか

348デフォルトの名無しさん2021/01/31(日) 14:05:10.94ID:WjHCKOmN
いろんな見解があってややこしいから、安全側に倒して「_で始まる名前は一切使うな」でいいと思ってる
コンパイラ実装するような奴以外はそれで困らんやろ

349デフォルトの名無しさん2021/01/31(日) 14:10:22.05ID:gXTMTlGe
【HOW】予約済みの席に座る方法【TO】

350デフォルトの名無しさん2021/01/31(日) 14:15:41.43ID:WjHCKOmN
>>347
using Aitem = std::pair<int, A>;
using Aqueue = std::priority_queue<Aitem>, std::vector<Aitem>, [](const Aitem& lhs, const Aitem& rhs){ return lhs.first < rhs.first; }>
Aqueue your_queue;

351デフォルトの名無しさん2021/01/31(日) 14:54:17.91ID:bSEeGU13
>>345
ファイルスコープとローカルスコープは違うよ。
あと、今議論中なのはアンダースコアひとつで始まるメンバ変数についてなんで、アンダースコアの連続がアウトなのは誰でも知ってるし、餃子も324で書いてる

352デフォルトの名無しさん2021/01/31(日) 15:06:11.72ID:gXTMTlGe
盛 り 上 が っ て ま い り ま し た ↑

353デフォルトの名無しさん2021/01/31(日) 15:07:16.87ID:gXTMTlGe
SRELLって知ってますか?

354デフォルトの名無しさん2021/01/31(日) 15:15:54.45ID:ZnRwde8F
>>351
undersocre で始まる識別子は、Cの仕様ではこうなっています:
「All identifiers that begin with an underscore are always reserved for use as identifiers with file scope in both the ordinary and tag name spaces.」

「undersocre で始まる識別子はfile scopeでは使用してはいけない」
とは言っておらず。
「undersocre で始まる識別子はfile scopeの識別子として使用される
ことが予約されている」
と言っています。

with file scope

の前置詞がなぜ in ではなく with になっているかは私には分かりかねますが、
その直後にも in が使われているので in が二重に使われるのを避けたのかも
知れません。

355デフォルトの名無しさん2021/01/31(日) 15:18:08.68ID:gXTMTlGe
inを踏むとか言ってみたくなるじゃないか。
責任とれ。

356デフォルトの名無しさん2021/01/31(日) 15:18:17.21ID:ZnRwde8F
どうやら、
「identifiers with file scope」は、「ファイルスコープを持つ識別子」
であり、with は、「持つ」の意味で使われているようです、。

357デフォルトの名無しさん2021/01/31(日) 15:41:47.21ID:bSEeGU13
>>354
予約されてるとはつまり使うなってことだけど、いずれにせよファイルスコープの話であって、ローカル変数の話じゃないよ。

358デフォルトの名無しさん2021/01/31(日) 16:03:58.33ID:fCVb5Gn/
>>346
#define a(x) { int z = 1; z = x * 2; printf("%d",z);}
int y = 5; a(y);
int z = 5; a(z);
これと何が違うの?
下線で始まることとは無関係だろ

359デフォルトの名無しさん2021/01/31(日) 16:08:45.08ID:q0ry4PhJ
STLコンテナの継承ってしない方が良いんですかね?

たとえばarrayに機能を追加 ([i][j] で i 行 j 列の要素を取得する等) して行列クラスを作りたいとき、
・arrayを継承する
・行列クラス内で要素を格納するメンバを array として持つ
の2パターンが考えられますが、皆さん的にはどっちが好ましいですか?

行列 is an array なので今こそ継承の使いどころだと思ったのですがいかがでしょうか

360デフォルトの名無しさん2021/01/31(日) 16:16:47.40ID:WjHCKOmN
arrayは仮想デストラクタ持ってないからポリモは出来ない
データ構造使うだけなら必要ない
やめとけ

361デフォルトの名無しさん2021/01/31(日) 16:20:57.91ID:NgKJGEE4
かか関数型マクロなら不用意に定義されていても
 int y = (a)(x)
という書き方おすれば問題無くマクロじゃない関数a()の方が呼ばれるので問題無い!
事前に
 typedef double a;
とかされていた場合は知らんが、

362デフォルトの名無しさん2021/01/31(日) 16:21:36.60ID:2wqasnUt
好きにしたら?
C++なんて自己流全開で俺スゲーしてなんぼ、他人の顔色伺ってたらダメ
行列なんてプロダクションではどうせ出来合いのライブラリ使うんだし

363デフォルトの名無しさん2021/01/31(日) 16:22:25.80ID:q0ry4PhJ
>>360
じゃあメンバとして要素(array)を持てば良いってことですよね?
[]の定義の仕方はわかるのですが、[][]ってどうやって定義するんでしたっけ?

364はちみつ餃子 ◆8X2XSCHEME 2021/01/31(日) 16:27:00.30ID:+XHxoAeu
>>363
直接には出来ない。 (二引数を受け取れるようにしようという提案はある。)
operator[] を持つ別のクラス (のオブジェクト) を返すという形で実装する。

365デフォルトの名無しさん2021/01/31(日) 16:27:38.50ID:X7lGC0go
case by case だろうけど
Array と Matrix に関してなら
直観的に考えると後者かな
継承する意味が無い

366デフォルトの名無しさん2021/01/31(日) 16:30:29.11ID:X7lGC0go
[][][]だと3引数になるの?
[][][][]だと4引数になるの?
って疑問が出るので
operator[] を持つ自分自身のクラス (のオブジェクト)が正解だと思う

367デフォルトの名無しさん2021/01/31(日) 16:31:13.60ID:NgKJGEE4
std::array<std::vector<double> > x;
みたいな

368デフォルトの名無しさん2021/01/31(日) 16:32:01.22ID:NgKJGEE4
ジャグ配列になってしまう…orz

369デフォルトの名無しさん2021/01/31(日) 16:32:06.68ID:fCVb5Gn/
継承といえば
type_infoは仮想デストラクタ持ってるけど
派生クラス作ったやついる? 実験でなく

370デフォルトの名無しさん2021/01/31(日) 16:34:24.04ID:ZnRwde8F
>>358
命名規約に従って変数名をつけていれば、>>346のマクロはバグらない。
一方、>>358のマクロは、命名規約に従って合法的に定義されたローカル
変数zに対して使ってもバグる。
その違い。

371はちみつ餃子 ◆8X2XSCHEME 2021/01/31(日) 16:34:43.94ID:+XHxoAeu
>>366
operator{] にこだわらずに要素にアクセスするメンバ関数を用意するのでもそんなに困らない。
見栄えだけの問題。

まあ見栄えも大事なんだけど。

372デフォルトの名無しさん2021/01/31(日) 16:36:28.41ID:ZnRwde8F
>>357
そうではなく、_xxx は、グローバル変数で使うことが予約されているので、
ローカル変数では使ってはならない、と読み取れるように思う。

373デフォルトの名無しさん2021/01/31(日) 16:38:11.57ID:q0ry4PhJ
>>366
すみません。どう書いたら良いのか分かりません
[]は
int& operator [] (int i) {return elem[i];}
みたいな感じですよね?

374デフォルトの名無しさん2021/01/31(日) 16:43:15.04ID:fCVb5Gn/
>>370
そのためにinlineとconstexprが用意されてるわけだが
なぜマクロで作らなければならないんだ?

どこぞのOS屋がmaxなんてクソマクロ作ってたせいで
みんな迷惑してたよな

375はちみつ餃子 ◆8X2XSCHEME 2021/01/31(日) 16:45:04.61ID:+XHxoAeu
>>372
ファイルスコープで予約されている名前とローカル変数で名前がかぶっても
単にシャドウされるだけなので衝突しない。

ローカル変数名として使うべきでないという理由にならない。

376デフォルトの名無しさん2021/01/31(日) 16:51:19.01ID:ZnRwde8F
>>370
[補足]
マクロ引数が二重に評価されてしまうのを防ぐため、マクロ作者が
気を利かせたつもりで次のようなマクロを書いたとする:
#define b(x,y) {int _x=x; int _y=y; f(_x,_y); g(_x,_y); }
作者の意図としては、
char *ptr1, *ptr2;
b(*ptr1++, *ptr2++);
のような場合にも正しく動作するようにしたいということで、
この場合は、*ptr1++, *ptr2++ は、それぞれ1回ずつ評価されるので、
ptr1, ptr2 は、それぞれ 1ずつ前に進むので、アプリ作者の意図を
組むことが出来る。

一方、使う側が命名規約に従わず、アプリのローカル変数で_x,_yを定義し、
int _x=1;
int _y=2;
b(_y,_x);
とすると、このマクロは誤動作し、
int x=1;
int y=2;
b(y,x);
と書いたときと結果が変わってくる。

377デフォルトの名無しさん2021/01/31(日) 16:55:15.98ID:wwbd/Qx2
こういうクソしょーもない話って馬鹿でも理解できるから盛り上がるよね

378デフォルトの名無しさん2021/01/31(日) 16:57:55.61ID:ZnRwde8F
>>375
まあ、そうなんだけども、多分、英語の意味をそのまま素直に汲み取れば、
単純に>>372の意味のはず。
またそれは>>376のような状況を防ぐことが出来る。

>>374
まあ実際それはそういうこともあることは有るが、マクロでしか書けないような
例もあるわけで、>>376のようなマクロ作者のせっかくの配慮が、命名規約
を破って書かれたアプリでは逆効果になってしまうことがある。

379デフォルトの名無しさん2021/01/31(日) 17:00:34.53ID:ZnRwde8F
[補足]
なお、Cの伝統だと、
#define b(x,y) {int _x=x; int _y=y; f(_x,_y); g(_x,_y); }
ではなく、
#define b(x,y) do {int _x=x; int _y=y; f(_x,_y); g(_x,_y); } while(0)
と書く。
こうしておくと、このマクロを{}ブロックを伴わないif文に書いたときに異常動作
をしない。

380はちみつ餃子 ◆8X2XSCHEME 2021/01/31(日) 17:08:36.84ID:+XHxoAeu
>>378
素直に読めばグローバルスコープで予約されているものは
グローバルスコープで予約されているという意外の意味を読み取ることは出来ない。

そこからローカル変数も制約されるという主張が出てくる理由が不在なんで、
何を言うてんのやろ……? ってなるわけ。

381デフォルトの名無しさん2021/01/31(日) 17:11:34.77ID:ziXVeJXQ
>>350
in instantiation of function template specialization ... requested here
というエラーが出ます

382デフォルトの名無しさん2021/01/31(日) 17:14:33.59ID:fCVb5Gn/
>>376
だから二重評価が問題になるようなことをマクロでやるなって
その例だってinlineで書けるだろ

邪道なやり方を保護するために
本筋が迷惑を被るのは本末転倒だ

383デフォルトの名無しさん2021/01/31(日) 17:15:05.39ID:ZnRwde8F
>>380
「All identifiers that begin with an underscore are always reserved
 for use as identifiers with file scope in both the ordinary and
 tag name spaces.」
「file scopeを持つ識別子として使用されるために予約されている」
だべ?
block scopeを持つ識別子として使用されたら、話がおかしいと思うが。

「この自動車は、仕事で使うために予約されています」
の場合、その自動車を私用で使えば、規則違反だよね。

384デフォルトの名無しさん2021/01/31(日) 17:15:45.54ID:fCVb5Gn/
int _x; //こんなのがあっても
#define b(x,y) {int _x=x; int _y=y; f(_x,_y); g(_x,_y); } //ブロックスコープで保護されるだろうが

385デフォルトの名無しさん2021/01/31(日) 17:19:07.49ID:ZnRwde8F
>>382
でも、_ が最初に来る名前をアプリが使っちゃいけない、というのは伝統的にそういう
ことが一番の目的だと思うぞ。
もう一つは、コンパイラの内部でこっそり使う場合があって、それと知らないうちに
衝突する可能性が僅かにあるため。
なぜこっそり使うかと言うと、絶対に衝突しないようにコンパイラ側を
書こうとするとコンパイラ作りに手間がかかるから。
もし、アプリ側が命名規約を守ってくれていれば、コンパイラ作りが楽になる
ことがある。

386デフォルトの名無しさん2021/01/31(日) 17:20:06.45ID:ZnRwde8F
>>384
b(_y,_x)
と書いたらどうなるか考えてみたらしだんご。

387デフォルトの名無しさん2021/01/31(日) 17:25:17.52ID:fCVb5Gn/
>>385
おまえさんはコンパイラ屋か?
そうだとして同業者は__builtin_va_argのように注意深くやってるぞ
自分らのエゴのために客に制限をかけるようなことを
でかい声で叫びまくるのはやめてくれ

388デフォルトの名無しさん2021/01/31(日) 17:30:48.87ID:ZnRwde8F
>>387
まあ、本当はコンパイラ内部でこっそり使う場合、絶対に衝突しないような
もっと変な名前を使っているから大丈夫なんだ。
起動時の TickCounter の値を変数名の一部に入れたりとかね。

389デフォルトの名無しさん2021/01/31(日) 17:37:15.73ID:2WBeknRq
>>383
ローカルスコープで同じ名前の別変数を定義するのは「その自動車を私用で使う」ことには当たらないって言ってるの

390デフォルトの名無しさん2021/01/31(日) 17:42:24.07ID:/1NNOLNs
ヘッダーファイルに書くか、ソースファイルに書くかの違いも大きい。
ヘッダーファイルに書くときは名前衝突に対する細心の注意が必要。

391デフォルトの名無しさん2021/01/31(日) 17:45:15.36ID:fCVb5Gn/
>>386
{int _x=_y; int _y=_x; f(_x,_y); g(_x,_y); }
どうなるって言いたいんだ?

392デフォルトの名無しさん2021/01/31(日) 17:51:16.48ID:/1NNOLNs
C/C++の場合、スコープだけ意識するのは不十分で、ヘッダーかソースかで厳格さを変える柔軟性が必要。
ヘッダーに書くと影響範囲が大きいから。

393デフォルトの名無しさん2021/01/31(日) 17:57:13.23ID:fCVb5Gn/
テンプレートなんか普通にヘッダに内容全部を書くが
マクロでバカやるやつがいなければ平和だよ

394デフォルトの名無しさん2021/01/31(日) 17:58:49.95ID:A8yllSCF
ローカルスコープでも _x が禁止だというなら >>346 のマクロ a 定義内で _x を使っていい理屈もわからんよな。

395デフォルトの名無しさん2021/01/31(日) 18:55:26.91ID:gXTMTlGe
std::pair<>を継承してquadを作る場合どうなりますか?

396デフォルトの名無しさん2021/01/31(日) 18:58:05.19ID:gXTMTlGe
std::regexが意外と使える子に成長してますが、標準化委員会では捨て去る提案まで出てるそうで。

397デフォルトの名無しさん2021/01/31(日) 19:37:14.68ID:/1NNOLNs
std::regexはプロパティが貧弱なので結局、従来の正規表現ライブラリ使う羽目になる。
std::regexと互換性のあるインターフェースを持つ正規表現クラスを提供するよう呼びかけるのが現実的。

398デフォルトの名無しさん2021/01/31(日) 19:51:04.44ID:vFnk+kXo
順序付き pair って自分で順番に格納するのと2要素のsetにするのどっちが良いですか

399デフォルトの名無しさん2021/01/31(日) 20:39:53.24ID:/1NNOLNs
pairはSTLのアルゴリズムの恩恵を得るための物。
自宅の郵便受けを豪華にしたところで、郵便事業には何の関係もない。ただの趣味の世界。

400デフォルトの名無しさん2021/01/31(日) 21:08:09.18ID:vFnk+kXo
set< pear<int, int> > で、ある数を含む pear を高速に検索する方法ってある?

401デフォルトの名無しさん2021/01/31(日) 21:47:36.00ID:jyYnHelr
set<int, vector<pair<int,int>*>>
元の集合に1億個程度のペアが入ってるとすると、住所録めいたものをあらかじめ生成しておく

配列でやっても速そう
list[m].empty()
こういうリストで空っぽかどうかわかればいいわけだ
vector<vector<pair<int,int>*>>>;

それならドでかい二次元配列に入れた方がラクかもしれない

連想配列でも出来る
map<int ,vector<pair<int,int>*>>>

静的な話だったが動的つまり追加と検索が交互に起こるとおそらく話は違ってくる

全部試して早かったモンが高速である、程度の他愛ない結論に落ち着く

402デフォルトの名無しさん2021/01/31(日) 22:01:19.63ID:gvpDZJRs
構造体にしろよバカども
読みにくいだろ

403◆QZaw55cn4c 2021/01/31(日) 22:54:08.94ID:wKQ2AmTw
>>333
>>339
では _x ではなく x_ にしようっかな‥‥

404デフォルトの名無しさん2021/01/31(日) 23:01:41.96ID:eyFvwlDf
googleスタイルガイドはそちらを推してるな

405デフォルトの名無しさん2021/02/01(月) 01:17:42.16ID:FSry25xS
>>391
int _x=_y;
int _y=_x;
ここの二行目の右辺の_xは、b(_y,_x)の第二引数の_xではなく、一行目
で宣言した_xになっているので、b(_y,_x)の第一引数の_yになる。つまり、
int _x=引数の_y;
int _y=引数の_y;
となるので、{}の中の_x, _yは、どちらも引数の_yの値に等しくなってしまう。
これではマクロ作者が意図したことではなくなってしまう。

406デフォルトの名無しさん2021/02/01(月) 01:19:32.38ID:FSry25xS
>>394
まあ、それはもっともな指摘なのだが、アプリ本体では使用禁止で、
マクロでは使用可能と勝手に解釈してしまうのが一つの流儀。

407デフォルトの名無しさん2021/02/01(月) 01:22:56.68ID:FSry25xS
>>389
そうではなくて、ローカルスコープで使うことそのものが、file scope
で使ってないことに当たるので、規約違反と言うことになると解釈できる
気がするんだ。

なぜそんなルールにしたのかは分からんがな。

408デフォルトの名無しさん2021/02/01(月) 03:22:30.15ID:fw9rYrIy
>>405
残念だったね。インライン関数使おうね。

>>406
あなたの流儀を規格の定めであるかのように話すのは迷惑なのでやめてくださいね。

>>407
file scope で予約されてる名前を file scope で使ってないなら問題ないね。
規約違反などという解釈にはならない。気のせい。そんなルールになってない。ってことで終われよ。

409デフォルトの名無しさん2021/02/01(月) 07:01:58.51ID:v6ebtUL1
>>400
unordered_map<int, int>

410デフォルトの名無しさん2021/02/01(月) 07:30:17.18ID:LhepLs74
>>406
マクロ定義内の仮引数名は当のマクロ定義外の何者とも関係しないのでは…
いわゆる束縛変数

411デフォルトの名無しさん2021/02/01(月) 07:38:30.21ID:LhepLs74
として安全に取り扱われる

一方>>346の_xはa(x)が展開された結果が他のプリプロセッサ定義で再置換され得るなら危険
これが起きるかはプリプロセッサの仕様(規格)を見たら白黒付くが
個人的には君子なので危うきには近づかないことに死体、

412デフォルトの名無しさん2021/02/01(月) 08:09:47.67ID:v6ebtUL1
うちの若いのがあんなアホマクロ書いてたら張っ倒す
まあ、やらかしそうなのはいないけど

413デフォルトの名無しさん2021/02/01(月) 09:26:53.82ID:5yr9aQzL
>>346
そもそもそのマクロで生成される変数はファイルスコープでないから、そもそも問題外では?

仮にファイルスコープな変数を宣言するようなマクロでも、ユーザが意図せず

414デフォルトの名無しさん2021/02/01(月) 11:43:32.41ID:xFB8fPis
仕事に情熱が持てなくなった

415デフォルトの名無しさん2021/02/01(月) 11:43:38.91ID:VhfMLcQM
>>346
アホだ

416デフォルトの名無しさん2021/02/01(月) 12:06:54.06ID:ZelzH3+k
>>414
コロナの影響だろな。
福島大爆発の影響も計り知れない。
「原爆ぶらぶら病」で検索してください。

417デフォルトの名無しさん2021/02/01(月) 12:30:15.68ID:jyRtFT93
>>408
>file scope で予約されてる名前を file scope で使ってないなら問題ないね。
そうじゃない。
英語原文を読めば、file scopeで予約されているのではなく、file scopeで
使用するために予約されているのだ。
だから、file scope以外で使用することが禁止されている。

418デフォルトの名無しさん2021/02/01(月) 12:32:18.30ID:jyRtFT93
>>417
日本語で言うなら、「file scope 専用」。

419デフォルトの名無しさん2021/02/01(月) 12:46:40.95ID:/T40sBmV
>>414
ちゃんと飯を食え。
週末はちゃんち休め。

年10日は連続した休暇をとれ

420デフォルトの名無しさん2021/02/01(月) 12:55:04.41ID:ioMwojjO
>>417
その一文ばっかりやたらこだわるけど
これが属しているセクションの名前って「17.4.3.1.2 Global names」なんだわ
グローバル名前空間の名前以外については言及してないの
ドラフトならインターネットで無料で見られるんだからこの辺の全容見てきな?

421デフォルトの名無しさん2021/02/01(月) 13:14:13.18ID:Z79JHlVc
>>417
あらゆる場所で使ってはいけないのなら、7.1.3でわざわざ1つ目と対比させるように使用用途を限定して記載した理由を説明してよ。
普通はコンパイラ実装者のために予約されている、だけで十分でしょ

422デフォルトの名無しさん2021/02/01(月) 13:45:48.95ID:fos4FOVO
仕事に情熱が持てなくなった

423デフォルトの名無しさん2021/02/01(月) 13:50:50.97ID:jyRtFT93
https://www.learncpp.com/cpp-tutorial/keywords-and-naming-identifiers/comment-page-2/

Second, you should avoid naming your identifiers starting with an underscore, as these names are typically reserved for OS, library, and/or compiler use.

424デフォルトの名無しさん2021/02/01(月) 14:08:01.06ID:fos4FOVO
>>373
obj& operator [] (int i) {return elem[i];}
もちろんelem[]の定義はobj elem[];
obj.shape() も実装すると便利

425デフォルトの名無しさん2021/02/01(月) 14:13:00.08ID:fos4FOVO
>>416
「コロナでゴロゴロ病」

426デフォルトの名無しさん2021/02/01(月) 15:47:43.70ID:Z79JHlVc
>>423
そのサイトを紹介して何の証明になるの?

427デフォルトの名無しさん2021/02/01(月) 16:16:30.24ID:ZelzH3+k

428デフォルトの名無しさん2021/02/01(月) 16:22:14.79ID:ZelzH3+k
C++ is the only real language for expert developers.

429デフォルトの名無しさん2021/02/01(月) 16:55:19.50ID:fos4FOVO
C/C++は好きだし比較的最強の部類だと思うけど
夢未過ぎは判断を誤るから色んな言語を適材適所に使えるようになるのが理想

430デフォルトの名無しさん2021/02/01(月) 17:40:26.58ID:LhepLs74
システム記述言語はアセンブラを除けばこの世にCとC++とRustしか、

431デフォルトの名無しさん2021/02/01(月) 17:46:42.82ID:ZelzH3+k
中国人のありがたいお言葉ですぞ。

432デフォルトの名無しさん2021/02/01(月) 18:02:36.06ID:jyRtFT93
大体、この板には中国人や韓国人はほとんど来ず、来ているのはアメリカ人
やヨーロッパやアフリカが多いらしい。

433デフォルトの名無しさん2021/02/01(月) 18:44:36.44ID:+21BJdPm
いやrustが最強でしょww

434デフォルトの名無しさん2021/02/01(月) 18:47:23.23ID:CDWd/LQ7
Goは駄目なん?

435デフォルトの名無しさん2021/02/01(月) 18:57:50.94ID:0s4gr52A
自作の構造体をsetに入れたいときって operator < さえ定義しとけば良いの?
eraseとかは全部のメンバが同じものを見つけて消してくれると思って良い?

436デフォルトの名無しさん2021/02/01(月) 21:08:59.66ID:ZelzH3+k
検索するとひろみをお勧めしてくる時点で無理だった。

437デフォルトの名無しさん2021/02/01(月) 21:34:17.50ID:ZelzH3+k
しかもチップも取るんかーい!

438デフォルトの名無しさん2021/02/01(月) 22:43:42.23ID:CtNYZU7D
>>435
erase含め、同値性は!(a<b)&&!(b<a)で判定される
全メンバ一致で同値とみなしたいなら辞書順比較する比較関数を定義すればよし

439デフォルトの名無しさん2021/02/01(月) 22:46:24.33ID:FbSt8IWH
演算子オーバーロードは地雷度高い。

440デフォルトの名無しさん2021/02/01(月) 22:53:14.56ID:CtNYZU7D
まあ、setに入れるためだけなら演算子オーバーロードするより関数オブジェクト使う方がいいかね

441デフォルトの名無しさん2021/02/01(月) 23:03:45.93ID:f9q1oLiO
C++の質問じゃないとは思うんですが、上位数ビットを0で埋めたいといった場合は
「0埋めしたいビットを0、他を1にしたもので&演算する」
であってますか?

442デフォルトの名無しさん2021/02/01(月) 23:11:37.27ID:ZelzH3+k
合ってます。

443デフォルトの名無しさん2021/02/01(月) 23:17:45.03ID:f9q1oLiO
>>442
ありがとうございます
今までは例えばQWORDの上位3バイトを0埋めしたいってとき(value << 3*8) >> 3*8って言う2命令使う馬鹿な方法でやっていました・・・

444デフォルトの名無しさん2021/02/02(火) 02:08:00.00ID:DmcXRB7X
へ椅子ブックが少し綺麗になってます。

445デフォルトの名無しさん2021/02/02(火) 02:10:27.05ID:DmcXRB7X
RedditのC++コミュは17万人、オンラインが500人以上。
凄いね。

446デフォルトの名無しさん2021/02/02(火) 10:17:10.33ID:uFATDe77
ビット演算の中で最速なのってシフトじゃなかったっけ?
だから下手したら>>443の方がフェムト秒レベルでは微妙に早いんじゃない?

447デフォルトの名無しさん2021/02/02(火) 10:29:21.33ID:kGc73xZq
命令語長がマスク分だけでもQWORDに対して、シフトなら1バイト程度か

448デフォルトの名無しさん2021/02/02(火) 12:37:23.36ID:vWAdhQ36
>>446
CPUの世代やアーキテクチャによって違うが、
Latencyが、Shiftの方がandより少し遅いことがある。

449はちみつ餃子 ◆8X2XSCHEME 2021/02/02(火) 12:49:48.88ID:+MtixY9O
>>434
Go は GC が前提にあるから少し制約が強いけども、
OS のカーネルを書くのでもない限り思ったより足かせにならないという評価はあるみたいだね。

450デフォルトの名無しさん2021/02/02(火) 13:08:50.07ID:aIAA0dxH
Goはクソすぎるから駄目だ
何が駄目といってまず名前が駄目

451デフォルトの名無しさん2021/02/02(火) 13:45:57.34ID:8HFbTrXI
GoはPC初心者用
昔でいういわばBASIC

452デフォルトの名無しさん2021/02/02(火) 18:03:08.15ID:FSwj4KRK
バレルシフタと単純ゲート
レイテンシも糞もねえだろ

453デフォルトの名無しさん2021/02/02(火) 18:11:36.53ID:8HFbTrXI
でもその縛りプレイが大好きな変人も居る

454デフォルトの名無しさん2021/02/02(火) 22:23:15.74ID:likaPPB8
operator ==も定義しておくとなお良い
==のために<が2回呼ばれるのもアホらしいと感じるはず…
結局std::rel_opsを使って全部定義するという結論に落ち着く

455デフォルトの名無しさん2021/02/02(火) 22:25:04.30ID:likaPPB8
インテルのやつはバレルシフタじゃない気配がする…
シフト結果をテーブル化した方が速かったことg

456デフォルトの名無しさん2021/02/02(火) 22:28:35.48ID:likaPPB8
あるいは最大限バレルシフタにしようとしているがパイプライン1段に収まっていないだけかもしれん…

457はちみつ餃子 ◆8X2XSCHEME 2021/02/03(水) 00:25:34.21ID:p0NvFN6a
>>443
gcc, clang, msvc で最適化最大で試してみたら and をとるように最適化されたぞ。
主要コンパイラがそのように最適化するということは (前後の状況によるかもしれないけど)
たぶん and のほうが効率的ってことなんだろう。

458デフォルトの名無しさん2021/02/03(水) 00:38:50.10ID:53EFMpkm
ビットシフトは64bit整数でのコンパイラ解釈が信用できないからAND演算子使うのが確実だと思うけどどうかな。

459デフォルトの名無しさん2021/02/03(水) 00:51:08.70ID:5b6XJ+8s
>>458
落ち着いてよく考えてみよう
お前がC++で作った成果物のうち、お前自身が書いたコードの割合なんてごくごく僅かに過ぎない
仮にそんなレベルで互換性が当てにならないような環境があったとして、お前が直接書いていない他の99%のコードがまともに動くと本気で思うか?

460はちみつ餃子 ◆8X2XSCHEME 2021/02/03(水) 00:54:51.58ID:p0NvFN6a
0xffffffffff とか書いてたら桁数を正しく書けてるか不安になる……

今の C++ だと桁区切りも入れられるけど、
どう入れたら意図がわかりやすいかようわからんし、
シフトで表現するのもありな選択だと思う。

461デフォルトの名無しさん2021/02/03(水) 01:01:02.57ID:+m9V7fCu
>>458
具体例をお願いできますか?

462デフォルトの名無しさん2021/02/03(水) 01:20:23.24ID:53EFMpkm
コンパイラがちゃんと32bit整数への丸め警告を出してくれるならいいが、しれっとコンパイルされたらお手上げ。

463デフォルトの名無しさん2021/02/03(水) 02:47:38.99ID:+m9V7fCu
>>462
丸めって暗黙の型変換のことですか?
シフト演算は特に関係しないと思いますが……

464デフォルトの名無しさん2021/02/03(水) 06:01:31.58ID:QcjMAifW
>>460
0x0000'ffffull

465デフォルトの名無しさん2021/02/03(水) 06:29:42.77ID:y3dS6mbz
unsigned long long x = (0x1ULL << 32) - 1ULL;
ならちゃんと動く(と思う)が
unsigned long long x = (0x1 << 32) - 1;
とかだとイマイチ不安が…

466デフォルトの名無しさん2021/02/03(水) 06:38:54.06ID:Nl+WsQpo
>>465
下の方はイコールの右辺にintしか出てこないのだから、intが32bitの環境なら32bitでしか計算されないだろう

467デフォルトの名無しさん2021/02/03(水) 10:23:38.02ID:q8Ed7guF
丸めと暗黙の型変換は違うものでは?

468デフォルトの名無しさん2021/02/03(水) 11:47:09.95ID:HtH84Poo
丸めや打ち切りは浮動小数点数の概念やね

469デフォルトの名無しさん2021/02/03(水) 13:02:19.58ID:53EFMpkm
ビットシフト記述は自然すぎてソースコードに埋もれてしまう。
64ビットマスクのAND記述は見た目がどぎついので、かえって人間の注意を引くことができる。

470デフォルトの名無しさん2021/02/03(水) 14:45:43.48ID:J722wycU
なにいってんだこいつ

471デフォルトの名無しさん2021/02/03(水) 15:50:32.48ID:pE1foWCw
>>465
やっぱり、32BITの時が一番プログラミングし易かったな。
64BITになると、64BITと32BITを区別して書く必要が出てきて、
書くのが面倒になった。

472デフォルトの名無しさん2021/02/03(水) 19:12:23.88ID:XaYGR0Wv
そう?ポインタサイズくらいしか違いなくない?

473デフォルトの名無しさん2021/02/03(水) 21:29:02.90ID:53EFMpkm
まじめにC/C++標準型size_tを使っている人には32bitと64bitの処理切り分けが地味に辛い。

474デフォルトの名無しさん2021/02/03(水) 22:36:28.54ID:y3dS6mbz
>>465の下の方のやつは符号拡張されたりする気がするorz

475デフォルトの名無しさん2021/02/03(水) 22:40:25.83ID:Ea4RwHR/
>>424
> obj& operator [] (int i) {return elem[i];}
> もちろんelem[]の定義はobj elem[];

objは行列クラスで、elemはobjのメンバで行列要素を格納する一次元配列、で合ってますよね?
class obj{
 array<int, ?> elem;
public:
 obj& operator [] (int i) {return elem[i];}
};
ということですか?

476デフォルトの名無しさん2021/02/04(木) 03:22:45.38ID:R0EDVzG0
>>473
size_t は、型名が長いし _ も含んでいるし、打つのが辛い。
それにコードに締める長さも長くなるので画面が狭くなるし。

477デフォルトの名無しさん2021/02/04(木) 04:17:06.60ID:SkZt7jTc
>>473
まじめに、て別にsize_t使ってたら偉いわけじゃない
サイズを表したいけどいちいち考えたくない場合の選択肢だぞ

478デフォルトの名無しさん2021/02/04(木) 11:32:06.33ID:sIhIIpMX
size_t型はSTLを使う人なら避けて通れない。

479デフォルトの名無しさん2021/02/04(木) 11:40:48.70ID:ZzRKCYY/
>>471
それ本来そこにあった問題に気付いていないだけだったと思うぞ

480デフォルトの名無しさん2021/02/04(木) 11:44:02.03ID:ZzRKCYY/
>>475
class obj{
 array<obj, ?> elem;
public:
 obj& operator [] (int i) {return elem[i];}
};

481デフォルトの名無しさん2021/02/04(木) 12:06:17.02ID:DWE1XJjK
>>480
それってarrayのarrayとかvectorのvectorとか配列の配列として行列を作るのと同じですよね?
一次元配列に要素を格納しておいて[][]でアクセスするのは不可能なんでしょうか
row majorやcolumn majorを自由にできる、等の理由でそちらの方が好ましいのですが

482デフォルトの名無しさん2021/02/04(木) 12:29:12.61ID:waKgX41w
一次元配列を内包しているクラスのoperator[](int y)が、下記のようなクラスを返すようにすればできる。

class Row {
vector<int>& 一次元配列への参照
int 列数
int y
int& operator[](int x){ return 一次元配列への参照[列数*y+x]; }
};


でも自分ならoperator[]は使わずもとのクラスにindex(x, y)みたいな関数を用意して対処すると思う。

483デフォルトの名無しさん2021/02/04(木) 13:10:42.29ID:g2cSm/y9
malloc とか new で確保したメモリ領域を使うように
vector ( または array ) をインスタンス化するにはどうすればよいですか?

484はちみつ餃子 ◆8X2XSCHEME 2021/02/04(木) 13:13:43.37ID:ttCVH4wp
>>481
こういう雰囲気で他のクラスをひとつ間に入れることでなんとかなる。

https://wandbox.org/permlink/ZXI1nkkCLRJQPtAJ

だけど俺も >>482 の言う通り operator[] にこだわらずに適当なメンバ関数でやる方法を推すわ。
実態として二引数なのだし、記法のためだけに余計な定義をするの馬鹿らしいと思う。

提案としては hoge[i, j] みたいな感じで二引数のインデックスを受け取れるようにする案は出てるんだが、
現状ではこのときのカンマは普通にカンマ演算子として解釈される。
前準備として、 C++20 からはブラケット内でのカンマは非推奨にするという変更が入っている。
https://timsong-cpp.github.io/cppwp/n4861/depr.comma.subscript

485はちみつ餃子 ◆8X2XSCHEME 2021/02/04(木) 13:20:29.03ID:ttCVH4wp
>>483
ある時点で確保済みのメモリの上にオブジェクトを構築するには
std::uninitialized_default_construct を使う。

でも std::vector 自体を適当なメモリの上に構築できても
std::vector 内で使うメモリは std::allocator で確保しようとするから、
必要ならアロケータを定義する必要がある。

486デフォルトの名無しさん2021/02/04(木) 15:40:11.75ID:R0EDVzG0
>>479
いや、全て32BITは、それに全て統一することで速度とメモリ効率と実用性の
バランスが取れていた。
ところが64BITだと実用上、表せる値の範囲はオーバースペックで
変数のメモリに占めるバイト数が8バイトと余りにも効率が悪い。
なので、多くの数値は32BITとし、必要な部分だけ64BITにするという
面倒な選択を強いられる様になった。
アドレスが64BITなので、それを整数型に入れるためには32BITの整数では
不足するので引きつられて整数も64BITを必要としがちになり、大混乱
が生じている。
(また、メモリーもアドレスを32BITより多くを必要とするアプリは非常に稀。)

487デフォルトの名無しさん2021/02/04(木) 16:48:02.49ID:DWE1XJjK
>>482
ありがとうございます
ストラウストラップの「プログラミング言語C++」に「行列クラスの設計」なるセクションがあったのを覚えてるので、そちらではどうしていたかも見てみます

488デフォルトの名無しさん2021/02/04(木) 17:07:22.68ID:dB2jWvbu
unique_ptr<Hoge[]> p(new Hoge[4]{a, b, c, d});
みたいな定義と同時に代入は出来るのですが
(各要素毎に Hoge(a), Hoge(b), Hoge(c), Hoge(d) になりました)

unique_ptr<Hoge[]> p = make_unique<Hoge[]>(4);
だと引数無しのデフォルトコンストラクタが無いといけないし
(そもそも引数無しのデフォルトコンストラクタ作りたくない)

unique_ptr<Hoge[]> p = make_unique<Hoge[]>({a, b, c, d});
とか
unique_ptr<Hoge[]> p = make_unique<Hoge[]>(4){a, b, c, d};
とかはコンパイル出来ませんでした

引数無しのデフォルトコンストラクタがあれば
unique_ptr<Hoge[]> p = make_unique<Hoge[]>(4);
p.reset(new Hoge[4]{a, b, c, d});
だとうまく逝きますが効率が悪い気がします
make_unique は使ってはいけないのでしょうか?

489デフォルトの名無しさん2021/02/04(木) 17:51:26.68ID:b9gCdorg
>>487
485も見てねー

490デフォルトの名無しさん2021/02/04(木) 17:52:07.72ID:b9gCdorg
まちがえた。484

491デフォルトの名無しさん2021/02/04(木) 20:56:33.92ID:ZyzsEROR
配列のunique_ptrは色々と中途半端で使いづらいからオススメしない

492デフォルトの名無しさん2021/02/04(木) 22:14:32.91ID:b9gCdorg
>>488
unique_ptr<Hoge[]> p;
p.reset(new Hoge[4]{a, b, c, d});
でよいのでは?

493デフォルトの名無しさん2021/02/04(木) 22:20:26.07ID:un3OWVjy
>>486
32bitアプリでも今どきなら64bit整数を使える処理系は多いだろ
そもそもアドレスを整数型に入れるっていつの時代の人よw

494デフォルトの名無しさん2021/02/04(木) 22:47:34.63ID:/RiZUiBF
>>493
アドレスを整数に入れるのは過去の話じゃないぞ

495デフォルトの名無しさん2021/02/04(木) 22:51:09.67ID:sIhIIpMX
intptr_t整数型を使ってたのっていつの時代?

496デフォルトの名無しさん2021/02/04(木) 23:24:48.23ID:hMfhfQWp
uintptr_tならいつもお世話になっております

497デフォルトの名無しさん2021/02/05(金) 00:01:41.63ID:NIkVqohR
この手合いのボケを量産するのはC++の害だな

498デフォルトの名無しさん2021/02/05(金) 01:35:15.82ID:EB7VAtvO
むしろCの害

499デフォルトの名無しさん2021/02/05(金) 01:52:47.05ID:xbM9VFWh
Rubyって結局勉強しないままPythonの時代になってしまったな

500デフォルトの名無しさん2021/02/05(金) 04:42:48.12ID:ZuGfyZDY
同様にC++を勉強しないままRustの時代になる

501デフォルトの名無しさん2021/02/05(金) 09:51:39.70ID:U76qOqQA
>>488
https://www.it-swarm.jp.net/ja/c%2B%2B/new演算子よりもstd-makeuniqueを使用する利点/826350881/amp/
https://ja.stackoverflow.com/questions/24876/make-uniqueの利点

502デフォルトの名無しさん2021/02/05(金) 13:28:24.98ID:ou/gU5gH
c++やらずにrustとか馬鹿量産するだけにしか思えんな。

503デフォルトの名無しさん2021/02/05(金) 14:10:32.07ID:Xzu/prlh
それ言ったらノーコードがどうたら言ってる奴らはもっとやばそう

504デフォルトの名無しさん2021/02/05(金) 14:17:08.86ID:M7C1cdPI
ノーコードていってノードツリーみたいなのでフロー管理するやつ
よくゲーム系ツールにありがちだけど、サンプルみたいな単純な処理ならともかく
こみいったフローになってくるとノード間の接続線がものすごいことになって
とても管理しようという気になれない、まさに見た目どおりのスパゲティプログラムに

505デフォルトの名無しさん2021/02/05(金) 14:18:44.73ID:ou/gU5gH
>>503
それはもう50年くらいずっとそうだろ。
ノーコードとか逆に俺様言語作ってるのとほぼ変わらん状態にしかならんという
しょーもない展開しか見たことない。

506デフォルトの名無しさん2021/02/05(金) 15:14:07.00ID:zImWQG8r
VCPKGのupdate、upgradeが常に失敗するんだけど、使えてる人いますか?
小まめにupdateしないからだろか?

507デフォルトの名無しさん2021/02/05(金) 15:14:37.91ID:zImWQG8r
Goは標準ライブラリが圧倒してる。

508デフォルトの名無しさん2021/02/05(金) 15:18:44.78ID:zImWQG8r
半年に一度フルビルドみたいになってしまう。

509デフォルトの名無しさん2021/02/05(金) 16:12:02.35ID:A9cGRDK5
Goは何がクソといってまず名前がクソ

510デフォルトの名無しさん2021/02/05(金) 16:36:26.85ID:zImWQG8r
C++は基本だから、義務教育で習得するべき。

511デフォルトの名無しさん2021/02/05(金) 16:50:43.11ID:/MNAnFTn
言語仕様がでかすぎるからC言語で精一杯
オマケで紹介される程度かな

512デフォルトの名無しさん2021/02/05(金) 18:21:14.28ID:7P5D6x+s
>>505
昔はアセンブラすら触れない奴がC言語とか笑わせるなとか真顔で言う人がいたんだぜ。

別に仕事ができるのならRustでもPythonでも何でもいいと思うぞ。

513デフォルトの名無しさん2021/02/05(金) 19:09:46.26ID:AjJLCZml
仕事ができるのならw

514デフォルトの名無しさん2021/02/05(金) 20:48:06.29ID:ou/gU5gH
>>512
仕事ができるならなw
できないカスがクソみたいなもん押し付けてくるから文句が出るんだよ。
rustでもpythonでもまともなコード書いてりゃ文句はないわ。
まともじゃないから文句が出る。

515デフォルトの名無しさん2021/02/05(金) 21:49:13.85ID:a81hUa+F
というか、プログラマとしてrust(鉄さび、腐食)になるというダブルミーニングを狙ったんだと思うけど。

516デフォルトの名無しさん2021/02/05(金) 21:59:53.11ID:kFtfKVND
お前らってド素人のくせになんでいっちょまえの口利くん?
それって不思議だわ

517デフォルトの名無しさん2021/02/05(金) 22:34:33.49ID:EB7VAtvO
Rustの名前は金属の錆じゃなくてサビ菌が由来

518デフォルトの名無しさん2021/02/05(金) 22:36:07.20ID:NIkVqohR
Rottenでいい

519デフォルトの名無しさん2021/02/05(金) 22:48:47.57ID:a81hUa+F
Perl6はRakuになってしまったし、Rustもいずれ「わびさび」の境地でSabiに改名されるでしょ。

520デフォルトの名無しさん2021/02/06(土) 03:04:22.39ID:kQVOjfvp
「まともなコードが書けるなら」じゃなくて、まともなコードを強制するのがRustという言語の方針だと思うが

521デフォルトの名無しさん2021/02/06(土) 04:45:05.79ID:oQfB5lBJ
>>284
昔からのプログラミング/電気界隈の慣習だから仕方ないけど、2要素のミニマルなブール代数しか扱わないにも関わらずboolean型を称するのがそもそもキモい
プログラミングで使うような半順序関係は、9割booleanで書くのが一番スッキリする
一般のbool型をプリミティブにして、そこからt/fやら三要素やらに派生するのが合理的に思う

522デフォルトの名無しさん2021/02/06(土) 04:50:47.70ID:GfZyzG1j
ブーリアン革命。

523デフォルトの名無しさん2021/02/06(土) 05:13:59.88ID:oQfB5lBJ
革命というか、クラスシステムでブール代数をエミュレートしてるのが現状のOOPじゃないかと
まあ言語によって可補性はマチマチだけど、全てについてスーパークラス/サブクラスなクラスを設けるのは、メインストリームの言語では大体そうだろ

524デフォルトの名無しさん2021/02/06(土) 07:27:56.30ID:S9Y30hRK
>>520
だとしたら胡散臭さ200%のカルトだな

525デフォルトの名無しさん2021/02/06(土) 09:31:12.13ID:rZdEmaWa
>>524
Java、Kotlin、Scala、C#、Ruby、Python、PHP
あたりのどれかを触ってみれば、危険な記述を言語仕様レベルで封印することのありがたさが分かる

他言語も触ってみることをオススメする

526デフォルトの名無しさん2021/02/06(土) 09:34:34.84ID:5Ze23T9D
よくわからんが安全カミソリみたいなものかね?

527デフォルトの名無しさん2021/02/06(土) 10:10:31.61ID:rZdEmaWa
>>526
そんな感じ

まぁ、C++もマスターすれば危険な記述を避けることはできるんだけど...
プログラマーが悪意を持ってプログラムを記述しない限り安全なコードになるようにしようという試みは大切だと思う

528デフォルトの名無しさん2021/02/06(土) 10:11:15.51ID:S9Y30hRK
>>525
ありがとう、おまえさんのレベルの低さがよくわかった
文法や動作がよくわかってなくてマシンに警告してもらわなきゃ自分では判断できないんだな
アプリの内容として良からぬ事を企むという次元には程遠いわけか

529デフォルトの名無しさん2021/02/06(土) 10:12:54.42ID:rZdEmaWa
>>528
投稿した瞬間の不意打ちレスワロス

530デフォルトの名無しさん2021/02/06(土) 10:17:55.71ID:u/OM7jGY
>>527
> プログラマーが悪vログラマーが悪意を持ってプログラムを記述しない限り安全なコードになるようにしようという試みは大切だと思う

>>528
> 文法や動作がよくわかってなくてマシンに警告してもらわなきゃ自分では判断できないんだな

この流れは大草原不可避

531デフォルトの名無しさん2021/02/06(土) 11:01:19.43ID:PohEB++t
>>504
Unity とか UE はきらい?

532デフォルトの名無しさん2021/02/06(土) 11:07:09.44ID:PohEB++t

533デフォルトの名無しさん2021/02/06(土) 11:09:03.81ID:gLiOOG5V
rustの縛りプレイはマルチスレッドでのメモリ管理のクソ面倒さが原因だろう

534デフォルトの名無しさん2021/02/06(土) 12:19:39.89ID:S9Y30hRK
>>527
いーや、くだらねえ
プログラマを信頼しない方針はあれもダメこれもダメの制限だらけになるだけだ
おまえさん自身も実社会で職場の誰よりも制限だらけなんだろう
重責を担ったことのないやつは人のせいにすることしか考えねえ

535デフォルトの名無しさん2021/02/06(土) 12:25:16.36ID:UXUwo66G
それだけ無責任で信頼出来ない人間が多いって事だろ

536デフォルトの名無しさん2021/02/06(土) 12:31:39.86ID:58EQLFGq
信頼はタダではないからな
バグを流出させたら銃殺ぐらいが妥当

537デフォルトの名無しさん2021/02/06(土) 12:53:16.04ID:DutNpJ49
>>528
お前のレベルが極めて高いのは分かったが、お前の共同の開発者もお前のようにハイレベルだとは限らない

538デフォルトの名無しさん2021/02/06(土) 13:19:02.89ID:Hu1Z4B3S
>>534
負け犬の遠吠え

539デフォルトの名無しさん2021/02/06(土) 13:29:55.66ID:EjDQT0l8
>>460
「(type)~0」でどう?

540デフォルトの名無しさん2021/02/06(土) 13:32:30.22ID:TGsCRbLO
>>536
ハゲを流出させたら〜と空目した

541デフォルトの名無しさん2021/02/06(土) 13:33:33.54ID:rZdEmaWa
>>538
しー!余計なことを言うんじゃないっ!

542デフォルトの名無しさん2021/02/06(土) 13:38:49.17ID:Hu1Z4B3S
>>528はスマートポインタを知らなさそう
文章から溢れ出る無能感

543デフォルトの名無しさん2021/02/06(土) 13:44:48.20ID:S9Y30hRK
構ってちゃんは、スマポ憶えたてらしいなw

544デフォルトの名無しさん2021/02/06(土) 13:46:38.15ID:gYQHLnIz
天才の俺が書くプログラムは絶対正しいから無駄なバカよけ機能はいらないしテストのような下等なことはしない
って豪語してたいつぞやの天才くんが帰ってきたのかな

545◆QZaw55cn4c 2021/02/06(土) 13:50:19.96ID:kbrcRlAn
>>544
私は馬鹿なので天才のコードというのがどんなのか凄く興味があります…

546デフォルトの名無しさん2021/02/06(土) 13:53:43.56ID:ROiZJzWf
コテハンでこの程度の文章も読めないのは

547◆QZaw55cn4c 2021/02/06(土) 13:55:54.96ID:kbrcRlAn
>>546
そりゃ馬鹿だからでしょう…

548デフォルトの名無しさん2021/02/06(土) 13:59:04.79ID:aJ9IYVGP
どう考えても誰かさんに対する皮肉なんだよなぁ...
まぁ、荒れるから誰とは言わないけど

549デフォルトの名無しさん2021/02/06(土) 14:05:03.59ID:fN0CSTPN
傲慢かましすぎもへりくだりすぎも良くない

550デフォルトの名無しさん2021/02/06(土) 14:06:38.65ID:zTEH7215
>>548
すでに荒れる種をまいてるきみが一番有害

551デフォルトの名無しさん2021/02/06(土) 14:12:51.02ID:aJ9IYVGP
>>550
いや、俺は別にS9Y30hRKは天才だと思ってるぞ!誰もS9Y30hRKの事をゲロカス老害だとか、バグを減らす上での有害な存在だとか、人を見下すだけの無能だとか、自分にとって都合のいい妄想を口に出す病人だとか、構ってちゃんだとか、そんなこと全然思っていないから!!S9Y30hRKは天才!!疑う余地もなく天才!!ハイレベルなバカで誰もついていけないとか、そんなこと思っていないから!!!
だから!それ以上この話はやめろぉおおおお!!!

552デフォルトの名無しさん2021/02/06(土) 14:21:36.41ID:rZdEmaWa
>>545
馬鹿でも扱えるくらい綺麗なコードが天才のコードだと思う
C++は表現豊かな言語だから...他の言語も触ると、綺麗な記述方法を学ぶ良い機会になるよ

553デフォルトの名無しさん2021/02/06(土) 14:56:25.58ID:58EQLFGq
>>552が扱えるかどうかが天才か否かの基準か!

554デフォルトの名無しさん2021/02/06(土) 15:01:56.11ID:S9Y30hRK
綺麗かどうかじゃない
何を実現したのかだ
綺麗に書くのはエチケットだが一番大事なことではない

555デフォルトの名無しさん2021/02/06(土) 15:11:21.64ID:f5ipo2xA
>>553
銃殺は銃刀法違反及び殺人罪に接触することすら理解できないお前でも分かるコードが存在したら私はそのコードを書いた天才を尊敬する

556デフォルトの名無しさん2021/02/06(土) 15:21:29.14ID:58EQLFGq
行政が法律に基づき行うなら問題無い
人が作った法律なら人が改正することができる

557デフォルトの名無しさん2021/02/06(土) 15:22:17.24ID:S9Y30hRK
スレ違い板違い失せろ

558デフォルトの名無しさん2021/02/06(土) 15:28:25.66ID:58EQLFGq
>>557
>>555に対するレス

559デフォルトの名無しさん2021/02/06(土) 15:30:29.13ID:f5ipo2xA
自作自演?

560デフォルトの名無しさん2021/02/06(土) 16:36:26.06ID:oR/8CbQ7
やらかしちゃいましたねー
人を見下しておきながら、人を見下す側もウッカリミスはするという事が証明されました

こういうウッカリ屋はプログラミングでも不具合を引き起こします
馬鹿でも天才でもウッカリ屋でも保守できるコードは記述するように心がけましょう

561デフォルトの名無しさん2021/02/06(土) 16:38:50.88ID:oR/8CbQ7
>>560
他にもテストの自動化、バージョン管理ツールの導入等もして不具合が流出しない仕組みを揃えておきましょう
以上

562デフォルトの名無しさん2021/02/06(土) 16:54:20.22ID:bwIKlxQ8
std::stringにUTF-8のコードを入れてプログラムを書いていますが、これを正しく編集する
にはUTF-8での文字の境界を正しく認識しないと駄目ですよね?
それは一般的にはどう処理するものなのでしょうか。

UTF-8のビットパターンとバイト数のことは知っていますが、それを自分で処理すべきか、
さらには絵文字とか複数のユニコードが組み合わさったものはどうするのか、とか。

563はちみつ餃子 ◆8X2XSCHEME 2021/02/06(土) 17:05:10.96ID:N9CbrPsc
>>562
コードポイント単位での処理で良いのであれば自分で適当に書いてしまってもいいと思う。

高度なものになると ICU などのライブラリを使う。
書記素クラスタ単位での処理が必要だったり正規化だったりといった場合では
コードを書けば済むというものでもなくて巨大な表が必要だし歴史的な変な規則が盛りだくさんだから
よほどの根性がないと自分ではどうにもならないと思う。

564蟻人間 ◆T6xkBnTXz7B0 2021/02/06(土) 17:07:58.83ID:gG6zzvvp
>>562 Windowsだったら
#include <windows.h>
MultiByteToWideChar(CP_UTF8, 0, ...);
MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, ...);
WideCharToMultiByte(CP_UTF8, 0, ...);
IsTextUnicode(...);
などが使えると思われます。

565デフォルトの名無しさん2021/02/06(土) 17:41:00.54ID:GfZyzG1j
スカラー値が一文字を表現するとは限りませんが、ユニコードスカラー値を基本にするのが現実的な妥協点だと思います。
きちんと処理するのは、データベースとアルゴリズムが必要なので、少人数では無理です。
ICUが有力な選択肢となりますが、これも気難しいライブラリなので、用途に合わないかもしれません。

事実上、世界中の様々な民族の文字を統一的に扱う目論見は破綻していると思います。

566デフォルトの名無しさん2021/02/06(土) 17:44:16.27ID:+KPQZs33


567蟻人間 ◆T6xkBnTXz7B0 2021/02/06(土) 17:50:18.63ID:gG6zzvvp
https://ja.wikipedia.org/wiki/UTF-8

>任意のバイトの先頭ビットが "0" なら1バイト文字、"10" なら2バイト以上の文字の2番目以降のバイト、...(中略)...であると判定できる。

568蟻人間 ◆T6xkBnTXz7B0 2021/02/06(土) 17:55:50.63ID:gG6zzvvp
つまり、

uint8_t utf8_byte = ...;
if (!(utf8_byte & 0x80)) {
// 1バイト文字。
} else if ((utf8_byte & 0xC0) == 0xC0) {
// マルチバイト文字の先頭バイト。
} else {
// マルチバイト文字の非先頭バイト。
}

569デフォルトの名無しさん2021/02/06(土) 18:11:29.66ID:6eQmSTNr
プログラミングのお題スレ Part18
http://2chb.net/r/tech/1594702426/453

UTF-8 は、先頭ニブル・4ビットで、1〜4バイト文字を判別しています

こういう規則か?

570デフォルトの名無しさん2021/02/06(土) 19:16:40.60ID:S9Y30hRK
>>561
殺虫剤のパラドックスって知ってる?

571デフォルトの名無しさん2021/02/06(土) 20:33:00.74ID:zn5WrP4C
>>570
恥の上塗り?w

ただし、自動化されたリグレッションテストの場合は、同じテストを繰り返すことでリグレッションが低減しているという有益な結果を示すことができる。
https://note.com/akiyama924/n/nc006015de2d2

572デフォルトの名無しさん2021/02/06(土) 21:07:07.97ID:GfZyzG1j
テストロボットだぞ、ガシャーン!ガシャーン!

573デフォルトの名無しさん2021/02/06(土) 21:08:55.93ID:GfZyzG1j
片山さんの自動パズルとか、ウェブだったら☆1万くらいついてそうだけど。
なんでWindowsにこだわるんだろ。

574蟻人間 ◆T6xkBnTXz7B0 2021/02/06(土) 22:54:31.87ID:gG6zzvvp
>>573 JavaScriptで動くものはすでにある。
https://katahiromz.github.io/xword.js/
あるが、ビジネスとして展開する能力がない。

575デフォルトの名無しさん2021/02/06(土) 23:50:48.27ID:58EQLFGq
クレブナー基底で解くやつ!

576デフォルトの名無しさん2021/02/07(日) 06:07:42.85ID:HYoiJUgB
>>571
質問に答えてねw

577デフォルトの名無しさん2021/02/07(日) 06:47:27.09ID:jX/y7Db/
>>576
ん?
どの質問?
>>570ならリンク先読めばいいだけだろ
恥ずかしくて読めないのかもしれないけどw

578デフォルトの名無しさん2021/02/07(日) 08:26:36.56ID:HYoiJUgB
>>576
俺の質問にアンカーつけといてどの質問はねえだろ
恥ずかしくてとぼけてんのおまえさんだろ

579デフォルトの名無しさん2021/02/07(日) 08:29:49.52ID:p49/UnNX
テストはやらないよりもやったほうがはるかに良い
前の版通ったテストが最新版でも通るという品質は担保される
殺虫剤のパラドックスよりも恐れなければならないのは
いっぱい作ったテストコードが事実上同じテストでしかないという事態になることの方
※ 個人の感想です

580デフォルトの名無しさん2021/02/07(日) 08:49:47.79ID:m5BD34IK
>>578
別に完璧になくせるなんて誰も言っていないのに勝手にツッコんでるの何?としか思ってないよ

581デフォルトの名無しさん2021/02/07(日) 08:57:32.70ID:HYoiJUgB
>>580
おまえさん、こう言ったんだぜ

> 不具合が流出しない仕組みを揃えておきましょう

流出しなくなんかならねえ
不具合はポカミスばかりとは限らない
おまえさんのような浅はかな思想で突っ走った先に
碌でもない結末が待っていることだってある

揃えられるものなら揃えてみな
自分ができねえことを他人に言うな

582デフォルトの名無しさん2021/02/07(日) 09:11:28.01ID:p49/UnNX
人は思い込みを反証することで生きていける
だが完璧に反証できないこともある
ユニットテストはそのかけがえのないものを教えてくれた

583デフォルトの名無しさん2021/02/07(日) 09:41:41.73ID:m5BD34IK
>>581
え?それ俺じゃないけど
テストやればバグが無いといえるわけじゃないから安心するなってだけで、テストするなって話じゃないよね
主旨は同じだよね
何が気に入らないの?

584デフォルトの名無しさん2021/02/07(日) 10:00:05.54ID:HYoiJUgB
ああ、俺じゃないで逃げるのか
情けねえやつだな

585デフォルトの名無しさん2021/02/07(日) 10:07:20.85ID:jX/y7Db/
>>578
アンカーつけてると言うなら
> >>570ならリンク先読めばいいだけだろ
って書いてあるだろ
よほどアホでもない限りそんなアホなこと言うわけ無いと思ったからどれ?
って聞いたんだけど、想像以上のアホだったってことかな?w

586デフォルトの名無しさん2021/02/07(日) 10:10:29.25ID:jX/y7Db/
>>581
不具合はなくせないから仕組みも努力もいらんと言うならそれでいいんじゃね?
お・ま・え・ん・と・ろ・こ・で・は w

587デフォルトの名無しさん2021/02/07(日) 10:13:42.72ID:2AGAGJ05
マスクも手洗いもコロナを100%防げるわけじゃないから
マスク付ける必要も手を洗う必要もないね

588デフォルトの名無しさん2021/02/07(日) 10:20:21.65ID:HYoiJUgB
テストツールいらねえなんて言ってねえぜ
テストツール万能論はアホの考えだと言っている

589デフォルトの名無しさん2021/02/07(日) 10:21:25.49ID:HYoiJUgB
で、身に覚えのあるやつが返事してるから
ニヤニヤ笑ってるのさ

590デフォルトの名無しさん2021/02/07(日) 10:48:37.66ID:2AGAGJ05
「テストツール万能論」を主張したレスなんて一つも見えないんだけど
存在しないものを見てニヤニヤしてる変態こわい

591デフォルトの名無しさん2021/02/07(日) 10:56:59.83ID:HYoiJUgB
それを>>587がぬかすとは笑止な

592デフォルトの名無しさん2021/02/07(日) 11:11:45.24ID:0QEz1MW7
構い過ぎじゃね?

593デフォルトの名無しさん2021/02/07(日) 11:52:54.07ID:jX/y7Db/
>>591
まさかと思うけど>>587がマジで言ってるとか思ってないよね?w

594デフォルトの名無しさん2021/02/07(日) 12:03:05.54ID:2AGAGJ05
ああ・・・そういうことね・・・すまん触るべきじゃなかった

595デフォルトの名無しさん2021/02/07(日) 13:47:28.22ID:p49/UnNX
すまんで済んだらユニットテストは要らんわ!

596デフォルトの名無しさん2021/02/07(日) 14:09:34.56ID:qbLU6RFF
野菜食えで馬鹿みたいにブチギレるホリエと一緒やな

597デフォルトの名無しさん2021/02/07(日) 15:05:54.73ID:HYoiJUgB
>>593
奴は「必要ないね」とぬかしたんだ
別に武漢熱に話をすり替えようとすり替えまいとそこは関係ない

598デフォルトの名無しさん2021/02/07(日) 15:41:29.20ID:yi1XmM9H
>>597
文章を字面通りにしか解釈できない人?

599デフォルトの名無しさん2021/02/07(日) 16:31:48.90ID:jcLu/xd9
vectorを参照渡しするときの方法について教えてくください
class sansyo
{
private:
std::vector<short> _stdSansyo;
public:
void setSansyo(std::vector<short>& sansyo);
}
;void sansyo::setSansyo(std::vector<short>& sansyo)
{
_stdSansyo = sansyo;
_stdSansyo[5] = 500;
}
int main()
{
std::vector<short> moto;
sansyo cSansyo;
for (int i = 0; i < 10; i++) {
short tmp = i * 2;
moto.push_back(tmp);
}
cSansyo.setSansyo(moto);//ここで参照渡しのはず
for (int i = 0; i < 10; i++) {
std::cout << "値=" << moto[i] << "\n"; //値が変わっていない
}
}
こんなふうに、参照渡しにしてみたのですがどうも参照渡しになっていないでそのまま新しいvectorが作られちゃったぽいのですが
これだとメモリを倍使っちゃってるし、時間も掛かってますよね
どういうふうにしたら、喚ばれた側の関数で参照渡しに出来るのでしょう

600蟻人間 ◆T6xkBnTXz7B0 2021/02/07(日) 16:37:08.22ID:sfdJNFTq
>>599
右辺値参照かstd::swap

601デフォルトの名無しさん2021/02/07(日) 17:13:26.18ID:8CWTHaUD
>>600
サンプル貼ってよ

602デフォルトの名無しさん2021/02/07(日) 17:21:04.63ID:jcLu/xd9
std::swapも右辺値参照も全然上手く行きそうになかっのたで

宣言をポインタにして
private:
std::vector<short> *_stdSansyo;

void sansyo::setSansyo(std::vector<short>& sansyo)
{
_stdSansyo = &sansyo;
sansyo[6] = 100;
_stdSansyo->data()[5] = 50;
}

関数をこんなふうに書き換えたら、ちゃんと参照だけで動いたのでもういいや

けど右辺値参照とstd::swapの例も出してくれたらこれから色々いたスカリマス

603デフォルトの名無しさん2021/02/07(日) 17:24:59.07ID:8CWTHaUD
>>600
ほれほれ
貼れんのか

604デフォルトの名無しさん2021/02/07(日) 17:28:56.01ID:yi1XmM9H
>>599
参照渡し自体はできてるはず。
ただ参照渡ししたvectorをクラスのメンバに代入して、代入されたクラスメンバの方を更新しているからvectorを渡した元の方にはまったく影響が無いというだけ。

605デフォルトの名無しさん2021/02/07(日) 17:29:10.92ID:jX/y7Db/
>>598
もうそう言うことにしないと自我が保てないんだろw

606デフォルトの名無しさん2021/02/07(日) 17:59:39.88ID:p49/UnNX
sansyo::_stdSanshoをどうしても参照にしたいならこうするしか、
class sansho {
private:
std::vector<short> _stdSansyo;
public:
sansho(std::vector<short>& src) : _stdSansyo(src) { }
void setSansyo(std::vector<short>& sansyo);
};
void sansyo::setSansyo(std::vector<short>& sansyo) {
_stdSansyo[5] = 500;
}
int main() {
std::vector<short> moto;
sansyo cSansyo(moto); //ここで参照渡し
for (int i = 0; i < 10; i++) {
short tmp = i * 2;
moto.push_back(tmp);
}
cSansyo.setSansyo(moto); // moto[5]に500が入りまくり
for (int i = 0; i < 10; i++) {
std::cout << "値=" << moto[i] << "\n"; //値が変わった!(予定
}
};

607デフォルトの名無しさん2021/02/07(日) 18:00:52.99ID:HYoiJUgB
>>598
だったら何だとぬかす気だ?
> 存在しないものを見てニヤニヤしてる変態こわい
> 文章を字面通りにしか解釈できない人?

要するに話になんない奴ってことだろ
言ったことにも裏の意味にもコメントされたくない
じゃあ相手しねえでやるから黙ってろゴミ

608デフォルトの名無しさん2021/02/07(日) 18:02:35.24ID:p49/UnNX
訂正orz
誤: private: std::vector<short> _stdSansyo;
正: private: std::vector<short>& _stdSansyo;

もしcSansyo.setSansyo(moto)の呼び出し時に参照を渡したいんじゃああ!
という向きにはsansyo::_stdSansyoはstd::vector<short>* _stdSanshoにして
ポインタを持つようにすべき

609デフォルトの名無しさん2021/02/07(日) 18:10:05.07ID:p49/UnNX
ちゅかもっと大きな一般原則としてつぎのどっちかにすべき
(1) std::vector<short>の実体の所有権をmain()(で定義いているmoto)に固定してcSanshoクラスにmotoのアドレスを記憶させない
(2) std::vector<short>の実体の所有権をcSanshoクラスのインスタンス(_stdSansyo;)に固定してmain()でmotoを定義するのをやめる
※ 個人の感想です

つまり出題が悪い。出し直し

610はちみつ餃子 ◆8X2XSCHEME 2021/02/07(日) 18:10:05.98ID:hHDgzHUe
>>602
元の考え方を変えずに動作させるにはその方法は十分に妥当だと思うよ。

ただ、もっと複雑なプログラムになったときにうっかりデータよりポインタのほうが
長生きすることになっても発見しづらいデザインになっている。

可能なら全体のデザインを見直すべきという話で、
いっそ所有権を渡してしまったほうが間違いにくいかもねという意味で右辺値参照や swap の話題が出ているので、
>>599 をベースにして右辺値参照や swap を使う例に書き換えるのは難しい。
別物になってしまう。

611デフォルトの名無しさん2021/02/07(日) 18:11:12.01ID:yi1XmM9H
>>607
自分以外の複数の人を同一人物だと思っちゃう人?

612デフォルトの名無しさん2021/02/07(日) 18:14:03.86ID:p49/UnNX
>>611
ネットの総意とか言い出しちゃう人?

613デフォルトの名無しさん2021/02/07(日) 18:16:20.19ID:p49/UnNX
検証不能な事物を錦の御旗にするような人間が
ソフトウェアのテスト推しなのは
大いなる矛盾である氏ね

614デフォルトの名無しさん2021/02/07(日) 18:18:25.00ID:HYoiJUgB
>>611
あの流れで
> 文章を字面通りにしか解釈できない人?
なんてぬかすやつは複数ID自演厨と見なされて当然だ
疑われたくなければ口の利き方に気をつけな

疑いは晴れてない
この後の発言にも気をつけるんだな

615デフォルトの名無しさん2021/02/07(日) 18:24:44.17ID:4v/nAOdw
>>566
なにこれ

616デフォルトの名無しさん2021/02/07(日) 18:29:05.24ID:U/6f7Qk0
参照をフィールドに保持するのは、一部のパーサーくらいでは?

しかも、状態を関数に切り分けないとデバッグが辛いので、仕方なくそうするだけで、バッド何とかの類だし。

617デフォルトの名無しさん2021/02/07(日) 18:31:34.10ID:U/6f7Qk0
むかし5chで誰かが、プログラムを書くときは必ずテストしてるはずなんだって言ってましたが。
それを単体テストとして書いておけばずっと使えて便利だよと。

その書き込みを見て世界中の人がテストフレームワークを書き始めたんですよ。

618デフォルトの名無しさん2021/02/07(日) 19:06:50.71ID:n+epGkV9
>>616
想像力が足りなすぎ
>>617
想像力が豊かすぎ

619デフォルトの名無しさん2021/02/07(日) 20:53:42.20ID:U/6f7Qk0
バッドエンディングですね。

620デフォルトの名無しさん2021/02/07(日) 21:03:56.50ID:ZOvCZ0cx
グローバル変数使うなとは言わないけどコメントもないのはキツい
grep掛けて検索しても訳分からん
ポインタで飛び火してるときなんてもう…

621デフォルトの名無しさん2021/02/07(日) 22:09:55.11ID:IiZq+u+t
演算子オーバーロードの厄介さはキーワード検索で拾いにくいこと。
反復子もそうだが。ま、言い出したらきりないが。

622仮トリップ ◆4DF7.T7u4M 2021/02/07(日) 22:57:26.65ID:HI2f2oIL
>>561を書いたのは私なんだけどなぁ...
面倒くさそうな人がいるし、一般論だけ言って立ち去ろって思っただけ

623仮トリップ ◆4DF7.T7u4M 2021/02/07(日) 23:02:22.83ID:HI2f2oIL
ちなみに、>>561以降は何も述べてない。
私は一般論を語っただけだから、他の人が私と似た考えでツッコミを入れただけに過ぎない。

殺虫剤のパラドックス?それがどうした?
私はテストコードを書いて不具合を激的に抑えているが?

殺虫剤のパラドックスを説明したところで、不具合を限りなくゼロに近づける試みが無駄であることの証明にはならない。

624蟻人間 ◆T6xkBnTXz7B0 2021/02/07(日) 23:09:32.25ID:sfdJNFTq
>>622-623
自我の芽生え、おめでとう!
では、かえるの歌を歌います。

【...JASRAC権利関係の為、自主検閲...】

♪パパーン
(全員でクラッカーを鳴らす)

625デフォルトの名無しさん2021/02/07(日) 23:20:12.91ID:IiZq+u+t
殺虫剤のパラドックスなんてものは存在しない。
ただの退行テスト不足だ。

626デフォルトの名無しさん2021/02/08(月) 06:24:22.18ID:PnrMZIJR
殺虫剤のパラドックスって言いたかっただけやろw
そもそもテストで発覚したバグを修正したら同じテストで摘出できないのは当たり前
摘出できたら単なる修正漏れだしw
JSTQBの関係者か信奉者が言い出したんだろうけどあまり意味のない用語だと思う

627デフォルトの名無しさん2021/02/08(月) 06:42:41.05ID:HwnOmmQF
蒸し返さなくていいから……

628デフォルトの名無しさん2021/02/08(月) 07:03:25.17ID:nKLqWVxG
虫返さないですと!?

629デフォルトの名無しさん2021/02/08(月) 11:05:43.31ID:NGjwD54G
>>610
そもそも>>600は的外れだと思うんだが
メンバの方を参照かポインタで持つ、で終わりだろ
3行目以降完全に蛇足

630デフォルトの名無しさん2021/02/08(月) 11:20:50.36ID:VJ9lplXi
>>627,628
そういうのは無視しろ

631デフォルトの名無しさん2021/02/08(月) 12:00:56.57ID:zDqHH6LK
スルーの法則

632デフォルトの名無しさん2021/02/08(月) 12:43:41.70ID:DuebuhTc
>>602
>>599
誰か
永続的に使用するなら shared_ptrで受け取れ。今のままだとsetSansyoを呼び出す側が所有権手放していいのかわからなくて困るだろ。
て指摘した?
今や生ポインタなんて性能優先のときに内部的に使用するもんで、インターフェイスで使用するもんじゃない。

あと、参照も関数内だけで使用する引数に使うもんで、永続的に所有する引数に使うもんじゃない。

633デフォルトの名無しさん2021/02/08(月) 14:04:18.90ID:VJ9lplXi
コンストラクタでなら参照型のメンバ変数に保存できる。ほとんどの人はやらないけど。

634デフォルトの名無しさん2021/02/08(月) 18:54:29.18ID:DuebuhTc
>>633
できるのと実際に実装するのは別の話だわな。
所有権の無いオブジェクトの参照を保存するなんて狂気の沙汰だ。

635デフォルトの名無しさん2021/02/08(月) 19:12:34.60ID:nKLqWVxG
アイキャンユーキャン。

636デフォルトの名無しさん2021/02/08(月) 20:51:28.21ID:U8Md53kE
>>633
クラス間に親子関係のようなものがあって、子の生存期間が常に親の生存期間内にあるような場合は、親への参照をメンバ変数とすることは普通にあると思うけど。例えば>>484とか

637デフォルトの名無しさん2021/02/08(月) 21:15:43.14ID:NGjwD54G
shared_ptr(またはスマポ)至上主義の変なやつ以前から居るんだよな
相手にするな

638デフォルトの名無しさん2021/02/08(月) 21:37:27.20ID:UsSsiWeS
ナマポ使ったほうが良い場面なんて皆無でしょう

639デフォルトの名無しさん2021/02/08(月) 21:48:31.75ID:2GJiXyxS
出たwナマポ完全否定奴w

640デフォルトの名無しさん2021/02/08(月) 21:58:57.06ID:VJ9lplXi
参照型のメンバ変数は参照オブジェクトの生存期間を保証できないからweak_ptrで保存しておいて使う時だけshared_ptrを取得するのがC++的な解決なんじゃないの。

641デフォルトの名無しさん2021/02/08(月) 22:08:09.48ID:FKp3giDs
スマポにしたら所有権の問題を考えなくてよい
というわけではないからスマポ使えというのは妥当ではない
逆に所有権に矛盾が無ければインスタンスは生成元が与えた参照を持って良い

ていうかスコープを抜けたら自動的に解放される系のクラスを書いたら
エラー処理上エラー通知先としての生成元オブジェクトの参照保持はほとんど不可避

642デフォルトの名無しさん2021/02/08(月) 22:11:14.29ID:NgGwlfwa
コピー禁止のshared_ptr欲しい

643デフォルトの名無しさん2021/02/08(月) 22:25:23.27ID:bp+4mh0R
すべてスマポで書くスタイルも悪くないと思うけど、メイヤーズ神もツリー構造で子が親のポインタを持つときはナマポで十分と書いている

644デフォルトの名無しさん2021/02/08(月) 22:27:43.60ID:34Jom8HU
木のノードは子へのポインタじゃなくて子のノードIDを持て😡

645デフォルトの名無しさん2021/02/08(月) 22:48:15.38ID:NgGwlfwa
自分よりポインタの方が寿命が長いことが保証されているなら確かに生ポで問題ないが
それが成り立つ状況ってなかなかないよな。

646デフォルトの名無しさん2021/02/08(月) 23:02:19.81ID:VJ9lplXi
参照先の実体がまだ生存しているかどうか知るにはweak_ptr::expired()を使うしかないのが現状でしょ。

647デフォルトの名無しさん2021/02/08(月) 23:07:56.19ID:nKLqWVxG
Chromiumはstd::unique_ptrを全面的に使ってるけど、ポインタを使う設計そのものが古いような気がする。

648デフォルトの名無しさん2021/02/08(月) 23:13:28.50ID:BwguerZK
まあcコードを全く使わないってのならいいんでないの。
ただc++のポータビリティーは君が思ってるより低いけどね。

649デフォルトの名無しさん2021/02/08(月) 23:23:15.47ID:cR8ppl+C
露骨すぎるマウント取りたがりダッセーwww

650デフォルトの名無しさん2021/02/09(火) 01:58:29.04ID:qUmf+U4D
マウントじゃなくてポインタでは?

651デフォルトの名無しさん2021/02/09(火) 02:46:23.52ID:jPnyP+Vp
C++に特化したAPIなんてどこのOSでも提供されないから、結局、Cの配列と互換性のあるstd::vectorやstd::arrayを使わざるを得なくなる。

652デフォルトの名無しさん2021/02/09(火) 04:01:45.22ID:qUmf+U4D
>>644
木もコンテナで良いですよね。
所有権がハッキリしてて。

653デフォルトの名無しさん2021/02/09(火) 07:34:27.86ID:nSJhwzEU
>>651
data()を必ず使う手合いか?

654デフォルトの名無しさん2021/02/09(火) 07:39:10.06ID:s3p3GZ7R
木は木全体を収める領域ごと一気に解放する場合もあるから別に

655デフォルトの名無しさん2021/02/09(火) 17:49:12.66ID:KrtnTLUi
>Cの配列と互換性のある

doubt

656デフォルトの名無しさん2021/02/09(火) 17:53:30.91ID:LEWRJrN2
ダウトとデビューって似てるよね

657デフォルトの名無しさん2021/02/09(火) 18:35:55.16ID:qUmf+U4D
親が子のポインタを所有する木は、親を消すとネストして子孫のデストラクタを呼ぶので、スタックが枯渇します。

したがって、子から順番に消さなくてはなりません。

658デフォルトの名無しさん2021/02/09(火) 18:56:53.48ID:qUmf+U4D
その様はまるで摩天楼がドミノ倒しのように連鎖倒壊するようでもあり、DOMINOというピザにもなっています・

659デフォルトの名無しさん2021/02/09(火) 19:07:16.84ID:IPYpL0sA
なんと後味の悪い話

660デフォルトの名無しさん2021/02/09(火) 20:39:36.84ID:zHOwdh/n
意味が分からない

661デフォルトの名無しさん2021/02/09(火) 21:07:48.14ID:Rh87rJZX
>>657
それで枯渇するようじゃ木の探索すらできない。

662デフォルトの名無しさん2021/02/09(火) 21:13:02.23ID:5Ac7csWH
探索はループでもできるんで、たとえば数万個の要素を持つツリーを子から消せというのは真理なのかも

663デフォルトの名無しさん2021/02/09(火) 21:27:40.55ID:AojZLEiV
消すのは独立して実行できるので別スレッドに送れば実質コスト0

664デフォルトの名無しさん2021/02/09(火) 21:38:09.75ID:s3p3GZ7R
>>662
DFAとPDAではやれることの範囲の違いがちげう

つかこの場合は安易にスマポとかコンテナを使うから破棄ごときにトラバースの手間がかかるんである

665デフォルトの名無しさん2021/02/09(火) 21:44:42.72ID:5Ac7csWH
それもそうであるな

666デフォルトの名無しさん2021/02/09(火) 21:50:17.60ID:s3p3GZ7R
ちゅか垂直探索なら木をメモリに持っておく必要が無い
水平探索ならメモリ上に世代1、世代2、....と木を育てていく(らしい)が
兄弟ノードを全部見終えたのでいざ従妹ノードに移ろうとするときに
親ノードへの参照は欲しい木がするがするとshared_ptrなら即循環参照になり、
子の情報で親(子孫がいっぱいぶら下がっている)を生成できるわけもないから、
ウィークポインタの出番でもない

667デフォルトの名無しさん2021/02/10(水) 01:37:49.58ID:XIZePh+h
子から消さなかったばかりに。
2000人を乗せた航空機が洋上で消えた。
ってなるかも?

668デフォルトの名無しさん2021/02/10(水) 01:48:13.89ID:ZYaksnCf
A380でさえ853席だが2000人なんてどうやって載せるんだろう

669デフォルトの名無しさん2021/02/10(水) 01:51:41.17ID:2ozOIzIF
く、空中で衝突するとか…

670デフォルトの名無しさん2021/02/10(水) 01:53:08.99ID:XIZePh+h
インドでは屋根の上にも乗ります。

671デフォルトの名無しさん2021/02/10(水) 01:55:11.55ID:XIZePh+h
https://trafficnews.jp/post/80031

証拠写真みつけてきた。

672デフォルトの名無しさん2021/02/10(水) 01:55:17.84ID:uF0JvJPV
GTA5のMOD作成者みたいな会話だな

673デフォルトの名無しさん2021/02/10(水) 02:01:19.54ID:uF0JvJPV
>>653
昔はdata()がなかった。(遠い目)

674デフォルトの名無しさん2021/02/10(水) 06:40:17.61ID:ZYaksnCf
アントノフの貨物室にすし詰めでどんくらい乗れるかな

675デフォルトの名無しさん2021/02/10(水) 06:40:27.16ID:XIZePh+h
東京: TK
京都: KT
大阪: OSK
淡路: AWG

676デフォルトの名無しさん2021/02/10(水) 07:59:22.76ID:FGGGEnfF
航空機や原発みたいなクリティカルなシステムでは
全部固定長の配列で書いてあるんじゃないの

677デフォルトの名無しさん2021/02/10(水) 08:06:21.27ID:uF0JvJPV
釣れますか。
ヒープのほうが少し安全です。

678デフォルトの名無しさん2021/02/10(水) 10:25:11.13ID:4XPmMtZj
>>671
どこが証拠やねん!
せいぜり100人やないかヽ(`Д´)ノ

679デフォルトの名無しさん2021/02/10(水) 14:32:04.65ID:TFzLuCg0
すみません、std::for_each を使っていて continue したくなりましたが、サポートしてないです
よね? これって:
1. for_each は continue する必要がないような処理に限ってに使うべき。
2. ループの中で大きい if ブロックを作って空の処理にすればよい。
3. その他

680デフォルトの名無しさん2021/02/10(水) 15:13:45.18ID:ZYaksnCf
returnすれば?
for_each(begin(foo), end(foo), []{ if(bar) return; });

681デフォルトの名無しさん2021/02/10(水) 16:06:00.49ID:HSfvjOUE
return は continue ではなく break じゃないの?
質問者の2.大きなif分で実質何もしないでいいと思う

682デフォルトの名無しさん2021/02/10(水) 16:20:11.24ID:ZYaksnCf
for_eachをbreakするにはthrowかlongjmpがいるぞ

683デフォルトの名無しさん2021/02/10(水) 16:35:39.62ID:S47HOUGT
きったねぇジャンプだ

684デフォルトの名無しさん2021/02/10(水) 16:51:31.94ID:HSfvjOUE
あ、ラムダ式になってたのか

685はちみつ餃子 ◆8X2XSCHEME 2021/02/10(水) 17:51:08.81ID:tNqysU9n
>>679
for 文で書いた方が短く書けそうだけど、
あえて for_each を使いたい理由が何かあったりするの?

686デフォルトの名無しさん2021/02/10(水) 18:41:41.17ID:FGGGEnfF
Perlなら問題無くできる(continue→next、だが
C++規格委員会がfor_eachのcontinueを許可しないのは最後の一線なのかもしれん…

687デフォルトの名無しさん2021/02/10(水) 19:51:57.06ID:teDb7k99
何の一線よ

688デフォルトの名無しさん2021/02/10(水) 20:18:41.39ID:ln/pLvjf
いやreturnでいいだろ…
許可しないってなんのことだよ

689デフォルトの名無しさん2021/02/10(水) 21:21:18.68ID:+e+FbMSY
vectorで一億件ほどで、飛ばしたいのが100〜1000件程度なんだろう

690デフォルトの名無しさん2021/02/10(水) 21:51:25.56ID:QYfnOwKH
>>679
for_eachをrange based forに変更は出来ないの?

691デフォルトの名無しさん2021/02/10(水) 21:59:01.21ID:ZYaksnCf
>>690
おまえのスキルのためにか?

692デフォルトの名無しさん2021/02/10(水) 22:17:23.69ID:qtVJ0qYe
range based forなら普通にcontinueできるぞ

693デフォルトの名無しさん2021/02/10(水) 22:18:26.21ID:ln/pLvjf
>>689
飛ばす手段があったとして、飛ばすかどうかどこでどう判断するの?

694デフォルトの名無しさん2021/02/11(木) 04:16:42.30ID:nrDdTgaQ
early returnは正義

695デフォルトの名無しさん2021/02/11(木) 11:22:44.35ID:n0GRjtoR
>>685
テンプレのときとか

696デフォルトの名無しさん2021/02/11(木) 17:53:02.68ID:Iq2aKjep
679がなぜfor_eachを使うのかを無視するのは
他人の領分を侵すお節介だ

for_eachの使い方をアドバイスできんやつは
しゃしゃり出てくるな

697デフォルトの名無しさん2021/02/11(木) 18:00:13.22ID:hRfccug1
よくよく話を聞いてみたらまるで異なる解決策が見つかるなんてよくあることじゃん。そんな経験ないの?
何をしたかったか確認するのは重要

698デフォルトの名無しさん2021/02/11(木) 18:15:41.21ID:Iq2aKjep
流れをよく読んでみろよ
for_eachをロクに使ってないやつなのモロバレだろ
質問者が尋ねていないことを答えたいから協力しろなんてぬかすのは
回答者の資格ねえんだよ

699デフォルトの名無しさん2021/02/11(木) 18:18:25.32ID:Iq2aKjep
自分が何か尋ねているときに
質問内容に付き合ってやれる懐のねえやつは
うぜえだけだろが

700デフォルトの名無しさん2021/02/11(木) 18:23:57.31ID:Iq2aKjep
質問内容において自分より下なやつに教えを請いたいかよ

701デフォルトの名無しさん2021/02/11(木) 18:34:11.92ID:hRfccug1
for_eachを使う場合の答えはとっくに出てるのに何言ってんの?

702デフォルトの名無しさん2021/02/11(木) 19:17:08.97ID:15xoUz1R
3のその他で答えただけ。

703デフォルトの名無しさん2021/02/11(木) 20:01:29.92ID:veopzNW6
他人の領分なんて侵してナンボ

704デフォルトの名無しさん2021/02/11(木) 20:03:18.37ID:qccRsQET
>>702
はあ?returnではいけない理由は?

705デフォルトの名無しさん2021/02/11(木) 20:19:00.69ID:a/CQbB/Z
>>679はループしたいだけだろ
std::for_eachを何が何でも使わなければならない特殊な事情があるなら仕方ないけどそんなこと言ってないし

706デフォルトの名無しさん2021/02/11(木) 20:23:31.36ID:nDjPJyoP
>>704
returnで良いと思うよ。

707デフォルトの名無しさん2021/02/11(木) 20:50:06.93ID:Iq2aKjep
>>701
680は俺だが何言ってんの?

708デフォルトの名無しさん2021/02/11(木) 21:58:36.08ID:bviF/sLG
Visual Studio 2010(MSVC2010)で
 template<class T>
 void foo(T x) {
  printf("%d: %d\n", targetEntity, x);
 }
という関数テンプレートが定義されているときに、
 namespace bar { const int targetEntity = 1; }
 using bar::targetEntity;
 void baz() { foo(100); }
はコンパイルが通るのに、
 namespace bar { const int targetEntity = 1; }
 void baz() {
  using bar::targetEntity;
  foo(100);
 }
だと
 error C2065: 'targetEntity': 定義されていない識別子です。
と言われるorz

709デフォルトの名無しさん2021/02/11(木) 22:06:56.76ID:bviF/sLG
>>688
for_eachを勘違いいてたわサーセン、
確かにfor_each<bgn, end, Function>のFunction(*it)からならreturnするで良さげ

710デフォルトの名無しさん2021/02/11(木) 23:28:48.49ID:Ooe4jkn9
>>707
アンパンマンはキミだ。

711はちみつ餃子 ◆8X2XSCHEME 2021/02/12(金) 01:36:02.90ID:2OOQ6m86
>>708
宣言の有効範囲は宣言された場所からその宣言を含むブロックの終わりまでというのが原則
(クラススコープなどの例外はあるのでその他にも関連するルールはあるかもしれんけど)
なのでどちらもエラーになるのが筋だと思うし、 gcc や clang で試したらどっちもエラーだった。

逆にどういう理屈で前者が通るのかは気になる。

712デフォルトの名無しさん2021/02/12(金) 06:02:20.64ID:45Tu3B4L
>>708
当たり前だね
最初の例ではtargetEntryをグローバル空間に導入しているからbaz()とfoo()の両方から見える
2番目の例ではtargetEntryをbaz()のブロック内に導入しているから、そこに包含されないfoo()のブロックからは見えない

ただし、これはfoo()を関数原型と関数定義に分けて関数定義をbarよりも後方に置いた場合の話だ
原文のままでは>>711が言うとおり通るわけがない

713デフォルトの名無しさん2021/02/12(金) 06:03:16.30ID:45Tu3B4L
- barよりも後方
+ usingよりも後方

714デフォルトの名無しさん2021/02/12(金) 07:01:12.63ID:3x5iWh5q
確かにideoneでもVS2019でも両方エラーになるのですだが、
1番目の例はVS2010ではビルドも通って動くもーん

ソース:
https://ideone.com/DC8fMv

実行結果(※ VS2010限定):
1: 100
続行するには何かキーを押してください . . .

715デフォルトの名無しさん2021/02/12(金) 07:04:11.00ID:3x5iWh5q
ちな関数テンプレートfoo()の定義をusingよりも後方にしたら全てでビルドが通って動く
まそりゃーそうならないとおかしいが

716デフォルトの名無しさん2021/02/12(金) 07:12:42.48ID:45Tu3B4L
>>714
通ってねえじゃん
何が言いたいんだ?

717デフォルトの名無しさん2021/02/12(金) 07:17:08.75ID:3x5iWh5q
>>716
> >>714
> 通ってねえじゃん
> 何が言いたいんだ?
※ VS2010限定

718デフォルトの名無しさん2021/02/12(金) 07:24:49.77ID:45Tu3B4L
だから何?
ill-formedなのがわかっても自分が正しいと強弁したいのか?

719デフォルトの名無しさん2021/02/12(金) 07:27:26.57ID:3x5iWh5q
全員の主張を再検証しただけでつよ?
>原文のままでは>>711が言うとおり通るわけがない (>>712)
が覆されてご機嫌ななめ??

720デフォルトの名無しさん2021/02/12(金) 07:32:07.63ID:45Tu3B4L
覆った?
おまえVS2010限定で逃げただろ
ill-formedはill-formed
これを覆せたら出直して来な

721デフォルトの名無しさん2021/02/12(金) 07:34:53.80ID:45Tu3B4L
俺も昔のバージョンのコンパイラは使うがバグ技は使わないし
そういうことをする厨二病とは組みたくない

722デフォルトの名無しさん2021/02/12(金) 07:38:38.54ID:3x5iWh5q
>おまえVS2010限定で逃げただろ
VS2010ではビルドが通るというのが話の発端なので…
1番目の例がill-formedであろう点は同意

723デフォルトの名無しさん2021/02/12(金) 07:51:23.22ID:45Tu3B4L
orzなんだろ
何が誰が悪いのかわかったら素直になれよ
居直る態度が気に入らねえ

724デフォルトの名無しさん2021/02/12(金) 08:12:22.74ID:3x5iWh5q
何が悪いのか、はともかく
誰が悪いのかとは一体…
つか現象(事実)の提示に対してそれを反発と解釈して勝手に炎上しないでいただきたい;;;

個人的にはVS2010のバグである可能性でほぼ確定とは思いつつ、
例1と例2で動きが違うことから、MSVC2010は、グローバルなシンボルについて
template foo()や関数baz()の中の解釈に入る前に名前空間を確定させる実装なのだと感じる
(template foo()の解釈ロジック自体にバグがあるなら例1、2とも同じ結果になるのが自然

再発防止のためには、C++規格のどこをどう読めば良いんじゃorz

725デフォルトの名無しさん2021/02/12(金) 08:57:55.62ID:45Tu3B4L
>>719は明らかに煽り口調だろうが
和解したいなら、あの態度を撤回しろ

俺は和解なんかできなくて構わんが

726デフォルトの名無しさん2021/02/12(金) 10:26:37.15ID:1W1GlA05
匿名掲示板で誰が何を言ったのどうのとみっともないぞデフォルトの名無しさんよ

727デフォルトの名無しさん2021/02/12(金) 11:29:35.12ID:jxDcSv/l
どう見ても>>716がイミフな言いがかりつけてるだけにしか見えんが…

> 確かにideoneでもVS2019でも両方エラーになるのですだが、
> 1番目の例はVS2010ではビルドも通って動くもーん

728デフォルトの名無しさん2021/02/12(金) 13:22:44.45ID:x9NfpsA7
匿名でも江副とかQZとか片山やはちみつが糞なのは伝わってくるω

729デフォルトの名無しさん2021/02/12(金) 18:24:14.30ID:45Tu3B4L
単発IDになりやがった
どこまでも腐ってやがるな

730蟻人間 ◆T6xkBnTXz7B0 2021/02/12(金) 19:12:56.39ID:fTOQtm+W
どこでも動くように標準化しましょうねって話だよね。

731蟻人間 ◆T6xkBnTXz7B0 2021/02/12(金) 19:29:19.43ID:WC9JZZt5
G++とかclang++などの複数のコンパイラで警告最大にして自動ビルドすれば再発防止できると思われます。

732デフォルトの名無しさん2021/02/12(金) 19:37:54.63ID:3abO7oQ0
流れをぶった切って質問です。

あるクラスで生成、削除を一切合切プライベートにしたい(ファクトリメソッドでスマートポインタを渡す)んだけど、
::deleteを対象クラスだけプライベート、あるいはコンパイルエラーにする
ことって可能かしらん?

733蟻人間 ◆T6xkBnTXz7B0 2021/02/12(金) 19:46:11.11ID:WC9JZZt5

734蟻人間 ◆T6xkBnTXz7B0 2021/02/12(金) 19:55:37.68ID:fTOQtm+W
dtorはデストラクターの略ね。
死のトラクターじゃないよ。

735デフォルトの名無しさん2021/02/13(土) 02:57:21.77ID:ZCgeuP6g
映画化決定。

736◆QZaw55cn4c 2021/02/15(月) 00:20:32.87ID:M7Hs01/T
>>728
私が馬鹿なのは私自身が認めていることですが、片山さんはすごいと思いますよ、何よりも片山さんは多産ですし、私は片山さんを尊敬しています‥‥

737デフォルトの名無しさん2021/02/15(月) 12:30:59.56ID:tZ1nblID
>>733
ありがとう。参考になりました。

流石にグローバルdtorの直接呼び出しを気にしている人は居なさそうですね。
通常の使い方じゃないから気にするな、が正解かしらん。

738デフォルトの名無しさん2021/02/16(火) 18:45:49.14ID:zTH+X1Xm
画像
C++相談室 part154 YouTube動画>1本 ->画像>1枚

739デフォルトの名無しさん2021/02/16(火) 18:59:33.07ID:zTH+X1Xm
つかprivate dtorって何の解決にもなって
なくね?
クラスFooのデストラがprivateな時点で
Fooのfirendでも何でもないstd::shared_ptr<Foo>はビルドエラーになる宿命なのでは…
あとp.get()->Delete()とされるのも恐ろしいすぐる………

740デフォルトの名無しさん2021/02/16(火) 19:15:28.82ID:Pme6j5oX
>>739
そのあたりは回避策ある。
どのwebページに解説あったか覚えてないけど……

741デフォルトの名無しさん2021/02/17(水) 08:24:04.17ID:Pn/OWNHb
operator <=>を定義しても
==と!=が使えるようにならないのは、なんで?

742デフォルトの名無しさん2021/02/17(水) 11:29:34.99ID:u6Au0MiC
https://cpprefjp.github.io/lang/cpp20/consistent_comparison.html
のoperator==節で仕様とその理由についても説明してあります

743デフォルトの名無しさん2021/02/17(水) 12:05:07.17ID:8kTif7Fu
relops

744デフォルトの名無しさん2021/02/17(水) 12:07:48.78ID:ZhVk2C4b
relops

745デフォルトの名無しさん2021/02/17(水) 12:14:57.71ID:7xS0C1vs
なるほどわからん。弱順序って何よ?

746デフォルトの名無しさん2021/02/17(水) 13:36:33.88ID:peDNmUYI
>>745
二項関係で、反射律、推移律、比較可能性を満たすもの

747◆QZaw55cn4c 2021/02/17(水) 21:10:31.90ID:n4obO1jB
>>746
擬順序とか半順序と呼ぶ本もありますね、
ただ、その「比較可能性を満たす」とはなんでしょうか?私の教科書では、擬順序には反射律・推移律だけしか要請されていなかったと記憶しているのですが?

748デフォルトの名無しさん2021/02/17(水) 23:46:57.44ID:ZhVk2C4b
普通に言葉通り任意の2つの元を比較できるということなのでは…

木構造で「親は子より大きい」という順序を定義しただけ
(全順序集合(例えば整数)で全ノードをラベル付けしてしまうというチート手段に訴えことなく、
 文字通り「if (aはbの親) { a > b; }」という規則と(a, b)の反射律、推移律を導入しただけ
では兄弟間の大小が定まらない、
みたいな

749デフォルトの名無しさん2021/02/17(水) 23:47:32.54ID:ZhVk2C4b
のは半順序で、
整数みたいなやつが全順序

750デフォルトの名無しさん2021/02/17(水) 23:59:39.55ID:ZhVk2C4b
なお{ 全順序集合 }⊂{ 半順序集合 }なのは確定的に明らかなので、
反射律・推移律だけしか要請されていなかったらそれは全順序集合の集合を含む半順序集合の集合の意味となりぬ
つまり全順序集合の集合と半順序集合の集合が区別できん
両社を区別したい議論のときは比較可能性の有無を宣明せねばならんぬ、

751デフォルトの名無しさん2021/02/18(木) 00:34:07.44ID:48a8FzyN
a≦b または b≦aが成り立つ時、比較可能
弱順序ってしらなかったけど、半順序とは違うようだ
「半順序?弱順序?二項関係・順序関係まとめ」って記事

752デフォルトの名無しさん2021/02/18(木) 03:35:31.61ID:sRdwF113
束論やってるけど弱順序とか初めて聞いた…
マ界用語?

7537412021/02/18(木) 06:50:20.77ID:brZHVFLx
>>742
まだ何とも言えないが
thx!

754デフォルトの名無しさん2021/02/18(木) 10:08:01.17ID:48a8FzyN
弱順序は、半順序よりは制限強いが全順序より弱いもので、
ある種のソートアルゴリズムでは全順序よりは制限緩められるけど
半順序までは緩められない、ってのがあるみたいね

755デフォルトの名無しさん2021/02/18(木) 13:16:30.49ID:9Yl3mCZH
>>752
束って何で勉強すればいいん?

756デフォルトの名無しさん2021/02/18(木) 14:43:05.98ID:48a8FzyN
アルゴリズムとの関連はちょっとわからんけど

数学としての束論って単独の本は少なくて、代数学の本に載ってるんじゃないかな
もしくは順序集合の話として集合論の本

757◆QZaw55cn4c 2021/02/19(金) 04:42:11.06ID:3tFNJrqv
>>748
>普通に言葉通り任意の2つの元を比較できるということなのでは…

いや、それは全順序ですよ
・擬順序
・順序
これらの演算子を≦としたとき、かならずしも任意の二元 a, b について a ≦ b の真偽が定まらなくてもいいと思います

擬順序に対して「a ≦ b かつ b ≦ a ならば a = b」という縛りが追加されるのが順序、
順序に対して、任意の二元 a, b について「a ≦ b」または「b ≦ a」のどちらかである、という縛りが要請されるのが全順序
だったかと

758デフォルトの名無しさん2021/02/19(金) 20:38:08.11ID:mpGE+xsF
wikipediaの「推移関係」の項目より

半順序 - 反対称的な擬順序
擬順序 - 推移的であると同時に反射的
全擬順序 - 完全的な擬順序
同値関係 - 対称的な擬順序
厳密弱順序 - 強半順序関係で等価関係での比較が不可能な場合
全順序 - 推移的で反対称的な完全関係

全順序、半順序くらいしか知らんかった

759デフォルトの名無しさん2021/02/19(金) 20:51:11.65ID:gWMDVcMR
OOPの本だとサブクラス関係は前順序って書いてるよな?擬順序ともいうのか
推移的、A→B∧B→C |- A→C 、サブクラスのサブクラスはサブクラス
かつ反射的、AはAのサブクラス

760デフォルトの名無しさん2021/02/19(金) 20:55:11.79ID:fAhRarpN
>>757
>いや、それは全順序ですよ
は? その条件が共通なだけだろ

761◆QZaw55cn4c 2021/02/19(金) 21:23:56.68ID:3tFNJrqv
>>760
一番弱い順序、推移的かつ反射的であるのみの順序関係は、実は任意の二項間においてかならずしも順序関係の真偽が定まらなくてもいいのですよ
すべての二項間で順序の真偽が定まるのは、順序の中でも一番強いものである全順序で初めて導入される、と私は解釈しています

762デフォルトの名無しさん2021/02/19(金) 21:44:53.04ID:gWMDVcMR
ブール代数 型システムで検索しても出てこないけど>>523
可補分配束の定義見てると確かにそんな気はしてくる

インスタンス関係かサブクラス関係なのか?どっちでも成り立ちそうだけど、取り敢えず静的チェックをパスすることを考える

要素が無いと言う意味でCのvoidを冪集合ブール代数の最小元、空集合とみなす
void *は何でも指せるという意味で最大元
まともな型システムなら(少なくとも)上記の擬順序以上は要求る
演算は多重継承とvirtual 定義が∨/∧に対応?クラス図書いてみたら成り立ちそうに思える
型チェック通らない全ての型を考えられるし、それが¬
型述語で定義してればそのまま!演算子になる

763デフォルトの名無しさん2021/02/19(金) 21:55:14.25ID:gWMDVcMR
確証が持てなくてもどかしい…数学できる人ツッコミ待ち

とりあえずダイヤモンド継承を許さない言語だと、常に∧/∨は定義されないからブール代数にはならない事には気付いた

764デフォルトの名無しさん2021/02/19(金) 21:55:34.53ID:hHLb88jw
ググってる時点で、というかそのことを隠しもしないニワカ

765デフォルトの名無しさん2021/02/19(金) 21:56:36.22ID:gWMDVcMR
>>764
隠して5chなんかで偉ぶってどうすんのさ

766デフォルトの名無しさん2021/02/19(金) 22:01:35.27ID:aORwmd7L
質問ですがムーブコンストラクタを有する基底クラスの
派生クラスでムーブコンストラクタを
派生クラスがムーブコンストラクトされる際に基底クラスにアクセスしようとする場合であっても
安全に書く方法って何かあるんでしたっけ

767デフォルトの名無しさん2021/02/19(金) 22:03:03.40ID:6z9jMlRH
作ったクラスをmapにいれるときoperator<を書かなきゃいけないのがめんどい

768デフォルトの名無しさん2021/02/19(金) 22:08:24.37ID:aORwmd7L
あとムーブコンストラクタを有するクラスを
詳細を隠ぺいする目的でインターフェースを設けたとき
インターフェース経由でムーブコンストラクトする方法って何かあるんでしたっけ
アブストラクトファクトリイーを作るしか無い?

769デフォルトの名無しさん2021/02/19(金) 22:11:39.72ID:aORwmd7L
この場合アブストラクトファクトリイーといっても、元のクラスFooに対して
IFoo IFoo::move() { ... } が定義してあって
 IFoo x = (適当な生成手段)
ののち、
 IFoo y = x.move()
でxが破壊されるやつ!

770デフォルトの名無しさん2021/02/19(金) 22:36:29.47ID:F7SsNRLa
それインターフェースとして使えてないよ

771デフォルトの名無しさん2021/02/20(土) 00:40:16.16ID:iK8Sr3o/
領域が連続しているコンテナなら何でも良いんですが、たとえば array<T> a を vector< vector<T> > b に n 要素分コピーしたいときって
memcpy(b.data(), a.data(), n*sezeof(T))
で良いんですかね?

UNIXコマンドと順番が違ったりして間違えそうなのですが、他に良いやり方ありますか

772デフォルトの名無しさん2021/02/20(土) 01:38:00.62ID:YJV0xwOV
>>771
ド素人かよ

773デフォルトの名無しさん2021/02/20(土) 01:42:23.87ID:upzAgg50
>>771
領域確保されてるならたぶんそれが最速だけど、普通はstd::copyかな

774デフォルトの名無しさん2021/02/20(土) 08:11:48.90ID:BRyl48dG
>>761
その「一番弱い」とか言ってるのは前順序だろ。

ククク... 前順序は順序四天王の中でも最弱...
ウィキペディアにも書いてあるのに間違うとは面汚しよ...

775デフォルトの名無しさん2021/02/20(土) 11:17:36.76ID:ZF+WEG2v
半順序とかいう訳が悪い
英語のpartial orderの方が分かりやすい

776◆QZaw55cn4c 2021/02/20(土) 11:27:39.73ID:mkFIMg3t
>>774
本によって用語にブレがあるのは数学では常識でしょう?だから>>761 では定義もあわせて書いておきました

777デフォルトの名無しさん2021/02/20(土) 11:30:33.89ID:ec7b4JGn
あとは裁判で争うしかないでしょうね。

我々には判決が出せませんから。

778はちみつ餃子 ◆8X2XSCHEME 2021/02/20(土) 11:52:10.16ID:N5IkYQZo
>>771
前提条件として

・ T の型が trivially copyable である
・ vector の大きさが必要な大きさ分に出来ている

ならそれでもいいよ。
でも、 C の関数を C++ でも使えるのはほとんどが互換性のためでしかなく、
作法的にはあまり使わないに越したことは無いって感じ。

779はちみつ餃子 ◆8X2XSCHEME 2021/02/20(土) 11:56:56.24ID:N5IkYQZo
>>771
>>778
と思ったけど、 vector<T> ではなくて vector< vector<T> > なのか。
それだと領域が連続するという前提が成り立たないんじゃないんですかね。

780デフォルトの名無しさん2021/02/20(土) 12:51:28.34ID:K0wy5MAI
>>770
どういう意味じゃ…
ムーブコンストラクトする手段をインターフェースとして公開したい需要は論理的に有り得る
それともIFoo::move()に実装が伴うからという意味?

781デフォルトの名無しさん2021/02/20(土) 14:23:36.69ID:XZPJJfWU
>>779
なぜ?
行優先か列優先かは置いといて、vectorの要素は連続するのだからvectorのvectorも連続するのでは?
サイズやキャパシティが変わったときに不連続になりうるということ?

782デフォルトの名無しさん2021/02/20(土) 14:39:27.43ID:ZF+WEG2v
vectorのvectorの中身はサイズ値とバッファポインタが連続で並んでるだろうな

783デフォルトの名無しさん2021/02/20(土) 14:57:30.99ID:upzAgg50
>>781
正しくコピーしたければ、
memcpy(b[0].data(), ...)
みたいにしないと。
このとき当然b[1]のデータ領域はb[0]の後ろに連続していない

784はちみつ餃子 ◆8X2XSCHEME 2021/02/20(土) 15:27:01.55ID:N5IkYQZo
>>781
vector 型のオブジェクトが連続して並んでいることは保証されるよ。
でも vector 型のオブジェクトのメモリレイアウトがどうなってるかは保証されない。

常識的な実装は >>782 が言う通りヒープから持ってきたメモリのポインタなどを持ってるだけ。
データそのものを内包しているわけではない。

785デフォルトの名無しさん2021/02/20(土) 16:22:37.93ID:UDAFNKrx
ほらCと同じ基本の部分を教えずにいきなりSTLとか勧めるからこういう初心者が出てくる・・

786デフォルトの名無しさん2021/02/20(土) 17:06:29.35ID:1TZxH4Mg
ある程度出てきても問題ないだろ。ちゃんとドキュメント読んで理解してくれる人も多いんだろうし、
「Cと同じ基本の部分」を教えたところでちゃんと理解してくれない人も居るだろうし。

787デフォルトの名無しさん2021/02/20(土) 17:09:29.42ID:UDAFNKrx
ちょっと何言ってるかわかんない

788デフォルトの名無しさん2021/02/20(土) 17:54:39.09ID:ZF+WEG2v
相談室に初心者が来て何の問題があるのか

789はちみつ餃子 ◆8X2XSCHEME 2021/02/20(土) 18:06:15.32ID:N5IkYQZo
>>788
程度による。

790蟻人間 ◆T6xkBnTXz7B0 2021/02/20(土) 19:27:14.79ID:VmESNyRi
>>771

> array<T> a を vector< vector<T> > b に n 要素分コピーしたいときって
> memcpy(b.data(), a.data(), n*sezeof(T))
> で良いんですかね?

待てよ、b.data()って&b[0]だから型はvector<T>*だろ。書き換えたらいけないアドレスじゃん。

ダメです。

791蟻人間 ◆T6xkBnTXz7B0 2021/02/20(土) 19:49:01.06ID:HfYkFRCd
C++のvectorでは、演算子[ ]がオーバーロードされてるから、C言語の常識が通用しないんだよ。

memcpyは危険な関数だから簡単にメモリー破壊できるんだよね。

std::vector v;
int a = 5;
memcpy(&v, &a, sizeof(a)); // vのメモリー破壊。

792デフォルトの名無しさん2021/02/20(土) 20:38:26.44ID:PUIofNKd
>>791
流石にそれは質問者のレベルにも達してないんで問題外

793デフォルトの名無しさん2021/02/20(土) 20:44:29.23ID:Rkd/h2tQ
別にここで何が正しいかを結論できなくてもいいのだが

>>776
そう言うなら「推移的かつ反射的であるのみの順序関係」が「弱順序」と書いてある本を
教えてくれる?
手元になかったらうろ覚えでもいいけど。〇〇の××先生がそう言ってたみたいのでもいいw
知識として一応確認しておきたいかなと。

794◆QZaw55cn4c 2021/02/20(土) 21:19:47.30ID:mkFIMg3t
>>793

>>761 では「推移的かつ反射的であるのみの順序関係が『弱順序』」とはいっていませんよ、よく読んでくださいね
>>761 で言っているのは「一番弱い順序、推移的かつ反射的であるのみの順序関係は、実は任意の二項間においてかならずしも順序関係の真偽が定まらなくてもいい」としかいっていませんですよね‥‥
曲解もはなはだしいと思いますね

ちなみに私の教科書ではこれを「擬順序」と定義しています、大熊正氏の本ですが、私には一生かかっても私には読めないでしょうから、あとはググってください

795デフォルトの名無しさん2021/02/20(土) 21:44:52.70ID:K0wy5MAI
std::vector v(sizeof(int));
int a = 5;
memcpy(&(v[0]), &a, sizeof(a)); // おk

796デフォルトの名無しさん2021/02/20(土) 21:47:14.25ID:K0wy5MAI
つかこうかorz
std::vector<int> v((size_t)1);
const int a = 5;
memcpy_s(&(v[0]), sizeof(v[0]) * v.size(), &a, sizeof(a));

797蟻人間 ◆T6xkBnTXz7B0 2021/02/20(土) 21:58:40.54ID:HfYkFRCd
この場合は素直にループを書くか、それとも格好良くstd::copy使うのが楽かな。

798デフォルトの名無しさん2021/02/21(日) 01:26:13.27ID:G4m9GHw4
for文回したら死ぬ病気にでもかかってんのか?

799デフォルトの名無しさん2021/02/21(日) 01:29:00.28ID:oO8KGr2m
条件を満たすならmemcpyのほうが圧倒的に早いからな

800はちみつ餃子 ◆8X2XSCHEME 2021/02/21(日) 01:32:42.66ID:jd0qgVVy
それほど速くならない・速くなくていい場合のほうが圧倒的に多いってのもあるけどな。

801デフォルトの名無しさん2021/02/21(日) 03:13:29.79ID:ZrTKdY4P
そもそもそんなクソみたいなコードはふつう書かない

8027702021/02/21(日) 03:54:49.57ID:HYHVDYIS
>>780
IFooっていう名前からしてインターフェースってJava/C#的な意味でのそれだと思ってたけど
それならポインタなり参照なりじゃないと機能してないよっていうかコンパイルエラーでしょってツッコミ

803デフォルトの名無しさん2021/02/21(日) 03:58:42.63ID:0HHdBuLy
メモリコピーを最適化する前に、他にすべきこと沢山あるだろ的な答えになるよな、確かに。
PG界の真理情報だわ。

804デフォルトの名無しさん2021/02/21(日) 05:11:43.88ID:L28MHLBD
valarrayでxorとか

805デフォルトの名無しさん2021/02/21(日) 07:43:27.01ID:F92hI73d
>>802
オブジェクトAがconstメンバとして保持しているブツの所有権を移してオブジェクトBを構築することは
ムーブコンストラクタでないと_なのでムーブコンストラクタである必要があり
この要請はオブジェクト全体が直接アクセスかポインタや参照経由の間接アクセスかとは独立愚連隊、

>>803
真に高速化を求められる内側のループでstd::vector<int> xとかしないから
>>796はひとつながりの省略のないコードとして読んだら判断を誤りうる

806デフォルトの名無しさん2021/02/21(日) 07:51:19.71ID:F92hI73d
じゃなかったorz
 Foo::Foo(const Foo& src) { (srcを変更して新しいインスタンスを初期化) }
はconst_cast<Foo>的な危険手段でないとやれないが
 Foo::Foo(Foo& src) { (srcを変更して新しいインスタンスを初期化) }
とするとなんかコンパイラが警告を出すから
 Foo::Foo(Foo&& src) { (srcを変更して新しいインスタンスを初期化) }
にせざるおえないという、

807デフォルトの名無しさん2021/02/21(日) 13:21:42.30ID:Dqlg3tSu
関数と関数オブジェクトってどう使い分けるの?

808デフォルトの名無しさん2021/02/21(日) 13:30:17.46ID:YxY+Ievf
こういう馬鹿にはちゃんとベンチマークとれって言ってやるのが正しい行い。

809デフォルトの名無しさん2021/02/21(日) 14:32:16.15ID:HYHVDYIS
>>805
そんなこと聞いてるんじゃなくて
提示されたコード片じゃどう考えても動かないから何したいか分からんのよ

https://wandbox.org/permalink/ancQey3IkQKyWsu1

こっから始めてどこをどうしたいか教えてくれ

810デフォルトの名無しさん2021/02/21(日) 14:47:26.80ID:9WgNecVw
404 Not Found

811デフォルトの名無しさん2021/02/21(日) 15:33:36.83ID:HYHVDYIS

812デフォルトの名無しさん2021/02/21(日) 16:21:41.69ID:u2qGdVDT
過疎ってるし、初心者どころかJavaの質問でもOKでは?

813◆QZaw55cn4c 2021/02/21(日) 19:01:13.83ID:3Ebck9FU
>>807
この質問に対して回答をつける用意がありますが、しばしお待ちを

814◆QZaw55cn4c 2021/02/21(日) 19:27:36.57ID:3Ebck9FU
>>807,813
昔のコードを今読んでみたんですが、実のところ関数オブジェクトにする必要性があったかどうか、今の価値観のもとでは首をかしげています
数値計算のプログラムって、無自覚にバンバン書いてると例えばルンゲ食ったをやっているとこと他とかが混ざり合って収拾がつかなくなる、と思って関数オブジェクトにアイソレートした記憶があって、それを思い出して読んでみたんですけれども、今読んでみても、なんだか、ねえ‥‥
http://2chb.net/r/tech/1434079972/72

815デフォルトの名無しさん2021/02/21(日) 20:07:12.76ID:F92hI73d
>>809
Fooはこんなやつ、
https://ideone.com/mPPH8I

IFooは、C++ではよく考えたらIFooのオブジェクトを直接生成できないので(>>802の仰せの通り
std::shared_ptr<IFoo>とかで生成することを考えたのだがエラーになるorz
(上のリンク先のコードでコメントアウトしてあるgenerate_IFoo()
思いのほか闇が深かった\(^o^)/

std::shared_ptr<IFoo>が生成できた暁には、
std::shared_ptr<IFoo> pがリソースの所有権を握ったFooを保持しているとき、
std::shared_ptr<IFoo> qというのがいるとして、
 *q = *p
で所有権を*pから*qに渡したり、
 return *p
で呼び出し元が所有権を有するFooを受け取れるようにしたいワケ

816デフォルトの名無しさん2021/02/21(日) 20:09:12.28ID:F92hI73d
ちなみにWandboxでソースコードをフォークする方法は
初心者なので
わかり
ません

817デフォルトの名無しさん2021/02/21(日) 20:14:47.49ID:LxNhpnKU
generate_Foo()がコケてるのはnewのところでFooのコピコンがないだけだろ
コピコン書くか、ムーコン使いたいならnew Foo(std::move(foo3))にすればいいだけ

後半も意味不明
*q = *pってそれスライシングだぞ

818デフォルトの名無しさん2021/02/21(日) 20:23:47.49ID:F92hI73d
>>817
普通の(ムーブでない)コピコンは書けないなぜなら>>806の理由により

>*q = *pってそれスライシングだぞ
どゆこと?
Foo foo1とFoo foo2だと
foo1 = foo2
とできるのに、

819デフォルトの名無しさん2021/02/21(日) 20:26:48.03ID:F92hI73d
ちょっと補足すると、IFooには現状代入手段が無いから、
*q = *pはそもそもコンパイルが通ることはなく、目的とする機能を形而上的に表す仮想コード
のつもり

820デフォルトの名無しさん2021/02/21(日) 21:03:58.63ID:+My/Unlg
>>814
処理を意味でまとめるようなことなら積極的にやるべきだと思いますが、それは関数オブジェクトじゃなくて関数でもできますよね?

821デフォルトの名無しさん2021/02/21(日) 21:05:03.53ID:HYHVDYIS
>>815
コピー代入演算子とムーブコンストラクタだけ定義するとか意味分からんし
インターフェースによる隠蔽より先にそっち解決しなさい
何がしたいのか自分で本当にわかってる?

822◆QZaw55cn4c 2021/02/21(日) 21:07:32.53ID:3Ebck9FU
>>820
まあ、そのとおりであり、そうなんですよね…
>>814 は関数オブジェクトである必然性はありません、関数オブジェクトを積極的に使う例としては STL にご登場願うしかないのかもしれませんね

823デフォルトの名無しさん2021/02/21(日) 22:29:56.45ID:LxNhpnKU
>>818
shared_ptrは関係ないから普通のポインタで話するぞ(同じ事だ)
IFoo* p = new Foo();
IFoo* q = new Foo();
というのがあったとして*q = *p;ってのは何だと思う?
pとqはIFoo*型だ
だからもちろん*pと*qというのはIFoo型だ
すなわち*q = *p;というのはIFoo::operator=(const Foo&)の呼び出しだ
operator=()はvirtualにできないから、pとqが本当はFoo型オブジェクトを指してることなんか知りもしないし考慮もしない
よってIFoo部分の代入だけが行われて、要はqのIFoo部分だけが首チョンパされてpのIFoo部分が代入される
これをスライシングという

824はちみつ餃子 ◆8X2XSCHEME 2021/02/21(日) 23:00:12.09ID:jd0qgVVy
>>822
関数オブジェクトに「関数」とついているのは関数と同じ記法で呼び出せるということに意味があって、インターフェイスの問題。
状態を持った関数 (関数オブジェクト) も状態を持たない関数 (関数ポインタ) も統一的に扱えたらうれしいねって話なので、
状態を持たず、高階関数に渡すこともない場合は関数オブジェクトにする意味はないな。
(普通の関数も static 変数への参照を持ってたりする場合もあるので必ずしも状態を持たないわけではないけど。)

825◆QZaw55cn4c 2021/02/21(日) 23:42:46.53ID:3Ebck9FU
>>824,820,(>>813,814,822)
結局、どーでもいい一発芸で、ああ動くね‥‥、と思ったまま放置してましたね<関数オブジェクト
http://2chb.net/r/tech/1434079972/21
https://ideone.com/9KIuSD
あとはラムダ式の理解のための存在という認識、か

826はちみつ餃子 ◆8X2XSCHEME 2021/02/22(月) 00:10:55.10ID:oiAqsUn6
「ラムダ式が関数オブジェクト (型の定義と生成) の構文糖」というのは
既存のプログラムとの整合性を壊さない上手いアイデアだと思うけど、
しばらくしたら「関数オブジェクトはラムダ式の実体」という説明のほうが
通りがよくなったりするかもしれないね。

827デフォルトの名無しさん2021/02/22(月) 04:39:33.19ID:7qATnC1I
関数オブジェクトで状態を渡せるのは結構なんだが、コピーコンストラクタ渡しなので、
手の込んだ状態管理だった場合は結局、C言語と同じくユーザー定義変数を介して状態を読み書きすることになる。

828デフォルトの名無しさん2021/02/22(月) 08:23:10.03ID:Dz0hZ3aS
>>827
shared_ptr使えば、大抵の場合は問題ないんじゃない?

829デフォルトの名無しさん2021/02/22(月) 09:54:32.23ID:Y0MZ31oO
>>807,820ですけどQZで始まる人あまりにもレベル低いというか回答者として不適格だと思うのでNGします

830デフォルトの名無しさん2021/02/22(月) 10:22:59.45ID:1euWwsnd
>>829
答えてもらってる立場で偉そうに。常識ないの?

831デフォルトの名無しさん2021/02/22(月) 11:11:29.17ID:M+ptXBNl
いやでも実際・・・QZはね・・・
50過ぎのおっさんが無理して絡みにいってるけど空回りしてる感じなんだよね
ほんと残念だけども

832デフォルトの名無しさん2021/02/22(月) 11:36:36.23ID:7qATnC1I
関数オブジェクトに対するラムダ式の優位性は、ローカル変数を比較的安全かつ手軽に参照渡しできることだろう。

833デフォルトの名無しさん2021/02/22(月) 12:08:03.12ID:5Ezd+ZoO
あわしろ氏がQzはアカン言うてたけど、ターゲット変えたのかな?

急にその手の書き込みが増えてあからさますぎる。

834デフォルトの名無しさん2021/02/22(月) 16:15:54.50ID:rpJl6SNk
>>831
QZの回答は糞だとして、回答者に対して>>829みたいな態度をとることがどう正当化されるわけ?

835デフォルトの名無しさん2021/02/22(月) 17:04:18.35ID:M+ptXBNl
回答者には無条件で感謝しないといかんのか?
気持ち悪いな

836デフォルトの名無しさん2021/02/22(月) 17:39:33.90ID:rpJl6SNk
>>835
感謝しろなんて言ってないぞアホ

837デフォルトの名無しさん2021/02/22(月) 19:14:24.66ID:SaDkzfTf
>>835
回答を得るのに適切な行動を取りゃいいよ。
変にヘイトを吐くとつっかかる奴がいるから回答から遠くなる。
>>829は感情を制御する訓練をしないとな。

838デフォルトの名無しさん2021/02/22(月) 19:28:11.36ID:M+ptXBNl
たしかに
勝手にNGしとけば十分で煽るように宣言するは意味はまったくないね
擁護した俺が悪かったごめん

839◆QZaw55cn4c 2021/02/22(月) 19:57:55.16ID:R3R68rti
>>831
認めましょう

>>838
私の意見に一番近いですね
私は、馬鹿な私の意見を見たくない人も多いと想定しており、馬鹿な私が発言するときは馬鹿の印としてトリップをつけるようにしています、それだけは確約しますので、後は好きなように NG に入れていただいて結構ですよ
私はそういう人に干渉するつもりはありません

840デフォルトの名無しさん2021/02/22(月) 20:02:59.96ID:5Ezd+ZoO
そういう書き込みを見ると、あわしろ氏よりQzのほうが大人に見えるなあ。
まあでも、あわしろ氏には技術評論社がついてるからね。
謝っといたほうが良いんじゃないの?

841デフォルトの名無しさん2021/02/22(月) 20:52:21.84ID:jfkpe4Eh
>>834
俺も以前質問したら、明らかに見当違いなマウント取りたいだけの回答が来て、言い返した時
君みたいな事言われたよ
回答くれるのは有難いが・・・ねぇ。
まぁそういうのはスルーしろ、ってんならまだわかるけど

ちなまともな回答くれた人には礼言ってるからね

842デフォルトの名無しさん2021/02/22(月) 21:08:29.88ID:51epSMYu
知らんがな。キミの意見だけ聞いてその時どっちに問題があったかどうやって判断すればいいんだよ

843デフォルトの名無しさん2021/02/22(月) 21:18:11.70ID:jfkpe4Eh
そういう話じゃねーよ

844デフォルトの名無しさん2021/02/23(火) 00:38:10.30ID:6MWC7t1x
あるクラスのメソッドを他所で借りたいというか使いたいときって移譲(インスタンス化)するかコピペするしかないの?

845デフォルトの名無しさん2021/02/23(火) 00:41:49.01ID:Z5ZYenTn
>>844
メソッドをクラスから分離してテンプレート関数にすれば、クラスの継承関係がなくても使えるので便利。

846デフォルトの名無しさん2021/02/23(火) 01:01:30.38ID:48JMuLBY
>>844
メンバアクセスしていないならstatic関数にしてクラス名::メソッド名()で呼べる
ただメンバアクセスしていない時点でその関数は本当にそのクラスに属すべきなのか再考したほうがいいけど

あと継承する手もあるけど「借りたいから」程度の理由で場当たり的にやると確実に泥沼化する

847デフォルトの名無しさん2021/02/23(火) 04:11:59.35ID:kBU50DXM
>>846
> ただメンバアクセスしていない時点でその関数は本当にそのクラスに属すべきなのか再考したほうがいいけど
極論、引数をとって返り値を返す関数だけで全てのことが実現できますよね?
そう思ったらクラスのメソッドにするよりも何でもクラス外の関数にする方がお得というか楽な気がしてしまいます

848デフォルトの名無しさん2021/02/23(火) 07:21:43.52ID:7kgSemXY
そのとおりで極力フリー関数にするべき
(非静的)メンバ関数というのはデータメンバーの一貫性を保つためだけに使うもんだよ

849デフォルトの名無しさん2021/02/23(火) 07:27:00.90ID:ex5XjLGm
>>847
"メンバアクセスしてない"てのが重要だと思うよ
実際、非staticではなくstaticなメンバ関数にしたい場面てあんまり無い(外の関数と大して変わらんから)

>>848みたいなのはオブジェクト指向も理解出来てないド素人が玄人ぶってよく言うんだよなぁ・・一応釘だけ刺しとく

850デフォルトの名無しさん2021/02/23(火) 08:19:26.69ID:kBU50DXM
なんかOOPの行き着く先みたいな話してるな

俺も関数が引数と返り値としてメッセージを渡し合って協働していく方が洗練されてると思う
必然、その方が副作用も少ない

851デフォルトの名無しさん2021/02/23(火) 08:29:56.96ID:Z5ZYenTn
staticなメンバ関数には、名前衝突しにくい、msvcのインテリセンスのような入力支援を得やすい、という恩恵はある。

852デフォルトの名無しさん2021/02/23(火) 08:30:00.72ID:u3MMsI1X
メッセージ・・?
何の言語の話してんだ

853デフォルトの名無しさん2021/02/23(火) 09:47:50.72ID:DwnxTU4/
オブジェクト指向の概念の話をするときにメッセージって言葉使いませんか?
C++ならメッセージ=メンバ関数
Javaならメッセージ=メソッド
言語によって呼び方が違うから概念的な話のときはメッセージといったほうが通りがよい

854デフォルトの名無しさん2021/02/23(火) 10:07:32.09ID:B3ih21Pc
>>849
「オブジェクト指向も理解出来てないド素人が玄人ぶってよく言う」
の意味がさっぱりわからん
>>848の表現に一切ケチつけられる要素ないと思うけど

855デフォルトの名無しさん2021/02/23(火) 10:15:54.38ID:gTQJYaBt
> データメンバーの一貫性を保つためだけに使う

いったい何が言いたいんだろう
他人に分かり易く言えないのは自分が解ってないからというケースがある

856デフォルトの名無しさん2021/02/23(火) 10:18:06.26ID:B3ih21Pc
> データメンバーの一貫性を保つためだけに使う

この表現で普通に分かるけど
分からん人もいるのね了解

857デフォルトの名無しさん2021/02/23(火) 10:20:33.46ID:NIjAanwq
メッセージが何のことかわからないのはワロス

858デフォルトの名無しさん2021/02/23(火) 10:21:51.05ID:gTQJYaBt
>>856
でか口は具体的に説明できてからぬかせ
このハッタリ野郎

859デフォルトの名無しさん2021/02/23(火) 10:22:34.65ID:7kgSemXY
データメンバに対して想定した扱い方だけをさせるようにして予期しない状態の発生を防ぐため、って言えばお気に召したかしら
普通はそれを短く「一貫性を保つ」って言うのだけど

860デフォルトの名無しさん2021/02/23(火) 10:31:05.01ID:u3MMsI1X
>>853
使わない、というか使うな誤解を招くから
SmalltalkとかObjective-Cならわかるけど
C++やJavaのそれはメッセージングではないと考えるのが普通(そう見做せないわけではないが

861デフォルトの名無しさん2021/02/23(火) 10:33:09.34ID:B3ih21Pc
>>858

862デフォルトの名無しさん2021/02/23(火) 10:34:51.99ID:gTQJYaBt
>>859
1行目は納得
2行目の主観論には付き合ってらんね

863デフォルトの名無しさん2021/02/23(火) 10:37:31.33ID:B3ih21Pc
>>860さんに同意で
C++やJava界隈だと明確に避けてると見てる
メッセージってのは

864デフォルトの名無しさん2021/02/23(火) 10:49:29.89ID:7kgSemXY
ごめんねおじいちゃん知らない表現を使われただけでそんなに拗ねるなんて思わなかったんだ

865デフォルトの名無しさん2021/02/23(火) 11:07:54.70ID:u3MMsI1X
いや、悪いけど>>859を以って
>データメンバーの一貫性を保つためだけに使うもんだよ
などと言い切れるのは経験不足と見られても仕方ないと思うよ学生ちゃん

866デフォルトの名無しさん2021/02/23(火) 11:13:43.78ID:j4L8+y6t
おじいちゃんとか学生ちゃんとか、おまえらマウンティングしながらじゃないと会話できないのかw

867デフォルトの名無しさん2021/02/23(火) 11:54:07.11ID:oVEFpcof
このスレは特にそういうの多いよね

868デフォルトの名無しさん2021/02/23(火) 12:46:58.74ID:HLi0yp23
昔からこのスレは特に酷いよね
なぜマウントの必要があるのかは少しだけ興味深いけど

869デフォルトの名無しさん2021/02/23(火) 13:21:23.20ID:+0nZ2NLW
Linuxを使う以上、C++を嫌わないとダメだろ。

870デフォルトの名無しさん2021/02/23(火) 13:45:38.11ID:iu17pC6m
>>857,864
いや、メッセージはわかってるけどなんでC++スレで?
って話だろ
>>860の言うようにC++界隈ではあまり使わんし
単にイキってるだけにしか見えんw

871デフォルトの名無しさん2021/02/23(火) 13:46:51.42ID:iu17pC6m
>>865
どういう理由で経験不足と判断したか言ってみ

872デフォルトの名無しさん2021/02/23(火) 13:47:30.93ID:alqL+AST
オブジェクト指向に関しては、今の人は、昔はメモリが高価だったとでも思っておけば良いよ。

873デフォルトの名無しさん2021/02/23(火) 13:53:26.39ID:UMWafFvJ
>>823
レスdクス大儀であった
自己解決しますた、
https://ideone.com/k76kj5

874デフォルトの名無しさん2021/02/23(火) 13:59:21.85ID:UMWafFvJ
一貫性というのはオブジェクト内部の整合性のこ
とを言いたい
のでは…
※ 個人の感想です

875デフォルトの名無しさん2021/02/23(火) 14:03:58.66ID:UMWafFvJ
C++のメソッドの呼び出しをメッセージと言い出すとウィンドウメッセージと紛らわしい(小並感
ていうかC++においてメッセージと言えるのはメソッドの「呼び出し」であってメソッドそのものではない
(例えば)メッセージ自体は継承メカニズムとは独立の概念なのだから
※ 個人の感想です

876デフォルトの名無しさん2021/02/23(火) 14:10:51.07ID:HLi0yp23
Smalltalkはほぼ知らんけど
メッセージ式ってのは
セレクタ+引数のことだったはず
いやこれどうでもいいか

877デフォルトの名無しさん2021/02/23(火) 14:18:47.72ID:UMWafFvJ
ていうか今にして思えばstd::shared_ptr<IFoo>がIFooのインスタンスに対する所有権を適切に移譲したり管理するので
std::shared_ptr<T>に持たせることにした時点でIFoo自体がリソースに対する所有権を管理する必要はなさげorz

878デフォルトの名無しさん2021/02/23(火) 14:29:34.84ID:+0nZ2NLW
smalltalkなんて誰も使わないのだから、アジソンウェスレイのオブジェクト指向プログラミング入門にそう書かれていたからという理解で良いのでは?

若者もいるので説明しておくと、書店で書籍を買う時代があって、書店に並ばなければ書籍の存在自体わからなかったのですよ。
この本は何処の書店にも並んでいたので、スレの高齢者全員が読んでいます。
この本しかなかったんですよ。
良い本だとは思いませんが、30年たった今でも古書に値が付くはずです。

全員が読んでるので、全員が知っているかのように錯覚する人もいるって事です。

879デフォルトの名無しさん2021/02/23(火) 16:09:16.56ID:CS53pw6I
C++のオブジェクト指向でメッセージングのワード出してくるのは
継承を説明するサンプルコードで動物の階層もちだしてくるのと同じ功罪がある
理解のとっかかりにはいいが、リアルな実装の段階ではそういうポエムみたいな話は忘れたほうがいい

880デフォルトの名無しさん2021/02/23(火) 16:11:25.59ID:feF5fzNV
メッセージ(笑)とか頭おかしい奴が言いそう

881デフォルトの名無しさん2021/02/23(火) 16:16:12.25ID:+0nZ2NLW
>>879
功もあると御自分で書かれているのでは?

882デフォルトの名無しさん2021/02/23(火) 19:10:57.35ID:48JMuLBY
>>873
これで本当にいいのか?
コピー代入演算子でムーブさせるのが本当にあなたのやりたかったこと?
std::auto_ptrはこの問題があったからdeprecatedになったんだけど

883◆QZaw55cn4c 2021/02/23(火) 21:53:45.68ID:tPF8d5Rx
>>878
>書店で書籍を買う時代があって、書店に並ばなければ書籍の存在自体わからなかったのですよ。

私の若い頃を思い出します。
当時、神戸の一番大きな本屋さんでは、どうしたわけだかコンピューター関連書籍の部分だけは黒山の人だかりで、いつも二十人くらいがみんな立ち読みしまくっていて、そういう人ごみを押しのけて本を探さなければならなかったくらいでした
最近右翼になった数学者・藤原正彦氏によれば、もっと古い時代には町の小さな本屋さんであっても普通にそんな状態だった、ときいています、とても信じられませんが‥‥

そういうわけで、アマゾン・ウェルカム!

884◆QZaw55cn4c 2021/02/23(火) 21:57:00.55ID:tPF8d5Rx
>>875
私は例のペゾルド教本を何とか C++ に適応させたくて、ペゾルド本の WM 処理・巨大 switch 文を C++ に適合させようと未だに四苦八苦していますが、やっぱり MFC に移っちゃったほうが楽チンなんでしょうか?

885デフォルトの名無しさん2021/02/23(火) 22:05:53.75ID:u3MMsI1X
>>871
あまりに一面的な見方やろ
>>848はカプセル化も多態も、上で話してた関数オブジェクトさえ否定する暴論
よほど拒否反応があるんだろうなー、と

886デフォルトの名無しさん2021/02/23(火) 22:07:42.70ID:HLi0yp23
否定したように見えちゃってるんだな
いろんな人がおるな

887デフォルトの名無しさん2021/02/23(火) 22:15:00.14ID:iu17pC6m
>>885
まあ
> (非静的)メンバ関数というのはデータメンバーの一貫性を保つため「だけ」に使うもんだよ
の「だけ」に引っかかってると思うんだけどそっちの方がどちらかと言うと暴論に見えるよ

888デフォルトの名無しさん2021/02/23(火) 22:20:52.65ID:u3MMsI1X
まぁ関数オブジェクトはある意味当てはまってるかもしれんと思うが
>>887
そっちも根拠書いてね

889デフォルトの名無しさん2021/02/23(火) 22:28:42.45ID:iu17pC6m
>>888
>>886が言うように「否定」はしてないと思うよ
ってことね

890デフォルトの名無しさん2021/02/23(火) 22:44:54.86ID:H7IAWcv9
[selector message]

Objective-Cが良かったな。

891デフォルトの名無しさん2021/02/24(水) 06:48:21.60ID:Vo6CI9FQ
>>884
やってみるとわかるけど、MFCと同じものを自分で作ってる感じになるね
ARM C++時代に作るとああなるんだけど、
今どきのC++20で作るとどうなるのかは興味深い

892はちみつ餃子 ◆8X2XSCHEME 2021/02/24(水) 15:54:28.46ID:EZ8EgbLC
現代的な Windows のフレームワークとしては C++/WinRT に力が入ってるみたいなんで、
今からはこれを使った方がよさげ

893デフォルトの名無しさん2021/02/24(水) 17:47:00.67ID:T43vsud+
P/Invokeともこれでおさらば、
と言いたいところだがネイティブC++をwrapするC++/WinRT自体はCLR上の言語なんじゃなかったっけ…
違ったっけ…

894デフォルトの名無しさん2021/02/24(水) 20:59:30.49ID:T43vsud+
C++/CXと混同すた、orz

895デフォルトの名無しさん2021/02/25(木) 00:40:25.02ID:hxonNlh3
C++/CLIだよ(小声

896デフォルトの名無しさん2021/02/25(木) 12:27:48.18ID:Kp+Bp4Dl
int (int)型のコールバック関数ポインタにて、一応呼ばれるのでnullはマズイけど不要なので空にしたいという場合に
int () { return 0; }という引数が一致しない空関数へのポインタを渡すとまずい事になるんでしょうか?
低レベルの知識がないのでよく分からないんですが、スタックの巻き戻しとかでズレが生じるとかありそうな気がしています

897はちみつ餃子 ◆8X2XSCHEME 2021/02/25(木) 14:45:58.57ID:ziL/azOs
>>896
使われている ABI による。
x64 環境なら Unix (系の多くの OS) でも Windows でも引数は整数4個分までは
レジスタで渡されるんで、スタックの整合性は壊れないはず。

898デフォルトの名無しさん2021/02/25(木) 15:12:23.79ID:bxBNuN1v
>>896
スタックは呼ぶ側で処理するからズレないよ
でないと可変長引数とか実現できないし

>>897
そんなもんは処理系やオプション次第

899デフォルトの名無しさん2021/02/25(木) 15:36:41.54ID:SLTnVXDN
静的解析ツールやコード分析で警告が出るだろうから直したほうがいいと思うけどね

900はちみつ餃子 ◆8X2XSCHEME 2021/02/25(木) 15:44:39.43ID:ziL/azOs
x64 の一般的な ABI ではもう様々な呼出し規約を使い分けないようになってる。
(cdecl と stdcall が混在していた Windows が例外的で
他は 32bit 時代からかなり統一されていたみたいだけど。)

まあそれはともかくとして、
実際には不要でも適当な値が渡るようにして型を併せるほうが良いとは思う。
不整合を残しておくと強い最適化をかけたときにわけのわからないことになりがち。

901デフォルトの名無しさん2021/02/25(木) 16:08:57.78ID:0Aa2beUH
はちみつは見所がある弟子にしてやっても良いと、あわしろ氏が褒めてた。


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

TOPへ TOPへ  

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


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

 ↓「C++相談室 part154 YouTube動画>1本 ->画像>1枚 」を見た人も見ています:
C++相談室 part126
C++相談室 part151
C++相談室 part137
C++相談室 part138
C++相談室 part148
C++相談室 part152
C++相談室 part149
C++相談室 part142
C++相談室 part135
C++相談室 part132
C++相談室 part153
C++相談室 part150
C++相談室 part145
C++相談室 part143
C++相談室 part141
C++相談室 part137
C++相談室 part117
C++相談室 part139
C++相談室 part140
C++相談室 part144
C++相談室 part133
C++相談室 part146
C++相談室 part147
C++相談室 part134
C++Builder相談室 Part21
0からの、超初心者C++相談室
C++相談室 part131 [無断転載禁止]
C++相談室 part130 [無断転載禁止]
C++相談室 part124 [無断転載禁止]
Cygwin + MinGW + GCC 相談室 Part 8
Cygwin + MinGW + GCC 相談室 Part 3
C++相談室 part123 [無断転載禁止]©2ch.net
C♯相談室 Part20
Mac G5 中古買入相談室
C言語相談室(上級者専用)
MFC相談室 mfc22d.dll
自営業 悩みごと相談室 40
C#, C♯, C#相談室 Part79
C#, C♯, C#相談室 Part75
C#, C♯, C#相談室 Part93
自営業 悩みごと相談室 47
自営業 悩みごと相談室 48
自営業 悩みごと相談室 43_
ライダーマンのお悩み相談室
C#, C♯, C#相談室 Part94
0からの、超初心者C#相談室
C#, C♯, C#相談室 Part94
C#, C♯, C#相談室 Part95
自営業 悩みごと相談室 49
C#, C♯, C#相談室 Part95
自営業 悩みごと相談室 51
自営業 悩みごと相談室 50
[特設]サマータイム対応相談室
ライダーマンのお悩み相談室
【男飯】Rickの相談室【言霊】
[特設]サマータイム対応相談室
★★★ゲイの生活相談室3★★★
マイコンソフト 悩み事相談室 4
【太気拳】なんでも相談室 part5【意拳】
MFC相談室 mfc23d.dll [無断転載禁止]
【太気拳】なんでも相談室 part3【意拳】
【NTT】ドコモ お客様相談室【docomo】
自営業 悩みごと相談室 45 [無断転載禁止]
【スキー】中級者以上・アイテム相談室【板靴何でも】
06:22:56 up 8 days, 16:47, 0 users, load average: 6.31, 7.78, 8.02

in 0.035535097122192 sec @0.035535097122192@0b7 on 122020