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

C++相談室 part144 ->画像>1枚


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

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

1デフォルトの名無しさん
2019/07/22(月) 13:18:35.52ID:gptRHpgT
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

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

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

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

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

----- テンプレ ここまで -----
2デフォルトの名無しさん
2019/07/22(月) 15:58:46.65ID:sp7+c3NQ
STLつかうと一気に実行ファイルサイズが10倍に?!

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

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

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

#include <stdafx.h>
後死ね。

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

---- テンプレ ここまで ----
3デフォルトの名無しさん
2019/07/22(月) 17:03:26.86ID:YPZZyU9O
すっぱい葡萄
https://ja.wikipedia.org/wiki/%E3%81%99%E3%81%A3%E3%81%B1%E3%81%84%E8%91%A1%E8%90%84
 自分のものにしたくてたまらないにもかかわらず、努力しても到底かなわない対象である場合、
 人はその対象を「価値の無いもの」「自分にふさわしくないもの」と見なそうとし、
 それをあきらめの理由として納得し、心の平安を得ようとするものである。
 フロイトの心理学では、これを防衛機制および合理化の例とする。また、社会心理学においては、認知的不協和の例とされる。
 英語には、この寓話を元に生まれた熟語として "sour grapes" があるが、これは「負け惜しみ」を意味する。
4デフォルトの名無しさん
2019/07/22(月) 18:10:49.34ID:8zlk2sqy
>>2
void君諦め悪いよ
5デフォルトの名無しさん
2019/07/23(火) 15:37:41.03ID:zEKbbod3
江添がCADDIの常勤になった
6デフォルトの名無しさん
2019/07/23(火) 16:24:43.67ID:Rjd8/nXp
ループの中で剰余演算子が沢山出てくるとまぁよく知られてるように遅いわけだが、
(x += a) %= m;

x += a;
if(x >= m) x -= m;
としたら高速化された

だったら言語仕様として剰余演算子の定義をこう変えれば良いのに、なぜ遅いままなのですか?
7デフォルトの名無しさん
2019/07/23(火) 16:32:47.77ID:tt/1GdHu
>>6
それじゃ変更前と同じ演算になってないだろ。x>=2mやx<0の可能性を排除しているから速いんじゃね。
8デフォルトの名無しさん
2019/07/23(火) 16:32:54.11ID:+dwx5m0u
お前のプログラムa=999999、m=2の時に壊れてるよ
9デフォルトの名無しさん
2019/07/23(火) 16:54:30.60ID:Rjd8/nXp
>>7-8
確かに
すみませんでした
10デフォルトの名無しさん
2019/07/23(火) 17:33:44.97ID:35PXZxTn
https://cpplover.blogspot.com/2018/07/c17.html
11デフォルトの名無しさん
2019/07/23(火) 18:24:59.51ID:u/gGnwtd
>>10
それ読んでもc++使う理由わからんよな
高速化が必要なコアのアルゴリズムにc++最新機能不要だろ
それより確率モデル使ってGPUで解くとかもっと賢くやれよと思うわ
12デフォルトの名無しさん
2019/07/23(火) 20:42:24.11ID:Ptp4kmtT
単なるファッションだろ。江添もさ。
13デフォルトの名無しさん
2019/07/23(火) 21:35:57.63ID:04X8GIZv
自分が食っていくためには自分に仕事が必要であるため、
C++言語仕様周辺で食ってる人は永遠にコネクリ回したいはず。
14デフォルトの名無しさん
2019/07/23(火) 21:41:03.53ID:Ffr5F2PG
最新規格に合わせた方が生産性高く保守も容易になる

それに、cudaだってc++17相当で書けるだろうに
15デフォルトの名無しさん
2019/07/23(火) 21:46:35.19ID:u/gGnwtd
やってから言え
16デフォルトの名無しさん
2019/07/23(火) 22:06:34.72ID:q6q7AnvM
自明だよね
17デフォルトの名無しさん
2019/07/23(火) 22:06:42.46ID:Ffr5F2PG
普通にc++17は便利に使っているが?

てか使っている実例に対して、無意味断定する根拠が適当過ぎる
それこそコードで示せと

そんなに大きくない会社が金かけてまでやっているのだから、それで利益が出る効果はあるんだろう
18デフォルトの名無しさん
2019/07/23(火) 22:13:30.35ID:u/gGnwtd
>>17
お前が保守してるコードについて詳しくきかせてもらおうか
19デフォルトの名無しさん
2019/07/23(火) 22:20:10.76ID:Ffr5F2PG
コーディング量減るし、constexpr ifでlambdaの記述が捗るだろ?
20デフォルトの名無しさん
2019/07/23(火) 22:23:24.83ID:NxPnU+JE
俺c++03民、autoが使いたいです
21デフォルトの名無しさん
2019/07/23(火) 22:36:46.59ID:u/gGnwtd
>>19
ごまかすなよw
お前が今保守してるコードについて聞いてる
c++のバージョンは?
行数は?
22デフォルトの名無しさん
2019/07/23(火) 22:39:03.45ID:TGpHom7B
速度とC++を使用する意義について問題提起したのかと思いきや生産性の話になってる
23デフォルトの名無しさん
2019/07/23(火) 22:51:25.14ID:LMG0h0kR
constexpr ifって言ってんのにC++のバージョン聞くってどういうこっちゃ
まさかC++20?
24デフォルトの名無しさん
2019/07/23(火) 22:53:38.63ID:Ffr5F2PG
>>21
今のところc++17だな
17で0から書いたわけじゃないが、少なくとも有効にしないと通らん
行数はひとつじゃなくライブラリ沢山だから分からん
昔はlinuxメインでcudaとかも使って数値演算だったがここ数年はwindowsばかり
画像処理系、GUI、数値演算ライブラリその他装置制御とかのライブラリと組み合わせたアプリ作っている感じだな
25デフォルトの名無しさん
2019/07/23(火) 22:58:50.26ID:Ffr5F2PG
画像処理だと要素型のテンプレートで基本操作をそれぞれ特殊化してintrinsicsで書いておいて、それを組み合わせて応用機能を実現している感じ
組み合わせで最適化可能な操作も基本操作に加えているけど
26デフォルトの名無しさん
2019/07/23(火) 22:58:57.04ID:TGpHom7B
>>23
何言ってだお前
27デフォルトの名無しさん
2019/07/23(火) 23:02:07.66ID:N0M0V2oE
constexpr ifはC++17以降じゃないと使えない
28デフォルトの名無しさん
2019/07/23(火) 23:03:45.37ID:Ffr5F2PG
通称constexpr ifなのに書くときは逆という罠
29デフォルトの名無しさん
2019/07/23(火) 23:22:42.08ID:viG1+s3R
>>24
それ保守じゃねーだろ
30デフォルトの名無しさん
2019/07/23(火) 23:25:00.99ID:Ffr5F2PG

開発したアプリやライブラリの機能追加とかバグ対応とかって保守だろ
31デフォルトの名無しさん
2019/07/23(火) 23:38:39.91ID:OTk37+kC
それ保守ってほど時間たってないんじゃね?
しかも他人のコードじゃないならなおさら
32デフォルトの名無しさん
2019/07/23(火) 23:42:48.79ID:Ffr5F2PG
17にしてからは1年も経ってないかも知らんが、14,11の頃から数えれば数年前のソフトいじるとかは普通にある
弄るついでに最新規格でコンパイル通るようにしたり、使ってたライブラリ最新版に置き換えたりしてる
33デフォルトの名無しさん
2019/07/23(火) 23:43:53.31ID:OTk37+kC
>>32
だからそれ保守じゃねーから
変えてんじゃん
34デフォルトの名無しさん
2019/07/23(火) 23:46:09.85ID:OTk37+kC
自分のちっさいライブラリでしょどうせ
他人の膨大なソースコードでそれできんのかと
仕事で保守したことないやつの戯言
35デフォルトの名無しさん
2019/07/23(火) 23:50:18.68ID:+dwx5m0u
機能追加やリファクタも保守だぞ
変えないことが保守だと思ってんの?仕事で保守したことないやつの戯言
36デフォルトの名無しさん
2019/07/23(火) 23:51:10.09ID:Ffr5F2PG
他人のなら、1ソース数10万行のが50ファイルとかあって、中身がコピペ改変のネスト構造になっているとか頭おかしいコードのデバッグとかすることもあるよ。
おんなじバグが100箇所くらいあったりするのw
37デフォルトの名無しさん
2019/07/24(水) 06:44:19.68ID:8xr9hPJ6
cudaに対してc+17使うとか100%死亡パターンだろw
38デフォルトの名無しさん
2019/07/24(水) 07:38:12.78ID:xGXQ+cSs
>>36
そういうやつは触れない
そうじゃないやつはリファクタリング可能
統一して語る必要はない
39デフォルトの名無しさん
2019/07/24(水) 15:35:36.80ID:51dv4//C
修正は保守に入るだろうけど、
機能追加はどうかな。保守ではないような気がするが。

別にどうでもよいけど
40デフォルトの名無しさん
2019/07/24(水) 17:30:07.43ID:2ifmVNIE
新しいOSに対応しろ、ファイル形式に対応しろ、こういうAPI追加しろ、出力形式変えろ、速くしろ、軽くしろ
保守ってそういう要求に対応すること・対応できる体制を維持することだと思ってたんだが、そうじゃない宇宙もあるのかな
41デフォルトの名無しさん
2019/07/24(水) 20:29:11.56ID:TdGR8UUG
ソフトの保守って受けたことねーや
納品したらそれまで
改修や機能追加は別料金
42デフォルトの名無しさん
2019/07/24(水) 21:09:49.20ID:j4f+/jKb
> 改修や機能追加は別料金
オレが決められるなら当然そうするんだが
クソ脳無しの営業どもが
43デフォルトの名無しさん
2019/07/24(水) 21:52:55.40ID:94R5D7K2
元来の意味は現状維持なんだから機能追加するものは保守とは言わんよなぁ
どうしても直さないといけないバグとか、開発環境変わったことによる対応とか、そういうのだけいやいややる感じ
44デフォルトの名無しさん
2019/07/24(水) 22:50:28.58ID:2ifmVNIE
保守(maintenance)ってのはソフトウェアの利用価値を持続させることでしょ
そのために必要なら修正もするし機能追加もする
「保守だから現状維持、改修や追加なんてしないししてはいけない」なんてのは思考停止
45デフォルトの名無しさん
2019/07/24(水) 23:04:23.71ID:u4NdgWgN
パッケージだと正式リリースした後のバージョンアップはすべてメンテナンス
46デフォルトの名無しさん
2019/07/24(水) 23:30:16.15ID:bRKaVM+S
業務で保守契約っていわれたら機能追加はないイメージだな
47デフォルトの名無しさん
2019/07/24(水) 23:31:07.37ID:8xr9hPJ6
思考停止っつーか実際問題そんな仕事ないだろ。
c++バカによくある妄想に付き合う必要はない。
48デフォルトの名無しさん
2019/07/24(水) 23:38:01.87ID:TdGR8UUG
ある人にとっての「保守」は
趣味プログラマによるお仕事ごっこという文脈でのそれなのかな
49デフォルトの名無しさん
2019/07/25(木) 00:16:11.89ID:f/JymLGM
ソースコード変えたらテストせねばならないがC++は単体テストの記法がイマイチ
Google Test一時期使ってたがテスト対象を呼び出すコードを書くまでのタイピング量がけっこう生じる
GoやRustはいいいぞ〜☆
50デフォルトの名無しさん
2019/07/25(木) 02:35:44.89ID:f/JymLGM
ていうかC++の自己責任が伴いすぎる自由に疲れた、
51デフォルトの名無しさん
2019/07/25(木) 02:39:40.09ID:f/JymLGM
苦労して自由を行使した末に得られる見返りのは
たいていはわずかばかりのパフォーマンス向上と
二度と見る気がしない気がする醜いソースコードやし、

保守wwwwwwwwww
52デフォルトの名無しさん
2019/07/25(木) 06:25:29.69ID:GrqrASiv
const std::string & を std::string_viewに置き換えている記事をよく見かけます
後者を使うことに何か意味はありますか?
単に置き換え可能だと言うことを解説したかっただけなのでしょうか
53デフォルトの名無しさん
2019/07/25(木) 06:43:57.53ID:jgZKUqYh
後者は部分文字列を切り出したいときにメモリ確保と文字列のコピーが発生しない
54デフォルトの名無しさん
2019/07/25(木) 09:08:23.71ID:fv/O10Ch
c++は、スマホでは動作しませんか?
VSでコンパしたものでは、ダメですか?
55デフォルトの名無しさん
2019/07/25(木) 09:17:00.66ID:QDSJiMEy
はい
https://docs.microsoft.com/ja-jp/visualstudio/cross-platform/?view=vs-2019
5654
2019/07/25(木) 09:25:28.09ID:fv/O10Ch
>>55
丁寧な解説を、ありがとうございます。
57デフォルトの名無しさん
2019/07/25(木) 12:47:32.28ID:i0AuwjJi
streamで固定長の文字列分解したい
以下イメージ

istreamstring ss(“0123456789”);
string no1;
int no2;
char no3;
ss >> std::setw(4) >> no1;
ss >> std::setw(4) >> no2;
ss >> std::setw(2) >> no3;

結果
no1=0123
no2=4567
no3=89

みたいな感じで
環境はコンパイラc++03、boost使えず
std::string::substr使ったやつはもう作ってます
よろしくお願いします
58デフォルトの名無しさん
2019/07/25(木) 13:05:43.49ID:eYgqWI8M
>>57 「substr()使ったやつ」で何が不満なのか?
59デフォルトの名無しさん
2019/07/25(木) 14:10:42.84ID:HIqmru9O
>>58
項目ごとにstreamかまさないと、型で自動変換してくれないし、抜き取り開始位置指定しなくちゃいけないし、なんか冗長でカッコ悪し
みたいな理由です。
60デフォルトの名無しさん
2019/07/25(木) 15:06:48.36ID:eq0G00ml
ABIの変更ってこれから先何度もあるんでしょうか?
stringとか基本のクラスが変わるのはきついんですが
61デフォルトの名無しさん
2019/07/25(木) 16:49:16.74ID:E2feltVj
そのあたりほんとc++クソだよ
というか標準化委員会がクソ
62デフォルトの名無しさん
2019/07/25(木) 17:01:42.02ID:XeL2zPLs
ABIはしゃーないな
VCとgccが違うの知った時泣いたわ
63デフォルトの名無しさん
2019/07/25(木) 17:11:22.15ID:DsBc3y+y
BeOSっていうOSが昔あって、純粋にC++でゼロから作られたOSなんだけど
コンパイラのバージョンアップだとかでABIが変わって
アプリの使うAPIの互換性が保たれてなかったんだよね
(後継のHAIKU OSも同じ問題抱えてる)
そこらへん標準で決めててくれればいいのにねぇ
64デフォルトの名無しさん
2019/07/25(木) 21:34:32.20ID:E2feltVj
OS作ってんならABIは自分で定義しろよ
65デフォルトの名無しさん
2019/07/25(木) 21:46:01.89ID:PNoIdPh5
それ言い出すとcでいいやんてなる。
66デフォルトの名無しさん
2019/07/25(木) 23:57:42.04ID:n2Si4yAe
C++の委員会って規模やリソース的に多言語と比べてどうなんでしょう?
かなり恵まれているほうえすかね?
67デフォルトの名無しさん
2019/07/26(金) 00:08:47.64ID:v7MbZVD8
C++くらい規格化ちゃんとやってる所って他にある?
68デフォルトの名無しさん
2019/07/26(金) 00:21:17.49ID:wfZPJP/7
Javascript?
69デフォルトの名無しさん
2019/07/26(金) 00:33:24.31ID:eT9T+6Bl
規格合致したコンパイラなんて過去に存在したのかしら
70デフォルトの名無しさん
2019/07/26(金) 00:47:51.48ID:qhxgv2BF
そもそも1つの規格を元に複数のコンパイラが存在するって言語が少ないだろ
71デフォルトの名無しさん
2019/07/26(金) 01:25:43.63ID:6ttC61YN
>>52
例えば文字列リテラルを与えた時にconst std::string &だと暗黙的に一時オブジェクトが構築され、バッファの確保と文字列のコピーが発生する。
std::string_viewを使うと、文字列の先頭アドレスと長さだけが渡されることになるので、効率の良いコードが生成される。
72デフォルトの名無しさん
2019/07/26(金) 03:37:13.13ID:8OK0KeqS
>>69
VSコンパイルで、なんでもOKだろ。
73デフォルトの名無しさん
2019/07/26(金) 06:49:13.69ID:4yTQHcMn
>>55
これは、IDEはVSでも使用するコンパイラ本体は MSC(?)ではなくclang ですか。
74デフォルトの名無しさん
2019/07/26(金) 06:51:05.54ID:/WSqmbNM
>>70
せ、せやな

   FORTRAN, COBOL
75デフォルトの名無しさん
2019/07/26(金) 08:35:39.46ID:TlXJotF6
実用的な言語の話をしているキリッ
76デフォルトの名無しさん
2019/07/26(金) 08:49:06.77ID:PZK88cLJ
ecma334
77デフォルトの名無しさん
2019/07/26(金) 13:37:03.81ID:X7S0ZvoC
Fortran今も使われてるのか
研究室のコードが軒並みFortranでイヤイヤ使わされた記憶がよみがえった
C++だのなんだの色々流行ってるが研究者はそんなものに振り回されるな
Fortranは完成された言語なんだとボスが力説してたわ
78デフォルトの名無しさん
2019/07/26(金) 13:40:16.10ID:X7S0ZvoC
言い忘れたがFORTRAN77ね
90とか使うと怒られた
79デフォルトの名無しさん
2019/07/26(金) 14:33:55.87ID:qhxgv2BF
今はPythonかMATLABが多いかと
80デフォルトの名無しさん
2019/07/26(金) 14:48:21.28ID:pSMqg5vs
Pythonは「CPythonの実装が規格だ」だし
MATLABはそもそもプロプラで言語仕様や変更プロセス自体ブラックボックスだし
あんまり依存するのは危険だと思うんだけどな
アカデミックでは特に
81デフォルトの名無しさん
2019/07/26(金) 16:28:07.22ID:/WSqmbNM
>>77
Fortran 2008の規格書印刷してボスの机の上に置いてやれw
82デフォルトの名無しさん
2019/07/26(金) 16:39:45.36ID:1S1aSnkU
かといってANOVAやMCMCをC++で実装するのは検証も含めて愚かでしょ
83デフォルトの名無しさん
2019/07/26(金) 18:18:30.43ID:4cv+0ZCY
ボイジャーのメンテナにFORTRAN使い募集してたやん
84デフォルトの名無しさん
2019/07/26(金) 22:42:11.25ID:eT9T+6Bl
JAXAの若手プログラマは自殺してなかったっけ?
85デフォルトの名無しさん
2019/07/27(土) 01:32:43.02ID:KwccJBez
>>80
それでもpythonのリスト処理の仕様の方がc++のuniversal initializerなんかよりも
よっぽど仕様として安定してる。それが現実だ。
86デフォルトの名無しさん
2019/07/27(土) 07:33:07.73ID:NQ4+UjHL
>>53
それは存じていたのですが、単にstringの参照を渡したいときにまで(const std ::string &)std::string_viewを使う意味はあるのかなぁ…?というのが疑問でした
上手く伝えられずすみません

>>71
非常に納得しました。そういう意図が有ったのですね
ありがとうございます
87デフォルトの名無しさん
2019/07/27(土) 08:41:09.41ID:m1vSIns3
個人的な話だけどstring_viewはconstexpr対応してる点で有利。
88デフォルトの名無しさん
2019/07/27(土) 09:24:24.73ID:utI+NfFM
パイソン2と3が混在してるのがややこしい。
spirvのビルドスクリプトは2でしか動かない記述なのに勝手に3を探してきて動かそうとするとか混乱が甚だしい
89デフォルトの名無しさん
2019/07/27(土) 11:41:57.01ID:zR8v2AWF
>>88
ちょっと話はそれるけど、外国製の言語処理で最近やたらとネットから勝手に
いろんなものをダウンロードしてくるものが増えて嫌だ。
90デフォルトの名無しさん
2019/07/27(土) 13:02:56.66ID:P/JKsCl6
なんというか世の中全てがオンラインが前提みたいになってて辟易します
91デフォルトの名無しさん
2019/07/27(土) 13:17:47.97ID:zR8v2AWF
>>90
凄い分かる。

>>89
誤:言語処理
正:言語処理系
92デフォルトの名無しさん
2019/07/27(土) 13:57:22.46ID:zfEkdoko
別にオンライン前提でもいいんだけどエラー処理が糞なのが多くて、オフラインだと起動が超遅くなるとかそもそも起動しないとかあるのが
93デフォルトの名無しさん
2019/07/27(土) 17:04:11.07ID:BDHmD2jF
これからはonline merged offlineらしいです
94デフォルトの名無しさん
2019/07/27(土) 17:04:42.40ID:BDHmD2jF
あ、dはいらんか
95デフォルトの名無しさん
2019/07/27(土) 17:25:47.08ID:zR8v2AWF
要らない物を売りつけてくる天才みたいな感じだからな、アメリカは。
96デフォルトの名無しさん
2019/07/27(土) 18:56:25.83ID:KwccJBez
アメリカ関係ないだろ。
エヴァンジェリストとか名乗る馬鹿が要らんものばっか押し付けてるだけで。
97デフォルトの名無しさん
2019/07/27(土) 19:08:52.15ID:zR8v2AWF
VSもASもみんなそうだし。
98デフォルトの名無しさん
2019/07/28(日) 03:30:37.94ID:tecnuiEb
エヴァンジェリストっていう単語はじめてきいたときは
エヴァンゲリオンのファンの事かとオモテタ
99デフォルトの名無しさん
2019/07/28(日) 03:52:29.03ID:5UHV96py
ヒエッ…い、祝福王……!
100デフォルトの名無しさん
2019/07/28(日) 06:12:59.88ID:mOcFR82C
広告宣伝しまくってプロパガンダのゴリ押しで本当に要らないものを買わせる奴らだろ
神からプログラミング言語までなんでもアリだ

ハロウィン文書なんかは異教徒抹殺のための冷静な分析でこれは宗教ヤってる目つきの物言いだ
キリスト教各宗派の合宗国のアメリカはそういうの強いよ
どこかのバカが州とか訳したけどね、真実を悟らせないようにする翻訳テクニックじゃねえの
つまりあいつらのやってることは邪悪だから気をつけろ、ってことだ
101デフォルトの名無しさん
2019/07/28(日) 09:08:49.65ID:cFlW55NM
で、C++の話題はまだかい?
102デフォルトの名無しさん
2019/07/28(日) 09:44:05.47ID:5UHV96py
C++がいかに委員会制を敷いて仕様をがっちり固めているといっても
元になっているC言語がUnix記述のためにデニスリッチーがほぼ一人で考えたドメイン固有言語みたいなものなので
後方互換性というものを重視すればするほど後発言語に対してハンデ戦になってしまうのは仕方が無い
Rustを見たらC++のconstや参照がいかに危険で不用意なブツになってしまっているかがワカル

・こんな人はRustを使うべき(中略

・今すぐRustを使うべき10の理由(ry
103デフォルトの名無しさん
2019/07/28(日) 09:53:00.46ID:5UHV96py
ていうかUnixの記述自体が文書整形をやりたいから(後にroffとして結実)という
システム記述ではなくてアプリ実現要求に端を発しているから、
やっぱ全体を俯瞰するとろくでもない流れの末に生まれたC++は不幸な出自と言えるかもしれん…
104デフォルトの名無しさん
2019/07/28(日) 10:38:12.67ID:p9n7KwZ9
C互換無くなってきてるやん
105デフォルトの名無しさん
2019/07/28(日) 10:57:33.68ID:c9+bQbdr
2の補数以外を捨てたのと、評価順序を規定したあたりでCとは決別したと思ってる
これ生粋のCerは絶対受け入れられないでしょ
106デフォルトの名無しさん
2019/07/28(日) 10:58:21.15ID:/T7nmvYx
>>89
ウチは羹に懲りて膾吹いてるので許可したサイトにしかつながらない
パイパイすらつながらない
107◆QZaw55cn4c
2019/07/28(日) 12:58:43.48ID:GPK25ks7
>>105
kwsk, wktk
108デフォルトの名無しさん
2019/07/28(日) 13:00:05.35ID:2BtEWPhc
古いシステムでは1の補数表現を用いていたものもあったという伝説じゃよ
109デフォルトの名無しさん
2019/07/28(日) 13:18:40.37ID:c9+bQbdr
1の補数や符号ビットだと0のエイリアス(+0と-0)が出来てハッシュの要件満たさなくてめんどくせえし、
もう2の補数ばっかりなんだから2の補数に限定しようぜーってなってC++20から整数型は2の補数限定になる
例によってIBMはキレてる
110デフォルトの名無しさん
2019/07/28(日) 13:25:39.79ID:N2Io9ZPD
あと宇宙船演算子の戻り値型が符号付整数だけstrong_orderingじゃなくなったりとよろしくない
111デフォルトの名無しさん
2019/07/28(日) 14:06:25.65ID:5UHV96py
1BM = 1の補数表現のBinaryを使うMaker
112デフォルトの名無しさん
2019/07/28(日) 23:13:55.96ID:U1WujzOS
今のIBMはC++にどれくらい貢献してるんです?
113デフォルトの名無しさん
2019/07/30(火) 03:50:43.53ID:yEpi9Vih
BOOST_FOREACH と c++11の範囲ベースfor文ってどっちが早いんですか?
114デフォルトの名無しさん
2019/07/30(火) 07:26:38.31ID:FJcM1oBD
同じ
115デフォルトの名無しさん
2019/07/30(火) 07:30:33.15ID:9ymDyD6T
>>113 効率は実測が基本。
116デフォルトの名無しさん
2019/07/30(火) 08:06:04.93ID:4WmgeffG
>>113
速いでなく早いならboostじゃないかな
117デフォルトの名無しさん
2019/07/30(火) 08:36:20.97ID:mDNZ+mDk
ほえー宇宙船演算子なんてできるのか…
勉強になったわ
しかしおふざけネーミングなの珍しいな。総合比較演算子とかならなかったのか
118デフォルトの名無しさん
2019/07/30(火) 09:50:00.73ID:cezd+02w
エルヴィス演算子とか
119デフォルトの名無しさん
2019/07/30(火) 10:41:06.47ID:AXUtE9A1
正式名称は三方比較演算子(three-way comparison operator)
120デフォルトの名無しさん
2019/07/30(火) 12:14:04.15ID:reNIrpCV
エルビス演算子の名前ってまじでプレスリーなんかよw
121デフォルトの名無しさん
2019/07/30(火) 14:58:53.30ID:q4AvHDZp
宇宙船演算子なんてなんかのタイポだろうと思って読み飛ばしていたけどマジな用語だったのか、勉強になったわ…
FORTRANの算術IF文みたいに宇宙船if文とか作ってくれればいいのに
space_ship_if(x)
equal { … }
plus { … }
minus { … }
122デフォルトの名無しさん
2019/07/30(火) 17:37:24.04ID:cezd+02w
ネコ演算子 ^..^

かわいい
123デフォルトの名無しさん
2019/07/30(火) 17:41:57.53ID:hcEFIsmn
xは何と比較してるん?
switch見たいな構文やな。
124デフォルトの名無しさん
2019/07/30(火) 19:15:29.41ID:YQWzaJvj
Opencvで空の画像に点を1000個程度書きたいです
X座標Y座標が既知の場合に最速で点を1000個描画するにはどうしたらいいんですかね?
125デフォルトの名無しさん
2019/07/30(火) 20:14:10.30ID:q4AvHDZp
>>123
> xは何と比較してるん?
0 と比較してるつもり
space_ship_if(x, y)
== { … }
< { … }
> { … }
の方がわかり易いかな
126デフォルトの名無しさん
2019/07/31(水) 14:05:31.56ID:/qk9IG8W
gitに公開されているcpp環境を使おうとしたところ、サンプルコードのcppファイルのコンパイル時に
「undefined reference to 〜」
と出てコンパイルできませんでした。
何が原因かわかりますでしょうか?
操作した手順は以下になります。

#-------------
# 1. インストール
#-------------
git clone http://github.com/HomerReid/libGDSII
cd libGDSII
mkdir m4
sh autogen.sh --prefix=/home/user/install/libGDSII
make install

2. につづく
127デフォルトの名無しさん
2019/07/31(水) 14:08:46.05ID:/qk9IG8W
#-------------
# 2. 下記URLにあるSample codeを元にファイル作成
# ->https://github.com/HomerReid/libGDSII
#-------------
--- xxx.cppファイルで保存 ---
#include "libGDSII.h"
using namespace std;
using namespace libGDSII;
int main(int argc, char *argv[]) {
/********************************************************************/
GDSIIData *gdsIIData = new GDSIIData( string("GSiP_4_RingFilter.gds") );

if (gdsIIData->ErrMsg)
{ printf("error: %s (aborting)\n",gdsIIData->ErrMsg->c_str());
exit(1);
}
/***************************************************************/
gdsIIData->WriteDescription(); // writes to console
gdsIIData->WriteDescription("MyOutputFile");

/***************************************************************/
PolygonList Layer3Polygons = gdsIIData->GetPolygons(3);
printf("Found %lu polygons on layer 3: \n",Layer3Polygons.size());
for(size_t np=0; np<Layer3Polygons.size(); np++)
{ printf("Polygon #%lu has vertices: ",np);
for(unsigned int nv=0; nv<Layer3Polygons[np].size()/2; nv++)
printf(" {%e,%e} ",Layer3Polygons[np][2*nv+0],Layer3Polygons[2*nv+1]);
printf("\n");
}
return 0;
}
3. につづく
128デフォルトの名無しさん
2019/07/31(水) 14:09:39.80ID:/qk9IG8W
#-------------
# 3. コンパイル
#-------------
gcc -I/home/user/install/libGDSII/include -o xxx xxx.cpp
/tmp/ccwjjcp2.o: In function `main':
xxx.cpp:(.text+0x54): undefined reference to `libGDSII::GDSIIData::GDSIIData(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
xxx.cpp:(.text+0xb8): undefined reference to `libGDSII::GDSIIData::WriteDescription(char const*)'
xxx.cpp:(.text+0xc9): undefined reference to `libGDSII::GDSIIData::WriteDescription(char const*)'
xxx.cpp:(.text+0xe4): undefined reference to `libGDSII::GDSIIData::GetPolygons(int)'

↑ここで落ちる
129デフォルトの名無しさん
2019/07/31(水) 14:28:29.92ID:OXiBQODl
まずエラーメッセージ(undefined reference to )でググろう
130デフォルトの名無しさん
2019/07/31(水) 14:47:50.63ID:619hUwfJ
単純にライブラリ参照できてないだけだと思うけどなぜ作者に聞かないのか
131デフォルトの名無しさん
2019/07/31(水) 15:36:14.85ID:GSIi4G30
stdをusingする子は嫌いだよ
132デフォルトの名無しさん
2019/07/31(水) 16:18:44.92ID:/qk9IG8W
ググりましたが難しかったです。
make install時に*.aなどのlibパスを入れるとか、コンパイル時にlibパスを入れるとかありましたがうまくいかず。。
作者がいるので問い合わせればよいですね。
まずは問い合わせてみます。
ありがとうございました。
133デフォルトの名無しさん
2019/07/31(水) 17:43:06.37ID:5OHVc1Pr
ライブラリの中身関係ない質問されるとか作者かわいそう
134デフォルトの名無しさん
2019/07/31(水) 18:10:51.91ID:qr1YW5nx
ggrksファッキューって言われたら戻って来てね
優しいお兄ちゃん達が解決してくれるよ
135デフォルトの名無しさん
2019/07/31(水) 18:38:26.40ID:3lzQcoQt
あれーmake installする前にmakeやるんじゃなかったっけ。ライブラリがそもそも生成されてないんじゃないの

それとライブラリのパス入れるときは-Lか-lだけどもしかして-Iでやってたりしない?
136デフォルトの名無しさん
2019/07/31(水) 18:46:16.25ID:/POyZPT4
肝心のlibGDSIIをリンクしてるか?
137デフォルトの名無しさん
2019/07/31(水) 20:42:21.65ID:P7Lm1qLK
>>131
理由は?
138デフォルトの名無しさん
2019/07/31(水) 20:52:22.57ID:ik5GKAMP
理由なんてきくまでもないだろ
139デフォルトの名無しさん
2019/07/31(水) 22:08:20.49ID:MO/qze1m
>>138
usingを使えば。std:: と打ち込む手間が減って便利になるメリットが
ある。逆にデメリットは何か聞いてみたい?
140デフォルトの名無しさん
2019/07/31(水) 22:09:40.65ID:619hUwfJ
名前空間の汚染
141デフォルトの名無しさん
2019/07/31(水) 22:41:36.16ID:IFyIPjvz
using namespaceのデメリットが分からないのは名前空間を理解していないのでは
142デフォルトの名無しさん
2019/07/31(水) 22:53:59.23ID:P7Lm1qLK
実際問題、std は standard template library の 「standard(標準)」な
訳だから、using 使っても、他の何らかの(ライブラリなど)の名前と
衝突する可能性は低いですよね。汚染と言っても現実に衝突する可能性
は低い。もしstd::が必須なのであれば、Stdという接頭辞を最初から
付けていればよかったはずであって、敢えて std:: という 5文字分を
タイプする必要は無かったはず。

仮に何かと衝突するというなら設計の不味さを感じますね。
143デフォルトの名無しさん
2019/07/31(水) 22:59:46.59ID:IFyIPjvz
ちょっと何言ってるか分からない・・・
144デフォルトの名無しさん
2019/07/31(水) 23:05:09.42ID:jjf+PlTq
>>142
衝突する可能性は低いという前提が抑間違い。
お前さんは広範な標準ライブラリのすべてを熟知してstd名前空間で定義された名前とはぶつからない命名が常にできる自信はあるのかい?
今現在問題なかったとして、後に標準ライブラリが拡張されて、自分でつけた名前にぶつからない保証は?
そんな諸々の厄介ごとを回避するために名前空間はあるのだから、自分しか使わないソースで誰にも迷惑かけないなら好きにすればいいよ。
145デフォルトの名無しさん
2019/07/31(水) 23:06:54.23ID:jjf+PlTq
不要な抑の字が入ったのは無視して。
146デフォルトの名無しさん
2019/07/31(水) 23:18:20.34ID:pv+GZng6
設計の不味さを感じますね(ドヤァ
147デフォルトの名無しさん
2019/07/31(水) 23:26:41.52ID:pv+GZng6
仮に線形代数のベクトルクラスとか作ったらいきなり衝突するんだがな
他にも衝突しそうな名前なんか腐る程ある
何のための名前空間だと思ってんのかと小一時間

どうせ標準ライブラリしか使ったことが無いようなド素人なんだろ
148デフォルトの名無しさん
2019/07/31(水) 23:52:34.02ID:F67noKPW
まぁ必要最低限のものだけimportしましょうっていうだけ
他言語と同じだよ
149デフォルトの名無しさん
2019/08/01(木) 00:01:43.50ID:x8K/VZkX
>>128
libzzz.a または libzzz.so とリンクするには gcc のオプションに -L 該当ファイルのパス -l zzz が必要。

て事も知らないなら入門書からやり直しが必要な初歩レベル
150デフォルトの名無しさん
2019/08/01(木) 00:11:28.53ID:jAJZsaMK
using namespaceが悪なのはヘッダのグローバル空間でかますのが絶対悪ってだけで
それ以外では大概どうでもいい話
151デフォルトの名無しさん
2019/08/01(木) 01:27:47.64ID:EAAzAfmw
>>142
競合するかどうかは問題の本質ではない。
using stdをつけてstd::を省略したコードは、using stdをつけていない他の環境に持っていったときに動かない。
std::をつけていれば、どんなusingが使われていようと関係なく動作する。
using stdを使うべきではない理由はこれだけで十分。
せっかく標準規格化されてどの環境でも同じように動作するライブラリのポータビリティを阻害するのは長い目で見ればデメリットしかないと思う。
152デフォルトの名無しさん
2019/08/01(木) 02:08:20.24ID:YZxnvLL/
プロのプログラマでもないしstdやboost使う程度なんで名前空間汚染問題とか大げさにしか思えない
大したコードでもないのにstd::つけまくってるコード見るとアホらしくなる
職業や用途あるいは個々人の技量によって求められるものは違うでしょうに、十把一絡げに議論して意味あるの?
153デフォルトの名無しさん
2019/08/01(木) 02:19:13.29ID:AVudDz+c
>>152
元の質問者が何も分かってないから突っ込まれているだけで、問題点とか自分以外の人がどう認識しているかを知った上で、使う使わないって判断は好きにすればいいだろうよ。
154デフォルトの名無しさん
2019/08/01(木) 02:20:44.23ID:53RNnp/+
意味無いと思うなら参加しなければいいだけ
趣味なら好きにすれば
155デフォルトの名無しさん
2019/08/01(木) 02:21:00.23ID:EAAzAfmw
>>152
オレオレコードを一人で書いて満足するのが好きなら、別に止めはしない。
でもそんな主張をここでされても多分同意は得られないと思うよw
議論する気があるなら、みんなが分かるコードを書かないとだめでしょ。
156デフォルトの名無しさん
2019/08/01(木) 02:21:21.39ID:xENMcR2S
>>152
>>142を読み直せ
言わずに我慢してたけど、
てか今まで何度も言ってきたが最近C++数年かそれ以下の初心者が偉そうにしすぎ
初心者だからと貶したいんじゃない、自分が知らないことや先人(俺のことじゃないよ、念の為)への畏怖や敬意が全く無いから
>>142の最後の行みたいな思い上がったセリフが出てくる

そういうやつが今後上達するかというと俺は首ひねるけどね
157デフォルトの名無しさん
2019/08/01(木) 02:52:55.71ID:EzhbGyK1
stdだけusingしてライブラリはusingしなければいいだけちゃうの?
158デフォルトの名無しさん
2019/08/01(木) 03:13:40.26ID:xENMcR2S
それが都合がいいなら好きにすればいいんだよ
誰もstd名前空間は取り込んじゃいけないとは言ってない

そんなのは個々の設計の意思決定と責任の話で、std取り込む奴がアホとか取り込まないのがアホとかいう話じゃない
159デフォルトの名無しさん
2019/08/01(木) 05:07:42.89ID:z8lvaa68
ヘッダにusing namespace書くやつは許さんけど、実装部分では好きにさせてやれよ
160デフォルトの名無しさん
2019/08/01(木) 07:34:07.43ID:RgaAx32e
>>151
「他の環境に持っていったときに動かない」って、どういうこと?
ソース丸ごと持っていくなら、ソースにusing namespace std;が含まれるから動くでしょ。
もしかして、ソースの一部だけコピペして持っていく場合の話?
「コピペでも動くソースにしなければならない」という主張はちょっとどうかとおもうけど。
161デフォルトの名無しさん
2019/08/01(木) 07:36:43.17ID:crx0fETR
ソースレベルのライブラリを持ってくとか
162デフォルトの名無しさん
2019/08/01(木) 07:59:03.96ID:dXXftso1
>>159
俺もこれに同意
>>151の主張はちょっと意味わからん
163デフォルトの名無しさん
2019/08/01(木) 08:05:18.75ID:xENMcR2S
>>160
標準以外のライブラリの存在が全く想定できてない
自前のちょっとしたライブラリのヘッダでもusing namespace stdって書いてたら
その後or中でインクルードしたヘッダ類が全部巻き込まれて名前の衝突が起きうる
ソースでusingした後にインクルードした場合も同じ(これはあんま無いと思うけど

仮にライブラリとしてファイルが綺麗に別けられてても別のプロジェクトに移して動かない場合があるってのはこれのことでしょ
164デフォルトの名無しさん
2019/08/01(木) 08:20:05.74ID:RgaAx32e
ヘッダの話なら最初からそう書いてほしい
165デフォルトの名無しさん
2019/08/01(木) 08:24:27.74ID:OXlLEF/q
>>163はヘッダの話と一緒くたにしてるのか…
166デフォルトの名無しさん
2019/08/01(木) 08:30:48.58ID:EAAzAfmw
ヘッダーにインラインで書くときはstd::つけて、ソースには個別にusingしてstd::を省略するってこと?
そんな面倒なことしてなにか良いことあるの?
167デフォルトの名無しさん
2019/08/01(木) 08:41:54.03ID:xENMcR2S
あーすまん、ヘッダには一切書かないのならわかる

ただ、標準と別のライブラリで衝突する名前があるならどちらかはusingしない、あるいは衝突するものはいちいち指定するかしなきゃいかんでしょ
168デフォルトの名無しさん
2019/08/01(木) 08:48:03.19ID:xENMcR2S
>>166
衝突しないことがわかってるならいいけど、ライブラリのヘッダでusingしてたら
そのライブラリのユーザーは衝突する名前をグローバルで書けないんだよ
自分しか使わないのなら好きにすれ
169デフォルトの名無しさん
2019/08/01(木) 09:12:15.95ID:+lGsNRBr
させたくないならそれが出来ないようにルールそのものが無いはずだ
でもルールがあるなら使っていいでしょう
それが出来るようにそのルールがあるんだから

それともルールはあるが使ってはいけないという宗教なの?
170デフォルトの名無しさん
2019/08/01(木) 09:20:25.62ID:z8lvaa68
そういうのはもういいから
171デフォルトの名無しさん
2019/08/01(木) 09:21:49.05ID:53RNnp/+
勝手にすれば?
172デフォルトの名無しさん
2019/08/01(木) 09:44:39.86ID:lFlDu5J/
>>169
どうして0か1でしか考えられないんだ?
使うことでメリットがあり問題ないなら使えばいい。
問題あるなら使うな。
メリットデメリットがあるならトレードオフで判断しろ。
173デフォルトの名無しさん
2019/08/01(木) 09:53:26.68ID:cScMcWqS
おれの職場ではコード規約でusing stdはもちろんその他の名前空間も省略禁止
ファイルローカルでaliasは可能というか推奨
基本的にコードは後で誰でもすぐ読めるように書く方針だからね
仕事で使うときはこんなもんだよ

似たようなの話でauto多用が読みやすいか読みにくいかは結構議論になる
こっちはまだ規約化されてないな
174デフォルトの名無しさん
2019/08/01(木) 10:40:45.28ID:X8QVfxL8
関数の返り型にauto使いまくりなんですけどまずいですかね?
175デフォルトの名無しさん
2019/08/01(木) 12:15:50.33ID:RwOvmdDx
auto & shared_data = *this->m_data;
とか多用してる
176デフォルトの名無しさん
2019/08/01(木) 17:35:55.46ID:H6AbKfkF
構造体メンバ間のパディングをコンパイル時に知る方法
177蟻人間 ◆T6xkBnTXz7B0
2019/08/01(木) 17:48:47.61ID:xdkWuzft
>>175
#include <cstddef>
offsetof
178デフォルトの名無しさん
2019/08/01(木) 18:18:03.26ID:tmRbumxZ
auto導入によってハンガリアン記法が再評価の機運
179デフォルトの名無しさん
2019/08/01(木) 19:18:28.91ID:Ag3GiCEL
>>156
流れ読んでないし本題には触れずにレスするけど同意
「ニワカなやつほど語りたがる」のは世の常だけど
C++ちょっと触っただけくらいの駆け出しのカスが
「C++は〜」なんて知った風に語ってるのたまにあるよなw
それも、スレに参加してるなかでお前一番素人やろってやつが
平然と調子こいてきたりするから驚く
180デフォルトの名無しさん
2019/08/01(木) 22:39:23.89ID:re8BbLkf
すまないC++20の新機能諳じて言えない奴は例外なく初心者なので出ていってくれないか
181デフォルトの名無しさん
2019/08/01(木) 22:41:32.13ID:IjUNQuw2
>>176
めっちゃ構造体ネストしてsizeofで差分取るとか?
わからん
182デフォルトの名無しさん
2019/08/01(木) 22:51:01.89ID:i4bRK0c3
alignofとsizeof使えばわかるんじゃね
183デフォルトの名無しさん
2019/08/01(木) 22:56:22.56ID:8zpMvWHA
パディングの有無ならstd::has_unique_object_representationsでわかると思う
どこにいくつあるかは難しい・・・
184デフォルトの名無しさん
2019/08/01(木) 23:14:16.19ID:Phw6FYmd
>>177
うわああああああ!!!これだ!これだやりたかったの!サンクス!
そうか0を対象の構造体へcastした後メンバアクセスしてそのアドレス値を取るのか!全然思い付かんかった!
俺に向けたレスかは分からんけど助かった!サンクス!

>>181
それ思い付いたんだけど苦行過ぎてやめてもうた…

>>182
あーalignofで上手く取るってのも有ったのか!使う機会があまり無いポンコツなもので気付かんかった!

>>183
うむむ?初耳機能だ
後で調べてみまする

皆さんありがとうございました!
185デフォルトの名無しさん
2019/08/02(金) 01:30:02.97ID:Baufd8HM
メンバポインタの差取る方法もありそう
規格の保証はなさそうだけど
186デフォルトの名無しさん
2019/08/02(金) 02:03:55.33ID:zOtmkI/7
>>151
using を絶対に全く使わないのであれば、そもそも namespace の概念自体が
意味が無いと思いますよ。タイプ量を減らすことはとても大切だからこそ、
衝突しない場合には、using を使えるように設計してされているわけですから。
もし絶対に std:: を付けるのであれば、例えば、std::vector と書かずに
最初から StdVector などと固定の名前でも良かったわけです。しかし
それだと長くなってコーディング効率が下がるので、可能ならば
std:: を省略して vector と書けるように設計されているわけです。
それこそが namespace の思想なのでしょう。
187デフォルトの名無しさん
2019/08/02(金) 02:09:48.23ID:zOtmkI/7
>>173
usingを使わない方針は気持ちは分かります。しかし、usingを使い辛くなって
しまうのは想像力を働かせればSTLやC++の言語使用設計の段階から
最初から分かっていたはずで、そもそもSTLが最初からstd という
namespace に入れて有ること自体が余りセンスが無かった可能性があると
自分は思ってます。
188デフォルトの名無しさん
2019/08/02(金) 02:16:04.07ID:zOtmkI/7
1. std::string
2. StdString
3. CString

最も効率がいいのは、3 の CString でその意味では CString の設計者は
センスが良かったと私は思っています。using を使って std:: を書かないように
した場合、確かに何かのライブラリと衝突の危険性が出てきます。
ならば、標準のライブラリ(STL)は、デフォルトでは namespace の中に入れる
べきではなかったのではないかとも思います。
namespaceは、たまたま衝突が起きた場合には、その時点で使うと助かる場合が
あると思いますが、最初から入れてしまった事で新たな問題が入ってしまった
可能性があります。
189デフォルトの名無しさん
2019/08/02(金) 02:35:42.08ID:TGlmBsBg
>>186
namespaceってその名の通り名前空間を分割することで識別子名の競合を避けて、命名の自由度を上げる(楽をする)ための機能でしょ。
ある程度大きな規模のプロジェクトでは大変重宝するものだと思うんだけど、なんかものすごく偏った理解のしかたしてない?
190デフォルトの名無しさん
2019/08/02(金) 02:46:27.31ID:TGlmBsBg
>>188
CStringとタイプするには、shiftを押したり離したりしないといけないし、手間としてはstd::とそれほどかわらないと思うんだけどw
191デフォルトの名無しさん
2019/08/02(金) 02:49:52.24ID:zOtmkI/7
>>190
Shiftキーは同時押し可能なので速度が全然違う。
CStringの場合、実質Cの1文字が増える程度で済むが、
std::stringは確実に5文字分増える。
192デフォルトの名無しさん
2019/08/02(金) 02:51:05.19ID:zOtmkI/7
>>189
環境の変化での不安定さを避けるためにstd::を付けざるを得ないなら
命名の自由度は全く上がってません。
193デフォルトの名無しさん
2019/08/02(金) 02:54:02.02ID:TGlmBsBg
>>191
いやいや、実際はshiftを若干早くおしとかないと、cStringになっちゃったりするだろw
離す時も気をつけないとCSTringになっちゃったりするし。
それに最近のエディタ(統合開発環境)には補完機能が付いてるから、std::で候補が絞られる分、選択に有利に働く。
194デフォルトの名無しさん
2019/08/02(金) 02:54:16.42ID:1bW2v8eW
>>186
外から使うことだけしか考えてないみたいだけど、名前空間内の実装を読み書きしやすくする効果もあるでしょ。
195デフォルトの名無しさん
2019/08/02(金) 02:55:50.33ID:TGlmBsBg
>>192
命名の自由度があがるのはnamespaceの中での話だよ。
namespaceで囲っておけば、変数にhogeとか適当な名前をつけても競合する心配がなくなる。
196デフォルトの名無しさん
2019/08/02(金) 03:01:42.94ID:zOtmkI/7
>>195
namespace std で囲まれている事で気が緩んで hoge みたいな短い名前付けて
しまうことで、std:: を外すことが不可能になってしまう恐れが有る。
結局なんのための名前空間なのか分からなくなってしまうという。
外せない名前空間なら、std_ でも Std でも Stl を付けた方がタイプ量が
少なく済んだのに。
197デフォルトの名無しさん
2019/08/02(金) 03:04:55.47ID:TGlmBsBg
>>196
あくまで外すことが前提なのかw
198デフォルトの名無しさん
2019/08/02(金) 03:07:18.69ID:zOtmkI/7
>>195
大丈夫だと思って i という一文字のグローバル変数を定義したとしよう。
すると、std::i としている場合には問題ないが、using namespace std;
とした場合、大変な現象が起きる。伝統的な for のループ変数と衝突
するから。
199デフォルトの名無しさん
2019/08/02(金) 03:07:57.71ID:zOtmkI/7
>>197
絶対に外さないなら namespace に何のメリットが有るの。
200デフォルトの名無しさん
2019/08/02(金) 03:08:43.92ID:zOtmkI/7
>>197
外さないなら、StdVector, StdList で良かったはず。
201デフォルトの名無しさん
2019/08/02(金) 03:10:27.53ID:tRQdKQsJ
別に外さなくとも、その名前空間内で書くときは省略できるんで楽なんだけどな
(ライブラリ書いてるときとか
202デフォルトの名無しさん
2019/08/02(金) 03:10:40.06ID:zOtmkI/7
>>193
それに、コロン(:)はキーが打ちにくい場所にある上に、同じキーを
二回連打しなくてはならない。これが時間がかかる。
203デフォルトの名無しさん
2019/08/02(金) 03:11:25.60ID:zOtmkI/7
>>201
作る側の意見???
普通、ライブラリは使い勝手が良いことの方が重要ですよね。
204デフォルトの名無しさん
2019/08/02(金) 03:14:20.48ID:Baufd8HM
この世の名前空間はstdしかないと思ってるのかな?
mylib::vectorとかyourlib::vectorとかを安心して作れるようにするための機能が名前空間だぞ
205デフォルトの名無しさん
2019/08/02(金) 03:15:42.09ID:zOtmkI/7
>>201
もしかしてアプリなどでは使わないのにライブラリを作ることだけで
満足している人たちが多いのでしょうか。

なるほど、それで stl や boost が究極にセンスの悪い代物になっているのかも
知れない。コンテナ類は、C/C++のリストの概念が全く理解できて無い人
が作ったとしか思えない。リストは構造がリストであればリスト足りえると
思っているのが頭が悪い。ポインタでアクセスできないリストはリストじゃない。
O(1)で済むところがO(N)になってしまっていて、stlは全くセンスの
悪い欠陥ライブラリ。
206デフォルトの名無しさん
2019/08/02(金) 03:17:07.37ID:zOtmkI/7
>>204
だったら MylibVector で十分。そのほうが短い。
接頭辞を変えたければ、grep置換すればいいだけ。wz grepで一発。
それともstlの設計者はgrep置換使ったことが無いんだろうか。
とても頭が悪い感じがする。
207デフォルトの名無しさん
2019/08/02(金) 03:37:49.81ID:Baufd8HM
最初にusing mylib::vector;って書いとけば以後は単にvectorと書いたらmylib::vectorの意味になるんだよ
vectorを100回使うならその方が短いだろ?
後でyourlibやmylib_ver2のvectorを使いたくなればgrep(笑)なんかしなくても最初のusing宣言を一箇所書き換えるだけでいい
名前空間ってのはそういう機能で、ただの接頭辞じゃねえんだよわかったか知恵遅れ
208デフォルトの名無しさん
2019/08/02(金) 03:53:52.52ID:tRQdKQsJ
>>205
使うから書いてる、というか今後何度もソフト作るのに必要だから書いてるんだが
まぁあんたの言うような変な奴も居るだろうけどな

なんか大事な基本すっとばし過ぎで相手する気力も失せた
209デフォルトの名無しさん
2019/08/02(金) 04:05:35.16ID:HNnVO++M
>>186
タイプ量を減らすなんてのは開発において些末なことだろ。通常は開発時間の多くは設計、思考に費やして、コードをタイプする時間の比率なんて誤差程度のものだよ。
お前さんのプログラミングではほんの数文字のタイプがそれほど重みがあるのか?もしかして頭使わずに写経だけしてるのか?
210デフォルトの名無しさん
2019/08/02(金) 04:13:12.69ID:HNnVO++M
>>200
どうして外すか外さないかの二択しかないのか?
外すことでメリットがある使い方をするときは外せばいいよ。
外すための方法がいくつかあるのは分かるか?その書き方の違いや、それを使う場面や文脈で良し悪しが変わるというのは理解できるか?

お前さんは名前空間に関する仕様の理解と現実の開発作業の経験が少ないのにその自覚がなく、自分の考えに凝り固まってるから議論が進まない。
211デフォルトの名無しさん
2019/08/02(金) 04:26:28.62ID:HNnVO++M
>>206
自分のコードを再利用しやすくするためにライブラリ化する。その歳に名前の衝突を容易に回避できるよう名前空間を使用する。
名前がぶつかるからって安易にコピペして置換するなんて愚の骨頂だろう。
そんなやり方を良しとするというのは、規模が小さく保守の必要もない使い捨てのような小さなプログラムしか作ったことがないのだろうか。
212デフォルトの名無しさん
2019/08/02(金) 05:07:02.54ID:qy++cDJt
なんかやべーやついる
213デフォルトの名無しさん
2019/08/02(金) 06:16:59.13ID:DB/RmtTt
長文なのに書いてある事はスカスカだな
腐ってもプログラマーの端くれなら言いたい事は短く簡潔に書いてくれ
214デフォルトの名無しさん
2019/08/02(金) 06:29:04.32ID:QcV1urKo
夏休み恒例爆釣り天国(゚∀゚)
215デフォルトの名無しさん
2019/08/02(金) 06:49:45.16ID:CuK6m4Hq
どこのスレも荒れてると思ったら夏休みだった
216デフォルトの名無しさん
2019/08/02(金) 07:04:11.63ID:OZv2fXQJ
名前空間やクラスに別名付けれるの忘れてね?
217デフォルトの名無しさん
2019/08/02(金) 07:27:30.51ID:uj4cDNt2
だいたい標準ライブラリがvectorとあstringみたいなきわめて衝突しやすい名前を使っているのが悪い
諸悪の根源すぎて死ぬ
std_vectorとかstd_stringとか衝突しにくい名前にすれば済んだ話
しかしそれだと標準ライブラリ内部のコードがダサくなって逝けてないから、という理由で導入されたのがstd名前空間。
所詮センスの問題なためにいつまでたっても議論が収束しない

ここはRustのパッケージのようにパッケージが公開/非公開の唯一の境界、みたいに割り切って
名前空間の設定に論理的必然を持たせたらよかったんじゃ…
218デフォルトの名無しさん
2019/08/02(金) 07:35:54.09ID:uj4cDNt2
だいたいfoo::some_symbolと書いたときfooがクラスのときご名前空間のときがあって、
それぞれやれることが微妙に違いもあるがだいたいオーバーラップしているとか嫌すぐる…
疑問に思わないのはC++に脳が汚染されている証拠

後方互換性命で変えるな派と後方互換性を失っても改良すべき派の合意が見られない事案については
前者が勝って後者は追加で我慢するというWIN-win決着で永遠に先送りされつつ混迷だけが深まっていくのがC++の宿命
219デフォルトの名無しさん
2019/08/02(金) 07:38:50.92ID:Mf8CxiUW
namespaceも分からない初心者が上級者面して住み着いてるのか・・・
220デフォルトの名無しさん
2019/08/02(金) 07:42:20.24ID:uj4cDNt2
なにおうnamespaceがイミフな言語機能であることぐらいはよくわかっとるわ!
標準ライブラリ内部のコードにおいてもほとんどがテンプレートであるために、
using std;することが許されない

つまり、std_vectorやstd_stringという風に名前を長くするのに対してなんのメリットも提供されていない
221デフォルトの名無しさん
2019/08/02(金) 07:43:02.09ID:uj4cDNt2
訂正orz;
誤: using std;
正: using namespace std;
222デフォルトの名無しさん
2019/08/02(金) 08:15:18.88ID:WBAmTSV/
関数名_ローカル名 ってすれば全部グローバル変数でいいだろっていう主張?
223デフォルトの名無しさん
2019/08/02(金) 09:01:08.99ID:r+xcYYgK
数多くの言語で採用されているnamespaceが意味不明って・・・
224デフォルトの名無しさん
2019/08/02(金) 09:13:54.00ID:9zV6XrP/
なんでこういう馬鹿が定期的に沸くんだ
ちょっと調べればなぜこんな機能が必要とされたか位わかるだろ
名前空間の問題なんてC++固有の問題じゃないのに
225デフォルトの名無しさん
2019/08/02(金) 11:01:28.88ID:OZv2fXQJ
>>220
邪悪なADLが利点だよ
226デフォルトの名無しさん
2019/08/02(金) 14:45:11.22ID:Tt8ZbjXp
complex<__float128>ってできないの?
227デフォルトの名無しさん
2019/08/02(金) 16:35:01.23ID:aGnTdwVX
インスタンス生成時に絶対に決めなきゃいけない定数をテンプレートパラメータにするかコンストラクタに渡すか迷ってる

両者にはどういう思想の違いがありますか?
228デフォルトの名無しさん
2019/08/02(金) 16:54:49.60ID:Bzyz7IRB
なんかLinus TorvaldsがC++ディスってる記事でnamespace絡みで
「Cならmy_foo()って名前にするね、やっほー、grep my_fooが機能するぜ!」
みたいな話があったような気がするんだけど検索しても見つからない(´・ω・`)
229デフォルトの名無しさん
2019/08/02(金) 16:56:52.52ID:T+FnjWGP
テンプレートはコンパイル時に決まる値しか渡せない
230デフォルトの名無しさん
2019/08/02(金) 17:08:25.07ID:aGnTdwVX
>>229
なるほど
231デフォルトの名無しさん
2019/08/02(金) 18:19:12.53ID:zOtmkI/7
>>218
aaa::bbb::ccc::ddd みたいな名前が大量に必要になったりして、
STLの設計者は設計が下手だと思う。
232デフォルトの名無しさん
2019/08/02(金) 18:33:35.61ID:6Fm4tKt9
>>231
あーなるほどusingも知らない初心者ですか。
ここはまだ早いの初心者スレへどうぞ
233デフォルトの名無しさん
2019/08/02(金) 18:46:25.31ID:v+e6jaBZ
おい!
4倍精度複素数は!?
ないの!!???
234デフォルトの名無しさん
2019/08/02(金) 18:49:34.26ID:qy++cDJt
boost::multiprecision 使え
235デフォルトの名無しさん
2019/08/02(金) 18:51:13.74ID:OZv2fXQJ
今std::chronoとかstd::filesystemとか標準の名前空間も細分化するようにしてきてるからusing namespace std;の影響もそこまで酷くならないかもしれない
236デフォルトの名無しさん
2019/08/02(金) 18:52:43.15ID:4a7qvAUu
stdの中に全部ぶちこんであるのが問題

std::header名の名前空間に入れて、std内でusing namespace header名していればいいのに

std::xxxでも使えるし、using namespace std::header名すればそのheaderの中身だけが省略して使える
237デフォルトの名無しさん
2019/08/02(金) 18:56:02.63ID:zOtmkI/7
>>232
なんでも初期状態で使いやすいことが重要。
使いやすくするには各自でやれというのは設計が下手な証拠。
238デフォルトの名無しさん
2019/08/02(金) 18:59:20.11ID:zOtmkI/7
匿名性掲示板が困るのは、何かの欠点を指摘するとそれを作った当事者らしき人が
全否定をしてしまうことで話が深まらないこと。
同意する人がいればもっと良いライブラリを探す話とかに発展できる
かも知れないのに。
239デフォルトの名無しさん
2019/08/02(金) 19:00:52.12ID:4a7qvAUu
ABI互換が問題ならextern "C"みたいに
extern ::std
みたいなので、マングリング時の名前空間を強制できる機能つければなんとかならんかね
240デフォルトの名無しさん
2019/08/02(金) 19:05:43.92ID:TY1gde0p
>>237
お前の「使いやすい」と世間一般の「使いやすい」が一致してないというだけだろう。
お前の「こうあるべき」と世間一般の「こうあるべき」のズレが大きいから、今のC++はお前にとって不満の大きいものになっているんだろう。もしかすると家庭や学校、社会全体も。
241デフォルトの名無しさん
2019/08/02(金) 19:09:51.86ID:zOtmkI/7
>>240
そういう話がやっぱり、「ポジショントーク」だと思うんだよ。
そこまでして人の意見を全否定するには何らかの背景事情があると
しか思えない。
242デフォルトの名無しさん
2019/08/02(金) 19:10:14.38ID:TY1gde0p
>>238
C++の仕様策定に関与したような人がこんなスレを覗いて低レベルな指摘にわざわざ反応するわけないだろう。想像力が豊かだな。
243デフォルトの名無しさん
2019/08/02(金) 19:12:46.85ID:yAHSp118
否定的意見はマウンティングとか強すぎるな
244デフォルトの名無しさん
2019/08/02(金) 19:12:52.67ID:zOtmkI/7
>>242
でも、オイラはそのくらいできるくらい優秀だよ。
245デフォルトの名無しさん
2019/08/02(金) 19:15:19.48ID:zOtmkI/7
暗に陽にアメリカを褒めちぎって日本をけなすような人が5chには多い。
それで日本はめちゃくちゃに成ったんじゃなかろうか。
例えば「日本製スマホが全然駄目」などという説が5chでは大量に流布
されている。実際、そういう情報を信じて損する人は多かろう。
大問題だ。
246デフォルトの名無しさん
2019/08/02(金) 19:49:20.44ID:azkiHyJD
>>237
だからお前みたいなやつのために
名前空間省略する仕組みあるでしょ?
何が不満なのさ
247デフォルトの名無しさん
2019/08/02(金) 21:08:13.86ID:9zV6XrP/
VSスレで暴れてたジジイと芸風が同じだな
248デフォルトの名無しさん
2019/08/02(金) 23:12:48.91ID:zqhkSChf
誰も書かなかったので仕方無いので漏れが書くが、namespaceの唯一の便利な使い方は(「唯一の」だ
、すでに衝突したあるいは衝突不可避なソースコードAとソースコードAを
namespace a { A }
namespace b { B }
と囲う等して分離できる ( こともある ) というだけやんけ
それとて完全には果たせないというあたりがいかにも行き当たりばったりで中途半端な言語要素感を醸し出してゐる
(中で::fooで呼んでたり入れ子のnamespaceを外から呼んでたりのケースは救われない
249デフォルトの名無しさん
2019/08/02(金) 23:17:29.32ID:4a7qvAUu
てかnamespaceは色々中途半端な点はあるが、便利に使える機能だろ
無いと物凄く不便
using namespace stdは使わんな
250デフォルトの名無しさん
2019/08/02(金) 23:19:05.25ID:jyJeqz7W
名前空間ネストして書くのが超めんどくさかったがようやく改善するとか
251デフォルトの名無しさん
2019/08/02(金) 23:37:02.96ID:DB/RmtTt
関数呼び出し時に宣言が必要か否かってCとC++では異なってたりしますか?
規格書読めないマンで申し訳ないのですがgccだとC/C++でそれぞれOK/NGと結果が異なります
252デフォルトの名無しさん
2019/08/03(土) 00:35:18.25ID:T50aUZPM
翻訳単位超えるお話?
253デフォルトの名無しさん
2019/08/03(土) 02:27:32.85ID:m/VIbHu2
>>222は、FSMとPDAの区別もつかない
くるくる

((ヽ三/)   (ヽ三/))
  (((」) ___ (L)))
 / // ノヽ\\ \
( </ (● ●)\> )
 \| ⌒(_人_)⌒|/
   \   ̄  /

パーだおwwwwww

  n「「「|   「「「h
  |ー ⊃  ⊂ ー|
  >ーノ___ヽー<
 / // ノヽ\\ \
( < o゚(● ●)゚o> )
 \| ⌒(_人_)⌒|/
   \  |┬| /
     ヽノ
254デフォルトの名無しさん
2019/08/03(土) 07:47:52.71ID:NzOgSHrF
お前らが名前空間で議論したところで何のメリットもデメリットもない事に気づけ、そしてRustを使え
ゴミ言語
255デフォルトの名無しさん
2019/08/03(土) 08:16:58.65ID:ulHqgYUF
C++じゃないと出来ない事があるのでRustは使えん。
256デフォルトの名無しさん
2019/08/03(土) 08:30:10.28ID:NzOgSHrF
>>255
(そのロジックを)Rustで書くことが出来ないと表現した方が正しそう
257デフォルトの名無しさん
2019/08/03(土) 10:47:51.13ID:m/VIbHu2
Ristがチューリング完全かどうかについては誰もが口を濁すが
それはそうとして、これからはRustでプロトタイピングしてC++のコードを上司には提出するという
スタイルに移行するのではないかと思う
258デフォルトの名無しさん
2019/08/03(土) 11:01:51.61ID:L8lVlVkx
Ristは流したけど上司に提出でふいた
259デフォルトの名無しさん
2019/08/03(土) 12:46:23.14ID:nO8f/Gbv
>>234
2成分の vector<__float128> を使うことにしました
260デフォルトの名無しさん
2019/08/03(土) 12:51:32.63ID:oHrDPFKS
名前空間つかうようりは、意味変数を使った方がよい
261デフォルトの名無しさん
2019/08/03(土) 13:07:00.48ID:eeu00PkY
>>257
それはない。
262デフォルトの名無しさん
2019/08/03(土) 13:47:24.37ID:ulHqgYUF
>>260
意味変数って何?造語?
263sage
2019/08/03(土) 15:26:08.69ID:dTS2sKLx
>>261
unsafeを使わない場合の話
264デフォルトの名無しさん
2019/08/03(土) 15:39:33.35ID:bjverAuH
>>166
名前のバッティングが防げてコーディングの手間が減る
いいことばかりじゃん
265デフォルトの名無しさん
2019/08/03(土) 15:51:00.92ID:bjverAuH
namespaceそんなに不便かのう。
他の言語もやたらとパス掘って面倒なことになってるが。
pythonでも
import matplotlib.pyplot as plt
みたなのあるしな。
C++でやるなら
namespace plt = matplotlib::pyplot
とできるわけで、他の言語とにたりよったり
266デフォルトの名無しさん
2019/08/03(土) 16:06:05.71ID:dTS2sKLx
>>264
using namespaceによって名前のバッティングのリスクはむしろ増す
なぜなら、namespaceの中身を記述する中の人がnamespaceで守られているつもりで短い名前を使いまくることがあるからじゃ
つまりnamespaceの中の人の思惑に反してusing namespaceしたとき、
namespaceは本来の言語要素としての目的とは真逆の危険なブツ(衝突の加速器)に早変わりする。

ファイルスコープでusing namespaceして書いたコードは他にもっていったとき地獄が始まる

ていうか同じものに複数の表記を許すのはそもそも美しくない

以上の理由によりusing namespaceは(特にファイルスコープでは)使ってはならない
C++から削除したほうが良い
267デフォルトの名無しさん
2019/08/03(土) 16:11:48.01ID:ve9YLJaL
cout 自体使わないけど、昔のCだったら、#include <stdio.h>さえしとけば、
printf()もputs()もputhcar()もgetc()もfputc()もfprintf()もsprintf()も
vsprintf()もvprintf()もfopen()もfread(), fwrite(), fgetc() もみんな
そのまま短い関数名で使えたのに、今のC++だと、もし、
using namespace std; を使ってはならないなら、

using std::cout;

みたいな事を使う名前の文だけやらなくちゃいけないのはかなり非効率だと思う。
268デフォルトの名無しさん
2019/08/03(土) 16:15:24.12ID:eeu00PkY
>>267
誤:みたいな事を使う名前の文だけやらなくちゃいけないのはかなり非効率だと思う。
正:みたいな事を使う名前の分だけやらなくちゃいけないのはかなり非効率だと思う。
269デフォルトの名無しさん
2019/08/03(土) 16:21:38.24ID:dTS2sKLx
>>265
namespace(やパッケージ名やモジュール名)のエイリアスえは安全性とタイピング量の効率の良い妥協点だとは思う
ただし、ファイルスコープでエイリアスしたコードを他に持っていったとき(ry

ちなRustではモジュール名の別名の付け替えはできないが、using namespaceみたいなことを
してほしいのかしてほしくないのかを中の人がモジュール名の末尾の階層を「prelude」にするという慣例で凌いでゐる
270デフォルトの名無しさん
2019/08/03(土) 16:23:34.90ID:bjverAuH
>>266
あの、.hでは使わず.cppで使う話についてなんだが
271デフォルトの名無しさん
2019/08/03(土) 16:24:37.04ID:bjverAuH
>>269
だからなんでヘッダでそういうエイリアスやらを使う前提で話してんだ、おまえはバカか
272デフォルトの名無しさん
2019/08/03(土) 16:26:49.27ID:bjverAuH
.cppの方は読み込むヘッダがそこに書き込まれてるんだからusingしようがaliasしようが問題ないだろと。
どこで読み込まれるかわからないヘッダに使うことと分けて考えられへんのかね、このバカは
273デフォルトの名無しさん
2019/08/03(土) 16:26:57.92ID:dTS2sKLx
>>270>>271
.hでは使わず.cppで使う話してるんだけど…
ひょっとしてファイルスコープでusing namespaceするというのを.hで使う意味だと
この暑さで短絡しているのでは…
274デフォルトの名無しさん
2019/08/03(土) 16:27:31.31ID:ve9YLJaL
大部分のここの人達の主張は、直接

std::vector, std::list, ・・・ を書くか、それが嫌なら、

using std::vector;
using std::list;
・・・

を延々と書けというんですよね。後者のやり方は、Java の import 文で
import com.sun.xxx.xxx.class1;
import com.sun.xxx.xxx.class2;
・・・

などとするのに似ていますが、それが一番の Java の欠点でも有る部分なんです。
そこを C++ は取り入れてしまった。
275デフォルトの名無しさん
2019/08/03(土) 16:32:21.74ID:dTS2sKLx
>>274
Javaのimport文も一応「*」でusing namespaceと同じようなことができるはず…
問題なのは、中の人の意図がusing namespaceしてほしくないケース(namespace内で短い名前を使いまくっている(>>266))
においてもusing namespaceできてしまうことにある
276デフォルトの名無しさん
2019/08/03(土) 16:35:39.76ID:s7JzQoXH
stdつけるのそんなに嫌かね?
1つなら良いじゃないかと思う
長い奴は別名つけりゃいいし
IDE使っているとnamespace付きの方が候補が絞れてむしろ便利じゃね
ADLでつけなくても呼べる場面であったとしても
277デフォルトの名無しさん
2019/08/03(土) 16:46:08.58ID:eeu00PkY
>>276
IDEのエディタは使ってないので補完機能は使わない。
278デフォルトの名無しさん
2019/08/03(土) 16:52:55.00ID:M1zmWsZu
IDE使え
279デフォルトの名無しさん
2019/08/03(土) 16:58:03.17ID:bjverAuH
>>276
なんでstdに限定するのかな
280デフォルトの名無しさん
2019/08/03(土) 16:59:59.07ID:bjverAuH
>>275
なにが困るんだっての。
名前が被ったらスコープ内での命名が優先されるが、読み込んだヘッダの中の名前に影響は及ぼさないだろ
そして、隠蔽された名前にはnamespace名を使えばアクセスできるんだから何ら問題はない
281デフォルトの名無しさん
2019/08/03(土) 17:00:41.48ID:s7JzQoXH
>>279
stdじゃなくてもalias作れば良いだろ

class scopeでnamespace alias作れないのは結構面倒だが
282デフォルトの名無しさん
2019/08/03(土) 17:08:23.80ID:dTS2sKLx
>>280の言っている「問題にならないケース」はusing namespaceしなければ
そもそも名前が被ったりしないことから尻拭いの手間が生じないケースなので
using namespace擁護としては意味がない

既存の型と短い名前の組み合わせでも名前が衝突しないようにnamespaceという仕組みを設けたというのに
その崇高な理念を忘却しし、衝突させておいてから尻拭い可能だからおk、というおよそ合理精神0のが>>280の主張
283デフォルトの名無しさん
2019/08/03(土) 17:14:33.69ID:eeu00PkY
>>280
その話とは関係ないかもしれないけど、以下のようなことがあった。

その時には、理由は追求しなかったんだけど、昔、Javaで
impot com.sun.xxx.xxx.*;
impot com.sun.yyy.yyy;
・・・

みたいなことをやった時、* を付けたことによって javacでコンパイル時に名前衝突が起きた
ことがあった。それで * を使うのをやめて個別に直したら衝突しなくなった。

最後の方の名前は同じで、それを限定している名前、例えば、
zzz.aaa.ccc;
zzz.bbb.ccc;
みたいなのがあって、ccc の部分が同じだから ccc だけでアクセスできるようにした場合に
衝突が起きたのかもしれない。
284デフォルトの名無しさん
2019/08/03(土) 17:18:00.03ID:eeu00PkY
>>283
Javaの仕様も忘れてしまったけど、
import zzz.aaa.*; // たまたま zzz.aaa.ccc というのが有ったとする。
import zzz.bbb.ccc;

↑のような場合に、ccc という名前が衝突するのかも。
285デフォルトの名無しさん
2019/08/03(土) 17:23:56.42ID:L8lVlVkx
>>274
> 大部分のここの人達の主張は、直接
>
> std::vector, std::list, ・・・ を書くか、それが嫌なら、

これはよい
でも

> using std::vector;
> using std::list;
> ・・・
>
> を延々と書けというんですよね。

これを言ってる人いたっけ?
名前空間を明示するというポリシーに反してるからおれは使わないな
286デフォルトの名無しさん
2019/08/03(土) 17:28:41.36ID:bjverAuH
自分のコントロール下にあるところで機能を使うなってのは自分が上手くつかえないだけの話だわな。
ブロック作ってブロック外と同じ名前の変数作ることすら禁止しそうな勢いだな。
ヘッダで使うなってのは自分のコントロール範囲外でバッティングが生じるからだ。
287デフォルトの名無しさん
2019/08/03(土) 17:29:59.98ID:rAotfWJY
そもそも名前空間の柔軟性は、C++が最強だから。
文句言うのは筋違い。
288デフォルトの名無しさん
2019/08/03(土) 17:34:07.35ID:eeu00PkY
そもそも標準のライブラリなので、namespace std の中に入れる必要なかった。
下手に入れてしまったからむしろ std:: を外したときに衝突する問題が
起きる可能性が出てきてしまった。
289デフォルトの名無しさん
2019/08/03(土) 17:37:28.85ID:rAotfWJY
>>288
標準ライブラリとバッティングさせるようなバカはその場で処刑したほうが良いのでは。
標準ライブラリくらい暗記しとけよ。
290デフォルトの名無しさん
2019/08/03(土) 17:42:58.60ID:ulHqgYUF
Microsoftのmin,maxマクロの事か
291デフォルトの名無しさん
2019/08/03(土) 17:46:28.08ID:eeu00PkY
>>289
using namespace std; としたときに衝突するライブラリが
あるそうですが。
292デフォルトの名無しさん
2019/08/03(土) 17:47:44.86ID:rAotfWJY
>>291
殺せ。
293デフォルトの名無しさん
2019/08/03(土) 17:48:34.32ID:rAotfWJY
>>290
あれは許せんな。
いや、許してはならない。
いつかレッドモンドに爆撃機を送り込むべき。
294デフォルトの名無しさん
2019/08/03(土) 17:50:54.20ID:eeu00PkY
そういえば、min(), max() は C の時代、確かマクロ実装版が基本だったり
して複雑なことになっているのかな。よく知らないけど。
295デフォルトの名無しさん
2019/08/03(土) 17:53:29.88ID:3VuQ5ICx
そこでBOOST_PREVENT_MACRO_SUBSTITUTIONですよ
BOOST_PREVENT_MACRO_SUBSTITUTIONを崇めよ
296デフォルトの名無しさん
2019/08/03(土) 17:55:43.43ID:rAotfWJY
マイクロソフト最大のチョンボだよな。
297デフォルトの名無しさん
2019/08/03(土) 17:59:48.03ID:3VuQ5ICx
関数は関数呼び出しが遅いから使うなマクロにしろ
処理は全部mainに入れろ

という恐ろしい時代から引きずってるから仕方ないといえば仕方ない
298デフォルトの名無しさん
2019/08/03(土) 18:02:18.88ID:eeu00PkY
だったら STL の方が、std::max とかじゃなくて、
std::smax とかにすべきだったような気がしますが。
299デフォルトの名無しさん
2019/08/03(土) 18:03:42.44ID:ulHqgYUF
NOMINMAXしたらしたでgdiplusでエラーになったので、仕方なくusing std::min;using std::max;を書いてしまった。
300デフォルトの名無しさん
2019/08/03(土) 18:03:43.41ID:SSA79Euw
>>288
どんなusingがされている箇所でもstd::をつけさえすれば確実に標準ライブラリにアクセスできるんだから、記述の一貫性を保つのに役立つよ。
301デフォルトの名無しさん
2019/08/03(土) 18:07:41.16ID:eeu00PkY
元々 min(), max() は非常に古い C時代から #define されているマクロですよね、

std::min(), std::max() と書いても結局マクロ展開されてしまうのでは
ないでしょうか???
302デフォルトの名無しさん
2019/08/03(土) 18:08:18.92ID:rAotfWJY
>>298
でも実際に引っかかったら、何でこういうことする!マイクロソフト死ね!!っておまえも思うはず。
303デフォルトの名無しさん
2019/08/03(土) 18:10:37.82ID:eeu00PkY
STL の方の min(), max() を使いたい場合は、
(min)(a,b)
(max)(a,b)
でいけるようです。C/C++ の前処理層によるマクロ展開は
マクロ関数名(
という並びが有る場合にのみ展開されますので。
304デフォルトの名無しさん
2019/08/03(土) 18:14:26.75ID:eeu00PkY
>>302
いや、むしろ逆に、std::min の設計者の方がCの常識を知らない人だな、
と思ってしまいます。
そもそも、min(), max() マクロは、1980年代のC言語の時代から有るよく
知られたものなので、後から登場した C++ 標準ライブラリは、それが
有る場合にでも当然問題なく使えるようにしなくてはならなかったが、
そうなってません。それはどちらに原因があるかは明確です。
305デフォルトの名無しさん
2019/08/03(土) 18:19:07.11ID:dTS2sKLx
>>301
左様

.cppのヘッダファイルをインクルードし終わった以降の適当な場所でおもむろに
#undef min
#undef max

インクルードしたヘッダファイルにマクロ版のmin()、max()に依存したマクロが存在せず、
かつマクロ版のmin()、max()を使わない限りにおいてこれでおk、
306305
2019/08/03(土) 18:26:53.75ID:dTS2sKLx
適用条件訂正orz
正: マクロ版のmin()、max()を使わない限りにおいてこれでおk、

インクルードしたヘッダファイルに含まれるマクロ版のmin()、max()に依存するマクロ経由で
間接的にマクロ版のmin()、max()を使おうとした場合はコンパイルエラーになるからワカル
そうなった場合の処置は知らんが、コンパイルが通ったら>>305の方法で安全なはず
307デフォルトの名無しさん
2019/08/03(土) 18:29:09.20ID:3VuQ5ICx
一番安全なのはこれだってboostの長年の結論だから
max BOOST_PREVENT_MACRO_SUBSTITUTION (a,b)
308デフォルトの名無しさん
2019/08/03(土) 18:29:45.19ID:eeu00PkY
マクロ版 min(), max() が #define されている状態でも、
#define smin (std::min)
#define smax (std::max)
としてしまえば、smin(a,b), smax(a,b) と書くだけで
それぞれ std::min(), std:max()
が使えるでしょう。
309デフォルトの名無しさん
2019/08/03(土) 18:32:51.04ID:dTS2sKLx
>>307
正しいがIQが高すぐる答案

>>308
sminやsmaxという名前が衝突したらどうすんじゃ…
310デフォルトの名無しさん
2019/08/03(土) 18:55:02.09ID:aqiFUikh
この手の無駄に一般化は大抵バグを引き起こす。
311◆QZaw55cn4c
2019/08/03(土) 19:39:31.49ID:NDKzILOT
>>267
ふつうに std::cout << "hello, world!" << std::endl;
と地の文として書いていますが、そういうのは駄目なのですか?
312デフォルトの名無しさん
2019/08/03(土) 19:47:04.82ID:M1zmWsZu
std::を書くと死ぬ人が発狂してるだけなので、std::を普通に書ける人にはしょうもない話
313デフォルトの名無しさん
2019/08/03(土) 19:50:41.99ID:XP2vdzkU
これはVisual Studio 2019のバグだろうか?
C++17想定。Wandboxでは問題なし。

namespace user::math::literals {
constexpr double operator""_deg(long double deg) {
return deg * 3.14 / 180.0;
}
};

struct Test {
template<typename T = double>
constexpr double test(T t) {
using namespace user::math::literals;
return 1.0_deg * 8.0;
}
};

int main(){
}

//error C3688: リテラル サフィックス '_deg' が無効です。リテラル演算子またはリテラル演算子テンプレート 'operator ""_deg' が見つかりません

発生条件はクラス内テンプレート関数でユーザー定義リテラルを含んだ式
return 1.0_deg * 8.0;をreturn 1.0_deg;に変えると問題ない
314デフォルトの名無しさん
2019/08/03(土) 19:58:09.36ID:M1zmWsZu
普通にビルドできたけどプロジェクトのC++言語基準をちゃんとC++17にしたか?
315デフォルトの名無しさん
2019/08/03(土) 19:59:17.19ID:gpWi1Ho2
>>288-289, >>291-292
だからベクトルとかでもいきなり衝突するっつってんだろバカチンが
どんだけ経験不足なんだお前らは
316デフォルトの名無しさん
2019/08/03(土) 21:04:27.05ID:3VuQ5ICx
using namespace はその名前空間の中の名前を私が責任持って現在の環境に導入しますという宣言だ
中身を把握してないくせにそんな事して事故った奴が全部悪いんであって、使われた側には責任はない
stdとて例外ではない
317デフォルトの名無しさん
2019/08/03(土) 21:27:39.99ID:dTS2sKLx
>>316
使われた側の未来のふるまいまで予測してnamespaceの中身を理解などしていられない件について:

namespaceの正しい使われ方の下では、aというnamespaceに将来どんな名前が追加されようとも
bというnamespaceの名前とは衝突しないはずである
ところがaとbをusing namespaceしてしまったが最後、誰にも責任が持てないカオスが訪れる

これはnamespaceが無かったころの言語に先祖返りするだけではなく、より悪い状況を招くことに注意。
namespaceの利用によって、open、close、copy、find、vector、list、string、.....といった「自然な」名前がいっぱい使用されるからである。

namespaceは崇高だが、using namespaceはそうされることを意図されたnamespace意外には邪悪すぐる
318313
2019/08/03(土) 21:32:17.54ID:xzejIjJP
>>314
再インストールしなおしてプロジェクトの設定をC++17なのを確認してもエラーが出た
うちの環境だけか・・・

Visual Studio 2019 Community Version 16.2.0
319デフォルトの名無しさん
2019/08/03(土) 21:38:58.27ID:M1zmWsZu
>>318
こっちも16.2.0で、ワークロードは「C++によるデスクトップ開発」のオプションに全部チェック
他はQtツール入れただけ
320デフォルトの名無しさん
2019/08/03(土) 21:51:26.72ID:3VuQ5ICx
>>317
完全に同意
そういう事態が起きないと確信できるほど中身を理解してるnamespaceか、起きても問題ないほど狭いスコープか
そのどちらかでしか使ってはいけないものだ
using namespaceというのはそういう乱暴な機能
321317
2019/08/03(土) 21:51:59.64ID:dTS2sKLx
訂正;
語: namespaceは崇高だが
正: namespaceは崇高かもしれないが

>>316みたいな無根拠で実害のある精神論に後退するぐらいなら、
namespaceで修飾するかわりに接頭辞をつけた名前を使うという>>228な方策も現実の選択肢足りえる
>>228がネットをgrep my_fooして見つからなかったのは不幸な事故だが
322デフォルトの名無しさん
2019/08/03(土) 21:54:29.31ID:3VuQ5ICx
>>321
同意した直後に正反対のこと言うのやめて?
316のどの辺が精神論で有害なのさ
C++だけの話でもなくて、pythonのimport * がカスと言われてるのと本質的に同じだろ
323デフォルトの名無しさん
2019/08/03(土) 22:06:21.81ID:CM1VqrV7
>>316の精神論にはある意味同意するけどな
(ヘッダでの名前空間取り込みも、ある名前空間に別の名前空間を取り込む場合など、合理性があるなら設計上の選択の一つと言えるし
その辺は設計者の責任だと思う)

あと>>298, >>301はバカチンじゃなかった、すまんかった
324デフォルトの名無しさん
2019/08/03(土) 22:09:28.81ID:bbhz9sWw
using namespaceの話はも止めたら?
使いたい人は使えばいいし
使いたくない人は使わなければいい
でいいじゃん
大した問題じゃないだろ
325デフォルトの名無しさん
2019/08/04(日) 00:06:21.11ID:gKArgCAM
ダメに決まってるだろw
Coding Standardの話なのにw
326デフォルトの名無しさん
2019/08/04(日) 01:17:09.87ID:uuq2lSJI
どうでもいいだろ
C++のようなアレな言語を扱う上では些細な事さ
327デフォルトの名無しさん
2019/08/04(日) 01:20:42.30ID:6uyvUJES
そもそもプログラミングは間違ったことを信じている人がはっきり損をする世界
(ことあるごとにエラーが多発するとか作成に余分な時間がかかるとか完成品の質が悪いとかの話で)
リアルで誰かと作業するならともかく
ネットの向こうの間違ってる誰かなんて放っておいても損を勝手に積み立てて自らつぶれていくものだ
328デフォルトの名無しさん
2019/08/04(日) 01:21:14.60ID:uuq2lSJI
おれはね
C++はね
正しく扱うのに本当にコツのいる言語だと思うんよ
そんな中using namespaceは割とどうでも良いよね
俺は使わない派だが、使いたければ使えばって感じ
329デフォルトの名無しさん
2019/08/04(日) 01:59:42.19ID:xBRRtFJn
確かにどうでもいいな
プルリクで簡単に見つかるから
というかコンパイルや静的解析でエラーにする方法はないかな
330デフォルトの名無しさん
2019/08/04(日) 09:37:37.80ID:7855nA4b
>>327
正確にはそれをリカバーする人だがな。
バカはリカバーされて成り立ってることすら理解せず同じことを繰り返す。
331デフォルトの名無しさん
2019/08/04(日) 18:06:02.62ID:24EQJs3u
min(), max() マクロのような件は別として、標準的なライブラリであるところの
std::系の名前は、using namespace std; してもそんなに問題ないということは
無いんですか???

他のライブラリの名前空間 XXX も同時に using namespace XXX; した場合に
もし衝突が起きる場合は、using namespace XXX; だけはしないようにすれば、
特に問題ないような気がします。実際やってみたことが無いので経験者の意見を
聞いてみたいです。
332デフォルトの名無しさん
2019/08/04(日) 18:48:22.76ID:xBRRtFJn
個人の趣味プログラミングならご自由に
仕事ならコーディング規約にあわせる
コーディング規約作る立場なら、チームにバカが混ざってる前提で非属人的になるようにルールを設ける
で経験を積めば積むほど自分がバカであることが身にしみてわかる
そういうことだよ
333デフォルトの名無しさん
2019/08/04(日) 18:54:59.65ID:UDvg82p4
>>331
別に衝突しなくても問題は起こる。
using namespace stdで書いたコードをヘッダーのインライン関数に持って行く必要が出た場合とか、

using namespace std;
#inlucde "...."

となってしまっていてたまたま動いていたコードを、別の箇所でincludeしたときにエラーがでまくるとか。
334デフォルトの名無しさん
2019/08/04(日) 19:00:40.18ID:Rn2rET4f
>>333
ほとんど言いがかりレベルw
335デフォルトの名無しさん
2019/08/04(日) 19:02:23.99ID:nZL08BTE
std::くらい書けで終わる話をいつまで続けるつもりだ
336デフォルトの名無しさん
2019/08/04(日) 19:04:24.66ID:Is6FE1ys
>>335
10万行とかのソースでそれをやりますか?
337デフォルトの名無しさん
2019/08/04(日) 19:06:21.58ID:UDvg82p4
>>336
ところどころについてたり、ついてなかったりするくらいなら、最初からstd::つける方がはるかにマシ。
338デフォルトの名無しさん
2019/08/04(日) 19:06:25.70ID:nZL08BTE
やるよ
339デフォルトの名無しさん
2019/08/04(日) 19:09:16.58ID:6Wul5V0e
普通頻繁に使うライブラリをusingするだけで、名前空間ごとはやらんだろ
chrono使う時はたまにやるけど
340デフォルトの名無しさん
2019/08/04(日) 20:26:05.66ID:uuq2lSJI
ていうかstd::程度を書くのが面倒な人はC++向いてない
341デフォルトの名無しさん
2019/08/04(日) 20:49:37.11ID:i35UY3P6
size_tにだけ頑なにstd付けない人いるんですがなにか理由あるんですか
342デフォルトの名無しさん
2019/08/04(日) 20:52:21.46ID:Rn2rET4f
>>336
1ファイルが10万行じゃないだろ(1ファイルならそこから直せw)
343デフォルトの名無しさん
2019/08/04(日) 20:54:10.96ID:Rn2rET4f
>>341
size_t は大昔からあるのと明らかに型名っぽい名前なのでわざわざバッティングさせる奴もいないからじゃね?
344デフォルトの名無しさん
2019/08/04(日) 21:52:28.11ID:UDvg82p4
>>341
size_tはC言語時代から存在してるから、もともとnamespace関係なく使える
345デフォルトの名無しさん
2019/08/05(月) 00:32:36.26ID:Al8hrMjU
むしろstdにsize_tあったんだくらいの認識
346デフォルトの名無しさん
2019/08/05(月) 02:02:36.01ID:LDivZuKg
おれも知らんかったなまぁ言われてみればたしかにそうだなsize_tってネィムスペィス上でも定義されてたのか今度から一貫性のためにstd::つけとこうかな
まぁ、editorのちょい設定いじるだけなんだがな(´・ω・`)
347デフォルトの名無しさん
2019/08/05(月) 12:35:07.05ID:uXNLYXLK
>>340
そうでもない。
348デフォルトの名無しさん
2019/08/05(月) 14:11:04.57ID:uXNLYXLK
>>342
1ファイルの行数は関係有りません。
要は大きなプログラムを書いているとき、string で済むところを
全ての箇所で std::string と書くのかということです。
void func(std::string &somename, int a, int b) {
std::string aaa;
aaa = somename + "abc";
}
struct Txxx {
 std::string name1;
 std::string name2;
 ・・・・
};
↑のようにタイピングするのは余り賢いやり方だとは思えません。
349デフォルトの名無しさん
2019/08/05(月) 14:19:44.18ID:EKfu+tDr
そんなに面倒ならusing S = std::stringでもすればいいじゃん
350デフォルトの名無しさん
2019/08/05(月) 14:24:57.77ID:nblSLoEW
過度に賢く振る舞おうとして滑ってるパターン
それくらい普通に書けばいいじゃん
351デフォルトの名無しさん
2019/08/05(月) 14:27:04.00ID:xQVlfAfV
こういう奴って馬鹿丁寧に一文字ずつ全部打ってんのかね
補完って機能の概念がない世界に住んでんのかしら
352デフォルトの名無しさん
2019/08/05(月) 14:51:04.49ID:nl2V9bb6
>>348ってジョルノっぽいよな
353デフォルトの名無しさん
2019/08/05(月) 20:01:38.61ID:s1STjseD
>>348
> 1ファイルの行数は関係有りません。
> 要は大きなプログラムを書いているとき、string で済むところを
> 全ての箇所で std::string と書くのかということです。
俺は書く。

> ↑のようにタイピングするのは余り賢いやり方だとは思えません。
お前の感想はどうでもいい
354デフォルトの名無しさん
2019/08/05(月) 22:09:13.72ID:B18jZANO
>>348
高々数文字のタイピングに拘って名前空間のメリットが理解できないという主張を繰り返すお前さんの行動は、余り賢いやり方とは思えません。
355デフォルトの名無しさん
2019/08/05(月) 22:10:29.33ID:7u4aY/7T
>>348
だから何のために名前空間があるのかググれよ
別に好きにやればいいけどお前がいつもstd名前空間取り込んで便利だと思ってるのは
標準ライブラリしか使ってないからだ
356デフォルトの名無しさん
2019/08/05(月) 22:17:59.20ID:vqN4pUkV
無駄だと思うならtypedefやusingすりゃいいじゃないか
そもそもstringって名前長すぎだろ
357デフォルトの名無しさん
2019/08/05(月) 22:26:34.39ID:xngMWyKF
usingである程度の広さのスコープでやるんが正解だろ。
まあこのある程度の広さってのが人によってだいぶ違うだろうが。
358デフォルトの名無しさん
2019/08/05(月) 22:37:46.60ID:vqN4pUkV
少なくともstdは普通using namespaceしないよね
でかすぎる
最近良くやるのは
namespace fs=std::filesystem;
だな

まあこれもヘッダで使うなら独自namespaceに入れてからだが
359デフォルトの名無しさん
2019/08/05(月) 23:33:53.82ID:/t1yyPXk
using namespace std;をグローバルなスコープでやってしまうと
ソースコードを他に持って行ったとき困る
fooをstd::fooに変換するのはfooの種類が100台になると並みのエディタの置換機能では手間的にアウト
一方std::をとるのなら簡単にできる
std::をつけるのは将来への投資といえる
360デフォルトの名無しさん
2019/08/07(水) 02:10:18.89ID:/mJrMLHD
初心者除ける、上級勘違い中級者こそ、出て行ってくれないかな。
本当の上級者は、プログラミング初めての人でも、優しくあたってくれますよ。
361デフォルトの名無しさん
2019/08/07(水) 02:48:46.85ID:tJwlIUsZ
>>360=>>348
362360
2019/08/07(水) 03:17:50.31ID:/mJrMLHD
>>360 = not(>>348)
ですが。
証明方法は無いですから、わかりませんけどね。
363360
2019/08/07(水) 03:53:56.72ID:/mJrMLHD
>>342
各1万行30ファイルは、セーフですか?
364デフォルトの名無しさん
2019/08/07(水) 08:04:40.03ID:go9nzBX4
入れ子となったクラスの内側のクラスから外側のクラスのprivateメンバにアクセスできるという
内側のクラスの特権はJavaやC#と同じくC++にもあるから、これを使って大規模なStateパターンでも書いた日には
ソースコードの行数も大規模にならざるおえない
このとき上記3言語の中で唯一大規模にならずに済むのはクラスの分割定義が可能なC#だけ
365デフォルトの名無しさん
2019/08/07(水) 09:17:55.92ID:eqkXQjzY
まず日本語を勉強しましょう
366デフォルトの名無しさん
2019/08/07(水) 09:31:41.35ID:ZWXmwdWw
昨今のプログラミング用語における入れ子は界隈に限らず日常的に使われているが
プログラミング業界では特に再帰的構造を指す場合にも多く使われる

そこに非常に現代的な特殊用語たる「出し子」が加わると
一般人は入れ子と出し子が対になっていると思い込む
367デフォルトの名無しさん
2019/08/07(水) 09:45:33.66ID:Io4EJaZl
入れ子の内側のクラスは別ファイルに定義できる
368デフォルトの名無しさん
2019/08/07(水) 09:55:09.68ID:FLvBFSJD
好きなだけわけてincludeすればいいじやん
369デフォルトの名無しさん
2019/08/07(水) 23:36:21.14ID:gdjRebyd
スコープにあった変数名の長さにするべきとかそういうのお前らは習ってねーの?
370デフォルトの名無しさん
2019/08/07(水) 23:50:58.34ID:db+FOt2P
そういう感覚的なルールいらない
チェックできないルールはなくていい
371デフォルトの名無しさん
2019/08/08(木) 00:01:50.09ID:QQC8VFJ9
>>370
感覚的な部分を必要とすべきでないなら全てアセンブラで書けばか。
372デフォルトの名無しさん
2019/08/08(木) 03:03:18.83ID:2Zq4F03j
>>370
チェック出来るルールに完璧に沿って書けてるボクちゃん偉い!エッヘン!
ってこと?
ユーザーからしたらクソの役にも立たねーよそれ
373デフォルトの名無しさん
2019/08/08(木) 03:51:27.57ID:TsWml31+
errnoに謝罪しる
374デフォルトの名無しさん
2019/08/08(木) 05:46:38.89ID:FTUf1Nuq
>>367
1行で2クラス以上定義しないという原則を守る限り、30億状態あったら外側のクラスはどうがんばっても30億行未満では書けない
この場合でも30億行未満で書けるのは分割定義できる言語だけ
また、内側のクラスを使わない普通のStateパターンなら30億ファイルに分割してかけばだいたいおk
(1状態から遷移し得る状態の数による。30億状態のどれにでも遷移しえる状態、
 みたいな極端なやつはさすがに遷移先状態クラスの#includeで30億行になるが

>>368
おk
375デフォルトの名無しさん
2019/08/08(木) 06:53:52.07ID:5ZN2ymvH
頭悪そう
376デフォルトの名無しさん
2019/08/08(木) 10:31:27.94ID:llWdm4EH
それは設計の問題でしょ
30億通りのstateパターンで設計する方が悪い
言語の問題じゃあないな
あり得ないヘンな例を持ち出してdisる詐欺師の方法だ
377デフォルトの名無しさん
2019/08/08(木) 21:15:10.76ID:lDut6bjR
>>359
ファイル単位でそのまま使えや
コピペして改変部分があるとか当たり前のこと言うなよwwww
378デフォルトの名無しさん
2019/08/08(木) 22:58:59.35ID:TsWml31+
コンパイル時に発覚する程度のエラーなら許容範囲でしょ。
379デフォルトの名無しさん
2019/08/09(金) 00:11:55.59ID:LbUkdyT/
c++で想定外の場合にエラーメッセージとその行数を出して終了させたいのですが、
どのようにしたらできますか?
下記のようにしてもexitした行数が出ません。。

::fprintf(stderr, "error.\n");
exit 1;

perlのdie()のようなものをイメージしています。
380デフォルトの名無しさん
2019/08/09(金) 00:39:22.71ID:Ps8ScE7S
::fprintf(stderr, "error. (line: \d)\n", __LINE__);
とか
381デフォルトの名無しさん
2019/08/09(金) 22:56:01.92ID:nHekiGzf
丁寧にエラーメッセージ出すよりデバッガでバックトレースかけた方が早かったりするのは内緒
382デフォルトの名無しさん
2019/08/09(金) 23:44:34.34ID:4GlakzRE
右辺値参照ってconst参照という認識でOKですか?
383デフォルトの名無しさん
2019/08/10(土) 01:07:05.35ID:uRDSBt/F
>>382
moveで中身を奪い取るからconstじゃだめよ。
384デフォルトの名無しさん
2019/08/10(土) 06:27:08.55ID:9vKRFOhk
>>381
そりゃデバッガ使える状況ならその方が速いことは誰でも知ってるだろw
385379
2019/08/10(土) 09:48:42.90ID:bGTBV06s
>>380
その方法で目的の動作ができました。
行の最後にexit入れたら一行でかけて良さげな感じです。
ありがとうございました。
::fprintf(stderr, "error. (line: \d)\n", __LINE__); exit(0)

>>381,384
バックトレースというものを知らなかったのでググりました。
色々なものがあるようですが、gdbの下記程度の使い方なら自分でもできそうなので
これをちょっとづつ使ってみようと思います。

https://rat.cis.k.hosei.ac.jp/article/devel/debugongccgdb1.html
386デフォルトの名無しさん
2019/08/10(土) 15:57:01.40ID:lQ/anG82
ググってもなかなか出てこないが__LINE__はlong型だったと思った!
387デフォルトの名無しさん
2019/08/10(土) 16:00:35.87ID:Azv7NalM
>>386
intじゃないの?
まあクロスの場合開発環境側のintな気もするが
388デフォルトの名無しさん
2019/08/10(土) 16:25:20.56ID:SX6PRfyx
intでダメなファイルとかそもそもコンパイルできねーだろ。
389デフォルトの名無しさん
2019/08/10(土) 16:36:59.44ID:Azv7NalM
2GBの¥nの後にソースかいてみるとわかるかなw
390デフォルトの名無しさん
2019/08/10(土) 16:48:09.53ID:9vKRFOhk
>>387
> まあクロスの場合開発環境側のintな気もするが
そんなアホなw
391デフォルトの名無しさん
2019/08/10(土) 16:57:47.58ID:Azv7NalM
いや、多分そこまで考えてないから、コンパイラ上ではintもしくはsize_tで
マクロ展開時は文字列化して接尾の型指定とかつけないだろ

勝手につけられると逆に困るし
392デフォルトの名無しさん
2019/08/10(土) 17:01:16.99ID:lQ/anG82
int型はターゲットアーキテクチャーで一番自然な型というのが本来の意味なのでソースコードの最大行数と関係する理由が無い
C++の最新規格ではどうなったかわからんが、longは規格上32 bit固定なのに対してintは16 bitのアーキテクチャーが有り得るはず
393デフォルトの名無しさん
2019/08/10(土) 17:02:52.50ID:sTg7TrG2
32bit固定?
394デフォルトの名無しさん
2019/08/10(土) 17:06:31.95ID:Azv7NalM
longが32bit固定なシステムは64bitでは異端じゃね
まあwindowsはLLP64っぽいが
395デフォルトの名無しさん
2019/08/10(土) 19:05:34.69ID:bGTBV06s
バイナリファイルを一度に読み込もうとしています。
圧縮ありファイルと圧縮なしファイルを以下のように判定して読み込もうとしているのですが、
ファイルの全てを読み込む方法がわかりません。
@Aはどのようにしたら良いですか?

http://codepad.org/FwYwQ62R
396デフォルトの名無しさん
2019/08/10(土) 19:14:37.23ID:J81sqFQj
std::
これ自体は大した量ではないとは思うけど
これが何百何千と書かないといけないなら省略できる方法は必要だと思う
省略して且つ安全で簡単な方法が無いのが問題なんだと思う

ここまで読んででusing宣言を書き連ねたファイルを用意して
関数定義の次の行で#includeするのが今の所一番良い様な気がした

const何かも余りに書きすぎるので
これも何らかの形で省略できる記法を搭載できないのだろうかとは思ってる
classのpublic:
みたいに
const:
とかするとその後は記載しなくてもconst宣言になる
みたいな方法を搭載したりはしないのか?
と何時も疑問に思う
397蟻人間 ◆T6xkBnTXz7B0
2019/08/10(土) 19:18:00.44ID:kKf7NMjX
>>395
malloc
398デフォルトの名無しさん
2019/08/10(土) 19:26:04.25ID:jgcB4xBs
>>396
constこそusing書き連ねたファイル用意してincludeすればいいのでは

using cchar = const char;
using cuchar = const unsigned char;
using cint = const int;
using cuint = const unsigned int;
399デフォルトの名無しさん
2019/08/10(土) 20:32:30.45ID:pnnBC1tu
>>396
その疑問の答えは、あなたが具体的な提案を標準化委員会に持っていかない理由の答えと同じでしょう。
400デフォルトの名無しさん
2019/08/10(土) 20:36:22.66ID:qcH7oj7q
constじゃないのにmut書かされる方が面倒
401デフォルトの名無しさん
2019/08/10(土) 20:51:51.67ID:TQTMDKQQ
c++20のimportで解決するだろうか。
402デフォルトの名無しさん
2019/08/11(日) 00:40:56.64ID:khTmYGk1
>>397
ありがとうございます。
とりあえず圧縮なしの方は以下で取得できたようです。
ここで一点疑問です。
mallocの値がぴったり正しいかの確認をしようと、下記5行目のdatasize+1を-2や-3にしたのですが、
printf()で最後まで値が正常に出てきます。
datasize-3としてもたまたま連続して拾っているだけなので問題ありだと思うのですが、
malloc(datasize)ではなく、malloc(datasize+1)でぴったりメモリ確保ができているのでしょうか?

unsigned char* data;
long datasize;
fseek(fp, 0, SEEK_END);
datasize = ftell(fp);
data = (unsigned char*)malloc(datasize+1); // +1を-2, -3にしてもprintf()では最後まで正常な値が出てくる。
if( data == NULL ){
exit(1);
}
fseek(fp, 0, SEEK_SET);
fread(data, 1, datasize, fp);
fclose(fp);
for(int i=0; i < datasize; i++){
printf("%02x\n", data[i]);
}
403蟻人間 ◆T6xkBnTXz7B0
2019/08/11(日) 00:49:51.23ID:KV8Qszx5
割り当てされてない領域に書き込むというのは、C/C++ではあり得る。
そこに他に意味のあるデータがあれば、そのデータは壊れる(データ破壊)。
404デフォルトの名無しさん
2019/08/11(日) 07:16:49.27ID:bWvktEwN
>>402
処理系によるけど大抵の処理系では指定されたサイズをきっちり確保とかはしなくて16バイト単位くらいで確保する
なのでそのdatasizeの値によっては-15とかしても大丈夫な場合すらあることがある
もちろん動作は保証されない
405デフォルトの名無しさん
2019/08/11(日) 08:16:38.18ID:8PrAFYrU
> malloc(datasize)ではなく、malloc(datasize+1)でぴったりメモリ確保ができているのでしょうか?
malloc(datasize)で十分、malloc(datasize+1)だと1つ余分
freadでもprintfでもdatasize個までしかアクセスしていないので
406デフォルトの名無しさん
2019/08/11(日) 09:14:50.61ID:G1nCiIo0
とりあえずvalgrindかけてみるのが良い。
407デフォルトの名無しさん
2019/08/11(日) 10:12:56.60ID:rgBQlH0q
昔みたいにメモリ枯渇なんてそうないし誰かがデータ破壊やらかして休みに呼び出し食らいたくないので16バイトくらい余計に確保しとこ
408デフォルトの名無しさん
2019/08/11(日) 10:13:58.51ID:5go57VsQ
なんでビット単位で確保できないんですか?
409デフォルトの名無しさん
2019/08/11(日) 10:36:40.97ID:x7hs8Ubh
面倒だし遅いし...
410デフォルトの名無しさん
2019/08/11(日) 10:41:05.01ID:EQYlQ9TU
CPUがそう出来てないから
411395
2019/08/11(日) 11:36:18.32ID:khTmYGk1
>>404
malloc()は数を指定していて、for分でアクセスしているdataは配列だから最後はdatasize-1ということですね。
僕の理解と合いました。
malloc(datasize)とします。
ありがとうございます。

次にgzipの全読み込みも調べています。
とりあえず下記でout.dbと展開後のaaa.dbのcksum値が一致したのでちゃんと読み込めたと思います。
※1のところで配列に格納すれば良いと思うのですが、最初は配列の数が確定していないので
配列数を決定することができません。
読み込むファイルサイズはギガバイトクラスの大きなファイルなので、なるべく速度を維持したまま
一つの配列に格納したいのですが、どうすれば良いですか?

FILE *wfp;
gzFile rzp;
unsigned char buf[8192*1000] = {0};

rzp = gzopen("aaa.db.gz", "rb");
wfp = fopen("out.db", "wb");

while((cnt = gzread(rzp, buf, sizeof(buf))) > 0){
fwrite( buf, sizeof( unsigned char ), cnt, wfp );
※1 ここで全データを一つの配列に格納したい。
}

gzclose(rzp);
fclose(wfp);
412デフォルトの名無しさん
2019/08/11(日) 12:32:14.46ID:G+0fIs5w
gzipって全部読まないと展開後の長さ分からないんじゃね
2パスにするとか
413デフォルトの名無しさん
2019/08/11(日) 17:00:08.00ID:x7hs8Ubh
qiitaでさC++のタグ検索したらcppreference.comが公式リファレンスと書かれてたけどここ公式なの?
414デフォルトの名無しさん
2019/08/11(日) 17:08:33.67ID:CsmlJ4sC
>>413
https://ja.cppreference.com/w/Cppreference:FAQ
このサイトの背後にいるのは誰ですか?
cppreference.com は世界中の C++ 愛好家のグループによって作成され、メンテナンスされています。
415395
2019/08/11(日) 18:01:46.19ID:khTmYGk1
>>412
コメントありがとうございます。
全部読む以外に調べる方法は無いんですね。
ということでrealloc()で拡張していくことを考えてみました。
下記で作られた解凍後のデータがgunzipで解凍したものと一致したので大丈夫そうです。
ありがとうございました。

#define MAX_BYTE 8192*1000

data = (unsigned char*)malloc(MAX_BYTE);
rzp = gzopen("aaa.db.gz", "rb");
long data_size = 0;
while((cnt = gzread(rzp, data+data_size, MAX_BYTE)) > 0){
data_size += cnt;
data_new = (unsigned char*)realloc(data, data_size+MAX_BYTE);
if( data_new == NULL ){
free(data);
::fprintf(stderr, "拡張失敗\n");
exit(EXIT_FAILURE);
}
// アドレスが変化した場合
if( data != data_new ){
// free(data); // 元オブジェクトは解放済みのため不要
data = data_new;
}
}
gzclose(rzp);

// 解凍後データを書き込み
wfp = fopen("out.db", "wb");
fwrite( data, sizeof( unsigned char ), data_size, wfp );
fclose(wfp);
416デフォルトの名無しさん
2019/08/11(日) 18:25:47.16ID:bWvktEwN
>>415
そんなでかい領域をreallocすると何度もコピーするはめになるから>>412の言うように2パスにするか、各領域をリストで繋いて最後に一気にコピーするようにした方がいい
417395
2019/08/11(日) 19:34:48.78ID:khTmYGk1
>>416
2パスをググってもそれらしいものがなかったのですが、どういうものなのでしょうか?
あと、「各領域をリストで繋いて」というのはvectorに追加しながら最後に連結するということでしょうか?
418デフォルトの名無しさん
2019/08/11(日) 19:44:47.41ID:bWvktEwN
>>417
> 2パスをググってもそれらしいものがなかったのですが、どういうものなのでしょうか?
1回目(Pass 1)ではデータの格納はせずにサイズだけ取得する
合計サイズ分を確保して2回目(Pass 2)で実際に格納するってこと

> あと、「各領域をリストで繋いて」というのはvectorに追加しながら最後に連結するということでしょうか?
そう言うこと
でかいデータはコピーにも時間がかかるからできるだけコピーしないようにした方がいい
419395
2019/08/11(日) 20:30:35.16ID:khTmYGk1
>>417
2パス良さそうですね。
gzread(rzp, data+data_size, MAX_BYTE)
のところを下記のようにNULLにしてもちゃんとファイルの最後まで動いているようなのですが、これがデータ格納せずにサイズを取得するということでしょうか?
gzread(rzp, NULL, MAX_BYTE)
420デフォルトの名無しさん
2019/08/11(日) 20:43:01.53ID:khTmYGk1
すみません、NULLだとそもそも一回も取得できずに終わっていました。。
データ格納せずに一回ファイル精査するのってどうするんでしょうか?
421デフォルトの名無しさん
2019/08/11(日) 21:37:44.09ID:vST/kP4M
>>420
固定長のバッファを1つ用意して、そこに上書きしながら繰り返し読み込めばいい。内容は上書きされて読めなくなるけど、読み捨てるつもりなので気にしない。
422デフォルトの名無しさん
2019/08/11(日) 21:42:34.43ID:bWvktEwN
(最終的なところに)格納しないってことな
適当なバッファを1つ用意して毎回そこに格納しとけばいい
423デフォルトの名無しさん
2019/08/11(日) 21:43:08.15ID:bWvktEwN
あっ、被ってた
424デフォルトの名無しさん
2019/08/11(日) 22:55:38.50ID:khTmYGk1
>>421,422
そういうことですか、理解できましたありがとうございます。
425デフォルトの名無しさん
2019/08/12(月) 00:27:35.40ID:Y24CRytA
vectorだって償却定時間なのに
ホントに2回読む方が速いんか?
426デフォルトの名無しさん
2019/08/12(月) 00:55:04.06ID:owwy1DHX
valgrindってみんな開発に使ってるの?死ぬほど遅いんですが
427デフォルトの名無しさん
2019/08/12(月) 09:13:50.21ID:QXujyVaw
でかい領域のreallocで毎回コピーが発生するというのは都市伝説、
と言いたいところだが他のスレッドが動いているとそうとも言い切れないかそうか、
この場合の2パス方式はgzipが2回走るのがいかにも実行時間の無駄でいやすぐる
最初に大きめの領域をmallocして足りんかったら2パスに切り替えるという投機的なやり方のが良い
428デフォルトの名無しさん
2019/08/12(月) 09:18:32.18ID:QXujyVaw
だいたいいかにgzip様といってもファイルを毎回1/10まで圧縮できるわけはないのだから
読み込むファイルサイズの10倍を確保しておけばほぼ1パスで済む
展開後の実サイズがわかったら展開後の実サイズぴったりにreallocで縮小すれば良い

ちなメモリの断片化はガン無視
実使用サイズの倍のメモリも用意できないようなプアな環境のならmallocやreallocする設計から見直さねばならない
見直すべき
429デフォルトの名無しさん
2019/08/12(月) 10:16:31.87ID:Mc0sgLDk
>>427
意味わからん
スレッドなんて関係ないだろ
430デフォルトの名無しさん
2019/08/12(月) 10:19:40.97ID:QXujyVaw
>>429
ヒープメモリはスレッドで共有される
もしヒープメモリを使う他のスレッドが一切無いなら
realloc()でサイズ拡大してもコピーは生じない(後ろに領域伸ばせるから
この説明でまだ疑念が渦巻くのならプログラミング言語Cをきちんと読み直した砲が良い
(あのmalloc()実装例がmalloc()実装の全てとは言わんが基本
431デフォルトの名無しさん
2019/08/12(月) 10:26:54.62ID:q+3SbcDd
そうとは限らんのでは?
432デフォルトの名無しさん
2019/08/12(月) 10:28:45.76ID:Mc0sgLDk
>>430
断片化って知ってる?
> 後ろに領域伸ばせるから
これ常にできるわけじゃないよ
> この説明でまだ疑念が渦巻くのならプログラミング言語Cをきちんと読み直した砲が良い
お前がなw
433デフォルトの名無しさん
2019/08/12(月) 10:35:35.84ID:q+3SbcDd
特にこの場合はgzipを使うからね
アウトプット用のメモリを確保した上でgzipを実行するわけだけど
gzipが内部で動的にメモリを確保するかしないかは知らんけど、多分するでしょ
そうすると新たに論理アドレス空間が使われるから
連続したメモリ空間を後ろに拡張できるかって言われるとね
434デフォルトの名無しさん
2019/08/12(月) 10:43:33.86ID:QXujyVaw
>>431-433
んまーそれはそうやったorz
あと今回のgzip展開ルーチン呼び出し前にmallocした領域がたまたま後ろに居る可能性もあるな!
しかし>>428-428は断片化が生じないと言っているのではないし主目的のgzip読み込みに関しては
断片化による影響を受けにくくしているのだから大枠問題無い
良い良い、良いではないか
435395
2019/08/12(月) 11:18:22.87ID:lzJUIRtk
色々とご意見ありがとうございます。
どなたかの役にたてばと思い僕が調べた内容をお知らせします。

gzip展開後に5GBくらいになるデータでテストしてみました。

@time ./a.outで簡易的に時間取得
Arealloc方式の場合 >>415 の下記部分でコピーが何回発生しているかをカウントしてみる
// アドレスが変化した場合
if( data != data_new ){
// free(data); // 元オブジェクトは解放済みのため不要
data = data_new;
copy +=1; // コピーした回数をカウント
}else{
not_copy +=1; // コピーせずに拡張できた回数をカウント
}

結果は以下のようになりました。
強力なサーバでメモリが潤沢にあるためか、コピーがほとんど発生しないようで
realloc方式が早かったです。
本日祝日でサーバ使用者が少なく、よりコピー回数が減っていると思います。
個人PCでchromeにメモリ食われたりするとコピーが増えて逆転するかもしれないですね。
環境に合わせて変えようと思います。

# 2パス方式(約27秒)
./a.out 25.12s user 1.27s system 99% cpu 26.479 total

# realloc方式(約15秒)
./a.out 12.73s user 1.46s system 99% cpu 14.263 total
-> コピー 1
-> notコピー 636
436デフォルトの名無しさん
2019/08/12(月) 11:33:43.60ID:ejXFqJv3
と言うことは、vectorだと遅くなるんかね
437デフォルトの名無しさん
2019/08/12(月) 12:00:43.69ID:QXujyVaw
malloc()されたりrealloc()されたりするヒープメモリは仮想アドレス空間に対応した普通のOSならプロセス毎に別空間だから
他のプロセス(他のサーバ利用者が居る or chrome)があってもヒープメモリの断片化に関係しないはず…

さらに、2パス方式の時間が1パス方式の倍になるのはメモリコピーよりもgzip展開を2回もやることが利いているでケテーイ
438395
2019/08/12(月) 16:26:30.60ID:lzJUIRtk
すみません、また疑問が出てきたので相談させてください。
今読み込んだバイナリファイルの解析をしています。
ある一部の8バイトがビッグエンディアン形式で下記になっていて、これが少数点の数値で「2.500000e-04」となるようです。
3e 10 62 4d d2 f1 a9 fc

次に下記URLを参考に調べると今使っているサーバはリトルエンディアンでした。
(CPUはintel)
https://qiita.com/ryuichi1208/items/31442f9e8a7a7c94aeec
このため ビックエンディアン→リトルエンディアン の変換が必要と思うので下記のようにしました。

unsigned char t[8];
double little;
for (int i = 0; i < 8; i++) {
t[i] = data[7-i]; // バイトオーダーの変換
printf("%02x ", t[i]);
}
printf("\n");
memcpy(&little, t, 8);
printf(" %e\n", little);

---結果---
fc a9 f1 d2 4d 62 10 3e
9.536743e-10
----------

ちゃんと反転できていますが、結果は期待値「2.500000e-04」ではありませんでした。

>>続きます
439395
2019/08/12(月) 16:29:26.29ID:lzJUIRtk
次に実際の値を16進数表示したときの確認として下記を実行したところ、結果は以下のようになりました。
int main(){
double data = 2.500000e-04;
unsigned char *p;
int i;
p = (unsigned char *)&data;
for (i = 0; i < 8; i++) {
printf(" %02X", p[i]);
}
printf("\n");
printf("%e\n", data);
return 1;
}

---結果---
FC A9 F1 D2 4D 62 30 3F
2.500000e-04
----------

比較すると、最初の6バイトは同じですが最後の2バイトが違いました。
どうやったらバイナリデータに入っている 「3e 10 62 4d d2 f1 a9 fc」 を 「2.500000e-04」 に変換できるかわかりますでしょうか?
ビッグエンディアン→リトルエンディアン の変換時にもうひと工夫いるのでしょうか?
440デフォルトの名無しさん
2019/08/12(月) 16:44:49.60ID:L6hDiPeu
2.500000e-04のIEEE754表現は3f30624dd2f1a9fcだぞ
元のバイナリの解釈間違ってんだろ
441デフォルトの名無しさん
2019/08/12(月) 16:54:28.94ID:dO9cEAMi
>>426
開発っつーか本当にどうしようもないバグの場合は使う。
遅いって言っても5〜10倍くらいだろ。
442デフォルトの名無しさん
2019/08/12(月) 16:55:20.98ID:L6hDiPeu
2.500000e-04/9.536743e-10≒262144=2^18だからどっかで誰かが18ビットシフトしてないか調べろ
あとはそのバイナリ作った野郎に聞け
443デフォルトの名無しさん
2019/08/12(月) 17:38:07.40ID:ejXFqJv3
decimal64だったりして
サーバのCPUは何?
444395
2019/08/12(月) 18:15:44.42ID:lzJUIRtk
>>440,442
データの方が違うんですかね。。
今調べてますがまだわかりません。

>>443
xeonです。
decimal64というのはまだ調べていませんがまたちょっと違う変換になるんですかね?
445デフォルトの名無しさん
2019/08/12(月) 18:17:10.91ID:ejXFqJv3
サーバじゃないか
もとデータ生成したビッグエンディアンのCPUは何かと
446395
2019/08/12(月) 18:32:01.51ID:lzJUIRtk
同じサーバで生成されました。
生成したソフトは販売されているものなので問題はないと思うし、
他のソフトで読み取ってもちゃんと 2.5e-04 が出てくるのでデータに問題はなさそうです。
なぜそう読めるのか不思議です。。
447デフォルトの名無しさん
2019/08/12(月) 18:32:06.77ID:Mc0sgLDk
Big Endian だし IBM フォーマットとか?
448デフォルトの名無しさん
2019/08/12(月) 18:34:28.15ID:Mc0sgLDk
>>446
> 生成したソフトは販売されているものなので問題はないと思うし、
なぜそのソフトの名前を書かないの?
> 他のソフトで読み取ってもちゃんと 2.5e-04 が出てくるのでデータに問題はなさそうです。
他のソフトって何よ?
みんなエスパーじゃないんだから出せる情報は出しなよ
449395
2019/08/12(月) 19:04:19.39ID:lzJUIRtk
>>448
すみません、calmaという大昔のもので今はもう販売されていません。
450デフォルトの名無しさん
2019/08/12(月) 19:44:21.64ID:Mc0sgLDk
Calmaでググるとこれがヒットするけどこれかな?
https://en.m.wikipedia.org/wiki/Calma
これだとかなり古いソフトウェアだから浮動小数点のフォーマットが違うような気がする
451395
2019/08/12(月) 21:13:36.45ID:lzJUIRtk
>>450
数値をバイナリ変換していそうなコードを今見つけました。
ただのビッグエンディアン表記ではなさそうです。
もう少し調べて見ます。
452395
2019/08/12(月) 22:32:15.08ID:lzJUIRtk
下記で数値からバイナリへの変換ができましたが、何の計算をしているのかさっぱりわかりません……
逆変換できるのでしょうか?

http://codepad.org/oSvOJP1p

---結果---
変換前の値:0.000250
変換後の値:3e 10 62 4d d2 f1 a9 fc
----------
453デフォルトの名無しさん
2019/08/12(月) 22:37:12.67ID:S6a2ieXo
>>452
>>447
454デフォルトの名無しさん
2019/08/12(月) 22:47:45.27ID:ikUKzGwn
浮動小数の正規化っぽいけど
( A < 0.0625 ) || ( A >= 1.0 ) ってのが特殊だと思う
何かそういう事情があったんでしょう
浮動小数の正規化ってのは検索すればわかる
別環境でデコードするだけならたぶん気にしなくて大丈夫
455デフォルトの名無しさん
2019/08/12(月) 22:50:05.37ID:ikUKzGwn
確かに、IBM方式ってやつっぽい
気にしないといかんわw
無駄なこと書いてごめんね
456395
2019/08/12(月) 23:17:08.77ID:lzJUIRtk
>>453-455
ありがとうございます。
今 IBMフォーマット や IBM方式 でググってますが中々それらしいものが出てきません。
かなりマイナーなものなのでしょうか?
457デフォルトの名無しさん
2019/08/12(月) 23:30:07.71ID:S6a2ieXo
「エクセス64」とかでググればいいと思うよ
458蟻人間 ◆T6xkBnTXz7B0
2019/08/12(月) 23:30:19.79ID:rRSk3cI0
https://en.m.wikipedia.org/wiki/IBM_hexadecimal_floating_point
459デフォルトの名無しさん
2019/08/13(火) 10:45:33.34ID:dVadaxxz
こんな感じかな?保証はせん

uint64_t ibm = 0x3e10624dd2f1a9fcULL

if (ibm == 0x0) { return 0.0; }

uint64_t sign = ibm >> 63;
uint64_t ibmexp = (ibm >> 56) & 0x7f;
uint64_t ibmfrac = ibm & 0x00ff'ffff'ffff'ffffULL;

if (ibmexp == 0x0) { return std::numeric_limits<double>::quiet_NaN(); } //てきとう

uint64_t ieeeexp = (ibmexp - 64) * 4 + 1023;
uint64_t ieeefrac = ibmfrac;
while(ieeefrac & 0x0100'0000'0000'0000)
{
ieeefrac <<=1;
--ieeeexp;
}
ieeefrac ^= 0x0100'0000'0000'0000;
ieeefrac >>= 1;

uint64_t ieee = (sign << 63) | (ieeeexp << 55) | ieeefrac;
return *reinterpret_cast<double*>(&ieee);
460デフォルトの名無しさん
2019/08/13(火) 14:26:32.23ID:69RK7xLA
whileの条件逆じゃね?
461デフォルトの名無しさん
2019/08/13(火) 16:15:58.84ID:dVadaxxz
せやなうっかり
462デフォルトの名無しさん
2019/08/13(火) 16:22:35.35ID:dVadaxxz
というか指数部のビット長勘違いしてたわ
459は捨ててください恥ずかしい
463デフォルトの名無しさん
2019/08/13(火) 16:47:23.86ID:69RK7xLA
ieee形式は自前で変換せずにdoubleで計算してしまえばいいんでは?
464デフォルトの名無しさん
2019/08/13(火) 16:53:18.70ID:dVadaxxz
frexpとldexpでやっちゃう方が間違えにくくていいのかな
465デフォルトの名無しさん
2019/08/13(火) 18:22:46.77ID:PZEzWgAr
エクセス64か
半導体とかで使われるGDSIIの実数がそれなんだよね。
自力で実装したわー。
4bitを16進数一桁として考えてて、指数部は16^xで表現されててケチ表現なし。
466デフォルトの名無しさん
2019/08/13(火) 20:43:52.09ID:qE6XkMY1
じゃあどっかにライブラリでもあるんじゃねえの
探したら出てくるパターンだろこれ
467デフォルトの名無しさん
2019/08/13(火) 21:21:58.48ID:6RsDp/em
>>457-466
コメントやサンプルコードありがとうございます。
こんな複雑なコードになるんですね。。
何やってるのかさっぱりわかりませんが、上記コードを参考に勉強してみます。

しかしエクセス64で検索してもそんなに記事が出てこないですね。
かなりの難易度の予感……
468デフォルトの名無しさん
2019/08/13(火) 21:38:17.35ID:qE6XkMY1
これか?

GitHub - enthought/ibm2ieee: Cross-project library for converting IBM-format hexadecimal floating-point to IEEE format binary floating-point.
https://github.com/enthought/ibm2ieee
469デフォルトの名無しさん
2019/08/13(火) 21:49:54.85ID:0//4zuKx
よくやった
寝ることを許可する
470デフォルトの名無しさん
2019/08/13(火) 22:00:36.02ID:yoyEPk6p
日本語だと情報が少なかったので英語圏も検索してみたところ、下記を見つけました。
ここのexcess64_to_ieee754が変換できるものかもしれません。
これから調べてみます。

https://github.com/ulfgri/gdsii-toolbox/blob/de8deaa5972c1449aacc3eea5dda86472ef721a8/Basic/gdsio/convert_float_generic.h
471395
2019/08/13(火) 22:02:53.32ID:yoyEPk6p
>>469

かぶりました。
探していただきありがとうございます。
それも調べてみたいと思います。
472デフォルトの名無しさん
2019/08/13(火) 22:30:02.23ID:b87Bd4Qh
>>467
フォーマットは>>458のリンク先に書いてある
3e 10 62 4d d2 f1 a9 fc の最初の1バイト(3e)は符号ビットと指数
0x3e = (0 0111110) で最初の0は符号(正)
残りの0111110が指数で10進では62
指数は64の時に0と解釈するので62 - 64 = -2
IBM形式では16の指数なので16^(-2) = 1/256
一方仮数部は
1: 1/16
0: 0/256
6: 6/4096
2: 2/65536
:
計 0.064
なので結果は0.064*(1/256) = 0.00025 = 2.5e-4
473395
2019/08/13(火) 23:33:41.23ID:yoyEPk6p
>>472
わかりやすい解説ありがとうございます。
仮数部の計算がまだいまいち理解できていませんが、符号ビットと指数のところは理解できました。
なんとかプログラム作れそうです。
とても勉強になりました。ありがとうございました。
474395
2019/08/14(水) 19:36:19.26ID:4qk3klko
>>472
仮数部の計算も理解できました。
ネットで浮動小数点を解説している記事を見るとどこも2進数で書かれていましたが、 >>472 はこのスレで会話に出しているバイト単位(16進数)で計算してもらってるんですね。
この辺の話になるとこのスレの趣旨から外れてきているのでこの辺にしておきます。

以上、お礼を兼ねての書き込みでした。ありがとうございました。
475デフォルトの名無しさん
2019/08/14(水) 19:42:18.80ID:vrcyV9Lc
bit単位でもいいんだけど元の値との対応が取りにくいから16進の1文字(4bitなのでByteじゃなくてNibbleって言う)単位で計算してる
476デフォルトの名無しさん
2019/08/14(水) 20:46:53.70ID:4qk3klko
そうでした。4bitでした。
今回バイナリ読みで初めてどっぷり16進数を扱ってますがバイトとニブル?がすぐわからなくなります。。
477デフォルトの名無しさん
2019/08/15(木) 21:08:05.11ID:ICD/Kw2h
バイナリ読み込むだけで大騒ぎだな
478デフォルトの名無しさん
2019/08/15(木) 23:25:44.65ID:ON8CHoCN
http://www7b.biglobe.ne.jp/~robe/cpphtml/html02/cpp02007.html

上記URLで
・クラスの宣言はヘッダファイルにする
・クラスの実装部はソースファイルにする
・そのクラスを使いたいときはヘッダファイルのみインクルード
とありますが、これが一般的なのでしょうか?
479デフォルトの名無しさん
2019/08/15(木) 23:28:11.45ID:qONhwHDt
テンプレート使ってないならそう
480デフォルトの名無しさん
2019/08/15(木) 23:28:23.18ID:NU+OkurF
お前はどうしたいんだ?
481デフォルトの名無しさん
2019/08/15(木) 23:34:39.15ID:ON8CHoCN
なるべく基本にのっとった書き方に慣れることで、他の人が書いているプログラムもある程度読めるようになれたら調べるときに助かりそうだと思っています。
482デフォルトの名無しさん
2019/08/16(金) 00:06:45.60ID:rFeA+cBh
だからさ、そういう疑問を持つってことは
お前なりに考えた別のやり方があるんだろ?
それを書けよ
483デフォルトの名無しさん
2019/08/16(金) 06:03:18.56ID:WXGx/ZZ4
イライラしすぎw
484デフォルトの名無しさん
2019/08/16(金) 08:54:32.89ID:obgy5Xre
余裕が無いよね
485デフォルトの名無しさん
2019/08/16(金) 09:25:28.24ID:utjtXV/O
余裕ねえんだよ!
486デフォルトの名無しさん
2019/08/16(金) 12:04:34.47ID:agPg59wH
どういう意味や効果があってそうしてるかじゃなくて「一般的」かどうかばかり気にしてるあたりがプログラマ向きの性格じゃなさそう
487デフォルトの名無しさん
2019/08/17(土) 01:32:10.26ID:hKQWaxIk
iOSのC++の勉強アプリ何個か試してみたんだけど、未だにC++03時代の事までしか教えてないのね。

でも付属の簡易コンパイラはC++17の機能が使えたりする...
488デフォルトの名無しさん
2019/08/17(土) 09:28:18.98ID:pwn7XyQd
初心者のうちから shared_ptrやunique_ptr を積極的に使うようにしてほしい。
489デフォルトの名無しさん
2019/08/17(土) 11:16:45.62ID:AIpU/gsR
いくら便利なものがあるといってもさすがにC++をナマポや自前RAIIの知識なしで使うのは不可能だから、
初心者は最初はメモリ破壊で苦しんだ方がいいと思うわ
490デフォルトの名無しさん
2019/08/17(土) 18:58:14.86ID:RHoMoFJP
https://ideone.com/10xlAn
ギャグなんですけど、
これファイル間またいで定義したい時って何か特別な事しないといけなかったでしたっけ?
「日本語C++」書いてみたい人生だった。
491デフォルトの名無しさん
2019/08/17(土) 19:17:51.68ID:enMhOq0z
>>490
Clangだと通った
https://ideone.com/UhrTDx

GCCは対応していないっぽい
492デフォルトの名無しさん
2019/08/17(土) 19:24:45.74ID:RHoMoFJP
>>491
検証ありがとう。自分はVCなんだけどね。書き忘れてごめん。
VCも無理かな。

最近プリプロセッサは、すたれる流れのようなのでメンテされてないのかなぁ・・・。
493デフォルトの名無しさん
2019/08/17(土) 20:52:47.23ID:pwn7XyQd
マクロは名前空間に閉じ込めることができないからしょうがない
494デフォルトの名無しさん
2019/08/17(土) 21:44:27.19ID:TZKhKhX1
VCはソースを全てBOM付きのutf8にすれば通るんじゃないかな。
495デフォルトの名無しさん
2019/08/18(日) 00:23:19.08ID:rdsOEwya
「一般的」な書き方とは何か
考えざるを得ない流れ
496デフォルトの名無しさん
2019/08/18(日) 01:17:05.19ID:+Tl4M3zk
VC使うならForceAllUTF8入れとけ
497デフォルトの名無しさん
2019/08/18(日) 09:44:27.51ID:S9bN8HAf
#define 違うなら else

これは もしくは の方がいいんじゃねえか?
498デフォルトの名無しさん
2019/08/18(日) 09:51:15.20ID:aqKQgKLg
もし i == 0 なら
printf(">>497 はちょっと頭悪い");
もしくは
printf(">>497 はちょっと頭弱い");

…なるほど正しいかも

ってそんなわけ無いだろw
499デフォルトの名無しさん
2019/08/18(日) 10:01:09.98ID:X/aF/qdA
>>80
>Pythonは「CPythonの実装が規格だ」だし

それrubyと勘違いしてないか?
明文化されていない仕様なんてそんなに残っていないと思うが。

あと、MATLABはアカデミック分野では少なくともRやOctaveなんかより
信用されていると思うよ。
500デフォルトの名無しさん
2019/08/18(日) 10:03:59.09ID:X/aF/qdA
間違えて一か月も前のレス付けてしまった///
501デフォルトの名無しさん
2019/08/18(日) 10:49:51.48ID:kvaoi5YP
make環境を作ると更新ファイルだけコンパイルしてくれたり、色々便利そうなので
コンパイルコマンド直たたきからmake環境に移行しようと考えています。

下記で正常動作しているので、これでmake環境を作りたいと考えていますが
「c++ make」で検索してもあまり情報がないため苦戦しています。
どのように書けば良いかわかりますか?もしくは参考のURLなどあれば教えていただけないでしょうか。

#!/bin/sh -
export CC=~local/bin/gcc
export CXX=~local/bin/g++

g++ -c -g -Wall -pthread -std=c++11 ./Func.cpp -lm -lz -Wextra -o Func.o &&
g++ -c -g -Wall -pthread -std=c++11 ./Main.cpp -lm -lz -Wextra -o Main.o &&
g++ Main.o Func.o -o main.exe -lz
502デフォルトの名無しさん
2019/08/18(日) 10:59:16.60ID:ToM84NKx
正常動作してんだったらそれでいいじゃん
503デフォルトの名無しさん
2019/08/18(日) 11:14:15.09ID:OLPPr8ZD
前半のexportが謎
504デフォルトの名無しさん
2019/08/18(日) 11:22:19.79ID:aqKQgKLg
>>501
簡単に言えばMakefileに

作ってほしいファイル名: そのファイルを作るのに必要なファイル
(タブ(なぜか空白はダメ))作るためのコマンド

をズラズラ書いておけばいい
なのでその例だと

Func.o: Func.cpp
 g++ -c -g -Wall -pthread -std=c++11 ./Func.cpp -lm -lz -Wextra -o Func.o

Main.o: Main.cpp
 g++ -c -g -Wall -pthread -std=c++11 ./Main.cpp -lm -lz -Wextra -o Main.o

Main.exe: Main.o Func.m
 g++ Main.o Func.o -o main.exe -lz

って書いておいて(わかると思うがg++の前はタブな)
make Main.exe
ってやればいい
毎回Main.exeを指定するのが面倒なら
Main.exe: Main.o Func.m
 g++ Main.o Func.o -o main.exe -lz
の行を一番上に持って行けば make だけで作成できる
(makeは指定がないと最初に見つけた作りたいファイルを作ろうとする)
505デフォルトの名無しさん
2019/08/18(日) 11:59:20.99ID:XCKtcmfj
>>501
以下の文献とオライリーのGNUmake読んで、あとは自分で考えるのが良い。
http://aegis.sourceforge.net/auug97.pdf
この辺り、まともに理解してる奴が本当に少ないから。
だからconstexprとかboostとかクソみたいなものをありがたがるんだろうなと思う。
506デフォルトの名無しさん
2019/08/18(日) 12:02:21.51ID:YNXq+wty
ビルドツール選びの時にC++の言語機能をたたく理由がわからない。
507デフォルトの名無しさん
2019/08/18(日) 12:06:43.92ID:XCKtcmfj
>>506
ビルドと言語機能は綿密に絡み合ってるから。
c++使っててこれだけ当たり前の話を理解できないというのが理解できない。
508デフォルトの名無しさん
2019/08/18(日) 12:20:14.52ID:aqKQgKLg
> ビルドと言語機能は綿密に絡み合ってるから。
具体例の1つも出せないクズ乙
509デフォルトの名無しさん
2019/08/18(日) 12:24:12.06ID:XCKtcmfj
>>508
505の内容見て具体例に思えないようならもう話すことはないな。
510デフォルトの名無しさん
2019/08/18(日) 12:25:58.38ID:+Tl4M3zk
> タブ(なぜか空白はダメ)

こういうところがクソ
511デフォルトの名無しさん
2019/08/18(日) 12:32:36.07ID:rdsOEwya
「else」は「さもなくば」
512デフォルトの名無しさん
2019/08/18(日) 12:35:03.02ID:rdsOEwya
Makeは古い
AntかMavenかGradle使え、
いや知らんけど
513デフォルトの名無しさん
2019/08/18(日) 12:39:00.99ID:4oEGaRbg
>>509
ああ、そのまま黙っていてくれ。
514デフォルトの名無しさん
2019/08/18(日) 12:43:59.27ID:aqKQgKLg
>>509
はい、逃げたーw
515デフォルトの名無しさん
2019/08/18(日) 12:54:48.15ID:rdsOEwya
素のMakefileは最終的なオブジェクトファイルとヘッダファイルの依存関係を書き下すのが大変に面倒臭い
なぜなら、
 Target: Dependencies1 Dependencies2 ...
 (TAB)Command
という記述において、Commandが具体的にTargetお生成しないと事実上立ち行かないので、
インクルードファイルAがインクルードファイルB、Cをインクルードしているという状況を
 A: B C
 (TAB)echo Hello World!
などと書くわけには逝かず、あくまで
 foo.obj : foo.cc A B C
 (TAB)gcc foo.cc
式に.objなターゲットに対して関連付けねばならない
ファイルがあるだけで勝手にヘッダファイルの依存関係を解決させることは
GNU Makeの昨日とシェルコマンドを組み合わせてできた気がするが(忘れた
たかがこれだけのためになんでそんな糞面倒なことをせねばならんのじゃ、というキモス

※ 個人の感想です
516デフォルトの名無しさん
2019/08/18(日) 13:00:42.47ID:26pp6bRY
Ruby のRake, Thor などのタスクランナーで、コンパイル出来ないのか?

Webpack, Gulp とか
517デフォルトの名無しさん
2019/08/18(日) 13:02:29.42ID:XgJSnVlI
C++のモジュールシステムはいけてないよね
という話ならわかるが、
constexprとboost?
全く意味がわからねぇ
518デフォルトの名無しさん
2019/08/18(日) 13:07:44.93ID:rJ9LPM9I
>>515
そこは gcc -M 類の出番。まぁ面倒なのは変わらないんだろうけど。
519デフォルトの名無しさん
2019/08/18(日) 13:34:10.37ID:jp7+H4+a
一応昔はコンパイル単位がすなわちモジュールとして機能していたはずだったのに、どこで間違えたんだろうな
520デフォルトの名無しさん
2019/08/18(日) 14:46:24.52ID:aqKQgKLg
>>501
簡単に言えばMakefileに

作ってほしいファイル名: そのファイルを作るのに必要なファイル
(タブ(なぜか空白はダメ))作るためのコマンド

をズラズラ書いておけばいい
なのでその例だと

Func.o: Func.cpp
 g++ -c -g -Wall -pthread -std=c++11 ./Func.cpp -lm -lz -Wextra -o Func.o

Main.o: Main.cpp
 g++ -c -g -Wall -pthread -std=c++11 ./Main.cpp -lm -lz -Wextra -o Main.o

Main.exe: Main.o Func.m
 g++ Main.o Func.o -o main.exe -lz

って書いておいて make Makefile Main.exe
521520
2019/08/18(日) 14:48:27.09ID:aqKQgKLg
スマン、間違えて二重投稿になっちまった
522501
2019/08/18(日) 14:57:48.84ID:kvaoi5YP
>>503
CC, CXXは個別インストールしているgccがあり、以前何かのモジュールをインストールしたときに、元からある
/usr/bin/g++
に関連したライブラリパスが使われることがありこれを設定しました。
今回の単純コンパイルには不要かもしれませんが、おまじないで残していました。

>>504
ありがとうございます。
基本はコマンドを並べていけばいいんですね。
何も指定しない時には先頭のものを指定したことと同じになることも参考になりました。

>>505
このあたりもちゃんと理解できるようになりたいです。
少しづつ勉強したいと思います。

>>512
こんなのもあるんですね。
これも調べてみたいと思います。
523501
2019/08/18(日) 15:01:32.97ID:kvaoi5YP
>>521
いえいえありがとうございます。
まずは単純羅列から入ってCXXFLAGS、OBJS、LIBSなどを使いこなしていこうと思います。
524◆QZaw55cn4c
2019/08/18(日) 16:31:44.67ID:16gP3sh0
>>512
それらが make に比して優れた点はなんでしょうか?
525デフォルトの名無しさん
2019/08/18(日) 17:11:35.03ID:ToM84NKx
>>517
横からすまんが意味はわかる
c++はコンパイル時になんでもかんでも解決しようと必死すぎ
フェーズ分けてbinutils使いこなした方が素直と思うことが多々ある
526デフォルトの名無しさん
2019/08/18(日) 18:18:09.60ID:1zrPBBLI
>>525
binutilsを使う例として、具体的にはどういうことがありますか?
527デフォルトの名無しさん
2019/08/18(日) 18:19:29.10ID:XCKtcmfj
なんなんだろうなこの「俺に手取り足取り教えろ」みたいな要求は。
528デフォルトの名無しさん
2019/08/18(日) 18:30:04.45ID:J+MNWXO/
お前には聞いてないから気にしなくていいぞ
529520
2019/08/18(日) 19:26:20.54ID:wYOmB27V
>>525
ますます意味わからんw
530デフォルトの名無しさん
2019/08/18(日) 19:34:00.82ID:OLPPr8ZD
変なの居るなw
531デフォルトの名無しさん
2019/08/18(日) 19:35:39.45ID:ToM84NKx
スキル不足なのに見下してるやつに教えてやる義理はないんだよね
逃げますね
532デフォルトの名無しさん
2019/08/18(日) 19:40:22.27ID:l1trUFc3
私はneson/ninjaがおぬぬめ🌱
533デフォルトの名無しさん
2019/08/18(日) 22:23:44.93ID:JoepZ2Id
>>525
国際標準になってないbinutilsなんて使ったら、環境依存でコンパイル通らなくなったりする。
534デフォルトの名無しさん
2019/08/19(月) 03:39:22.51ID:uhqBoit2
VC++2017で std::string str = "abcd";ってやると
debugモードだとビルドできてるのに
ReleaseモードだとLNK2001エラーが出てしまいます

他に何か宣言かlibがいるのでしょうか
昨日一日この点で一日悪戦苦闘していました

ちなみにプロジェクトはコンソールアプリで
リンカーのシステムは処理の都合上、Windows(/SUBSYSTEM:WINDOWS)にしてあります
535デフォルトの名無しさん
2019/08/19(月) 06:43:15.57ID:tEbkN2rV
プロジェクトの構成変更したときにDebug版だけ変えたとかじゃねえの
536デフォルトの名無しさん
2019/08/19(月) 06:56:44.40ID:bPMhHkYv
>>524
遅レススマンが、知っている単語を並べてみただけなので
全く
わかり
ません
537デフォルトの名無しさん
2019/08/19(月) 07:12:08.46ID:p1963chb
>ファイルがあるだけで勝手にヘッダファイルの依存関係を解決

俺はこれカスタムして使ってます
https://postd.cc/makefile-c-projects/
538デフォルトの名無しさん
2019/08/19(月) 09:00:35.28ID:uhqBoit2
>>535
いつの間にかReleaseの方ばかり設定いじるというアホなことやらかしてました。
プロジェクトを作り直してソースをコピーすることで解決しました。
539デフォルトの名無しさん
2019/08/19(月) 09:12:20.21ID:uhqBoit2
VC++2017でコンソールアプリとしてプロジェクトを立ち上げました。
しかし、コンソール(dos窓)を非表示にするべく
構成プロパティのリンカー→システム→サブシステムを
Windows(/SUBSYSTEM:WINDOWS)にしてwindows.hをincludeして
int main(void)からint WINAPI WinMain(void)に変更してビルドすると
「C2731 'WinMain':関数はオーバーロードできません」と言われました。

構成プロパティのリンカー→詳細設定→エントリ ポイントをmainにしてビルドしても
結果は変わらず、int main(void)に戻すと大量にエラーが発生しました。

この場合、どうすればよろしいのでしょう?
540デフォルトの名無しさん
2019/08/19(月) 09:16:19.09ID:dFJ5NqVw
WinMainのシグネチャが違う
541デフォルトの名無しさん
2019/08/19(月) 09:16:37.96ID:pYNmdJ6B
>>539
エラーメッセージにしたがって修正すればよろしいですよ。
542デフォルトの名無しさん
2019/08/19(月) 09:37:33.04ID:rfX59j2s
>>539
なぜ手でsubsystem変えようとしてんの?
VSのテンプレートそのまま使えばいいじゃん
それができないならその理由を説明すべき
543デフォルトの名無しさん
2019/08/19(月) 09:40:50.85ID:uhqBoit2
>>540-541
ありがとうございます。
以前ググって見つけたものをだまされたと思って
int WINAPI WinMain(void)から
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char* lpCmdLine, int nCmdShow)に
変更したらReleaseモードでも上手くいきました。
でも、元が(void)なんで、引数の設定に釈然としないところありますが…
544デフォルトの名無しさん
2019/08/19(月) 09:43:45.91ID:uhqBoit2
>>542
普通にやったらどうしても大きなdos窓がしばらく現れるので
(処理の都合上system関数からのexe実行が必要だからです)
ググって調べたらそういう風にいじれと書いてあったからです。
545デフォルトの名無しさん
2019/08/19(月) 10:35:27.56ID:bcOlNC6N
boostなしで128ビット複素数を使う最もシンプルな方法ってなんですか?
546デフォルトの名無しさん
2019/08/19(月) 13:02:54.66ID:Bn3yVmZh
complex<__int128_t>
547デフォルトの名無しさん
2019/08/19(月) 15:12:55.94ID:bov4igyL
>>546
c++における4倍精度三角関数の呼び方が分かりません
cosq()とかsinq()のことです
548デフォルトの名無しさん
2019/08/19(月) 15:33:17.41ID:Kz64oJjl
複素数関係ないじゃん…
549さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/08/19(月) 15:36:02.76ID:5pda5jNo
コスキュー、シンキューじゃあかんの?

コサインクアドラント、サインクアドラント
550デフォルトの名無しさん
2019/08/19(月) 21:07:56.83ID:thJnfNrr
4倍精度ライブラリでまともな速度出るものってないのでは。
551デフォルトの名無しさん
2019/08/19(月) 21:14:48.68ID:78Wz1qhX
template+constexpr => これ最強!!!
552デフォルトの名無しさん
2019/08/19(月) 21:20:16.93ID:uC0UGtuo
C++20でようやく使っても良いかな程度
553デフォルトの名無しさん
2019/08/19(月) 21:23:04.43ID:78Wz1qhX
unifyde call syntax => 邪道。

でも、欲しいのである。
関数型食えると思うんだけどなー。
554デフォルトの名無しさん
2019/08/19(月) 23:23:04.65ID:ZU65OOaB
バイトデータの比較を高速に行いたいのですが、以下@Aを考えました。
連続したバイトデータを比較するのに下記以外に簡素に書ける方法はありませんか?
memcpyはコピーが発生するのでちょっと遅くなるかなと思っています。

int main(){
unsigned char byte[6] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
// @1バイトずつ比較
if( byte[2] == 0x03 && byte[3] == 0x04 && byte[4] == 0x05 && byte[5] == 0x06 ){
printf("yes\n");
}else{
printf("no\n");
}
// Aビット演算した結果を比較
if( (byte[2] << 24 | byte[3] << 16 | byte[4] << 8 | byte[5]) == 0x03040506 ){
printf("yes\n");
}else{
printf("no\n");
}
}
555デフォルトの名無しさん
2019/08/19(月) 23:35:28.83ID:78Wz1qhX
std::int8_t A[]={0,1,2,3};
std::uint32_t* B=(std::uint32_t)A; //care align.

if(*B == 0x03020100){
//yes.
}else{
//no
}
SIMDライクな感じで比較できる気がするけど、おススメはしない。
エンディアン注意。
556デフォルトの名無しさん
2019/08/20(火) 00:09:06.19ID:C94+kmpU
クヌース-モリス-プラット法とかボイヤー-ムーア法とかやらんかい
https://nebuta.hatenablog.jp/entry/20110127/1296115997
557デフォルトの名無しさん
2019/08/20(火) 01:22:04.58ID:PxgCmY+k
>>554
memcmp とか std::equal とか。速度はどうなるかわからないので推測じゃなくて実測でよろしく。
558デフォルトの名無しさん
2019/08/20(火) 01:33:17.10ID:XxGMpj+X
データの性質によるけどテーブル使ったCRC16で比較するのは?
559デフォルトの名無しさん
2019/08/20(火) 01:43:07.39ID:P90sZTO5
>>554
ぐだぐだ考えてないでてめえで計測しろ
計測しないなら黙ってmemcmp使っとけ
560デフォルトの名無しさん
2019/08/20(火) 02:14:14.18ID:HUUEwIaK
>>554
少量のメモリ上の値比較やコピーの処理時間なんて無視できる程度で考える必要もない。
大量のデータの比較を行うとしたら、その大量のデータがメモリ上に存在するために多くの場合はファイルI/Oなり通信なり演算なりしているはずで、そちらのコストの方が桁違いに大きいから単純な比較処理のコストを気にするのは無意味。
ほんとに気にする必要があるのか、まずは確認すべきだろう。つまらない高速化を考えるより、可読性の高い素直なコードを書いた方がいいよ。
561デフォルトの名無しさん
2019/08/20(火) 13:11:19.02ID:20EaQULd
高速化って言ったら、やっぱりよく使う変数をレジスタに割り当てることが大事だよな
メンバ変数は毎回メモリとやり取りするので遅くなるから
ループ外で自動変数に読み込んでから使うとビックリするぐらい速くなったよ
562デフォルトの名無しさん
2019/08/20(火) 13:24:48.11ID:dsMJquaY
(いつの時代の話だろう?)
563デフォルトの名無しさん
2019/08/20(火) 13:45:22.85ID:JO8kTZu8
(コンパイラを作っているのだろう)
564520
2019/08/20(火) 13:57:22.86ID:vf53Ia55
(日記はチラウラに)
565デフォルトの名無しさん
2019/08/20(火) 14:07:45.10ID:hCU5dYnH
(>>562-564
こいつらの自信はどっから来てるんだろう)
566デフォルトの名無しさん
2019/08/20(火) 14:18:58.77ID:Ic3/d448
(むしろ自信なんてどこから出てきたんだ…)
567デフォルトの名無しさん
2019/08/20(火) 14:29:19.64ID:aHZAynoR
よくあるような、
if ( (c >= 'A' && code <='Z') || (c >= 'a' && code <='z') ||
  c == '_' ) {
 ・・・
}
の部分を、条件jmp文が少しでも少なくなるようにと思って、
予め作成しておいたテーブル(配列)を使って、
if ( eiji_or_underscore[c] != 0 ) {
 ・・・
}
として実測してみたところ、何度計測しても後者の方が遅くなった。
アセンブリコードを見てみても、前者だと5つの条件jmp命令、後者だと1つの条件jmp命令と、
後者の方が命令数が少なくっていた。しかし、前者だと、レジスタとcmp命令を使っていたが、
後者だとグローバル変数の配列を読み出しに行っていた。

最近のCPUは非常に複雑で高度な「分岐予測」をしていて、配列は読み出してみないと
値が分からないので、「予測」ができず、分岐予測の「予測間違い」がおきるが、
レジスタをcmpで比較する場合には予測が出来るためだろうか。

しかし、昔より最適化する際にどっちが高速になるかの予想が難しくなってしまってる。
568デフォルトの名無しさん
2019/08/20(火) 14:39:39.94ID:aHZAynoR
>>567
誤:if ( (c >= 'A' && code <='Z') || (c >= 'a' && code <='z') ||
正:if ( (c >= 'A' && c <='Z') || (c >= 'a' && c <='z') ||
569デフォルトの名無しさん
2019/08/20(火) 14:40:33.96ID:hCU5dYnH
分岐予測はデータの内容関係ないやろ
570デフォルトの名無しさん
2019/08/20(火) 14:48:01.70ID:lOKfo+mN
最近の環境では「実測」の信頼性確保も、また難しいです。
なぜかある時には何度測定しても遅いのに、あらためて別の時に
測ると速く出る事があったりします。
571デフォルトの名無しさん
2019/08/20(火) 14:48:40.12ID:vf53Ia55
単にテーブル参照はメモリーから読み出すから遅いだけだろ
572デフォルトの名無しさん
2019/08/20(火) 14:49:27.63ID:20EaQULd
俺が書いた通り、単にメモリへのアクセスが遅いんだよ
573デフォルトの名無しさん
2019/08/20(火) 15:08:33.40ID:aHZAynoR
理論上は、メモリがキャッシュに乗っている限り、メモリの読み書きとレジスタ
への読み書きの速度は同一です。

ただし、メモリとメモリは add, sub, mov 命令で2つのオペランドに同時指定は
出来ないのに対し、レジスタは出来るので、確率的にレジスタの方が必要な
命令数が少なくて済むので高速になる場合があります。
あとキャッシュに乗って無い場合はメモリは遅くなります。
574デフォルトの名無しさん
2019/08/20(火) 15:22:22.32ID:hCU5dYnH
>>571
アホか>>567読み直せ
575デフォルトの名無しさん
2019/08/20(火) 15:23:45.52ID:hCU5dYnH
あ、すまん俺の方が間違えてた・・
まさかとは思うけど最適化してないとか無いよね
576デフォルトの名無しさん
2019/08/20(火) 15:29:52.16ID:lOKfo+mN
>>575
最適化はどちらも同じオプションでしてますし、出力されたアセンブリ・コード
も見て、テーブルを使った方が命令数の少ないコードになっていることも
確認してます。条件jmp命令も少なくなっています。
577デフォルトの名無しさん
2019/08/20(火) 15:30:02.90ID:hCU5dYnH
あと前者のコードは与えたcの値がA-Zだと分岐の回数2回で済むからじゃないかね
578デフォルトの名無しさん
2019/08/20(火) 15:36:01.76ID:aHZAynoR
>>577
実はその影響もあると思っているのですが、それだけだと前者の場合には、
命令数から言えば1〜2クロックほど速くなる場合がある程度です。
しかし、実測してみると、後者のやり方の方がもっと遅くなっている
ようなんです。

面倒ですが、マクロスイッチでコードを切り替えられるようにして
短時間の内に二つを切り替えて速度比較してみようかと思っているところです。
579デフォルトの名無しさん
2019/08/20(火) 15:51:20.21ID:lOKfo+mN
最近のCPUは温度によってクロック数が変動する可能性もあるそうですね。
580デフォルトの名無しさん
2019/08/20(火) 16:13:18.12ID:hCU5dYnH
テーブルがキャッシュに乗ってなかったり、
>>561と同じでテーブルがグローバル変数だと書き換えを懸念して最適化ぎ抑制されてんじゃないかな
581デフォルトの名無しさん
2019/08/20(火) 16:16:16.40ID:JJ0cBhAp
レンジエラーになりそうで怖い。っていう横やり。
582デフォルトの名無しさん
2019/08/20(火) 16:23:55.23ID:lOKfo+mN
マクロスイッチ切り替え方式にして、ほぼ同時に両方を測定してみたら、
テーブル方式の方が速くなっていました。
583デフォルトの名無しさん
2019/08/20(火) 16:32:21.29ID:JJ0cBhAp
キャッシュ汚染とかの話になったの?
584デフォルトの名無しさん
2019/08/20(火) 17:25:38.94ID:lOKfo+mN
>>580
アセンブリコードを見る限り、特に問題なく、人間が単純に書いた場合
と似たようなコードになっています。

ただし、一点、テーブルの c 番目の要素を参照する際、バイト整数の c
をゼロ拡張して32BIT 整数にする必要があるのですが、自分の使ってるVC++
だと、movzx 命令を使わずに、xor eax,eax; mov al,cl のように2命令
を使ってしまっている点が、人間が最適化するより遅いコードになってしまって
います。
585554
2019/08/20(火) 18:34:23.13ID:4t2XBONQ
コメントありがとうございます。

>>555
エンディアンを気にしないといけないのは後々分かりづらくなりそうですね。。

memcmpというのがあったんですね。
連続バイト比較ができてシンプルで良さそうです。
これを使ってみます。
586デフォルトの名無しさん
2019/08/20(火) 19:55:32.24ID:otgnf5aI
volatile命令の他にキャッシュ命令とか無いのかよ
ルックアップテーブルをキャッシュに載せときゃ爆速じゃん
もっと言えばテーブルを石に焼いた時一番早い
587デフォルトの名無しさん
2019/08/20(火) 22:55:27.89ID:C94+kmpU
>>569
>分岐予測はデータの内容関係ないやろ
分 岐 予 測 は デ ー タ の 内 容 (統計的偏り) に 関 係 あ る

>>567
最近のCPUは黒魔術で製造されているからミクロな最適化を下手に人が手を加えるより
単純なアルゴリズムにした方が速いことが多くなた
印象
588デフォルトの名無しさん
2019/08/20(火) 23:22:44.05ID:hCU5dYnH
>>587
お前はアレか
>>567の言う「配列は読み出してみないと値がわからないので、予測が出来ず」
が正しいと?
589デフォルトの名無しさん
2019/08/21(水) 01:15:10.83ID:X4j3osk/
多分メモリが読めてない状態でも分岐予測して投機的実行はするんじゃないかな
近代的なCPUは
590デフォルトの名無しさん
2019/08/21(水) 05:42:53.52ID:Vc3YPkYv
>>567の前半部のコード
>if ( (c >= 'A' && code <='Z') || (c >= 'a' && code <='z') ||
>  c == '_' ) {
> ・・・
>}
はCPUレベルの分岐予測+投機的実行では入力データによっては速度向上し難いケースがある
 AaZz_AaZz_AaZz_....
という入力を考えたらワカル(cといして1文字入力される度に||か&&を打ち切る分岐箇所がちがーう
分岐予測キャッシュというのは分岐命令1個につき1状態か2状態記憶がせいぜい(しかもLRU式に記憶が消える
のでこのような場合は投機的実行結果が捨てられ続けかねない

>>598
ハイ論破

>>589
分岐予測と投機的実行が効力を発揮するのは多重ループで内側の分岐条件が大部分の時間変わらないというケース
591デフォルトの名無しさん
2019/08/21(水) 05:59:08.65ID:Vc3YPkYv
ちゅか&&や||の条件式に関数呼び出しが含まれない単純なケースにおいては、
OoOと分岐予測を備えた今日日のCPUでは途中で打ち切るより全部評価してしまった砲が速い可能性がおおきい
このとき問題になるのは副作用のある式が問題であり、
副作用がある++や--があると、やっぱ言語規格どおり||や&&は条件成立で打ち切らないとソースコードに書かれた気体動作と
オブジェクトコードの動作が別物になってしまうので諸悪の根源
C言語を引きずった仕様のままでは時代について逝けてない

Rustで++や--を式の中で使えないのは故無きことでは無いんじゃ…
592デフォルトの名無しさん
2019/08/21(水) 06:00:45.09ID:Vc3YPkYv
スマンGoと混同した
Rustに++や--は無い
593デフォルトの名無しさん
2019/08/21(水) 06:13:21.67ID:UK/6EOKQ
もうRustはいいから
594デフォルトの名無しさん
2019/08/21(水) 07:20:20.39ID:6njIT3pF
>>590
> (しかもLRU式に記憶が消える
知ったか乙
せめて
https://ja.m.wikipedia.org/wiki/分岐予測
くらいは読んでこい

> のでこのような場合は投機的実行結果が捨てられ続けかねない
そりゃ頑張って作れば最悪の状況は作れるよw
だから何?って話だが
595デフォルトの名無しさん
2019/08/21(水) 10:08:42.06ID:yoKe7uXb
>>590
そういう安価ミスはちゃんと訂正しろよ
あと反論になってない
語弊はあったろうけど配列だから分岐予測が効かないなんて話はないだろうと言いたかっただけだ
596デフォルトの名無しさん
2019/08/21(水) 20:40:17.99ID:fYY/XStv
>>586
1バイトの即値データとの比較の方が速いに決まってんだろ。
命令デコードする段階で比較対象のデータとってこれるんだから
597デフォルトの名無しさん
2019/08/21(水) 22:54:56.30ID:Vc3YPkYv
>>594
リンク先のどこにLRUでは無いと書いてあるんじゃ…
分岐予測キャッシュがあふれたときはLRUが基本
これは2次キャッシュを儲けても関係ない(それぞれの中で溢れたらLRU
むしろハードウェア実装の制限でLRUより性能の落ちるしくみを使うこともある
が(nウェイセットアソシアティブの「アソシアティブ」部分は一部アドレス線の固定解釈による簡素化

>>595
分岐予測が性能を発揮しない例が有る以上ハイ論破の訂正の必要は認められぬ
598デフォルトの名無しさん
2019/08/21(水) 23:02:56.86ID:Vc3YPkYv
もし分岐予測制度を上げるためのキャッシュエントリのn状態化とキャッシュが溢れた場合の話を
混同しているんだとしたらきわめておめでたい話だといえる

あるアドレスの分岐命令に対応するキャッシュエントリがどの状態に居たとしても、
そんあことはお構いなしに溢れたときはどれかのエントリが消される.。
このとき他の制約が無ければ理想解はLRUという話
599デフォルトの名無しさん
2019/08/21(水) 23:16:22.08ID:Vc3YPkYv
ていうか
>1状態か2状態記憶がせいぜい(しかもLRU式に記憶が消える (>>590
とまで書いたのだからキャッシュエントリのn状態化は機知の前提で話していることぐらいは読み取って
ホスイ
(雑駁なリンク先を示すよりはむしろ「1状態って何だよ2状態だろパーカwwwwwww」ぐらいの反応であれば>>594は知性を疑われずに済んだ
600デフォルトの名無しさん
2019/08/21(水) 23:18:51.67ID:yoKe7uXb
ただのこじつけじゃねーか
てかそんだけ御託並べて質問者へのアドバイスはゼロかw

(というかこいつの論調どっかで見たな・・・)
601デフォルトの名無しさん
2019/08/22(木) 00:05:50.83ID:F37ex36A
>>597-599
分岐予測はキャッシュじゃねーぞw
反論するなら分岐予測にLRUアルゴリズムを使ってる奴はCPU挙げてみな
602デフォルトの名無しさん
2019/08/22(木) 10:59:48.20ID:36M5lMYO
いや、まてまて、そもそも今の話は、分岐予測の精度は関係無いのでは?

>「配列は読み出してみないと値がわからないので、予測が出来ず」

がおかしいって話でしょ
精度はともかく、分岐予測はするでしょ
というか、逆に、値が分からないから分岐予測するようなもので

分岐予測の精度に関しても、if文のかっこの中の計算が終わってない状態で
適当にジャンプするのは同じでしょ、配列が読めてようが読めてなかろうが
603デフォルトの名無しさん
2019/08/22(木) 11:58:47.76ID:Vlc++9B2
そりゃー予測なんかせず配列まるまる全部をキャッシュに乗せるから早いんだろ
つまり予測しないルックアップテーブルの時が一番早い
そのテーブルがCPUに焼きこんであればもっと早い
604デフォルトの名無しさん
2019/08/22(木) 13:09:16.96ID:36M5lMYO
いやだから、ルックアップテーブルの結果を受けて分岐する話なんだから・・
おかしなこと言うな
605デフォルトの名無しさん
2019/08/22(木) 14:18:30.45ID:Ubta0nDz
イキってるパソコンの大先生の子供部屋おじさんがいますね…
606デフォルトの名無しさん
2019/08/22(木) 15:51:21.48ID:eMNxtHht
多くのCコンパイラがサポートしてるquadmath (__int128とか__float128とかその関数)がかなり便利なのですが、なぜこれはC++の標準の機能にならなかったのですか?
607デフォルトの名無しさん
2019/08/22(木) 18:02:39.65ID:/5icwwgo
殆んどのハードでの実装がソフトで遅いし、需要も少ない
使いたきゃboostにあるし

標準化されるとしたら、x86とかでハード実装された後に標準型として対応するんじゃね?
てかlong doubleがワケわからんことになっているのをどうにかしろと
608デフォルトの名無しさん
2019/08/22(木) 18:28:45.94ID:6PHJNtSf
'A' から 'Z と 'a'から'z' は連続した文字コードである
ここにcpuの速度の秘密がある はず
609デフォルトの名無しさん
2019/08/22(木) 19:44:40.23ID:/1dDo18x
>>608
> 'A' から 'Z と 'a'から'z' は連続した文字コードである
はあ?
610デフォルトの名無しさん
2019/08/22(木) 20:52:16.00ID:KKaRKvsP
>>606
大型計算機にすら倍々精度をハードウェアで扱ってないもんな
命令体系は用意されてるけど
ソフトで十分ってこった
611デフォルトの名無しさん
2019/08/22(木) 20:56:48.17ID:NZc4hO3L
>>606
ところで、そんな精度を何に使ってるの?
612デフォルトの名無しさん
2019/08/22(木) 20:59:38.41ID:2HKFvfoP
float128よりdecimal64の方が需要あるんじゃね
613デフォルトの名無しさん
2019/08/22(木) 21:59:41.74ID:AFh1DZYh
>>612
それ金融でほしいやつだな。
国家予算研究できるな!
614デフォルトの名無しさん
2019/08/22(木) 22:01:20.66ID:ufMqk9YS
そこでCOBOLですよ
615デフォルトの名無しさん
2019/08/22(木) 22:10:35.40ID:AFh1DZYh
KaMiの言語・コボル かー。


読めんわ!!!
616蟻人間 ◆T6xkBnTXz7B0
2019/08/22(木) 22:26:31.30ID:QnESaaq9
https://github.com/LiraNuna/soft-ieee754
こういうのもあるよ。
自分のデータ型を作ろうとすればできないこともない。
617デフォルトの名無しさん
2019/08/22(木) 22:29:56.92ID:AFh1DZYh
>>616
金融計算をIEEE754(?)でやってはいけないのだ。
2進化10進数でやらないと誤差が出る。
618デフォルトの名無しさん
2019/08/22(木) 22:53:17.49ID:MZ7gjtS4
二進化十進数でも誤差でるから
当たり前だけど
有理数でやるんだよ
619デフォルトの名無しさん
2019/08/22(木) 22:59:39.88ID:ywV62E2Z
そういう話じゃない。
金融計算では10進数のどの桁でどういう丸めを行うか決まっているから、
その通りの結果になることが「誤差がない」状態なんだよ。
620デフォルトの名無しさん
2019/08/22(木) 23:13:26.11ID:4VSp96xm
普通そういうのは多倍長整数じゃないのか
621デフォルトの名無しさん
2019/08/23(金) 00:16:10.19ID:/B94cENN
>>611
畳み込み和の計算はフーリエ変換して求めておいて最後に逆変換することで高速化できます (畳み込み定理) が、しばしば誤差の増大がネックになります
こういう問題で出てくる整数はとても大きいということもあります
だから巨大な数を普通に扱いたいのです

数論変換 (整数環上でのDFT) をすれば良いのですが、もっと単純化できないかという試行錯誤です
622デフォルトの名無しさん
2019/08/23(金) 00:39:49.78ID:CmTDylN7
蒸し返すようですいませんがGNU Makeに取って代わるデファクトスタンダードなビルドシステムってCMakeじゃないんですかね
623デフォルトの名無しさん
2019/08/23(金) 02:34:27.19ID:5WDa9rK8
>>608
規格で保証されてるのは'0'から'9'が連続してることだけな
624デフォルトの名無しさん
2019/08/23(金) 21:07:50.69ID:1CEPBqe0
>>622
取って代わるというかmakefileをつくるメタビルドツールって方が認識として正しい。
実際cmakeでwindowsでもlinuxでもビルドできるように設定するのはマジ辛いぞ。
625◆QZaw55cn4c
2019/08/23(金) 21:29:52.90ID:NZyGR+Pl
>>624
そういうのは windows 用と linux 用にわけるんじゃないでしょうか?
626デフォルトの名無しさん
2019/08/23(金) 21:30:32.32ID:9XBmxzHo
CMakeもAutoconfなんかと比べたら簡単になったんだろうけど、自分で書くならgypだな。
627デフォルトの名無しさん
2019/08/23(金) 21:42:53.01ID:CGqYEl83
>>625
cmakeを何だと思ってる
使ったことないのかよ
628デフォルトの名無しさん
2019/08/23(金) 23:17:25.97ID:0H/lDr6k
馬鹿朝鮮人が使ってるわけないだろ
629デフォルトの名無しさん
2019/08/23(金) 23:21:07.68ID:LHN2h0YB
automake/autoconfに慣れたからcmakeいらんわ
うまくクロス環境みつけてくれないこと多いし
630デフォルトの名無しさん
2019/08/24(土) 09:02:17.39ID:u6taJwr5
>>625
cmakeとかautomake系のツールのコンセプトはできるだけ分けないで書けるように
ってところではあるが、まあ実際はそれぞれの環境用に色々やるのと大して変わらん。
少なくともデバッグするときはその環境毎のビルドがわかってないとほぼ詰むし。
なんだかんだでまずlinux系統でmakeになれるのが近道だとは思うけどね。
あれでヘッダー依存の取り扱いがしっかり書けるようになれば大抵のビルドシステムにも慣れるだろう。
631デフォルトの名無しさん
2019/08/24(土) 09:18:12.19ID:+PLwcW2w
最終的にクロスプラットフォームでちゃんとやれることを目指すならmakeもmsbuildも
両方押さえておかなければならないわけで、どっちが先ってことはないと思うがな。
632デフォルトの名無しさん
2019/08/24(土) 20:42:19.22ID:u6taJwr5
makeのが圧倒的に情報調べるのが楽だろ。
633デフォルトの名無しさん
2019/08/24(土) 21:18:36.57ID:Dnv6GXtW
WSLが一般的になったら苦労は減るのだろうか
634デフォルトの名無しさん
2019/08/24(土) 22:40:38.50ID:+PLwcW2w
- >>630>>632に話の脈絡が全くない
- >>632 べつに楽な方から始めるのが良いという根拠もない
- というか>>630はmakeがわかれば他はもっと楽だという、逆のニュアンスだったんじゃないの?
- そもそもmsbuildの情報もMSDNで簡単に調べられるし

ツッコミどころ多すぎ。

>あれでヘッダー依存の取り扱いがしっかり書けるようになれば

いまどきlinuxでもそんなん手書きする奴はいないw
635デフォルトの名無しさん
2019/08/25(日) 12:27:30.33ID:haXU+hCF
makeじゃなくてmsbuild教える方がいいと思うならお前はそうしろ。
それが本当にいいと思ってんならな。
俺だったらmakeを教えるというだけの話だ。
636デフォルトの名無しさん
2019/08/25(日) 14:08:01.24ID:Nf3A65/V
また支離滅裂なw
makeとmsbuildの優劣なんて話はしてないんだが、日本語不自由なのか?

>少なくともデバッグするときはその環境毎のビルドがわかってないとほぼ詰むし。

という理由でmakeを覚えなければならないと主張するなら、同じ理由でwindows環境向けには
msbuildを覚えておかなければ片手落ちだろうと指摘しただけ。

まぁどうせ上の理由も後付けで、cmakeを知らない爺が横からmakeを布教しようとしただけなんだろうが。
637デフォルトの名無しさん
2019/08/25(日) 15:35:39.92ID:qzIUG/z9
makeの罠の多さは異常
絶対手で触りたくない
638デフォルトの名無しさん
2019/08/25(日) 15:51:39.75ID:hTkFprTS
手で触るもんじゃないけど
一度手で触っておかないと吐き出されたmakefileを見て何がおかしいか理解できない
639デフォルトの名無しさん
2019/08/26(月) 11:17:55.70ID:mep62E1y
std::condition_variableを使って複数のスレッドが待ち状態の時、
notify_oneで一つだけスレッドロック解除した場合、解除されるスレッドに優先度はある?
例えば、一番最初に待ち状態に入ったスレッドのロックが解除されるとか。
それとも完全に実装依存?
640デフォルトの名無しさん
2019/08/26(月) 16:25:41.54ID:yDrui9+d
notify_one使ったことないけど解説読む限り実装依存に見える(待機中のスレッドからいずれか一つ、とかあるし)
順序あるならそう書かれると思う
曖昧ですまんけど
641デフォルトの名無しさん
2019/08/26(月) 19:23:22.50ID:mB+f+FeE
実装定義だと思うけど、wait呼び出した順だと考えていいと思う
642デフォルトの名無しさん
2019/08/26(月) 20:31:47.24ID:bJVhcqWX
俺は多分カーネルのスレッドのスケジューリングで
たまたま選ばれたやつが走ると思う
しらんけど
643デフォルトの名無しさん
2019/08/26(月) 22:58:04.80ID:ZsUTwn4r
流れ読まずに申し訳ございません、質問させてください。

非エンジニアのものなのですが、下記のようなオープンソースのコードを使って
メッセージのウェブアプリケーションを創ってみたいのですが、
一番手っ取り早い方法はどういう方法でしょうか?

漠然とした質問で申し訳ございません

▶Telegram
https://telegram.org/apps#source-code
▶Signal
https://github.com/signalapp
▶Rocket Chat
https://github.com/RocketChat/Rocket.Chat
▶Tox
https://github.com/Tox/tox.chat
▶Wire
https://github.com/wireapp/wire
644デフォルトの名無しさん
2019/08/26(月) 23:04:19.65ID:l3oC4Mh5
金で解決
645デフォルトの名無しさん
2019/08/26(月) 23:21:58.15ID:h9DDya56
>>636
お前ほんとにmsbuildいじったことあるのか?
あんなクソなものを本気で使ってんの?
てかヘッダ依存解決くらい書けなきゃまともなビルドシステムなんて絶対組めねーよ。
こういう誤誘導を平気でするやつってどういう神経してんだろうな。。
646さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/08/26(月) 23:25:34.58ID:doK8kIo2
>>643
ウェブアプリなのにC++スレで質問するの? 根本的に間違ってるんじゃない?
647デフォルトの名無しさん
2019/08/27(火) 00:16:27.36ID:tgTbqYO8
最近C++を学び始めたのですが、
テンプレート引数の型をコンパイル時に文字列に変換する方法ってあるのでしょうか?

できればテンプレートの特殊化やプリプロセス命令を使わずに以下の用な感じでかければよいのですが

template<typename Type>
class Hoge
{
public:
static constexpr char* Text = Typeを文字列に変換して納入したい
};
648デフォルトの名無しさん
2019/08/27(火) 00:31:42.36ID:EWBBAhUG
無理ゲー
あくまで自動にこだわるならtypeid使え。
自作クラスだけならクラス名を名乗るメンバ関数でも作っとけ
649デフォルトの名無しさん
2019/08/27(火) 01:14:06.25ID:tTk1EYER
https://github.com/Manu343726/ctti
650デフォルトの名無しさん
2019/08/27(火) 08:26:10.70ID:CO6EoWnq
>てかヘッダ依存解決くらい書けなきゃまともなビルドシステムなんて絶対組めねーよ。

いつの時代から来たんだよw
ソースに #include 書く度にいちいちMakefile書き換えんのか?
651デフォルトの名無しさん
2019/08/27(火) 08:40:44.27ID:l579ej24
>>646
初心者狩りしてるこいつ一人ww
652デフォルトの名無しさん
2019/08/27(火) 17:31:34.79ID:icKeAJ7/
>>649
以前nameofとかいうライブラリ?が同じくgithubにあったけどどっちが便利かな
というかこの手のは他にもあるっぽいな

>>651
いや合ってると思うけど
ウェブなのかネイティブなのか、多分ごっちゃになってるだろうからまずそこを指摘すべき
653デフォルトの名無しさん
2019/08/27(火) 18:46:31.35ID:idJxRw9J
別にウェブだからって既存のブラウザ上で動くものという定義はあるまい
サーバーサイドもクライアントサイドも両方C++で作ればいい
そもそもブラウザだってC++で作られているんだから
654デフォルトの名無しさん
2019/08/27(火) 19:25:57.30ID:JlFv53u2
>>653
両方自分で作るならもっとシンプルなプロトコルでやるよ
655デフォルトの名無しさん
2019/08/27(火) 21:20:18.36ID:FzNWLyW5
typeidってPFで戻ってくる値が違うからテスト書くとき気をつけるん
656デフォルトの名無しさん
2019/08/28(水) 08:42:46.33ID:4Zzob7TG
>>650
書き換えなくていいように書けるようにするってことだよバカ。
てか依存をしっかり見るって意味じゃヘッダを意識するってのは
相当大事なんだがな。
タスク管理を意識した場合、どんなレイヤーで仕事する場合でも重要になる。
657デフォルトの名無しさん
2019/08/28(水) 08:50:01.49ID:4Zzob7TG
てか想像以上にビルド周りの技術ってc+11から入った輩は理解してないのな。。
またクソシステムの再生産が10年単位で続きそうだわ。。
658デフォルトの名無しさん
2019/08/28(水) 10:10:28.35ID:mAC2Cq6c
そりゃこのスレでも
「閃いた!stdを usingすれば文字を打つのが少なくなるよ!」って宣う輩がいるくらいだし
659デフォルトの名無しさん
2019/08/28(水) 10:16:52.21ID:FUc/M6fg
趣味でc++のパズルにはまってる人と
仕事で生産的に使いたい人とでは
言語に期待するものが違うからね
区別しないと
660デフォルトの名無しさん
2019/08/28(水) 10:25:14.14ID:4pdYY7R1
このビルド周りのクソ仕様のせいで年々インタプリタ型に人が流れていくんだわ
661デフォルトの名無しさん
2019/08/28(水) 11:21:15.45ID:PYS/X6sQ
VS使ってるからmakeとかさっぱりです
662デフォルトの名無しさん
2019/08/28(水) 11:48:22.94ID:KZSjYbkv
新モジュールシステム対応で改善されるはず…
https://cpprefjp.github.io/lang/cpp20/modules.html
663デフォルトの名無しさん
2019/08/28(水) 14:10:32.76ID:DpQqY3bZ
そのうちC++ライブラリ用リポジトリとかC++用パッケージマネージャとか作りはじめそう
664デフォルトの名無しさん
2019/08/28(水) 15:22:40.67ID:A/ckRNOE
車輪の再発明が好きなやつが多すぎてウンザリする
道具ばっか作ってどうすんだ
道具つかって絵描いたり家建築したりするのが仕事なのに
665デフォルトの名無しさん
2019/08/28(水) 17:41:27.32ID:1Ka29vHv
仕事じゃなくて趣味だからな。
666デフォルトの名無しさん
2019/08/28(水) 18:52:20.58ID:r3MNaUf0
makefileなんて十数年触ってないしもう忘れたけど
>>656-657には同意するわ
依存関係も考えた上で設計&利用しないとコンパイル時間の増大とかに全く対処できなくなる
新しい機能には飛びつくわりに古い部分(しかも無くなってるわけではない)をおざなりにするのはあかん
667デフォルトの名無しさん
2019/08/28(水) 20:21:30.73ID:4Zzob7TG
>>662
テンプレートの export の問題とかさ。。ほんと何周同じことしてんだよって思うわ。
668デフォルトの名無しさん
2019/08/28(水) 20:42:39.92ID:G5Ue/9b7
>>656
これ、依存関係を自分で書くんじゃなくて gcc -M とかで自動的に判断させることを言っているんだろうか?
msbuildを含めて今どきの大抵のビルドシステムでできることなんだが。
669デフォルトの名無しさん
2019/08/28(水) 20:46:54.49ID:W4Wf3gf+
>>649
こんな良いライブラリーがあるんですね。
非常に助かりました。ありがとうございます!
670デフォルトの名無しさん
2019/08/28(水) 20:59:56.83ID:4Zzob7TG
>>668
makeが実装が一番ネイティブでわかりやすいってことだよ。
bazelなんか中身はもろにmakeだろありゃ。
ただはじめからbazel使ってたらエラーメッセージ見てもわからんだろうし、
そういうのをはじめに薦める奴は詐欺だろ。
671デフォルトの名無しさん
2019/08/28(水) 22:02:26.02ID:ieioKQ06
makeがネイティブ?わかりやすい?冗談だろ
暗黙ルールとか特殊変数とか特別扱いのターゲットとかやめろ
アーカイブだの何だのを勝手に推定しておせっかいな処理挟み込むのを全部やめろ
積もり積もったウンコの山を無効にさせろ
672デフォルトの名無しさん
2019/08/28(水) 22:04:23.57ID:/X8N1eZO
本来のmakeのルールは単純なのにな
なんであんなそびえ立つ糞になったのか
673デフォルトの名無しさん
2019/08/28(水) 22:09:49.61ID:NdwuNYuZ
ルール上書きしろよ
674デフォルトの名無しさん
2019/08/28(水) 22:33:45.39ID:4Zzob7TG
>暗黙ルールとか特殊変数とか特別扱いのターゲットとかやめろ
まあこれはわかる。

>アーカイブだの何だのを勝手に推定しておせっかいな処理挟み込むのを全部やめろ
これは逆に暗黙のルールを使ってるからだろ。

基本的に明示的なmakefileを書いてないのが原因だが、
こんなこと言い出したら他のビルドツールなんて使えんぞ。。
vc compilerなんかもっと暗黙の設定まみれだわ。
675デフォルトの名無しさん
2019/08/28(水) 23:47:07.56ID:atkmfnSl
マルチプラットフォームで使えて、固定小数点を扱えるOSSっていいのないかな?
676デフォルトの名無しさん
2019/08/28(水) 23:56:49.59ID:Lri1s1BK
GMPとか?
という話ではなく?
677デフォルトの名無しさん
2019/08/29(木) 00:02:01.84ID:7sVXLGAA
cobol
678◆QZaw55cn4c
2019/08/29(木) 21:16:18.09ID:nzSyygVl
>>675
どうぞつかってください
http://2chb.net/r/tech/1434079972/51
679デフォルトの名無しさん
2019/08/29(木) 21:47:21.89ID:81mive3+
使われていないクラスのstaticメンバ変数って生成されないのでしょうか?
680デフォルトの名無しさん
2019/08/29(木) 22:28:37.81ID:Fx5HC5GZ
>>678
汚いプログラムだなあおい
681デフォルトの名無しさん
2019/08/29(木) 23:00:42.76ID:KkrIMV0W
>>679
多分生成される可能性が高いね
何故ならC++にはコンストラクタがあるから
つまりはstatic変数のコンストラクタで何かしているかもしれないだろう
だからリンカの最適化は削除をしないだろうね
ただ、普通のintとかだとリンカの最適化で削除されるかもしれないけど
まぁ運しだい
ともかく、規格では多分決まってない
682デフォルトの名無しさん
2019/08/29(木) 23:20:08.64ID:xxmh5CSn
>>679
そのstaticメンバの定義を消してコンパイルしてもエラーにならなければ生成されてない
ちなみにstatic constとかの変数は元々ほとんどのケースで生成されてない
683デフォルトの名無しさん
2019/08/29(木) 23:21:51.82ID:nf7j+lKK
やはりコンパイラによるのでは
684デフォルトの名無しさん
2019/08/29(木) 23:29:30.27ID:KkrIMV0W
クラスのstatic変数といっても
コンパイラからしたらグローバル変数みたいなものだからな
使ってないグローバル変数は削除されるのか?
さあな
685デフォルトの名無しさん
2019/08/29(木) 23:33:23.53ID:xxmh5CSn
visual sutdioというかvc++だと使ってないコードを削除するみたいなオプションあったからもしかしたら消えるかもしれない
他はよく知らない・・・
686デフォルトの名無しさん
2019/08/30(金) 00:11:27.74ID:fVqdV4kl
libにしなかったらlinkしたobj全て
libにしたらobj単位でシンボル一つでも参照があればlinkされるのが基本じゃね
組み込み用のコンパイラだとそれ以上に頑張ってサイズ削ることもあるだろうけど
687デフォルトの名無しさん
2019/08/30(金) 00:41:24.99ID:pQR0WkIg
グローバル変数のコンストラクタに起動時処理書いといたら、これが案外呼ばれるタイミングがわからない。
手続きの中で明示的に参照しにいかないとあかんと思った。
688デフォルトの名無しさん
2019/08/30(金) 00:46:48.02ID:fVqdV4kl
static変数の参照返す関数つくるのはよくやる
689デフォルトの名無しさん
2019/08/30(金) 00:50:00.39ID:T2NlJT89
ここの動的初期化によるけど、まあ分からん・・・
定数初期化しとけるならそうしとくのがいいけどいつもできるわけでもない
https://ja.cppreference.com/w/cpp/language/initialization
690デフォルトの名無しさん
2019/08/30(金) 00:56:53.55ID:8Dc5lx9D
一見使ってないからと言ってコンパイラが勝手にデータ構造替えちゃったら動的リンク時とか整合性取れなくなっちゃう気がする
691デフォルトの名無しさん
2019/08/30(金) 08:30:00.34ID:Okk0GWIA
動的ライブラリが元のバイナリの変数を暗黙に触るかはOSによる。
linuxは触れるがmacは触れない。
692デフォルトの名無しさん
2019/08/30(金) 21:41:54.95ID:OdSxakdr
std::string="あいう";

c++って内部的な文字コードって何になるのかな?
あといまいちwstringの使い分けがわかんない、日本語だとwstring使えばいいのか?
693デフォルトの名無しさん
2019/08/30(金) 21:49:07.10ID:zlaBwQso
決まってない
最近ようやく明示的にutf8対応しだした
wstringはワイド文字列
694デフォルトの名無しさん
2019/08/30(金) 22:10:41.83ID:OdSxakdr
決まってないって言うのは処理系依存ってこと?
695デフォルトの名無しさん
2019/08/30(金) 22:14:30.31ID:Q+0yO3vE
それぐらい自分で試したら?
それが確実でしょ
696デフォルトの名無しさん
2019/08/30(金) 22:18:34.99ID:QpJdGFlG
sringの中の文字コードは入れた文字列の文字コード
普通の文字列リテラルの文字コードはそのソースコードが書かれたテキストの文字コード
文字列リテラルはu8などのプレフィックスをつければUnicodeになる
697デフォルトの名無しさん
2019/08/30(金) 22:19:54.88ID:BOCgcfAb
試しただけじゃそれが処理系依存の結果かどうかなんて判断できんじゃん
698デフォルトの名無しさん
2019/08/30(金) 22:21:51.17ID:Q+0yO3vE
ここで答えもらってもそれが正しい保証がどこにある
699さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/08/30(金) 22:23:12.28ID:ZMew/+Uj
コンパイラによって日本語シフトジスなどのマルチバイト文字列の解釈が違って移植の際にトラブることがある。
700デフォルトの名無しさん
2019/08/30(金) 22:33:35.27ID:QpJdGFlG
とりあえずリテラルにはu8やuをつけておけば問題ない
701デフォルトの名無しさん
2019/08/30(金) 22:39:07.85ID:QcXmSAua
そしてHPUXで悲鳴をあげることに
702デフォルトの名無しさん
2019/08/30(金) 22:41:21.90ID:BOCgcfAb
正しい保証はできないかもしれんが間違いは明確だな
703デフォルトの名無しさん
2019/08/30(金) 22:53:05.39ID:Okk0GWIA
gccならutf-8だろうけれど、最近のVCはどうだろ。
704デフォルトの名無しさん
2019/08/30(金) 23:28:54.53ID:Oe3WNWk3
文字コードの話題は盛り上がっていいね
ある意味一番ハマる部分かも
705デフォルトの名無しさん
2019/08/31(土) 01:18:30.00ID:toQMNfCu
u8つければいい
706デフォルトの名無しさん
2019/08/31(土) 12:17:38.05ID:WtWTaSD6
char型および文字列リテラルが何になるのか不定なのがアレなので
もうさいしょからu8""とchar8_tとstd::u8stringを使うように徹底するのは良いのかもしれない
707デフォルトの名無しさん
2019/08/31(土) 13:49:09.93ID:gI08UaXy
WindowsはTCHARで書くべしみたいなのはまだあるの?
最近Windows使ってないもんでよく分からん
708デフォルトの名無しさん
2019/08/31(土) 14:24:18.19ID:6oowjHUQ
昔から自分でオプション変えて好きにしろとしか
709デフォルトの名無しさん
2019/08/31(土) 14:25:31.75ID:Jddzk3ii
>>706
でもUTF16の方が問題起きにくい気がする
710◆QZaw55cn4c
2019/08/31(土) 15:03:47.82ID:iA1eP3Lu
>>709
ファイルシステム関係は uft16 で、それ以外は utf8 で分けるしかないでしょうね、"ファイルシステム uft16" はやったことがありますが、utf8 はまだ触ったことがありません…
711デフォルトの名無しさん
2019/08/31(土) 18:44:11.09ID:IP14yh++
utf8は冗長コードの問題があるから内部処理用コードには向かないんだよね。
712デフォルトの名無しさん
2019/08/31(土) 18:47:33.88ID:toQMNfCu
読みこみでハネるのが主流じゃね?
utf16が一番中途半端
713デフォルトの名無しさん
2019/08/31(土) 18:54:01.60ID:IP14yh++
そうかな、場合にもよるけど、日常使う文字はほぼutf16に収まるし、
utf8だとstd::regexで日本語がまったくつかえないとかあるしで、
俺的にはutf16の方が便利かな。
714デフォルトの名無しさん
2019/08/31(土) 18:58:48.47ID:toQMNfCu
ほぼ収まるってのが一番厄介な所だろ
サロゲートペア対策してなさそう
715デフォルトの名無しさん
2019/08/31(土) 19:07:54.35ID:QlojAnpK
日常使う文字こそ今やサロゲートペアだらけなのに🐙
716デフォルトの名無しさん
2019/08/31(土) 19:34:37.71ID:oexy9R6b
絵文字はみんなサロゲートペアだもんな
あれのおかげでようやく欧米人どもが真面目にUnicode対応するようになった
717デフォルトの名無しさん
2019/08/31(土) 21:17:21.24ID:ny+pXiR9
その代わり新宿ダンジョンよりも複雑奇怪になったけどな
718デフォルトの名無しさん
2019/08/31(土) 21:55:55.82ID:OiY9nyzL
絵文字はやめてほしいわ。そもそも架空の文字は登録しないんじゃなかったのかよ。
21bitも使えてコードポイントに余裕があるからといってロクなことしない。
719デフォルトの名無しさん
2019/08/31(土) 22:01:23.04ID:WtWTaSD6
足りなくなったらサロゲートペアを足せばいいからなw
720デフォルトの名無しさん
2019/09/01(日) 00:01:08.44ID:U3czXmCF
🀄🀄🀄
721デフォルトの名無しさん
2019/09/01(日) 18:32:43.72ID:L3u9XotW
もう全部utf32でいいんじゃね 一番簡単だしみんなハッピーや
722デフォルトの名無しさん
2019/09/01(日) 19:43:20.80ID:AU7sQxSH
utf32も結合文字が。。
723デフォルトの名無しさん
2019/09/01(日) 19:48:05.67ID:UMpnMGJj
で、結局utf8でよくねってなる
724デフォルトの名無しさん
2019/09/01(日) 19:58:29.50ID:5ppTYJ/k
いろいろ工夫を凝らし始めるとiso-2022でいいじゃんという
725デフォルトの名無しさん
2019/09/01(日) 20:03:47.57ID:ugxLNVG7
う、うん…
726デフォルトの名無しさん
2019/09/01(日) 21:56:38.21ID:csfeG7d1
文字列なんか一番基本的な物の一つなんだから
もっと簡単でもよかったのにね
727デフォルトの名無しさん
2019/09/01(日) 22:30:33.03ID:XdngnPPu
4byteの配列にコードポイントまんま入れるんだ
結合文字は忘れろ
728デフォルトの名無しさん
2019/09/02(月) 00:01:08.82ID:g71KPPKA
コードポイントじゃなくてメモリポインタじゃないの?
729デフォルトの名無しさん
2019/09/03(火) 08:08:26.56ID:/7AcGg3i
オブジェクト指向の3大要素をすべて満たしたプログラム作れって課題なんだけど、じゃんけんでいいかな?
730デフォルトの名無しさん
2019/09/03(火) 08:58:16.91ID:JzHlK+VD
じゃんけんでメッセージを送る機能が必要になるとは思わないが
731デフォルトの名無しさん
2019/09/03(火) 09:00:22.95ID:LV1H9AE4
チャットでいいんじゃね?
画像と文字送れば色々実験できるし
732デフォルトの名無しさん
2019/09/03(火) 09:35:35.97ID:/7AcGg3i
チャットかあ
難しそうだな…
733デフォルトの名無しさん
2019/09/03(火) 10:27:53.48ID:Hys2x8bh
三大要素って委譲とメッセージとなんか?
734デフォルトの名無しさん
2019/09/03(火) 10:35:12.45ID:/7AcGg3i
カプセル化、継承、ポリモーフィズムの3つ
735デフォルトの名無しさん
2019/09/03(火) 16:47:41.46ID:WZskrpAp
チャットを作ると

カプセル化:ネットワーク部分、チャット部分
継承:継承元からサーバクラス派生、クライアントクラス派生
仮想:TCPクラス-UDPクラス切り替え

完璧じゃね?
736デフォルトの名無しさん
2019/09/03(火) 17:14:42.83ID:xpzn8aWg
別にじゃんけんだっていいだろ

継承:手の種類
多態性:手の画面出力
カプセル化:しわの数
737デフォルトの名無しさん
2019/09/03(火) 18:12:16.81ID:S+eQGM/g
タイマーで早出し遅出しの判定とか
ネットワーク対戦機能とか
履歴取ってプレイヤーの手の傾向学習してくるAIとか
色々盛り込んでみればいい
738デフォルトの名無しさん
2019/09/03(火) 18:57:18.29ID:7WEfMANz
ちゃんと負けた時はズコーって音声出すんだぞ
739デフォルトの名無しさん
2019/09/03(火) 20:42:17.04ID:O03sdIlG
期限が金曜だからあんまり凝ってる時間はないかな。クラス図とシーケンス図とオブジェクト図も作んなきゃいけないし
結局ケイスケホンダのジャンケン作ることにした
740デフォルトの名無しさん
2019/09/03(火) 21:36:59.59ID:VgehgunL
>>734
三大要素というとよくそんな風に言われるけど、実のところ継承ってオブジェクトの要素とは
言い難いし、多態も要素というより結果として得られる性質に近いと思うんだよなぁ。
741デフォルトの名無しさん
2019/09/03(火) 22:59:40.18ID:29yFlgBG
まあすべては委譲です
というか抽象化のためのパターンです
742デフォルトの名無しさん
2019/09/04(水) 09:05:55.41ID:42AhKM7p
>>728
コードポイントで合ってるはず。
文字符号の1つずつの番号の場所をコードポイントと言う。
例えば、ASCIIコードなら、A の文字の番号である 0x41 の占めている
場所みたいなニュアンスがある。
743デフォルトの名無しさん
2019/09/04(水) 09:20:24.49ID:42AhKM7p
>>742
追伸。なお、0x41の番号そのもののこともコードポイントと言う。
番号に就いては単に「コード」とも言うが、2019年現在において
単に「コード」と言ってしまうと、プログラムの内の命令が並んでいる
部分のことを指すことが多くて混乱が生じやすいので、文字符合の
番号に対しては、「コード」ではなく「コードポイント」という
ことがある。「文字符号」と言ってしまうと、ShiftJISの体系そのもの、
UnicodeやUTF8の体系そのものを指すことも有り、どうしても曖昧さが残る。
そこで、0x41という番号そのものの事を言っていることを曖昧さなく
示したい場合には、文字符号ではなく「コードポイント」ということがある。
744デフォルトの名無しさん
2019/09/04(水) 10:36:53.55ID:BMbMsP6d
int (*exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT;

上記はtypedef struct内に書かれていた関数ポインタの宣言で、
返り値がint、引数が(struct bContext *, struct wmOperator *)の関数ポインタexecなのは分かりますが
最後のATTR_WARN_UNUSED_RESULTって何でしょうか? 関数宣言って引数宣言の後に何か書けましたっけ?
745デフォルトの名無しさん
2019/09/04(水) 10:46:36.08ID:3LCw+twW
>>744 https://ja.lmgtfy.com/?q=ATTR_WARN_UNUSED_RESULT
746デフォルトの名無しさん
2019/09/04(水) 11:46:27.08ID:peiZ6Bip
今時なら[[nodiscard]]か
747デフォルトの名無しさん
2019/09/04(水) 12:57:05.98ID:/jMgnxhx
いくつか用意した文字列の中から1つをランダムで表示するってどうやればいいかな?
748デフォルトの名無しさん
2019/09/04(水) 13:11:23.43ID:OPoewtpz
配列辺りにぶっ混んでインデックスを乱数にして取り出すとか
749デフォルトの名無しさん
2019/09/04(水) 18:37:03.73ID:A7beDSD/
std::minstd_rand mr
std::uniform_int_distribution<> ui(0,StrS.size()-1);

StrS[ui(mr)];//<- what?

大雑把にこういう感じ?
750デフォルトの名無しさん
2019/09/04(水) 19:21:28.58ID:+/XA3LOY
StrSのSは何の略だ
751デフォルトの名無しさん
2019/09/04(水) 19:22:06.69ID:A7beDSD/
複数形。
文字列の配列だから。
752デフォルトの名無しさん
2019/09/04(水) 23:10:27.71ID:3YkDCQ2q
>>747
#include <stdio.h>
#include <stdlib.h>
#define STR_MAX 5
const char *pszText_s[STR_MAX] = { "aaa", "bbb", ・・・・・・・ };
int main() {
 int  idx = (int)( ((float)rand()) * STR_MAX / RAND_MAX );
 printf( "mojiretsu = %s\n", pszText_s[idx] );
 return 0;
}
753デフォルトの名無しさん
2019/09/04(水) 23:13:18.96ID:HOiCfRXh
なんだそのクソの塊は
754デフォルトの名無しさん
2019/09/04(水) 23:23:06.05ID:A7beDSD/
>>752
C言語ですねぇ。C++だったら、<random>使いたいところですね。
755デフォルトの名無しさん
2019/09/04(水) 23:29:14.08ID:3YkDCQ2q
なぜCで済むのにC++を使おうとするのか。
何のメリットがあるのか。
基礎が大事。
756デフォルトの名無しさん
2019/09/04(水) 23:29:55.89ID:NHTKoQQB
ここ何のスレだと思ってるのおじさん
757デフォルトの名無しさん
2019/09/04(水) 23:33:21.57ID:3YkDCQ2q
そもそも基本的にCもC++の一部なのでC風に書いたものはC++の回答としても
間違いではない。
「C++でのやり方」と言ってもC++は歴史が長いため、色々なやり方がある。
また最新の仕様を使うことがベストな選択とは限らず、むしろ分かりにくく
なることも多い。
758デフォルトの名無しさん
2019/09/04(水) 23:34:44.99ID:3YkDCQ2q
>>756
ちゃんと >>752 のコードは、C++モードでもコンパイルは通るので、
立派にC++言語で書いたコードである。
759デフォルトの名無しさん
2019/09/04(水) 23:36:41.47ID:HOiCfRXh
> また最新の仕様を使うことがベストな選択とは限らず、むしろ分かりにくく
> なることも多い。

自分がわからないだけでしょ
760デフォルトの名無しさん
2019/09/04(水) 23:36:50.55ID:3YkDCQ2q
C++ は、もともとCにclassの概念を追加したものと言われている。
今回の様にclassを使うメリットが無い場合は、C++の内、
昔からあるCの部分で十分である。エンジニアリングの世界では
「simple is best」
だ。
761デフォルトの名無しさん
2019/09/04(水) 23:38:38.42ID:3YkDCQ2q
>>759
新しい機能はC++委員会が好き勝手に追加しているだけで、
学ぶ意味が無い。
しかも、あなたも分かってないのに、人を馬鹿にするのはいかがなものか。
まずは動くコードが大事で、最新のやり方を使うことは重要ではない。
変に難しくしても意味がない。
762デフォルトの名無しさん
2019/09/04(水) 23:39:05.43ID:NHTKoQQB
>>749
の方がシンプルじゃねーか
763デフォルトの名無しさん
2019/09/04(水) 23:41:17.68ID:3YkDCQ2q
>>762
頭がおかしい。
764デフォルトの名無しさん
2019/09/04(水) 23:41:42.83ID:HOiCfRXh
better Cとか言ってる奴らが老害だってよくわかるね
765デフォルトの名無しさん
2019/09/04(水) 23:57:17.61ID:twmgvXS9
Cで書いてもええけど

> ((float)rand()) * STR_MAX / RAND_MAX );

この乱数に対する意識の低さがくそ
766デフォルトの名無しさん
2019/09/04(水) 23:58:00.42ID:8IyIvdim
rand()なんか使ってる時点で商用ソフト書かせちゃいけないセキュリティ意識皆無のカスだって自白してるようなもの
767デフォルトの名無しさん
2019/09/05(木) 00:01:08.35ID:wSq6T90P
>>765
間違えてた。正しくはこうだと思う:
int  idx = (int)( ((double)rand()) * (STR_MAX - 1) / RAND_MAX );

まだ間違いがあるかも知れんが。
768デフォルトの名無しさん
2019/09/05(木) 00:09:37.75ID:wSq6T90P
>>766
知らなかっただけで、std::uniform_int_distribution のような便利なライブラリが
あるんだったらそっちを使ったほうがいい。
本当は、古いCに昔から入っているような rand() はアルゴリズムが良くなくて
モンテカルロシミュレーションなどでは余り良い結果が出ない。
昔やってみて分かった。ネットに転がってたもっといいアルゴリズムの乱数に
変えてみたら結果が良くなった。
769デフォルトの名無しさん
2019/09/05(木) 00:10:44.20ID:5Cw7Ao7f
今どきrand()が論外なのは別として剰余も知らんの?
770デフォルトの名無しさん
2019/09/05(木) 00:12:59.23ID:5Cw7Ao7f
何だこいつ

> 新しい機能はC++委員会が好き勝手に追加しているだけで、
> 学ぶ意味が無い。



> 知らなかっただけで、std::uniform_int_distribution のような便利なライブラリが
> あるんだったらそっちを使ったほうがいい。
771デフォルトの名無しさん
2019/09/05(木) 00:15:04.65ID:ymsvBiyv
>>769
rand()%Nは最悪のディストリビュータといわれている。
浮動小数でやるほうが幾分かましといわれる程度には。
772デフォルトの名無しさん
2019/09/05(木) 00:16:17.70ID:wSq6T90P
>>769
剰余で
int idx = rand() % RAND_MAX;
のようにすると均等確率にはならないことがある。
俺の専門は数学に近いので分かる。
773デフォルトの名無しさん
2019/09/05(木) 00:18:23.32ID:wSq6T90P
>>772
間違い修正:
誤:int idx = rand() % RAND_MAX;
正:int idx = rand() % STR_MAX;

このように書いた場合、直感では、RAND_MAXがSTR_MAXの倍数で無い場合
に均等確率にならないハズ。
774デフォルトの名無しさん
2019/09/05(木) 00:18:43.26ID:M7+W0IyT
低劣なrand()のさらに劣悪な下位ビットを使うくらいならアホが書いてる形の方がまだましではある
rand()みたいな小学生でも推測できる危険極まりないゴミクズを使ってる時点で目くそ鼻くそだけど
775デフォルトの名無しさん
2019/09/05(木) 00:21:02.57ID:wSq6T90P
>>771
おっしゃるとおり、そのやり方だと、
N が rand()の最大値 RAND_MAX の約数で無い場合には、均等確率になりませんね。
776デフォルトの名無しさん
2019/09/05(木) 00:21:37.88ID:5Cw7Ao7f
Nが2の累乗でない限り%Nは上位ビットも影響するけど
777デフォルトの名無しさん
2019/09/05(木) 00:22:46.70ID:wSq6T90P
>>774
質問者は、>>747 と書いただけなので、初心者的質問だとみなして
そんなに高度な乱数は必要ないと思ったので書いてみただけ。
778デフォルトの名無しさん
2019/09/05(木) 00:25:08.12ID:M7+W0IyT
初心者にこそrand()みたいな絶対に使ってはいけない危険物を紹介したらダメだろうが
お前は初心者が入力読み込みの質問したらgets()を教えるのか?
779デフォルトの名無しさん
2019/09/05(木) 00:25:11.59ID:wSq6T90P
>>774
>低劣なrand()のさらに劣悪な下位ビットを使うくらいならアホが書いてる形の方がまだましではある
あなたは、% と & を間違えてませんか。

x % y : x を y で整数除算したときの余り。
x & y : x と y の BIT 積 (and)。
780デフォルトの名無しさん
2019/09/05(木) 00:25:49.83ID:wSq6T90P
>>778
rand()のどこが危険なのですか?
781デフォルトの名無しさん
2019/09/05(木) 00:27:59.92ID:6cA0wVT5
てか、今時まだ下位ビットに周期性あるのかね?
782デフォルトの名無しさん
2019/09/05(木) 00:30:09.80ID:ymsvBiyv
std::minstd_rand は 線形合同法デス。



おわかりいただけただろうか。
mt19937最強!
783デフォルトの名無しさん
2019/09/05(木) 00:32:23.63ID:M7+W0IyT
>>780
劣悪だからっつってんだろ
あんなもの数個連続で観測されただけで簡単に予想できる
うっかりセッションIDやら初期パスワードやらの生成に使おうもんなら簡単に7pay案件だ
あんたそんな事も知らないでプログラマーやってんの?

>>781
rand()は昔も今もこれからも線形合同法のゴミだから今どきもクソもない
784デフォルトの名無しさん
2019/09/05(木) 00:33:07.37ID:wSq6T90P
>>781
rand()が 閉区間 [0, RND_MAX] の整数値を均等確率で出力する場合に、
idx = rand() % STR_MAX;
とすると、STR_MAX が RND_MAX の約数で無い場合は端数のような部分が
同じ場所に集中して出現したり、抜けが起きたりして、idx は
[0, STR_MAX] の区間の整数値を均等確率で生じさせません。
785デフォルトの名無しさん
2019/09/05(木) 00:35:35.65ID:wSq6T90P
>>783
>劣悪だからっつってんだろ
>あんなもの数個連続で観測されただけで簡単に予想できる
>うっかりセッションIDやら初期パスワードやらの生成に使おうもんなら簡単に7pay案件だ
>あんたそんな事も知らないでプログラマーやってんの?

自分の専門は自然科学系で、シミュレーションで使うことはありますが、
パスワード系で使うことは一度も想定したことが有りませんでした。
786デフォルトの名無しさん
2019/09/05(木) 00:36:33.70ID:wSq6T90P
>>784
誤:[0, STR_MAX] の区間の整数値を均等確率で生じさせません。
正:[0, STR_MAX - 1] の区間の整数値を均等確率で生じさせません。
787デフォルトの名無しさん
2019/09/05(木) 00:38:32.53ID:M7+W0IyT
自然科学だとしてもあんな偏りまくりのクソ使っちゃダメだろ…
まさかとは思うが2連続で呼んで座標値作ったりしてないだろうな
もしやってたらそのシミュレーション全部カスだから作り直してやり直せ
788デフォルトの名無しさん
2019/09/05(木) 00:39:51.44ID:ymsvBiyv
https://cpprefjp.github.io/reference
https://cpprefjp.github.io/reference/random.html
このサイト良いよ。ランダム見たら驚くよ。
自然科学なら分布の偏りから正規分布まであるのは天国のような気がするな。
789デフォルトの名無しさん
2019/09/05(木) 00:42:23.49ID:wSq6T90P
>>787
実際、rand()を使ってモンテカルロ法をやってみたところ予想通りには行かなくて
かなりはまったことが有ります。その後、確か xor256 法などを使ってだいぶ
ましになりました。
790デフォルトの名無しさん
2019/09/05(木) 00:45:37.20ID:wSq6T90P
>>788
さっきの例に出ていたキーワードで検索してさっき見てました。

なお、確率の均等性だけでなく、前後の相関が低いという意味において、
rand() より xor256 法は優れているようです。
791デフォルトの名無しさん
2019/09/05(木) 00:47:57.94ID:ymsvBiyv
モンテカルロやるんだったら、メルセンヌツイスタはグレートな動きするよ。
623次元均等分布とかいうよくわからんものだ。かなりクレイジー。
mt19937がそれだ。
792デフォルトの名無しさん
2019/09/05(木) 00:51:22.71ID:wSq6T90P
みなさん、最初の質問は >>747 というとても素朴なものであったのを
分かっておっしゃってますか?
793デフォルトの名無しさん
2019/09/05(木) 00:56:19.52ID:Gf88bG6s
それはもう答え出てるから
794デフォルトの名無しさん
2019/09/05(木) 01:13:48.78ID:ymsvBiyv
>>792
https://ideone.com/hOJlOU
これがオチということで・・・・。
795デフォルトの名無しさん
2019/09/05(木) 01:16:30.46ID:ymsvBiyv
お題: >>794ではvectorを返却値にしているが、これは何バイトコピーしていると考えられるか?

暇だったら考えてみて。
796デフォルトの名無しさん
2019/09/05(木) 01:26:21.35ID:lN+O1qau
乱数って/dev/randomから取ってもいいんでしょ?
なんか今システムコールもあるみたいだけど
797デフォルトの名無しさん
2019/09/05(木) 01:28:10.60ID:ymsvBiyv
>>796
うにっくす限定なので標準ライブラリを使ったほうがポータブルですよ。
まぁ、C++98とか使ってるならわからんでもない。
798デフォルトの名無しさん
2019/09/05(木) 01:49:34.32ID:lN+O1qau
シミュレーションなら当然疑似乱数だけども
暗号用とか一発モノ
799デフォルトの名無しさん
2019/09/05(木) 01:51:14.01ID:ymsvBiyv
>>798
逆にメルセンヌツイスタでは秘匿情報を暗号化するのは絶対やめてくれといわれている。
詳しくはWikipedia読んでね。
800デフォルトの名無しさん
2019/09/05(木) 01:56:58.36ID:lN+O1qau
明智抄の漫画持ってるくらいだからまあ理屈はわかっとると思うよ
801デフォルトの名無しさん
2019/09/05(木) 02:08:50.93ID:xr5VBkHA
>>747です。たくさんアドバイスありがとうございます
802デフォルトの名無しさん
2019/09/05(木) 07:20:55.17ID:Scz25acM
C++のrandomすごい便利なんだけどstd::random_deviceが固定の乱数列しか返さない環境があることが問題だ。

https://cpprefjp.github.io/reference/random/random_device.html
803デフォルトの名無しさん
2019/09/05(木) 07:22:17.46ID:TZCSkvxf
パスワード生成とかシミュレーションとかマウント取りたくてしかたない老害だらけだなw
>>747はじゃんけんゲームだろ?
804デフォルトの名無しさん
2019/09/05(木) 07:25:46.47ID:OtMARD1h
>>802
それマジクソだよな
エントロピー源が作れないなら作れないと例外でも投げろっての
黙ってインチキするなんて最低だ
805デフォルトの名無しさん
2019/09/05(木) 08:22:51.14ID:4woSX2Eo
線形合同法って下1ビット捨てればだいたい解決するんじゃね?やったことないからわからないけど
806デフォルトの名無しさん
2019/09/05(木) 08:26:22.54ID:cQUMBPrz
メモリポンタ最強
807デフォルトの名無しさん
2019/09/05(木) 08:34:47.23ID:04ZPpNlH
>>802
それ最近治ったらしい
808デフォルトの名無しさん
2019/09/05(木) 09:01:35.03ID:Scz25acM
>>807

windowsのGCCじゃ無ければ問題ないだろうとiphoneのアプリで使ったら毎回同じ乱数列でな。
809デフォルトの名無しさん
2019/09/05(木) 10:05:53.05ID:jPhMORz8
unixが何を制御してるか知らんが乱数のデバイスなんだからその先に原子炉の一つでも繋がってるんじゃねえの?
そっからの出力が乱数じゃなくなったらヤバいことになってる
810デフォルトの名無しさん
2019/09/05(木) 10:07:27.15ID:wSq6T90P
>>809
もしかして原子炉ではなくて、量子乱数生成器のことですかね。
811デフォルトの名無しさん
2019/09/05(木) 10:34:35.09ID:OtMARD1h
なんで乱数のデバイスに原子炉がいるんだよw
アバランシェでできるだろうが
812デフォルトの名無しさん
2019/09/05(木) 11:52:48.46ID:A2EHupI7
乱数なんかでこんなに盛り上がってしまうのは
これはアレだね
813デフォルトの名無しさん
2019/09/05(木) 13:03:17.93ID:of7w1ctN
仕事がもらえてない駄目なプログラマーの集まりってことだな!
814デフォルトの名無しさん
2019/09/05(木) 15:11:59.85ID:Scz25acM
そもそも仕事してないからな!
815デフォルトの名無しさん
2019/09/05(木) 15:48:17.02ID:VtA7IODN
ここは暇なインターネットですね…
816デフォルトの名無しさん
2019/09/05(木) 16:05:03.33ID:OtMARD1h
ずーっと安定して生かさず殺さず飼われている社畜が
肉食獣の食事後のような優雅な暇を知らねえのはまあ道理だ
817デフォルトの名無しさん
2019/09/05(木) 18:10:20.05ID:O7Dd9aK6
乱数の扱いをミスるとXBOXのカルドセプトみたいになるぞ
818デフォルトの名無しさん
2019/09/05(木) 18:40:46.63ID:zNNFYG19
vc++ でも、linux でも使える、STLライブラリとして、ずっと、STLPORT使っているけど、
今は、どんな状況になっているんだろ?
819デフォルトの名無しさん
2019/09/05(木) 18:43:11.27ID:ymsvBiyv
コンパイラのSTLでなんか不満あるんかいな。
今後は3年程度で新仕様はいるようになる予定だ。
820デフォルトの名無しさん
2019/09/05(木) 18:47:06.02ID:04ZPpNlH
>>808
マジかよ、他にもいたのか・・・
cpprefjpに書いといたら?
821デフォルトの名無しさん
2019/09/05(木) 19:12:25.60ID:ymsvBiyv
>>795
出題した者だが、自分の回答では、3変数程度のコピーで済む。
メモリへのポインタとキャパシティ変数と使用中を保持する変数。
64ビット変数だとして、24バイト程度と考えられる。俺には。
822デフォルトの名無しさん
2019/09/05(木) 19:47:31.38ID:Scz25acM
>>820

該当アプリはsololearnやね。

実務で使うわけでも無いしcpprefjpに書くのは恐れ多い。
823◆QZaw55cn4c
2019/09/05(木) 20:17:53.77ID:RTqjgiVl
>>779
% を使う、というのは「下位ビット」を使う、という意味と同じですよ
824◆QZaw55cn4c
2019/09/05(木) 20:18:27.47ID:RTqjgiVl
>>780
rand() は線形合同法でインプリメントされているので、乱数の質はあまりよろしくないのです
825デフォルトの名無しさん
2019/09/05(木) 20:58:58.28ID:XFJCfiEp
>>823>>824
うぜーなーそんなもん誰でも知ってる
826デフォルトの名無しさん
2019/09/05(木) 21:59:37.41ID:04ZPpNlH
>>822
ああなるほど
あのアプリはどこかサーバーに送って実行してるというわけではないのね
それとも送った先がおかしいのか?
827デフォルトの名無しさん
2019/09/05(木) 22:23:16.46ID:O7Dd9aK6
知らないジジイがいるから教えてるだけだぞ
828デフォルトの名無しさん
2019/09/05(木) 22:55:03.42ID:dJChsmUT
>>823
それは違う。
829デフォルトの名無しさん
2019/09/05(木) 22:55:52.34ID:dJChsmUT
% と & の違いが理解できないとは・・・。
830デフォルトの名無しさん
2019/09/05(木) 23:11:16.46ID:dJChsmUT
だれが rand() が危険と教えてるんだろう。
これが日本の教育か。嘆かわしい。
831デフォルトの名無しさん
2019/09/05(木) 23:13:15.63ID:emUna+dk
とりあえず
rand 危険性 下位ビット
辺りで検索して出直してこい
832デフォルトの名無しさん
2019/09/05(木) 23:13:29.08ID:dJChsmUT
このスレは、自分が馬鹿だと気づいてない人が多いのが問題。
833デフォルトの名無しさん
2019/09/05(木) 23:14:54.43ID:dJChsmUT
質の悪い乱数 ≠ 危険

であることも理解できないとは。
834デフォルトの名無しさん
2019/09/05(木) 23:16:21.31ID:dJChsmUT
頭の悪い人は、自分が頭が悪い事に気付かない。
それが最大の問題なんだ。
だから学歴フィルターで落とす。
835デフォルトの名無しさん
2019/09/05(木) 23:22:15.18ID:3AoluiiY
馬鹿だから自分の判断よりも学歴で判断することになる。
あんなもんは足切り以外役に立たん。
836デフォルトの名無しさん
2019/09/05(木) 23:22:53.94ID:dJChsmUT
馬鹿は馬鹿だと気付かないからな。
学歴フィルターがあるんだ。
837蟻人間 ◆T6xkBnTXz7B0
2019/09/05(木) 23:24:12.84ID:oF7lOGXi
悪い乱数をセキュリティ関係に使うとまずい
838デフォルトの名無しさん
2019/09/05(木) 23:24:14.66ID:dJChsmUT
& と% の違いもいくら言っても理解できないんだろ。
rand() の質が悪い事を危険と思っていたりとかな。
839デフォルトの名無しさん
2019/09/05(木) 23:25:02.42ID:dJChsmUT
>>837
それはお前だろ。
今回の質問は、セキュリティー関係ないだろ。
840デフォルトの名無しさん
2019/09/05(木) 23:30:31.24ID:mvC8Xt02
mtだってセキュリティ目的で使うべきではないが他に分野では一般的に用いられる優秀な乱数
要件次第で何が良いかは変わる
randは対応できる要件が少なくて大抵の場合xorやmtが上位互換になれる
メモリ周りがキツい環境下ならmtは候補から外れることもある
841蟻人間 ◆T6xkBnTXz7B0
2019/09/05(木) 23:32:50.72ID:oF7lOGXi
一般に、ビット毎のANDと、剰余(余り)は別の演算だが、最適化によっては剰余がANDになることがある。
842デフォルトの名無しさん
2019/09/05(木) 23:36:21.38ID:HDKa127r
>>841
そんなもの誰でも知ってる。
and と mod は別の概念だ。
843デフォルトの名無しさん
2019/09/05(木) 23:36:48.12ID:Wj2GuKre
なんで最適化が出てくるよ?除数が2の冪かどうかだけだろ。
844蟻人間 ◆T6xkBnTXz7B0
2019/09/05(木) 23:52:27.70ID:oF7lOGXi
昔は%が物凄く遅かった。
845デフォルトの名無しさん
2019/09/05(木) 23:59:42.92ID:HDKa127r
>>844
それはそうだね。
846デフォルトの名無しさん
2019/09/06(金) 00:45:20.09ID:kzddYIGk
つか、事あることにセキュリティって言ってるけど、厳選された乱数を使うような、シビアなセキュリティのプログラム作るような人がここにいるの?
847デフォルトの名無しさん
2019/09/06(金) 00:54:30.17ID:9umjXXHu
a=b*2^n だった場合、
rand() % a の下位 n ビットには元の rand() の下位 n ビットがそのまま現れる。
2の累乗だけでなく、2の累乗を約数とする場合も下位ビットの影響が大きい。
848蟻人間 ◆T6xkBnTXz7B0
2019/09/06(金) 00:56:43.20ID:AgDBiA/M
パスワード管理とか通信ソフトとかオンラインゲームとか。数える位は居るだろうよ。
849デフォルトの名無しさん
2019/09/06(金) 00:58:53.52ID:ZIHlUiP/
>>826
試しにwebのsololearnでも試してみたとろmt19937のデフォルトと同じ乱数列を生成したのでcpprefjpに書いてあるWindowsのGCCと同じ挙動だな。
850デフォルトの名無しさん
2019/09/06(金) 01:27:15.87ID:TfAw/avA
定義の前にvirtual付ければ仮想関数になるのは分かるんだけど、動的接続の意味がちょっと分からない
851デフォルトの名無しさん
2019/09/06(金) 01:28:44.78ID:cs8CUE0i
>>849
実行環境Mingwとは思えないので他にも同じことしてる実装があるんか
それとも独自実装なのか、まさか
852デフォルトの名無しさん
2019/09/06(金) 01:48:27.80ID:cs8CUE0i
>>851
定義済みマクロで調べてみたら実行環境Mingwぽい・・・・
853デフォルトの名無しさん
2019/09/06(金) 01:55:47.74ID:cs8CUE0i
sololearnの実行環境、Mingw GCC 7.2.0らしい
Mingw GCCのrandom_deviceが治ったのは9.2から・・・
854デフォルトの名無しさん
2019/09/06(金) 07:14:39.55ID:ZIHlUiP/
>>853

char_traitsのlengthがconstexpr対応してないのもあるよ。
その為にstring_viewがconstexprに出来ない。
855デフォルトの名無しさん
2019/09/06(金) 08:33:08.03ID:5s+Nj0ya
constexpr を#if 〜 #endif マクロ で使えるようにできないですか?
856デフォルトの名無しさん
2019/09/06(金) 08:36:49.45ID:Ai9IWLM5
それは根本的におかしい
857デフォルトの名無しさん
2019/09/06(金) 10:01:31.79ID:7h7MjjwN
>>817
>>805
858デフォルトの名無しさん
2019/09/06(金) 10:02:35.89ID:7h7MjjwN
>>847
それはお前の選び方が悪い
859デフォルトの名無しさん
2019/09/06(金) 12:35:45.50ID:NkLDDTp5
rand使うときはまずMAXで割ってから、欲しい範囲をかけて使ってね
860デフォルトの名無しさん
2019/09/06(金) 17:17:41.26ID:h7oJ0UUz
g++ -mtune=ivybridge -O3 -S
こうやってもrdrand命令使ってくれないな
861デフォルトの名無しさん
2019/09/06(金) 20:30:19.25ID:mhFSZpwS
どうやったら使うの
862デフォルトの名無しさん
2019/09/06(金) 20:43:09.72ID:cs8CUE0i
たぶんだけど、rdrand単体は信頼度が低いから必ずシステムの乱数源から取得するようにしてるんだと思う
863◆QZaw55cn4c
2019/09/06(金) 21:22:27.86ID:ZK4CQ9gu
>>828
どう違うのですか?
864◆QZaw55cn4c
2019/09/06(金) 21:22:57.75ID:ZK4CQ9gu
>>830
mt 使え、っていう意味なのでは?
865◆QZaw55cn4c
2019/09/06(金) 21:23:41.99ID:ZK4CQ9gu
>>840
純粋に質問です
>mtだってセキュリティ目的で使うべきではない
それはなぜですか?
866デフォルトの名無しさん
2019/09/06(金) 21:26:09.91ID:ZIHlUiP/
cpprefjpでは624個の出力で次の出力を予想出来ると書いてるな。
867デフォルトの名無しさん
2019/09/06(金) 21:28:52.49ID:gp4KcBLb
>>865
ソフトウェアだけで作り出した乱数は予測可能だから
868デフォルトの名無しさん
2019/09/06(金) 22:42:43.08ID:/xfj8nPF
>純粋に質問です
>>mtだってセキュリティ目的で使うべきではない
>それはなぜですか?
これはさすがにググレカス言うべきだろ。本人のためにも。
てかググって調べた方が実際本人のためだわ。
869デフォルトの名無しさん
2019/09/06(金) 22:52:53.67ID:5s+Nj0ya
ちまたでは「丁寧な無視」がトレンドワードですが、C/C++でエラーを丁寧な無視することで得られるメリットを教えろください。
870デフォルトの名無しさん
2019/09/06(金) 22:55:08.02ID:gp4KcBLb
納期に間に合う
871デフォルトの名無しさん
2019/09/06(金) 22:56:36.14ID:hgPplejZ
読めない英語の警告は丁寧に無視
872デフォルトの名無しさん
2019/09/06(金) 23:23:43.95ID:6s2WTt0o
QZは質問に質問で返すアホ
無視に限る
873デフォルトの名無しさん
2019/09/06(金) 23:39:21.29ID:gp4KcBLb
質問に不備がある場合は質問で返す必要がある
874デフォルトの名無しさん
2019/09/07(土) 00:19:45.14ID:qWaNgvFq
QZは不備のあるなし関係なしに質問には質問で返してるぞ
マウント取りたいだけなんだろうな
875デフォルトの名無しさん
2019/09/07(土) 05:13:55.94ID:1BrXByny
大量の乱数(1000x1000)を高速に求める方法はありますか?
876デフォルトの名無しさん
2019/09/07(土) 05:27:55.85ID:qkjEuZ8z
GPUに乱数生成ってないのかな
877デフォルトの名無しさん
2019/09/07(土) 06:50:39.07ID:HDhw8kAD
https://developer.nvidia.com/curand
878デフォルトの名無しさん
2019/09/07(土) 13:49:44.55ID:VQVarZXt
valarrayさんが仲間になりたそうにそちらを見ている。
879デフォルトの名無しさん
2019/09/07(土) 20:48:11.58ID:vbfnpKSX
vecter<bool>さんもこちらを見ている!
880デフォルトの名無しさん
2019/09/07(土) 22:00:34.12ID:qkjEuZ8z
仲間にしますか? ▶︎いいえ NO
881デフォルトの名無しさん
2019/09/07(土) 22:23:43.46ID:5djAVjeX
Office2000でのイルカの消し方をイルカに質問する感性を大切にしたい。
882デフォルトの名無しさん
2019/09/08(日) 13:27:12.03ID:8BL9REyc
文字列で指定したクラスのインスタンスを生成する方法ってあるのでしょうか?
883デフォルトの名無しさん
2019/09/08(日) 13:30:28.50ID:m+XQHtHp
コンパイル時ならテンプレート
実行時ならDBでも用意してcaseでも使え
884デフォルトの名無しさん
2019/09/08(日) 13:31:17.61ID:+erxyDXy
pythonのクラスなら可能
885デフォルトの名無しさん
2019/09/08(日) 13:33:13.25ID:jesnwhA+
あるけど生成したインスタンスを静的に受けとるには生成されるクラスの種類がポリモーフィズムをとれないといけない
886デフォルトの名無しさん
2019/09/08(日) 15:24:20.28ID:WYqdduYI
>>885
個人的には C++ にはそういう機能はないんではないかと思うんですが。
887デフォルトの名無しさん
2019/09/08(日) 15:27:47.20ID:rbzdrKrZ
リフレクションのたぐいだと思うのだが、まだない。
888デフォルトの名無しさん
2019/09/08(日) 15:37:22.01ID:ijKgjVtQ
選択肢になりうるクラスの共通の親を作れば
889デフォルトの名無しさん
2019/09/08(日) 16:06:14.53ID:JVGfWN1Z
生成したいクラスのリストがあらかじめわかっていれば可能
890デフォルトの名無しさん
2019/09/08(日) 16:07:33.58ID:rbzdrKrZ
decl_typeが文字列を受け付ければいいが、あれも静的に解決してそうだなぁ。
891デフォルトの名無しさん
2019/09/08(日) 16:14:18.54ID:qEJgkL29
>>882
文字列とクラスの対応はtype_info::name()で与えられているが
文字列の形式が処理系定義であることに注意が必要
892デフォルトの名無しさん
2019/09/08(日) 16:23:33.90ID:m+XQHtHp
>>886
その通りだが
自分で規定を作ってしまえ良い
全てのクラスを単一のメタクラスから派生するルールで統一汁
893デフォルトの名無しさん
2019/09/08(日) 16:25:39.30ID:rbzdrKrZ
Typeを保持するタイプが欲しいわ。。

type t=int;

的な。
894デフォルトの名無しさん
2019/09/08(日) 16:29:08.94ID:x7//igd4
実行時に文字列で指定したいのかソースコードレベルの話なのかわかんねえ
895デフォルトの名無しさん
2019/09/08(日) 16:39:53.43ID:x7//igd4
共通の親クラス持たせてmapのキー文字列にして生成用の関数ぶっこめばいいけど
親クラスが共通じゃない場合は難しいのかな
896デフォルトの名無しさん
2019/09/08(日) 16:48:58.23ID:ijKgjVtQ
全クラスに対応する必要なんてないんだったらこんな感じでいいんじゃないか
enum ClassName{
Hoge,
Hige,
Hage
}
std::any func(ClassName name){
std::any out;
switch(name){
case ClassName::Hoge:
out = new Hoge();
break;
case ClassName::Hige:
out = new Hige();
break;
case ClassName::Hage:
out = new Hage();
break;
}
return out;}

int main(){
//なんか文字列を受け取る
ClassName name;
//文字列をClassNameに変換する
auto fuga = func(name);
if(fuga.type() = typeid(Hoge*)){
auto hoge = std::any_cast<Hoge*>(fuga);
//hogeの処理
} else if 以下略
}
897デフォルトの名無しさん
2019/09/08(日) 17:24:35.33ID:qEJgkL29
全クラスをユーザーが把握している必要があるなんてクソ設計だな
898デフォルトの名無しさん
2019/09/08(日) 17:52:15.72ID:aYvF75oN
なぜAbstractFactoryパターンを使わないのか
899デフォルトの名無しさん
2019/09/08(日) 17:58:58.65ID:qEJgkL29
>>882
GUIDで指定したクラスのインスタンスを生成する方法なら
COMのCoCreateInstance()がそれだが参考になるか?

ユニークでなければならないクラス名を文字列で指定はかなりキツいという意味で
900デフォルトの名無しさん
2019/09/08(日) 18:29:25.64ID:46Wp6heU
vtableでなんとかならんの?
901882です。
2019/09/08(日) 21:55:34.48ID:8BL9REyc
必要な情報が色々と抜けていたのに、色々と情報をいただきありがとうございます。
私が考えていたのは実行時に型を登録するようなクラスを使う方法です。
仮コードですが下記のような感じです。
template<typename BaseType> class InheritanceContainer{
struct IInheritance{
// BaseTypeを継承したクラスを生成
virtual BaseType* Create() const = 0;
};
template<typename Type> struct Inheritance : public IInheritance{
virtual BaseType* Create() const{ return static_cast<BaseType*>( new Type() ); }
};
public:
// 型情報の登録
template<typename Type> bool Add(){
std::unordered_map<std::string, IInheritance*>::iterator it = m_InheritanceMap.find( ctti::nameof<Type>().cppstring() ); // ctti::nameof<Type>().cppstring() cttiライブラリーを利用して型の文字列を取得する
if( it != m_InheritanceMap.end() ) return;
m_InheritanceMap.insert( std::make_pair( ctti::nameof<Type>().cppstring(), new Inheritance<Type>() ) );
}
// 文字列に合わせた BaseType を継承した物を生成
BaseType* Create( const std::string& _TypeText ){
std::unordered_map<std::string, IInheritance*>::iterator it = m_InheritanceMap.find( _TypeText );
return it != m_InheritanceMap.end() ? it->second->Create() : NULL;
}
private:
std::unordered_map<std::string, IInheritance*> m_InheritanceMap;
};
一応これでも要件は満たしているのですが、
いかんせんこれだと使うクラスを予め手動で登録している必要があり、
保守管理が手間なので皆様のお知恵を拝借できればと思い質問した次第です。
頂いた情報はこれから勉強します。
902デフォルトの名無しさん
2019/09/08(日) 23:12:54.90ID:35vt5+A/
C++なんだしnullptr使ってこうぜ
903デフォルトの名無しさん
2019/09/09(月) 00:06:19.70ID:9HmBuaOU
基本的な事なのですが教えてください。
memcpy可能なクラス若しくは構造体はどうやって判定するのがスマートですか?
904デフォルトの名無しさん
2019/09/09(月) 00:11:49.05ID:PN/XD42X
>>903
使う必要ないでしょ
Cと違うよ
905デフォルトの名無しさん
2019/09/09(月) 00:22:36.87ID:9HmBuaOU
>>904
1から作られればそうするのですが、c言語のベースがあって、それをコピペでc++で改修して、そいつの改造なんでどうしても必要なんですよ。
手を出せない共通処理がmemcpyを使ってるから、チェック処理が必要だったので
906デフォルトの名無しさん
2019/09/09(月) 00:23:34.34ID:gU/0Tin3
>>903
自分で解析するかコード書いた人に保証してもらうしかないと思うよ。
基本型だからコピーしても大丈夫と思ったら参照カウンタとして使われていた、なんてこともあるだろうし
907デフォルトの名無しさん
2019/09/09(月) 00:30:39.85ID:cBWmqiWb
std::is_trivially_copyableとか?
908デフォルトの名無しさん
2019/09/09(月) 00:44:58.27ID:k7L7RTJv
C互換ということならstd::is_podがいいのかな
909デフォルトの名無しさん
2019/09/09(月) 02:56:10.10ID:L8mIN3PD
std::is_pod とかってどうやって実装されてるんだろう。
コンパイラのビルトイン? それとも template で作られてる?
910デフォルトの名無しさん
2019/09/09(月) 03:00:19.03ID:MF4WMKe5
constexprでは
911デフォルトの名無しさん
2019/09/09(月) 03:50:37.41ID:9JOMxNeV
type_traitsはだいたいビルトインでしょ
コンパイラは知ってるはずの情報なんだから変なトリックコードで取る必要もない
912デフォルトの名無しさん
2019/09/09(月) 06:48:32.63ID:qT2kJ6NO
>>911
こちらでどうぞ
http://2chb.net/r/tech/1427572389/
913909
2019/09/09(月) 12:06:40.11ID:L8mIN3PD
>>911
自分で調査してみたところ、以下の様に、あなたのおっしゃるとおり、
中核部分は、__is_pod(クラス名) という「ビルトイン関数」を使っていました:


 // Could use is_standard_layout && is_trivial instead of the builtin.
 template<typename _Tp>
  struct is_pod
  : public integral_constant<bool, __is_pod(_Tp)>
  { };

 /// integral_constant
 template<typename _Tp, _Tp __v>
  struct integral_constant
  {
   static constexpr _Tp         value = __v;
   typedef _Tp              value_type;
   typedef integral_constant<_Tp, __v>  type;
   constexpr operator value_type() const noexcept { return value; }
#if __cplusplus > 201103L
#define __cpp_lib_integral_constant_callable 201304
   constexpr value_type operator()() const noexcept { return value; }
#endif
  };
914デフォルトの名無しさん
2019/09/09(月) 12:31:11.05ID:BaqZzWRe
QTとElectronどっちが優れてますか?
915デフォルトの名無しさん
2019/09/09(月) 12:34:21.95ID:L8mIN3PD
>>914
単純にQtだと思うが。
916デフォルトの名無しさん
2019/09/09(月) 13:01:23.17ID:a6mWw99g
小学生のどっちが強い議論かよ
917デフォルトの名無しさん
2019/09/09(月) 13:14:59.70ID:By40c52C
>>901
pythonのPyObjectのコード観てみ
918デフォルトの名無しさん
2019/09/09(月) 13:38:51.72ID:BaqZzWRe
>>915
ありがとうございます
>>916
神になる方法が知りたくて‥
919デフォルトの名無しさん
2019/09/09(月) 13:41:26.48ID:FLVXg6p/
tk > wxWidgets > Qt > electron
920デフォルトの名無しさん
2019/09/09(月) 14:33:07.01ID:dQ/pGf2B
stringstreamで

std::stringstream ss;
ss << value;
std::string str = ss.str();

こんな感じで数値を文字列に変換すると、valueが3桁以上だった場合
12,000みたいな感じで勝手にカンマがついてしまうんだけど
カンマがつかないフォーマットで出力する方法を教えてください
921デフォルトの名無しさん
2019/09/09(月) 14:53:29.86ID:KKylx/uA
なんかロケールがアレなんじゃ
922デフォルトの名無しさん
2019/09/09(月) 15:32:31.63ID:qT2kJ6NO
普通、コンマは付かんだろ
https://ideone.com/L7hohk
923デフォルトの名無しさん
2019/09/09(月) 15:38:54.81ID:pmQvKTaB
もしかして。 っ浮動小数点のドット
924デフォルトの名無しさん
2019/09/09(月) 16:22:41.31ID:XEtSQUcF
ss.imbue(std::locale("C"));
でもしてみりゃいいんじゃね
925デフォルトの名無しさん
2019/09/09(月) 17:01:25.39ID:dQ/pGf2B
ロケールの設定が原因でした
wstringで日本語を扱いたくて
std::locale::global( std::locale( "japanese" ) );
std::setlocale( LC_ALL, "japanese" );
ってやるとstringstreamでカンマが付くなんて知らなかった
926デフォルトの名無しさん
2019/09/09(月) 17:05:42.93ID:L8mIN3PD
std::list<int> l = { 7, 5, 16, 8 };

とすると、 l というリスト右辺で指定した要素で初期化した状態で作成されますが、
このときの std::list 自体の実装方法が知りたいです。
最新の C++ の方法論(?)によれば、右辺がコンパイラによって initiailer_list に
なって、list のコンストラクタにそれが仮引数の型として宣言してあるものがあって、
そこで処理しているのかと思い、確認のため、

http://cs.brown.edu/people/jwicks/libstdc++/html_user/stl__list_8h-source.html

で、std::list のソースを見てみると、initiailer_list というキーワードが見つかりません。
ではいったいどういう仕組みで初期化しているのでしょうか。
operator=() は見つかります。
927デフォルトの名無しさん
2019/09/09(月) 17:07:18.30ID:G9jMTORL
>>926
誤:とすると、 l というリスト右辺で指定した要素で初期化した状態で作成されますが、
正:とすると、 l というリストが右辺で指定した要素で初期化した状態で作成されますが、

誤:initiailer_list
正:initializer_list
928デフォルトの名無しさん
2019/09/09(月) 17:12:55.99ID:MF4WMKe5
<list> を見よう
929デフォルトの名無しさん
2019/09/09(月) 17:20:40.83ID:MF4WMKe5
>>926
一応マジレスしておくと、そのサイトの一番下を見よう
> Generated on Fri May 6 01:09:09 2005 for libstdc++-v3
initializer_listが導入されたのはC++11だからね
930デフォルトの名無しさん
2019/09/09(月) 17:28:46.68ID:pmQvKTaB
stl_list.hなんてコードは標準にはありません。

リンクドリストのよくあると思われる実装は、
struct node{
node* next=nullptr;
node* prev=nullptr;
T value();
}

という構造体の操作等をクラス化したモノ。
なので、インデックサが無いはずである。
931デフォルトの名無しさん
2019/09/09(月) 17:32:18.21ID:pmQvKTaB
あ、蛇足だった。。。
932デフォルトの名無しさん
2019/09/09(月) 18:26:49.77ID:L8mIN3PD
VC2019 の list ヘッダではちゃんと見つかりました。
みなさんありがとうございました。
933デフォルトの名無しさん
2019/09/09(月) 18:33:38.13ID:G9jMTORL
また質問させてください。
VS2019 の tuple の実装を調べていて、utility というヘッダファイルに以下の
ようなコードを見つけました。自分の直感では、これは、パターンマッチングを
していると思うんですが、実は、以下の (1) にマッチングする場合、
(2) にもマッチングする場合があります。しかし、現実には (1) にマッチングする
場合には、コンパイラは (2) を無視して (1) だけを採用する必要があると
思うんですが、template には、マッチングに優先順位があって、定義した
順にマッチングするかを調べて、一番最初にマッチングしたものを採用して
それ以後のものは無視すると言うような規則があるのでしょうか?

// (1)
template <class _This, class... _Rest>
struct _Tuple_element<_This, tuple<_This, _Rest...>> { // select first element
  using _Check_type = int;
  static_assert(
    is_void_v<typename _Tuple_element<_This, tuple<_Rest...>>::_Check_type>, "duplicate type T in get<T>(tuple)");

  using type  = _This;
  using _Ttype = tuple<_This, _Rest...>;
};

// (2)
template <class _Ty, class _This, class... _Rest>
struct _Tuple_element<_Ty, tuple<_This, _Rest...>>
  : _Tuple_element<_Ty, tuple<_Rest...>> { // recursive _Tuple_element definition
};
934デフォルトの名無しさん
2019/09/09(月) 19:26:19.32ID:L8mIN3PD
>>933
なお、_Tuple_element は、

tuple tpl;

に対し、get<番号>(tpl) としたときに呼び出される以下のコードから使われます。

結論的には、template を書いた順序ではなく、パターンマッチングおける強弱のような
もので優先順位が決まっているようです。それは丁度、同じ名前に仮引数の型だけが
異なる複数の関数 が overload 定義されている場合に、どの関数が呼び出されるかを
決めるときのアルゴリズムに似ているようです。詳しくは分かりません。


// FUNCTION TEMPLATE get (by type)
template <class _Ty,
  class... _Types>
_NODISCARD constexpr _Ty& get(tuple<_Types...>& _Tuple) noexcept { // get reference to _Ty element of tuple
  using _Ttype = typename _Tuple_element<_Ty, tuple<_Types...>>::_Ttype;
  return ((_Ttype&) _Tuple)._Myfirst._Val;
}
935デフォルトの名無しさん
2019/09/09(月) 19:28:45.47ID:G9jMTORL
>>934
誤:get<番号>(tpl) としたときに呼び出される以下のコードから使われます。
正:get<型名>(tpl) としたときに呼び出される以下のコードから使われます。
936デフォルトの名無しさん
2019/09/09(月) 21:43:26.98ID:jbm+gpsV
この辺の話?
https://ja.cppreference.com/w/cpp/language/partial_specialization#.E5.8D.8A.E9.A0.86.E5.BA.8F
937デフォルトの名無しさん
2019/09/10(火) 01:40:29.13ID:wmYy4ZD0
>>934
ちなみに、C++ における tuple とは、異なる型のオブジェクトの集合体のような
もので、get<idx>(tpl) とすると idx 番目の要素が参照できます。
動的配列 vector、リンクリスト list は同じ型の集合体ですが、tupleは
char, int, string 任意の順番で任意個数入れたりするようなことが可能です。
tuple は class を次々に継承することで実現され、N個の要素の場合は、
(N - 1) 回継承されて実現されています。
get<idx>(tpl) は、コンパイル段階で静的に型が決まるようになっており、
idx を 1 ずつ減らしながら idxが0 になるまでtemplateを再帰的に具現化(展開)し
て行っています。その際、基本クラスへの「cast」を利用して上手く実装されています。
get<TYPE>(tpl) は、その TYPE 版で、tuple の中の TYPE 型の要素を取り出すもので、
TYPEの要素が一個だけであることを仮定しています。

>>934
using _Ttype = typename _Tuple_element<_Ty, tuple<_Types...>>::_Ttype;
  return ((_Ttype&) _Tuple)._Myfirst._Val;
の部分は、丁度 TYPE = _Ty の場合のもので _Tuple_element<_Ty, tuple<_Types...>>
の部分が、再帰的に template 具現化を使って _Ty の型の要素が先頭になるまで
tuple の要素を減らす処理を行っており、_Ttype には、その tuple の型が入ります。
次の return 文は、cast を行っている部分です。
>>933 の(2)は、再帰的に tuple の先頭の要素を除去して行くマクロで、(1)は、
tuple の先頭が _Type になった場合にマクロ展開の動作を停止するためのものです。
938デフォルトの名無しさん
2019/09/10(火) 08:37:19.66ID:rSLGtoNV
recursive _Tuple_element definition って書いてあるから
>>933の(1)(2)併せてtupleのバッカス・ナウア記法
939デフォルトの名無しさん
2019/09/10(火) 12:01:32.29ID:wmYy4ZD0
>>938
>>933 は単純な BNFとはかなり違うはず。
940デフォルトの名無しさん
2019/09/10(火) 17:10:53.21ID:BQ4j7tjI
C#には文字列で指定したメソッドを呼び出す方法がありますが、
C++ではそういった事をしたい場合、どういった方法があるのでしょうか?
941デフォルトの名無しさん
2019/09/10(火) 17:15:02.60ID:lKNyd4my
なんかこのスレだけ(っていうか特定のレスだけ?)貼られてるソースのフォントが微妙に違う気がするんだが気のせい?
942デフォルトの名無しさん
2019/09/10(火) 17:15:39.36ID:H3vpu58u
関数ポインタ返せばいいんじゃね
943デフォルトの名無しさん
2019/09/10(火) 17:15:56.86ID:H3vpu58u
>>940
944デフォルトの名無しさん
2019/09/10(火) 17:16:04.51ID:EA1WacFe
>>940
最近他のスレで同じ質問を観たけどマルチ?
945デフォルトの名無しさん
2019/09/10(火) 17:16:07.43ID:cOE65+EF
mapファイルからシンボル探して関数呼ぶとか。
946デフォルトの名無しさん
2019/09/10(火) 17:58:56.15ID:4IK1yyiH
>>941
専ブラ使ってるならAA表示をオフれ
947デフォルトの名無しさん
2019/09/10(火) 18:30:27.12ID:/IdzRyhX
mapに入れるにしても呼び出す関数の引数戻り値の型が一致してる必要があるくね
948デフォルトの名無しさん
2019/09/10(火) 18:36:26.12ID:lKNyd4my
>>946
なるほど
何が引っかかってるんだろ
>> とか << が多い程度じゃ判別されないはずだが
949デフォルトの名無しさん
2019/09/10(火) 21:34:14.67ID:ihR0gUx6
>>940
関数名の文字列ではなく、関数ポインタを使えばやりたいことができる可能性は高い。
または仮想関数。
950デフォルトの名無しさん
2019/09/10(火) 21:51:01.01ID:ER41jhKS
C++は名前と引数が同じで戻り値が違うくらいでは別物として扱ってくれない。
ドットネットだと大丈夫だった気がする。
951デフォルトの名無しさん
2019/09/10(火) 21:57:04.55ID:7WGaos5g
嘘つけ
952デフォルトの名無しさん
2019/09/10(火) 22:21:19.85ID:ER41jhKS
https://ideone.com/0A6NGs
こんなコード書いてみた。やはり戻り値を推定して関数分けてもらえない。
factory<int>の<int>を消したい。
953デフォルトの名無しさん
2019/09/10(火) 22:21:47.33ID:ER41jhKS
>>951
うろ覚えだから、間違ってたらそーりー。
954デフォルトの名無しさん
2019/09/10(火) 22:26:46.90ID:DP4nYdpK
んなめんどいことせんでも関数2つぐらい作って関数ポインタの配列に入れりゃいいだけだろ
955デフォルトの名無しさん
2019/09/10(火) 22:28:02.41ID:ER41jhKS
>>954
後学のために、コードみたいわ〜。
956デフォルトの名無しさん
2019/09/11(水) 00:05:28.08ID:NNlDJcv1
>>944
俺が見たのは、文字列からクラスのインスタンス作りたいだったから微妙に違う
957デフォルトの名無しさん
2019/09/11(水) 00:34:09.53ID:jCX5Zmm7
まあそれ用のレイヤ噛ますのが素直だよね
.netみたいなのがあればそれでいいし、CのGLibみたいなのもちょっと無理を感じなくもないがアリ
958デフォルトの名無しさん
2019/09/11(水) 01:04:41.71ID:Au6CJXG/
>>953
昔のC++では、確かに戻り値の型は同名関数の絞込みには使用されなかったよ。
今は知らない。
959デフォルトの名無しさん
2019/09/11(水) 01:17:18.25ID:xNhcwpCp
戻り値だけ違う関数を作りたきゃテンプレートを使え
以上
960デフォルトの名無しさん
2019/09/11(水) 01:57:43.22ID:TkJgDVYV
TypeHolderTypeがほしい。
リフレクションは23で入るそうな。
961デフォルトの名無しさん
2019/09/11(水) 07:00:09.68ID:KrQUVjgm
>>952
AからRを推定させたいっていことか?
962デフォルトの名無しさん
2019/09/11(水) 08:37:00.29ID:BcUfEF7y
リフレクションどうやって実装するんだろう・・
現行のC/C++とリンカの仕様と互換性たもったまま実装するのかなり難しそうだけど
963デフォルトの名無しさん
2019/09/11(水) 10:13:16.97ID:px+Xr7os
C++に不可能は無い
964デフォルトの名無しさん
2019/09/11(水) 10:17:36.03ID:4wA+sXag
>>963
不可能はあるよ
バカにC++を理解するのは不可能
965デフォルトの名無しさん
2019/09/11(水) 11:21:58.81ID:9WrJeA7f
structured bindingで定義した変数をラムダ式でキャプチャするとclang7はエラー、gcc7は通る。
いずれもc++17指定。
使用上正しいのはどっち?

const auto [a,b]=std::make_tuple(1.0,0.0);
auto f=[&](){
return a+b;
};
966デフォルトの名無しさん
2019/09/11(水) 11:39:01.09ID:KrQUVjgm
>>965
clangが正しい
N4713 8.5.4.2 Capturesの段落8にこう書いてある
If a lambda-expression explicitly captures an entity that is not odr-usable or captures a structured binding (explicitly or implicitly), the program is
ill-formed.
967デフォルトの名無しさん
2019/09/11(水) 11:49:32.96ID:9WrJeA7f
>>966
ありがと
この仕様の真意が理解できないが、そういう仕様では仕方ないな…
968デフォルトの名無しさん
2019/09/11(水) 12:07:20.16ID:KrQUVjgm
理由は俺もよくわからん
969デフォルトの名無しさん
2019/09/11(水) 12:13:22.75ID:9+CD8w/u
ちなみに [a,b] は、std::tie(a,b) と書くのと同じですか?
また、[a,b] はなんという名称(概念)ですか?
970デフォルトの名無しさん
2019/09/11(水) 12:26:12.95ID:9+CD8w/u
>>969
自己レスですが、[a,b] は、これですか:
https://en.cppreference.com/w/cpp/language/structured_binding
↑Structured binding declaration (since C++17)

int a[2] = {1,2};
auto [x,y] = a; // creates e[2], copies a into e, then x refers to e[0], y refers to e[1]
auto& [xr, yr] = a; // xr refers to a[0], yr refers to a[1]
971デフォルトの名無しさん
2019/09/11(水) 13:04:41.28ID:9WrJeA7f
>>969
tieでは事前に定義した変数に代入することになるじゃん
つーことはconst変数にできない
972デフォルトの名無しさん
2019/09/11(水) 13:05:15.41ID:9WrJeA7f
>>970
それ
973デフォルトの名無しさん
2019/09/11(水) 13:05:17.06ID:zFEVPQj4
tieは良くないmaketuple使え
974デフォルトの名無しさん
2019/09/11(水) 13:28:34.92ID:9WrJeA7f
>>973
ズレてるよ
975デフォルトの名無しさん
2019/09/11(水) 13:46:37.79ID:TkJgDVYV
>>961
decltype(auto) f(){} ができればよいのだけどね。
976デフォルトの名無しさん
2019/09/11(水) 20:20:32.38ID:jgB/KG+a
Aクラスを継承したテンプレートで型を指定したメンバー変数cを持つ、Bクラスがある。

BクラスをキャストしたAポインタ仮想メソッド使ってBのメンバー変数cを取得したいんだけど、ダウンキャストしかないかね?

class A{};

template<typename _T>
class B : pubulic A{ pubulic : _T c;}

A *a = new B<int>;

int ret = A->???;
977デフォルトの名無しさん
2019/09/11(水) 20:23:28.97ID:xNhcwpCp
> A *a = new B<int>;

なぜ?
978デフォルトの名無しさん
2019/09/11(水) 20:25:26.05ID:xNhcwpCp
BのインスタンスをAにアップキャストした時点でAにないメンバは破棄されるのでAのポインタからcにアクセスすることはできない
979デフォルトの名無しさん
2019/09/11(水) 20:26:04.31ID:jgB/KG+a
いろんな型をリスト化する為です。
実際はAポインタの配列
980デフォルトの名無しさん
2019/09/11(水) 20:29:39.70ID:TkJgDVYV
TypeHolderTypeがほしいのじゃーーーーー!!!
981デフォルトの名無しさん
2019/09/11(水) 21:01:04.58ID:QpQ1AfFp
cにアクセスしたい人はBを知ってるんだから、ダウンキャストでもなんでもやりゃぁええがな。
982デフォルトの名無しさん
2019/09/11(水) 21:04:08.52ID:k/thmV8R
variantなりanyなり使えば
983デフォルトの名無しさん
2019/09/11(水) 22:53:28.56ID:DdLw5bDK
>>976
つーかダウンキャストじゃ何の不満が?
984デフォルトの名無しさん
2019/09/11(水) 23:37:41.00ID:dX8mKe9q
型の意味なしだろそれ
985デフォルトの名無しさん
2019/09/12(木) 00:03:44.43ID:2pi0Y8A7
ダウンキャストより先にテンプレートメソッドパターンを検討してみては?
986デフォルトの名無しさん
2019/09/12(木) 00:30:21.07ID:ikyWh7fv
>>984
それってどれよ
987デフォルトの名無しさん
2019/09/12(木) 01:15:25.34ID:t/6lHRNc
https://ideone.com/fr18YK
988デフォルトの名無しさん
2019/09/12(木) 07:02:09.27ID:7HqgwkVj
>>976
class A {
public:
virtual void func(void *) = 0;
};
989デフォルトの名無しさん
2019/09/12(木) 07:11:59.50ID:fOl/Q6Ej
anyじゃんそれ。
990デフォルトの名無しさん
2019/09/12(木) 07:21:48.35ID:guoHOxyl
型を無意味にするなんてとんでもない!
991デフォルトの名無しさん
2019/09/12(木) 07:24:41.60ID:7HqgwkVj
ダウンキャストの必要が出てきたらvirtualで何とかならんか考えれ
992デフォルトの名無しさん
2019/09/12(木) 07:27:47.36ID:ikyWh7fv
AとBだけじゃなくてどうせAの派生クラスはCやらDやらあってそれらもA*で扱うんでしょ。
ホントの型の判別やって型に応じて処理するんだろうしダウンキャストでええがな
993デフォルトの名無しさん
2019/09/12(木) 08:25:32.31ID:Ni5TNCQb
それって欲しいのはunionてことじゃね?
それかAにすべてのメンバ乗せたらええやん。
994デフォルトの名無しさん
2019/09/12(木) 10:13:00.88ID:/QY4HS1k
そもそもごった煮リストにすることが誤り
995デフォルトの名無しさん
2019/09/12(木) 10:18:31.65ID:7HqgwkVj
excelみたいなことをするなと?
996デフォルトの名無しさん
2019/09/12(木) 15:18:39.72ID:W8pItA9j
コンパイル時に自身のソースコード解析してリフレクション作ることとかできないですか?
997デフォルトの名無しさん
2019/09/12(木) 15:50:08.39ID:Cr8f/Gnu
それはコンパイラ作ってるのに等しい
998デフォルトの名無しさん
2019/09/12(木) 18:08:13.67ID:WsH5tdUK
別の言語でやればいいじゃん
999デフォルトの名無しさん
2019/09/13(金) 12:32:55.83ID:+6+n/onN
>>988
そんなことやっても結局正体を知った上での個別処理になるわけだから
素直にダウンキャストしとけと
1000デフォルトの名無しさん
2019/09/13(金) 12:54:06.04ID:/ygW08Jq
vtableがあればdynamic_castもできるのに何でダウンキャストなんだ?
ニューススポーツなんでも実況



lud20251025053103ca

ID:29yFlgBGのレス一覧:


741デフォルトの名無しさん
2019/09/03(火) 22:59:40.18ID:29yFlgBG
まあすべては委譲です
というか抽象化のためのパターンです
742デフォルトの名無しさん
2019/09/04(水) 09:05:55.41ID:42AhKM7p
>>728
コードポイントで合ってるはず。
文字符号の1つずつの番号の場所をコードポイントと言う。
例えば、ASCIIコードなら、A の文字の番号である 0x41 の占めている
場所みたいなニュアンスがある。
743デフォルトの名無しさん
2019/09/04(水) 09:20:24.49ID:42AhKM7p
>>742
追伸。なお、0x41の番号そのもののこともコードポイントと言う。
番号に就いては単に「コード」とも言うが、2019年現在において
単に「コード」と言ってしまうと、プログラムの内の命令が並んでいる
部分のことを指すことが多くて混乱が生じやすいので、文字符合の
番号に対しては、「コード」ではなく「コードポイント」という
ことがある。「文字符号」と言ってしまうと、ShiftJISの体系そのもの、
UnicodeやUTF8の体系そのものを指すことも有り、どうしても曖昧さが残る。
そこで、0x41という番号そのものの事を言っていることを曖昧さなく
示したい場合には、文字符号ではなく「コードポイント」ということがある。
744デフォルトの名無しさん
2019/09/04(水) 10:36:53.55ID:BMbMsP6d
int (*exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT;

上記はtypedef struct内に書かれていた関数ポインタの宣言で、
返り値がint、引数が(struct bContext *, struct wmOperator *)の関数ポインタexecなのは分かりますが
最後のATTR_WARN_UNUSED_RESULTって何でしょうか? 関数宣言って引数宣言の後に何か書けましたっけ?
745デフォルトの名無しさん
2019/09/04(水) 10:46:36.08ID:3LCw+twW
>>744 https://ja.lmgtfy.com/?q=ATTR_WARN_UNUSED_RESULT
746デフォルトの名無しさん
2019/09/04(水) 11:46:27.08ID:peiZ6Bip
今時なら[[nodiscard]]か
747デフォルトの名無しさん
2019/09/04(水) 12:57:05.98ID:/jMgnxhx
いくつか用意した文字列の中から1つをランダムで表示するってどうやればいいかな?
748デフォルトの名無しさん
2019/09/04(水) 13:11:23.43ID:OPoewtpz
配列辺りにぶっ混んでインデックスを乱数にして取り出すとか
749デフォルトの名無しさん
2019/09/04(水) 18:37:03.73ID:A7beDSD/
std::minstd_rand mr
std::uniform_int_distribution<> ui(0,StrS.size()-1);

StrS[ui(mr)];//<- what?

大雑把にこういう感じ?
750デフォルトの名無しさん
2019/09/04(水) 19:21:28.58ID:+/XA3LOY
StrSのSは何の略だ
751デフォルトの名無しさん
2019/09/04(水) 19:22:06.69ID:A7beDSD/
複数形。
文字列の配列だから。
752デフォルトの名無しさん
2019/09/04(水) 23:10:27.71ID:3YkDCQ2q
>>747
#include <stdio.h>
#include <stdlib.h>
#define STR_MAX 5
const char *pszText_s[STR_MAX] = { "aaa", "bbb", ・・・・・・・ };
int main() {
 int  idx = (int)( ((float)rand()) * STR_MAX / RAND_MAX );
 printf( "mojiretsu = %s\n", pszText_s[idx] );
 return 0;
}

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

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

TOPへ TOPへ  

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


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

 ↓「C++相談室 part144 ->画像>1枚 」を見た人も見ています:
C++相談室 part163
C♯相談室 Part20
C++相談室 part135
C++相談室 part142
C++相談室 part145
C++相談室 part138
C++相談室 part134
C++相談室 part136
C++相談室 part137
C++相談室 part132
C++相談室 part117
C++相談室 part140
C++相談室 part166
C++相談室 part149
C++相談室 part154
C++相談室 part151
C++相談室 part153
C++相談室 part157
C++相談室 part158
SC相模原60
C++相談室 part165
Excel総合相談所 147
Excel総合相談所 153
東海地方の結婚相談所
Excel総合相談所 157
Excel総合相談所 144
東海大相模part57
Access総合相談所 30
Excel総合相談所 144
Access総合相談所 31
Excel総合相談所 152
田中邦衛相が初会談
Excel総合相談所 150
Excel総合相談所 128
Excel総合相談所 156
登山靴購入相談スレ
Excel総合相談所 145
Excel総合相談所 149
Excel総合相談所 140
Excel総合相談所 124
エアコン修理相談 2
Excel総合相談所 148
Excel総合相談所 139
Excel総合相談所 143
相談サイトを語るスレ
Excel総合相談所 132
メイ「書き方相談」
東海大相模part51
ホモ増田の人生相談
Excel総合相談所 89
換気総合・相談スレ
C++Builder相談室 Part21
ツーリングコース相談
C++相談室 part148
人生相談
お薬相談
恋愛相談です
荒らし相談室
相談なのですが
恋愛相談します
相談があります。
C++相談室 part156
C++相談室 part162
C++相談室 part159
【初心者】キリスト教@歓談室75【歓迎】
13:08:24 up 23 days, 4:30, 4 users, load average: 122.81, 89.69, 82.69

in 3.7443358898163 sec @[email protected] on 111503