C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part143
https://mevius.5ch.net/test/read.cgi/tech/1560574313/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1556142878/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
----- テンプレ ここまで -----
探検
C++相談室 part144
レス数が1000を超えています。これ以上書き込みはできません。
2019/07/22(月) 13:18:35.52ID:gptRHpgT
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>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
---- テンプレ ここまで ----
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
---- テンプレ ここまで ----
2019/07/22(月) 17:03:26.86ID:YPZZyU9O
すっぱい葡萄
ttps://ja.wikipedia.org/wiki/%E3%81%99%E3%81%A3%E3%81%B1%E3%81%84%E8%91%A1%E8%90%84
自分のものにしたくてたまらないにもかかわらず、努力しても到底かなわない対象である場合、
人はその対象を「価値の無いもの」「自分にふさわしくないもの」と見なそうとし、
それをあきらめの理由として納得し、心の平安を得ようとするものである。
フロイトの心理学では、これを防衛機制および合理化の例とする。また、社会心理学においては、認知的不協和の例とされる。
英語には、この寓話を元に生まれた熟語として "sour grapes" があるが、これは「負け惜しみ」を意味する。
ttps://ja.wikipedia.org/wiki/%E3%81%99%E3%81%A3%E3%81%B1%E3%81%84%E8%91%A1%E8%90%84
自分のものにしたくてたまらないにもかかわらず、努力しても到底かなわない対象である場合、
人はその対象を「価値の無いもの」「自分にふさわしくないもの」と見なそうとし、
それをあきらめの理由として納得し、心の平安を得ようとするものである。
フロイトの心理学では、これを防衛機制および合理化の例とする。また、社会心理学においては、認知的不協和の例とされる。
英語には、この寓話を元に生まれた熟語として "sour grapes" があるが、これは「負け惜しみ」を意味する。
2019/07/22(月) 18:10:49.34ID:8zlk2sqy
>>2
void君諦め悪いよ
void君諦め悪いよ
2019/07/23(火) 15:37:41.03ID:zEKbbod3
江添がCADDIの常勤になった
2019/07/23(火) 16:24:43.67ID:Rjd8/nXp
ループの中で剰余演算子が沢山出てくるとまぁよく知られてるように遅いわけだが、
(x += a) %= m;
を
x += a;
if(x >= m) x -= m;
としたら高速化された
だったら言語仕様として剰余演算子の定義をこう変えれば良いのに、なぜ遅いままなのですか?
(x += a) %= m;
を
x += a;
if(x >= m) x -= m;
としたら高速化された
だったら言語仕様として剰余演算子の定義をこう変えれば良いのに、なぜ遅いままなのですか?
2019/07/23(火) 16:32:47.77ID:tt/1GdHu
>>6
それじゃ変更前と同じ演算になってないだろ。x>=2mやx<0の可能性を排除しているから速いんじゃね。
それじゃ変更前と同じ演算になってないだろ。x>=2mやx<0の可能性を排除しているから速いんじゃね。
2019/07/23(火) 16:32:54.11ID:+dwx5m0u
お前のプログラムa=999999、m=2の時に壊れてるよ
2019/07/23(火) 16:54:30.60ID:Rjd8/nXp
2019/07/23(火) 17:33:44.97ID:35PXZxTn
2019/07/23(火) 18:24:59.51ID:u/gGnwtd
2019/07/23(火) 20:42:24.11ID:Ptp4kmtT
単なるファッションだろ。江添もさ。
2019/07/23(火) 21:35:57.63ID:04X8GIZv
自分が食っていくためには自分に仕事が必要であるため、
C++言語仕様周辺で食ってる人は永遠にコネクリ回したいはず。
C++言語仕様周辺で食ってる人は永遠にコネクリ回したいはず。
2019/07/23(火) 21:41:03.53ID:Ffr5F2PG
最新規格に合わせた方が生産性高く保守も容易になる
それに、cudaだってc++17相当で書けるだろうに
それに、cudaだってc++17相当で書けるだろうに
2019/07/23(火) 21:46:35.19ID:u/gGnwtd
やってから言え
2019/07/23(火) 22:06:34.72ID:q6q7AnvM
自明だよね
2019/07/23(火) 22:06:42.46ID:Ffr5F2PG
普通にc++17は便利に使っているが?
てか使っている実例に対して、無意味断定する根拠が適当過ぎる
それこそコードで示せと
そんなに大きくない会社が金かけてまでやっているのだから、それで利益が出る効果はあるんだろう
てか使っている実例に対して、無意味断定する根拠が適当過ぎる
それこそコードで示せと
そんなに大きくない会社が金かけてまでやっているのだから、それで利益が出る効果はあるんだろう
2019/07/23(火) 22:13:30.35ID:u/gGnwtd
>>17
お前が保守してるコードについて詳しくきかせてもらおうか
お前が保守してるコードについて詳しくきかせてもらおうか
2019/07/23(火) 22:20:10.76ID:Ffr5F2PG
コーディング量減るし、constexpr ifでlambdaの記述が捗るだろ?
2019/07/23(火) 22:23:24.83ID:NxPnU+JE
俺c++03民、autoが使いたいです
2019/07/23(火) 22:36:46.59ID:u/gGnwtd
22デフォルトの名無しさん
2019/07/23(火) 22:39:03.45ID:TGpHom7B 速度とC++を使用する意義について問題提起したのかと思いきや生産性の話になってる
23デフォルトの名無しさん
2019/07/23(火) 22:51:25.14ID:LMG0h0kR constexpr ifって言ってんのにC++のバージョン聞くってどういうこっちゃ
まさかC++20?
まさかC++20?
2019/07/23(火) 22:53:38.63ID:Ffr5F2PG
>>21
今のところc++17だな
17で0から書いたわけじゃないが、少なくとも有効にしないと通らん
行数はひとつじゃなくライブラリ沢山だから分からん
昔はlinuxメインでcudaとかも使って数値演算だったがここ数年はwindowsばかり
画像処理系、GUI、数値演算ライブラリその他装置制御とかのライブラリと組み合わせたアプリ作っている感じだな
今のところc++17だな
17で0から書いたわけじゃないが、少なくとも有効にしないと通らん
行数はひとつじゃなくライブラリ沢山だから分からん
昔はlinuxメインでcudaとかも使って数値演算だったがここ数年はwindowsばかり
画像処理系、GUI、数値演算ライブラリその他装置制御とかのライブラリと組み合わせたアプリ作っている感じだな
2019/07/23(火) 22:58:50.26ID:Ffr5F2PG
画像処理だと要素型のテンプレートで基本操作をそれぞれ特殊化してintrinsicsで書いておいて、それを組み合わせて応用機能を実現している感じ
組み合わせで最適化可能な操作も基本操作に加えているけど
組み合わせで最適化可能な操作も基本操作に加えているけど
26デフォルトの名無しさん
2019/07/23(火) 22:58:57.04ID:TGpHom7B >>23
何言ってだお前
何言ってだお前
2019/07/23(火) 23:02:07.66ID:N0M0V2oE
constexpr ifはC++17以降じゃないと使えない
2019/07/23(火) 23:03:45.37ID:Ffr5F2PG
通称constexpr ifなのに書くときは逆という罠
2019/07/23(火) 23:22:42.08ID:viG1+s3R
>>24
それ保守じゃねーだろ
それ保守じゃねーだろ
2019/07/23(火) 23:25:00.99ID:Ffr5F2PG
?
開発したアプリやライブラリの機能追加とかバグ対応とかって保守だろ
開発したアプリやライブラリの機能追加とかバグ対応とかって保守だろ
2019/07/23(火) 23:38:39.91ID:OTk37+kC
それ保守ってほど時間たってないんじゃね?
しかも他人のコードじゃないならなおさら
しかも他人のコードじゃないならなおさら
2019/07/23(火) 23:42:48.79ID:Ffr5F2PG
17にしてからは1年も経ってないかも知らんが、14,11の頃から数えれば数年前のソフトいじるとかは普通にある
弄るついでに最新規格でコンパイル通るようにしたり、使ってたライブラリ最新版に置き換えたりしてる
弄るついでに最新規格でコンパイル通るようにしたり、使ってたライブラリ最新版に置き換えたりしてる
2019/07/23(火) 23:43:53.31ID:OTk37+kC
2019/07/23(火) 23:46:09.85ID:OTk37+kC
自分のちっさいライブラリでしょどうせ
他人の膨大なソースコードでそれできんのかと
仕事で保守したことないやつの戯言
他人の膨大なソースコードでそれできんのかと
仕事で保守したことないやつの戯言
2019/07/23(火) 23:50:18.68ID:+dwx5m0u
機能追加やリファクタも保守だぞ
変えないことが保守だと思ってんの?仕事で保守したことないやつの戯言
変えないことが保守だと思ってんの?仕事で保守したことないやつの戯言
2019/07/23(火) 23:51:10.09ID:Ffr5F2PG
他人のなら、1ソース数10万行のが50ファイルとかあって、中身がコピペ改変のネスト構造になっているとか頭おかしいコードのデバッグとかすることもあるよ。
おんなじバグが100箇所くらいあったりするのw
おんなじバグが100箇所くらいあったりするのw
2019/07/24(水) 06:44:19.68ID:8xr9hPJ6
cudaに対してc+17使うとか100%死亡パターンだろw
2019/07/24(水) 07:38:12.78ID:xGXQ+cSs
39デフォルトの名無しさん
2019/07/24(水) 15:35:36.80ID:51dv4//C 修正は保守に入るだろうけど、
機能追加はどうかな。保守ではないような気がするが。
別にどうでもよいけど
機能追加はどうかな。保守ではないような気がするが。
別にどうでもよいけど
2019/07/24(水) 17:30:07.43ID:2ifmVNIE
新しいOSに対応しろ、ファイル形式に対応しろ、こういうAPI追加しろ、出力形式変えろ、速くしろ、軽くしろ
保守ってそういう要求に対応すること・対応できる体制を維持することだと思ってたんだが、そうじゃない宇宙もあるのかな
保守ってそういう要求に対応すること・対応できる体制を維持することだと思ってたんだが、そうじゃない宇宙もあるのかな
2019/07/24(水) 20:29:11.56ID:TdGR8UUG
ソフトの保守って受けたことねーや
納品したらそれまで
改修や機能追加は別料金
納品したらそれまで
改修や機能追加は別料金
2019/07/24(水) 21:09:49.20ID:j4f+/jKb
> 改修や機能追加は別料金
オレが決められるなら当然そうするんだが
クソ脳無しの営業どもが
オレが決められるなら当然そうするんだが
クソ脳無しの営業どもが
2019/07/24(水) 21:52:55.40ID:94R5D7K2
元来の意味は現状維持なんだから機能追加するものは保守とは言わんよなぁ
どうしても直さないといけないバグとか、開発環境変わったことによる対応とか、そういうのだけいやいややる感じ
どうしても直さないといけないバグとか、開発環境変わったことによる対応とか、そういうのだけいやいややる感じ
2019/07/24(水) 22:50:28.58ID:2ifmVNIE
保守(maintenance)ってのはソフトウェアの利用価値を持続させることでしょ
そのために必要なら修正もするし機能追加もする
「保守だから現状維持、改修や追加なんてしないししてはいけない」なんてのは思考停止
そのために必要なら修正もするし機能追加もする
「保守だから現状維持、改修や追加なんてしないししてはいけない」なんてのは思考停止
2019/07/24(水) 23:04:23.71ID:u4NdgWgN
パッケージだと正式リリースした後のバージョンアップはすべてメンテナンス
2019/07/24(水) 23:30:16.15ID:bRKaVM+S
業務で保守契約っていわれたら機能追加はないイメージだな
2019/07/24(水) 23:31:07.37ID:8xr9hPJ6
思考停止っつーか実際問題そんな仕事ないだろ。
c++バカによくある妄想に付き合う必要はない。
c++バカによくある妄想に付き合う必要はない。
2019/07/24(水) 23:38:01.87ID:TdGR8UUG
ある人にとっての「保守」は
趣味プログラマによるお仕事ごっこという文脈でのそれなのかな
趣味プログラマによるお仕事ごっこという文脈でのそれなのかな
2019/07/25(木) 00:16:11.89ID:f/JymLGM
ソースコード変えたらテストせねばならないがC++は単体テストの記法がイマイチ
Google Test一時期使ってたがテスト対象を呼び出すコードを書くまでのタイピング量がけっこう生じる
GoやRustはいいいぞ〜☆
Google Test一時期使ってたがテスト対象を呼び出すコードを書くまでのタイピング量がけっこう生じる
GoやRustはいいいぞ〜☆
2019/07/25(木) 02:35:44.89ID:f/JymLGM
ていうかC++の自己責任が伴いすぎる自由に疲れた、
2019/07/25(木) 02:39:40.09ID:f/JymLGM
苦労して自由を行使した末に得られる見返りのは
たいていはわずかばかりのパフォーマンス向上と
二度と見る気がしない気がする醜いソースコードやし、
保守wwwwwwwwww
たいていはわずかばかりのパフォーマンス向上と
二度と見る気がしない気がする醜いソースコードやし、
保守wwwwwwwwww
52デフォルトの名無しさん
2019/07/25(木) 06:25:29.69ID:GrqrASiv const std::string & を std::string_viewに置き換えている記事をよく見かけます
後者を使うことに何か意味はありますか?
単に置き換え可能だと言うことを解説したかっただけなのでしょうか
後者を使うことに何か意味はありますか?
単に置き換え可能だと言うことを解説したかっただけなのでしょうか
2019/07/25(木) 06:43:57.53ID:jgZKUqYh
後者は部分文字列を切り出したいときにメモリ確保と文字列のコピーが発生しない
2019/07/25(木) 09:08:23.71ID:fv/O10Ch
c++は、スマホでは動作しませんか?
VSでコンパしたものでは、ダメですか?
VSでコンパしたものでは、ダメですか?
2019/07/25(木) 09:17:00.66ID:QDSJiMEy
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使ったやつはもう作ってます
よろしくお願いします
以下イメージ
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使ったやつはもう作ってます
よろしくお願いします
2019/07/25(木) 13:05:43.49ID:eYgqWI8M
>>57 「substr()使ったやつ」で何が不満なのか?
2019/07/25(木) 14:10:42.84ID:HIqmru9O
2019/07/25(木) 15:06:48.36ID:eq0G00ml
ABIの変更ってこれから先何度もあるんでしょうか?
stringとか基本のクラスが変わるのはきついんですが
stringとか基本のクラスが変わるのはきついんですが
2019/07/25(木) 16:49:16.74ID:E2feltVj
そのあたりほんとc++クソだよ
というか標準化委員会がクソ
というか標準化委員会がクソ
2019/07/25(木) 17:01:42.02ID:XeL2zPLs
ABIはしゃーないな
VCとgccが違うの知った時泣いたわ
VCとgccが違うの知った時泣いたわ
2019/07/25(木) 17:11:22.15ID:DsBc3y+y
BeOSっていうOSが昔あって、純粋にC++でゼロから作られたOSなんだけど
コンパイラのバージョンアップだとかでABIが変わって
アプリの使うAPIの互換性が保たれてなかったんだよね
(後継のHAIKU OSも同じ問題抱えてる)
そこらへん標準で決めててくれればいいのにねぇ
コンパイラのバージョンアップだとかでABIが変わって
アプリの使うAPIの互換性が保たれてなかったんだよね
(後継のHAIKU OSも同じ問題抱えてる)
そこらへん標準で決めててくれればいいのにねぇ
2019/07/25(木) 21:34:32.20ID:E2feltVj
OS作ってんならABIは自分で定義しろよ
2019/07/25(木) 21:46:01.89ID:PNoIdPh5
それ言い出すとcでいいやんてなる。
2019/07/25(木) 23:57:42.04ID:n2Si4yAe
C++の委員会って規模やリソース的に多言語と比べてどうなんでしょう?
かなり恵まれているほうえすかね?
かなり恵まれているほうえすかね?
2019/07/26(金) 00:08:47.64ID:v7MbZVD8
C++くらい規格化ちゃんとやってる所って他にある?
2019/07/26(金) 00:21:17.49ID:wfZPJP/7
Javascript?
2019/07/26(金) 00:33:24.31ID:eT9T+6Bl
規格合致したコンパイラなんて過去に存在したのかしら
2019/07/26(金) 00:47:51.48ID:qhxgv2BF
そもそも1つの規格を元に複数のコンパイラが存在するって言語が少ないだろ
2019/07/26(金) 01:25:43.63ID:6ttC61YN
>>52
例えば文字列リテラルを与えた時にconst std::string &だと暗黙的に一時オブジェクトが構築され、バッファの確保と文字列のコピーが発生する。
std::string_viewを使うと、文字列の先頭アドレスと長さだけが渡されることになるので、効率の良いコードが生成される。
例えば文字列リテラルを与えた時にconst std::string &だと暗黙的に一時オブジェクトが構築され、バッファの確保と文字列のコピーが発生する。
std::string_viewを使うと、文字列の先頭アドレスと長さだけが渡されることになるので、効率の良いコードが生成される。
2019/07/26(金) 03:37:13.13ID:8OK0KeqS
>>69
VSコンパイルで、なんでもOKだろ。
VSコンパイルで、なんでもOKだろ。
2019/07/26(金) 06:49:13.69ID:4yTQHcMn
>>55
これは、IDEはVSでも使用するコンパイラ本体は MSC(?)ではなくclang ですか。
これは、IDEはVSでも使用するコンパイラ本体は MSC(?)ではなくclang ですか。
2019/07/26(金) 06:51:05.54ID:/WSqmbNM
>>70
せ、せやな
FORTRAN, COBOL
せ、せやな
FORTRAN, COBOL
2019/07/26(金) 08:35:39.46ID:TlXJotF6
実用的な言語の話をしているキリッ
2019/07/26(金) 08:49:06.77ID:PZK88cLJ
ecma334
2019/07/26(金) 13:37:03.81ID:X7S0ZvoC
Fortran今も使われてるのか
研究室のコードが軒並みFortranでイヤイヤ使わされた記憶がよみがえった
C++だのなんだの色々流行ってるが研究者はそんなものに振り回されるな
Fortranは完成された言語なんだとボスが力説してたわ
研究室のコードが軒並みFortranでイヤイヤ使わされた記憶がよみがえった
C++だのなんだの色々流行ってるが研究者はそんなものに振り回されるな
Fortranは完成された言語なんだとボスが力説してたわ
2019/07/26(金) 13:40:16.10ID:X7S0ZvoC
言い忘れたがFORTRAN77ね
90とか使うと怒られた
90とか使うと怒られた
2019/07/26(金) 14:33:55.87ID:qhxgv2BF
今はPythonかMATLABが多いかと
2019/07/26(金) 14:48:21.28ID:pSMqg5vs
Pythonは「CPythonの実装が規格だ」だし
MATLABはそもそもプロプラで言語仕様や変更プロセス自体ブラックボックスだし
あんまり依存するのは危険だと思うんだけどな
アカデミックでは特に
MATLABはそもそもプロプラで言語仕様や変更プロセス自体ブラックボックスだし
あんまり依存するのは危険だと思うんだけどな
アカデミックでは特に
2019/07/26(金) 16:28:07.22ID:/WSqmbNM
>>77
Fortran 2008の規格書印刷してボスの机の上に置いてやれw
Fortran 2008の規格書印刷してボスの机の上に置いてやれw
2019/07/26(金) 16:39:45.36ID:1S1aSnkU
かといってANOVAやMCMCをC++で実装するのは検証も含めて愚かでしょ
2019/07/26(金) 18:18:30.43ID:4cv+0ZCY
ボイジャーのメンテナにFORTRAN使い募集してたやん
2019/07/26(金) 22:42:11.25ID:eT9T+6Bl
JAXAの若手プログラマは自殺してなかったっけ?
2019/07/27(土) 01:32:43.02ID:KwccJBez
86デフォルトの名無しさん
2019/07/27(土) 07:33:07.73ID:NQ4+UjHL2019/07/27(土) 08:41:09.41ID:m1vSIns3
個人的な話だけどstring_viewはconstexpr対応してる点で有利。
2019/07/27(土) 09:24:24.73ID:utI+NfFM
パイソン2と3が混在してるのがややこしい。
spirvのビルドスクリプトは2でしか動かない記述なのに勝手に3を探してきて動かそうとするとか混乱が甚だしい
spirvのビルドスクリプトは2でしか動かない記述なのに勝手に3を探してきて動かそうとするとか混乱が甚だしい
2019/07/27(土) 11:41:57.01ID:zR8v2AWF
2019/07/27(土) 13:02:56.66ID:P/JKsCl6
なんというか世の中全てがオンラインが前提みたいになってて辟易します
2019/07/27(土) 13:17:47.97ID:zR8v2AWF
2019/07/27(土) 13:57:22.46ID:zfEkdoko
別にオンライン前提でもいいんだけどエラー処理が糞なのが多くて、オフラインだと起動が超遅くなるとかそもそも起動しないとかあるのが
2019/07/27(土) 17:04:11.07ID:BDHmD2jF
これからはonline merged offlineらしいです
2019/07/27(土) 17:04:42.40ID:BDHmD2jF
あ、dはいらんか
2019/07/27(土) 17:25:47.08ID:zR8v2AWF
要らない物を売りつけてくる天才みたいな感じだからな、アメリカは。
2019/07/27(土) 18:56:25.83ID:KwccJBez
アメリカ関係ないだろ。
エヴァンジェリストとか名乗る馬鹿が要らんものばっか押し付けてるだけで。
エヴァンジェリストとか名乗る馬鹿が要らんものばっか押し付けてるだけで。
2019/07/27(土) 19:08:52.15ID:zR8v2AWF
VSもASもみんなそうだし。
2019/07/28(日) 03:30:37.94ID:tecnuiEb
エヴァンジェリストっていう単語はじめてきいたときは
エヴァンゲリオンのファンの事かとオモテタ
エヴァンゲリオンのファンの事かとオモテタ
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
元になっているC言語がUnix記述のためにデニスリッチーがほぼ一人で考えたドメイン固有言語みたいなものなので
後方互換性というものを重視すればするほど後発言語に対してハンデ戦になってしまうのは仕方が無い
Rustを見たらC++のconstや参照がいかに危険で不用意なブツになってしまっているかがワカル
・こんな人はRustを使うべき(中略
・今すぐRustを使うべき10の理由(ry
103デフォルトの名無しさん
2019/07/28(日) 09:53:00.46ID:5UHV96py ていうかUnixの記述自体が文書整形をやりたいから(後にroffとして結実)という
システム記述ではなくてアプリ実現要求に端を発しているから、
やっぱ全体を俯瞰するとろくでもない流れの末に生まれたC++は不幸な出自と言えるかもしれん…
システム記述ではなくてアプリ実現要求に端を発しているから、
やっぱ全体を俯瞰するとろくでもない流れの末に生まれたC++は不幸な出自と言えるかもしれん…
104デフォルトの名無しさん
2019/07/28(日) 10:38:12.67ID:p9n7KwZ9 C互換無くなってきてるやん
105デフォルトの名無しさん
2019/07/28(日) 10:57:33.68ID:c9+bQbdr 2の補数以外を捨てたのと、評価順序を規定したあたりでCとは決別したと思ってる
これ生粋のCerは絶対受け入れられないでしょ
これ生粋のCerは絶対受け入れられないでしょ
106デフォルトの名無しさん
2019/07/28(日) 10:58:21.15ID:/T7nmvYx >>105
kwsk, wktk
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はキレてる
もう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じゃないかな
速いでなく早いなら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 { … }
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見たいな構文やな。
switch見たいな構文やな。
124デフォルトの名無しさん
2019/07/30(火) 19:15:29.41ID:YQWzaJvj Opencvで空の画像に点を1000個程度書きたいです
X座標Y座標が既知の場合に最速で点を1000個描画するにはどうしたらいいんですかね?
X座標Y座標が既知の場合に最速で点を1000個描画するにはどうしたらいいんですかね?
125デフォルトの名無しさん
2019/07/30(火) 20:14:10.30ID:q4AvHDZp126デフォルトの名無しさん
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. につづく
「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. につづく
# 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)'
↑ここで落ちる
# 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パスを入れるとかありましたがうまくいかず。。
作者がいるので問い合わせればよいですね。
まずは問い合わせてみます。
ありがとうございました。
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でやってたりしない?
それとライブラリのパス入れるときは-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/qze1m140デフォルトの名無しさん
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文字分を
タイプする必要は無かったはず。
仮に何かと衝突するというなら設計の不味さを感じますね。
訳だから、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名前空間で定義された名前とはぶつからない命名が常にできる自信はあるのかい?
今現在問題なかったとして、後に標準ライブラリが拡張されて、自分でつけた名前にぶつからない保証は?
そんな諸々の厄介ごとを回避するために名前空間はあるのだから、自分しか使わないソースで誰にも迷惑かけないなら好きにすればいいよ。
衝突する可能性は低いという前提が抑間違い。
お前さんは広範な標準ライブラリのすべてを熟知して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 が必要。
て事も知らないなら入門書からやり直しが必要な初歩レベル
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を使うべきではない理由はこれだけで十分。
せっかく標準規格化されてどの環境でも同じように動作するライブラリのポータビリティを阻害するのは長い目で見ればデメリットしかないと思う。
競合するかどうかは問題の本質ではない。
using stdをつけてstd::を省略したコードは、using stdをつけていない他の環境に持っていったときに動かない。
std::をつけていれば、どんなusingが使われていようと関係なく動作する。
using stdを使うべきではない理由はこれだけで十分。
せっかく標準規格化されてどの環境でも同じように動作するライブラリのポータビリティを阻害するのは長い目で見ればデメリットしかないと思う。
152デフォルトの名無しさん
2019/08/01(木) 02:08:20.24ID:YZxnvLL/ プロのプログラマでもないしstdやboost使う程度なんで名前空間汚染問題とか大げさにしか思えない
大したコードでもないのにstd::つけまくってるコード見るとアホらしくなる
職業や用途あるいは個々人の技量によって求められるものは違うでしょうに、十把一絡げに議論して意味あるの?
大したコードでもないのに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
議論する気があるなら、みんなが分かるコードを書かないとだめでしょ。
オレオレコードを一人で書いて満足するのが好きなら、別に止めはしない。
でもそんな主張をここでされても多分同意は得られないと思うよw
議論する気があるなら、みんなが分かるコードを書かないとだめでしょ。
156デフォルトの名無しさん
2019/08/01(木) 02:21:21.39ID:xENMcR2S157デフォルトの名無しさん
2019/08/01(木) 02:52:55.71ID:EzhbGyK1 stdだけusingしてライブラリはusingしなければいいだけちゃうの?
158デフォルトの名無しさん
2019/08/01(木) 03:13:40.26ID:xENMcR2S それが都合がいいなら好きにすればいいんだよ
誰もstd名前空間は取り込んじゃいけないとは言ってない
そんなのは個々の設計の意思決定と責任の話で、std取り込む奴がアホとか取り込まないのがアホとかいう話じゃない
誰も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;が含まれるから動くでしょ。
もしかして、ソースの一部だけコピペして持っていく場合の話?
「コピペでも動くソースにしなければならない」という主張はちょっとどうかとおもうけど。
「他の環境に持っていったときに動かない」って、どういうこと?
ソース丸ごと持っていくなら、ソースにusing namespace std;が含まれるから動くでしょ。
もしかして、ソースの一部だけコピペして持っていく場合の話?
「コピペでも動くソースにしなければならない」という主張はちょっとどうかとおもうけど。
161デフォルトの名無しさん
2019/08/01(木) 07:36:43.17ID:crx0fETR ソースレベルのライブラリを持ってくとか
162デフォルトの名無しさん
2019/08/01(木) 07:59:03.96ID:dXXftso1163デフォルトの名無しさん
2019/08/01(木) 08:05:18.75ID:xENMcR2S >>160
標準以外のライブラリの存在が全く想定できてない
自前のちょっとしたライブラリのヘッダでもusing namespace stdって書いてたら
その後or中でインクルードしたヘッダ類が全部巻き込まれて名前の衝突が起きうる
ソースでusingした後にインクルードした場合も同じ(これはあんま無いと思うけど
仮にライブラリとしてファイルが綺麗に別けられてても別のプロジェクトに移して動かない場合があるってのはこれのことでしょ
標準以外のライブラリの存在が全く想定できてない
自前のちょっとしたライブラリのヘッダでも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しない、あるいは衝突するものはいちいち指定するかしなきゃいかんでしょ
ただ、標準と別のライブラリで衝突する名前があるならどちらかはusingしない、あるいは衝突するものはいちいち指定するかしなきゃいかんでしょ
168デフォルトの名無しさん
2019/08/01(木) 08:48:03.19ID:xENMcR2S169デフォルトの名無しさん
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/173デフォルトの名無しさん
2019/08/01(木) 09:53:26.68ID:cScMcWqS おれの職場ではコード規約でusing stdはもちろんその他の名前空間も省略禁止
ファイルローカルでaliasは可能というか推奨
基本的にコードは後で誰でもすぐ読めるように書く方針だからね
仕事で使うときはこんなもんだよ
似たようなの話でauto多用が読みやすいか読みにくいかは結構議論になる
こっちはまだ規約化されてないな
ファイルローカルで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 構造体メンバ間のパディングをコンパイル時に知る方法
178デフォルトの名無しさん
2019/08/01(木) 18:18:03.26ID:tmRbumxZ auto導入によってハンガリアン記法が再評価の機運
179デフォルトの名無しさん
2019/08/01(木) 19:18:28.91ID:Ag3GiCEL >>156
流れ読んでないし本題には触れずにレスするけど同意
「ニワカなやつほど語りたがる」のは世の常だけど
C++ちょっと触っただけくらいの駆け出しのカスが
「C++は〜」なんて知った風に語ってるのたまにあるよなw
それも、スレに参加してるなかでお前一番素人やろってやつが
平然と調子こいてきたりするから驚く
流れ読んでないし本題には触れずにレスするけど同意
「ニワカなやつほど語りたがる」のは世の常だけど
C++ちょっと触っただけくらいの駆け出しのカスが
「C++は〜」なんて知った風に語ってるのたまにあるよなw
それも、スレに参加してるなかでお前一番素人やろってやつが
平然と調子こいてきたりするから驚く
180デフォルトの名無しさん
2019/08/01(木) 22:39:23.89ID:re8BbLkf すまないC++20の新機能諳じて言えない奴は例外なく初心者なので出ていってくれないか
181デフォルトの名無しさん
2019/08/01(木) 22:41:32.13ID:IjUNQuw2182デフォルトの名無しさん
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:Phw6FYmd185デフォルトの名無しさん
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 の思想なのでしょう。
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 に入れて有ること自体が余りセンスが無かった可能性があると
自分は思ってます。
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は、たまたま衝突が起きた場合には、その時点で使うと助かる場合が
あると思いますが、最初から入れてしまった事で新たな問題が入ってしまった
可能性があります。
2. StdString
3. CString
最も効率がいいのは、3 の CString でその意味では CString の設計者は
センスが良かったと私は思っています。using を使って std:: を書かないように
した場合、確かに何かのライブラリと衝突の危険性が出てきます。
ならば、標準のライブラリ(STL)は、デフォルトでは namespace の中に入れる
べきではなかったのではないかとも思います。
namespaceは、たまたま衝突が起きた場合には、その時点で使うと助かる場合が
あると思いますが、最初から入れてしまった事で新たな問題が入ってしまった
可能性があります。
189デフォルトの名無しさん
2019/08/02(金) 02:35:42.08ID:TGlmBsBg >>186
namespaceってその名の通り名前空間を分割することで識別子名の競合を避けて、命名の自由度を上げる(楽をする)ための機能でしょ。
ある程度大きな規模のプロジェクトでは大変重宝するものだと思うんだけど、なんかものすごく偏った理解のしかたしてない?
namespaceってその名の通り名前空間を分割することで識別子名の競合を避けて、命名の自由度を上げる(楽をする)ための機能でしょ。
ある程度大きな規模のプロジェクトでは大変重宝するものだと思うんだけど、なんかものすごく偏った理解のしかたしてない?
190デフォルトの名無しさん
2019/08/02(金) 02:46:27.31ID:TGlmBsBg >>188
CStringとタイプするには、shiftを押したり離したりしないといけないし、手間としてはstd::とそれほどかわらないと思うんだけどw
CStringとタイプするには、shiftを押したり離したりしないといけないし、手間としてはstd::とそれほどかわらないと思うんだけどw
191デフォルトの名無しさん
2019/08/02(金) 02:49:52.24ID:zOtmkI/7192デフォルトの名無しさん
2019/08/02(金) 02:51:05.19ID:zOtmkI/7193デフォルトの名無しさん
2019/08/02(金) 02:54:02.02ID:TGlmBsBg >>191
いやいや、実際はshiftを若干早くおしとかないと、cStringになっちゃったりするだろw
離す時も気をつけないとCSTringになっちゃったりするし。
それに最近のエディタ(統合開発環境)には補完機能が付いてるから、std::で候補が絞られる分、選択に有利に働く。
いやいや、実際はshiftを若干早くおしとかないと、cStringになっちゃったりするだろw
離す時も気をつけないとCSTringになっちゃったりするし。
それに最近のエディタ(統合開発環境)には補完機能が付いてるから、std::で候補が絞られる分、選択に有利に働く。
194デフォルトの名無しさん
2019/08/02(金) 02:54:16.42ID:1bW2v8eW >>186
外から使うことだけしか考えてないみたいだけど、名前空間内の実装を読み書きしやすくする効果もあるでしょ。
外から使うことだけしか考えてないみたいだけど、名前空間内の実装を読み書きしやすくする効果もあるでしょ。
195デフォルトの名無しさん
2019/08/02(金) 02:55:50.33ID:TGlmBsBg196デフォルトの名無しさん
2019/08/02(金) 03:01:42.94ID:zOtmkI/7 >>195
namespace std で囲まれている事で気が緩んで hoge みたいな短い名前付けて
しまうことで、std:: を外すことが不可能になってしまう恐れが有る。
結局なんのための名前空間なのか分からなくなってしまうという。
外せない名前空間なら、std_ でも Std でも Stl を付けた方がタイプ量が
少なく済んだのに。
namespace std で囲まれている事で気が緩んで hoge みたいな短い名前付けて
しまうことで、std:: を外すことが不可能になってしまう恐れが有る。
結局なんのための名前空間なのか分からなくなってしまうという。
外せない名前空間なら、std_ でも Std でも Stl を付けた方がタイプ量が
少なく済んだのに。
197デフォルトの名無しさん
2019/08/02(金) 03:04:55.47ID:TGlmBsBg >>196
あくまで外すことが前提なのかw
あくまで外すことが前提なのかw
198デフォルトの名無しさん
2019/08/02(金) 03:07:18.69ID:zOtmkI/7 >>195
大丈夫だと思って i という一文字のグローバル変数を定義したとしよう。
すると、std::i としている場合には問題ないが、using namespace std;
とした場合、大変な現象が起きる。伝統的な for のループ変数と衝突
するから。
大丈夫だと思って i という一文字のグローバル変数を定義したとしよう。
すると、std::i としている場合には問題ないが、using namespace std;
とした場合、大変な現象が起きる。伝統的な for のループ変数と衝突
するから。
199デフォルトの名無しさん
2019/08/02(金) 03:07:57.71ID:zOtmkI/7 >>197
絶対に外さないなら namespace に何のメリットが有るの。
絶対に外さないなら namespace に何のメリットが有るの。
200デフォルトの名無しさん
2019/08/02(金) 03:08:43.92ID:zOtmkI/7 >>197
外さないなら、StdVector, StdList で良かったはず。
外さないなら、StdVector, StdList で良かったはず。
201デフォルトの名無しさん
2019/08/02(金) 03:10:27.53ID:tRQdKQsJ 別に外さなくとも、その名前空間内で書くときは省略できるんで楽なんだけどな
(ライブラリ書いてるときとか
(ライブラリ書いてるときとか
202デフォルトの名無しさん
2019/08/02(金) 03:10:40.06ID:zOtmkI/7203デフォルトの名無しさん
2019/08/02(金) 03:11:25.60ID:zOtmkI/7204デフォルトの名無しさん
2019/08/02(金) 03:14:20.48ID:Baufd8HM この世の名前空間はstdしかないと思ってるのかな?
mylib::vectorとかyourlib::vectorとかを安心して作れるようにするための機能が名前空間だぞ
mylib::vectorとかyourlib::vectorとかを安心して作れるようにするための機能が名前空間だぞ
205デフォルトの名無しさん
2019/08/02(金) 03:15:42.09ID:zOtmkI/7 >>201
もしかしてアプリなどでは使わないのにライブラリを作ることだけで
満足している人たちが多いのでしょうか。
なるほど、それで stl や boost が究極にセンスの悪い代物になっているのかも
知れない。コンテナ類は、C/C++のリストの概念が全く理解できて無い人
が作ったとしか思えない。リストは構造がリストであればリスト足りえると
思っているのが頭が悪い。ポインタでアクセスできないリストはリストじゃない。
O(1)で済むところがO(N)になってしまっていて、stlは全くセンスの
悪い欠陥ライブラリ。
もしかしてアプリなどでは使わないのにライブラリを作ることだけで
満足している人たちが多いのでしょうか。
なるほど、それで 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置換使ったことが無いんだろうか。
とても頭が悪い感じがする。
だったら 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宣言を一箇所書き換えるだけでいい
名前空間ってのはそういう機能で、ただの接頭辞じゃねえんだよわかったか知恵遅れ
vectorを100回使うならその方が短いだろ?
後でyourlibやmylib_ver2のvectorを使いたくなればgrep(笑)なんかしなくても最初のusing宣言を一箇所書き換えるだけでいい
名前空間ってのはそういう機能で、ただの接頭辞じゃねえんだよわかったか知恵遅れ
208デフォルトの名無しさん
2019/08/02(金) 03:53:52.52ID:tRQdKQsJ209デフォルトの名無しさん
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のパッケージのようにパッケージが公開/非公開の唯一の境界、みたいに割り切って
名前空間の設定に論理的必然を持たせたらよかったんじゃ…
諸悪の根源すぎて死ぬ
std_vectorとかstd_stringとか衝突しにくい名前にすれば済んだ話
しかしそれだと標準ライブラリ内部のコードがダサくなって逝けてないから、という理由で導入されたのがstd名前空間。
所詮センスの問題なためにいつまでたっても議論が収束しない
ここはRustのパッケージのようにパッケージが公開/非公開の唯一の境界、みたいに割り切って
名前空間の設定に論理的必然を持たせたらよかったんじゃ…
218デフォルトの名無しさん
2019/08/02(金) 07:35:54.09ID:uj4cDNt2 だいたいfoo::some_symbolと書いたときfooがクラスのときご名前空間のときがあって、
それぞれやれることが微妙に違いもあるがだいたいオーバーラップしているとか嫌すぐる…
疑問に思わないのはC++に脳が汚染されている証拠
後方互換性命で変えるな派と後方互換性を失っても改良すべき派の合意が見られない事案については
前者が勝って後者は追加で我慢するというWIN-win決着で永遠に先送りされつつ混迷だけが深まっていくのがC++の宿命
それぞれやれることが微妙に違いもあるがだいたいオーバーラップしているとか嫌すぐる…
疑問に思わないのは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という風に名前を長くするのに対してなんのメリットも提供されていない
標準ライブラリ内部のコードにおいてもほとんどがテンプレートであるために、
using std;することが許されない
つまり、std_vectorやstd_stringという風に名前を長くするのに対してなんのメリットも提供されていない
221デフォルトの名無しさん
2019/08/02(金) 07:43:02.09ID:uj4cDNt2 訂正orz;
誤: using std;
正: using namespace std;
誤: 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++固有の問題じゃないのに
ちょっと調べればなぜこんな機能が必要とされたか位わかるだろ
名前空間の問題なんてC++固有の問題じゃないのに
225デフォルトの名無しさん
2019/08/02(金) 11:01:28.88ID:OZv2fXQJ >>220
邪悪なADLが利点だよ
邪悪な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が機能するぜ!」
みたいな話があったような気がするんだけど検索しても見つからない(´・ω・`)
「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/7232デフォルトの名無しさん
2019/08/02(金) 18:33:35.61ID:6Fm4tKt9233デフォルトの名無しさん
2019/08/02(金) 18:46:25.31ID:v+e6jaBZ おい!
4倍精度複素数は!?
ないの!!???
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の中身だけが省略して使える
std::header名の名前空間に入れて、std内でusing namespace header名していればいいのに
std::xxxでも使えるし、using namespace std::header名すればそのheaderの中身だけが省略して使える
237デフォルトの名無しさん
2019/08/02(金) 18:56:02.63ID:zOtmkI/7238デフォルトの名無しさん
2019/08/02(金) 18:59:20.11ID:zOtmkI/7 匿名性掲示板が困るのは、何かの欠点を指摘するとそれを作った当事者らしき人が
全否定をしてしまうことで話が深まらないこと。
同意する人がいればもっと良いライブラリを探す話とかに発展できる
かも知れないのに。
全否定をしてしまうことで話が深まらないこと。
同意する人がいればもっと良いライブラリを探す話とかに発展できる
かも知れないのに。
239デフォルトの名無しさん
2019/08/02(金) 19:00:52.12ID:4a7qvAUu ABI互換が問題ならextern "C"みたいに
extern ::std
みたいなので、マングリング時の名前空間を強制できる機能つければなんとかならんかね
extern ::std
みたいなので、マングリング時の名前空間を強制できる機能つければなんとかならんかね
240デフォルトの名無しさん
2019/08/02(金) 19:05:43.92ID:TY1gde0p >>237
お前の「使いやすい」と世間一般の「使いやすい」が一致してないというだけだろう。
お前の「こうあるべき」と世間一般の「こうあるべき」のズレが大きいから、今のC++はお前にとって不満の大きいものになっているんだろう。もしかすると家庭や学校、社会全体も。
お前の「使いやすい」と世間一般の「使いやすい」が一致してないというだけだろう。
お前の「こうあるべき」と世間一般の「こうあるべき」のズレが大きいから、今のC++はお前にとって不満の大きいものになっているんだろう。もしかすると家庭や学校、社会全体も。
241デフォルトの名無しさん
2019/08/02(金) 19:09:51.86ID:zOtmkI/7242デフォルトの名無しさん
2019/08/02(金) 19:10:14.38ID:TY1gde0p >>238
C++の仕様策定に関与したような人がこんなスレを覗いて低レベルな指摘にわざわざ反応するわけないだろう。想像力が豊かだな。
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では大量に流布
されている。実際、そういう情報を信じて損する人は多かろう。
大問題だ。
それで日本はめちゃくちゃに成ったんじゃなかろうか。
例えば「日本製スマホが全然駄目」などという説が5chでは大量に流布
されている。実際、そういう情報を信じて損する人は多かろう。
大問題だ。
246デフォルトの名無しさん
2019/08/02(金) 19:49:20.44ID:azkiHyJD247デフォルトの名無しさん
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を外から呼んでたりのケースは救われない
、すでに衝突したあるいは衝突不可避なソースコードAとソースコードAを
namespace a { A }
namespace b { B }
と囲う等して分離できる ( こともある ) というだけやんけ
それとて完全には果たせないというあたりがいかにも行き当たりばったりで中途半端な言語要素感を醸し出してゐる
(中で::fooで呼んでたり入れ子のnamespaceを外から呼んでたりのケースは救われない
249デフォルトの名無しさん
2019/08/02(金) 23:17:29.32ID:4a7qvAUu てかnamespaceは色々中途半端な点はあるが、便利に使える機能だろ
無いと物凄く不便
using namespace stdは使わんな
無いと物凄く不便
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と結果が異なります
規格書読めないマンで申し訳ないのですが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> )
\| ⌒(_人_)⌒|/
\ |┬| /
ヽノ
くるくる
((ヽ三/) (ヽ三/))
(((」) ___ (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で書くことが出来ないと表現した方が正しそう
(そのロジックを)Rustで書くことが出来ないと表現した方が正しそう
257デフォルトの名無しさん
2019/08/03(土) 10:47:51.13ID:m/VIbHu2 Ristがチューリング完全かどうかについては誰もが口を濁すが
それはそうとして、これからはRustでプロトタイピングしてC++のコードを上司には提出するという
スタイルに移行するのではないかと思う
それはそうとして、これからは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> を使うことにしました
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を使わない場合の話
unsafeを使わない場合の話
264デフォルトの名無しさん
2019/08/03(土) 15:39:33.35ID:bjverAuH265デフォルトの名無しさん
2019/08/03(土) 15:51:00.92ID:bjverAuH namespaceそんなに不便かのう。
他の言語もやたらとパス掘って面倒なことになってるが。
pythonでも
import matplotlib.pyplot as plt
みたなのあるしな。
C++でやるなら
namespace plt = matplotlib::pyplot
とできるわけで、他の言語とにたりよったり
他の言語もやたらとパス掘って面倒なことになってるが。
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++から削除したほうが良い
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;
みたいな事を使う名前の文だけやらなくちゃいけないのはかなり非効率だと思う。
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:eeu00PkY269デフォルトの名無しさん
2019/08/03(土) 16:21:38.24ID:dTS2sKLx >>265
namespace(やパッケージ名やモジュール名)のエイリアスえは安全性とタイピング量の効率の良い妥協点だとは思う
ただし、ファイルスコープでエイリアスしたコードを他に持っていったとき(ry
ちなRustではモジュール名の別名の付け替えはできないが、using namespaceみたいなことを
してほしいのかしてほしくないのかを中の人がモジュール名の末尾の階層を「prelude」にするという慣例で凌いでゐる
namespace(やパッケージ名やモジュール名)のエイリアスえは安全性とタイピング量の効率の良い妥協点だとは思う
ただし、ファイルスコープでエイリアスしたコードを他に持っていったとき(ry
ちなRustではモジュール名の別名の付け替えはできないが、using namespaceみたいなことを
してほしいのかしてほしくないのかを中の人がモジュール名の末尾の階層を「prelude」にするという慣例で凌いでゐる
270デフォルトの名無しさん
2019/08/03(土) 16:23:34.90ID:bjverAuH >>266
あの、.hでは使わず.cppで使う話についてなんだが
あの、.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:dTS2sKLx274デフォルトの名無しさん
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++ は取り入れてしまった。
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:dTS2sKLx276デフォルトの名無しさん
2019/08/03(土) 16:35:39.76ID:s7JzQoXH stdつけるのそんなに嫌かね?
1つなら良いじゃないかと思う
長い奴は別名つけりゃいいし
IDE使っているとnamespace付きの方が候補が絞れてむしろ便利じゃね
ADLでつけなくても呼べる場面であったとしても
1つなら良いじゃないかと思う
長い奴は別名つけりゃいいし
IDE使っているとnamespace付きの方が候補が絞れてむしろ便利じゃね
ADLでつけなくても呼べる場面であったとしても
277デフォルトの名無しさん
2019/08/03(土) 16:46:08.58ID:eeu00PkY >>276
IDEのエディタは使ってないので補完機能は使わない。
IDEのエディタは使ってないので補完機能は使わない。
278デフォルトの名無しさん
2019/08/03(土) 16:52:55.00ID:M1zmWsZu IDE使え
279デフォルトの名無しさん
2019/08/03(土) 16:58:03.17ID:bjverAuH >>276
なんでstdに限定するのかな
なんでstdに限定するのかな
280デフォルトの名無しさん
2019/08/03(土) 16:59:59.07ID:bjverAuH >>275
なにが困るんだっての。
名前が被ったらスコープ内での命名が優先されるが、読み込んだヘッダの中の名前に影響は及ぼさないだろ
そして、隠蔽された名前にはnamespace名を使えばアクセスできるんだから何ら問題はない
なにが困るんだっての。
名前が被ったらスコープ内での命名が優先されるが、読み込んだヘッダの中の名前に影響は及ぼさないだろ
そして、隠蔽された名前にはnamespace名を使えばアクセスできるんだから何ら問題はない
281デフォルトの名無しさん
2019/08/03(土) 17:00:41.48ID:s7JzQoXH282デフォルトの名無しさん
2019/08/03(土) 17:08:23.80ID:dTS2sKLx283デフォルトの名無しさん
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 だけでアクセスできるようにした場合に
衝突が起きたのかもしれない。
その話とは関係ないかもしれないけど、以下のようなことがあった。
その時には、理由は追求しなかったんだけど、昔、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 という名前が衝突するのかも。
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;
> ・・・
>
> を延々と書けというんですよね。
これを言ってる人いたっけ?
名前空間を明示するというポリシーに反してるからおれは使わないな
> 大部分のここの人達の主張は、直接
>
> 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:: を外したときに衝突する問題が
起きる可能性が出てきてしまった。
下手に入れてしまったからむしろ std:: を外したときに衝突する問題が
起きる可能性が出てきてしまった。
289デフォルトの名無しさん
2019/08/03(土) 17:37:28.85ID:rAotfWJY290デフォルトの名無しさん
2019/08/03(土) 17:42:58.60ID:ulHqgYUF Microsoftのmin,maxマクロの事か
291デフォルトの名無しさん
2019/08/03(土) 17:46:28.08ID:eeu00PkY292デフォルトの名無しさん
2019/08/03(土) 17:47:44.86ID:rAotfWJY >>291
殺せ。
殺せ。
293デフォルトの名無しさん
2019/08/03(土) 17:48:34.32ID:rAotfWJY294デフォルトの名無しさん
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を崇めよ
BOOST_PREVENT_MACRO_SUBSTITUTIONを崇めよ
296デフォルトの名無しさん
2019/08/03(土) 17:55:43.43ID:rAotfWJY マイクロソフト最大のチョンボだよな。
297デフォルトの名無しさん
2019/08/03(土) 17:59:48.03ID:3VuQ5ICx 関数は関数呼び出しが遅いから使うなマクロにしろ
処理は全部mainに入れろ
という恐ろしい時代から引きずってるから仕方ないといえば仕方ない
処理は全部mainに入れろ
という恐ろしい時代から引きずってるから仕方ないといえば仕方ない
298デフォルトの名無しさん
2019/08/03(土) 18:02:18.88ID:eeu00PkY だったら STL の方が、std::max とかじゃなくて、
std::smax とかにすべきだったような気がしますが。
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::をつけさえすれば確実に標準ライブラリにアクセスできるんだから、記述の一貫性を保つのに役立つよ。
どんなusingがされている箇所でもstd::をつけさえすれば確実に標準ライブラリにアクセスできるんだから、記述の一貫性を保つのに役立つよ。
301デフォルトの名無しさん
2019/08/03(土) 18:07:41.16ID:eeu00PkY 元々 min(), max() は非常に古い C時代から #define されているマクロですよね、
std::min(), std::max() と書いても結局マクロ展開されてしまうのでは
ないでしょうか???
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++ の前処理層によるマクロ展開は
マクロ関数名(
という並びが有る場合にのみ展開されますので。
(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++ 標準ライブラリは、それが
有る場合にでも当然問題なく使えるようにしなくてはならなかったが、
そうなってません。それはどちらに原因があるかは明確です。
いや、むしろ逆に、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、
左様
.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の方法で安全なはず
正: マクロ版の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)
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()
が使えるでしょう。
#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:dTS2sKLx310デフォルトの名無しさん
2019/08/03(土) 18:55:02.09ID:aqiFUikh この手の無駄に一般化は大抵バグを引き起こす。
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;に変えると問題ない
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:gpWi1Ho2316デフォルトの名無しさん
2019/08/03(土) 21:04:27.05ID:3VuQ5ICx using namespace はその名前空間の中の名前を私が責任持って現在の環境に導入しますという宣言だ
中身を把握してないくせにそんな事して事故った奴が全部悪いんであって、使われた側には責任はない
stdとて例外ではない
中身を把握してないくせにそんな事して事故った奴が全部悪いんであって、使われた側には責任はない
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意外には邪悪すぐる
使われた側の未来のふるまいまで予測して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
再インストールしなおしてプロジェクトの設定をC++17なのを確認してもエラーが出た
うちの環境だけか・・・
Visual Studio 2019 Community Version 16.2.0
319デフォルトの名無しさん
2019/08/03(土) 21:38:58.27ID:M1zmWsZu320デフォルトの名無しさん
2019/08/03(土) 21:51:26.72ID:3VuQ5ICx >>317
完全に同意
そういう事態が起きないと確信できるほど中身を理解してるnamespaceか、起きても問題ないほど狭いスコープか
そのどちらかでしか使ってはいけないものだ
using namespaceというのはそういう乱暴な機能
完全に同意
そういう事態が起きないと確信できるほど中身を理解してるnamespaceか、起きても問題ないほど狭いスコープか
そのどちらかでしか使ってはいけないものだ
using namespaceというのはそういう乱暴な機能
321317
2019/08/03(土) 21:51:59.64ID:dTS2sKLx322デフォルトの名無しさん
2019/08/03(土) 21:54:29.31ID:3VuQ5ICx323デフォルトの名無しさん
2019/08/03(土) 22:06:21.81ID:CM1VqrV7324デフォルトの名無しさん
2019/08/03(土) 22:09:28.81ID:bbhz9sWw using namespaceの話はも止めたら?
使いたい人は使えばいいし
使いたくない人は使わなければいい
でいいじゃん
大した問題じゃないだろ
使いたい人は使えばいいし
使いたくない人は使わなければいい
でいいじゃん
大した問題じゃないだろ
325デフォルトの名無しさん
2019/08/04(日) 00:06:21.11ID:gKArgCAM ダメに決まってるだろw
Coding Standardの話なのにw
Coding Standardの話なのにw
326デフォルトの名無しさん
2019/08/04(日) 01:17:09.87ID:uuq2lSJI どうでもいいだろ
C++のようなアレな言語を扱う上では些細な事さ
C++のようなアレな言語を扱う上では些細な事さ
327デフォルトの名無しさん
2019/08/04(日) 01:20:42.30ID:6uyvUJES そもそもプログラミングは間違ったことを信じている人がはっきり損をする世界
(ことあるごとにエラーが多発するとか作成に余分な時間がかかるとか完成品の質が悪いとかの話で)
リアルで誰かと作業するならともかく
ネットの向こうの間違ってる誰かなんて放っておいても損を勝手に積み立てて自らつぶれていくものだ
(ことあるごとにエラーが多発するとか作成に余分な時間がかかるとか完成品の質が悪いとかの話で)
リアルで誰かと作業するならともかく
ネットの向こうの間違ってる誰かなんて放っておいても損を勝手に積み立てて自らつぶれていくものだ
328デフォルトの名無しさん
2019/08/04(日) 01:21:14.60ID:uuq2lSJI おれはね
C++はね
正しく扱うのに本当にコツのいる言語だと思うんよ
そんな中using namespaceは割とどうでも良いよね
俺は使わない派だが、使いたければ使えばって感じ
C++はね
正しく扱うのに本当にコツのいる言語だと思うんよ
そんな中using namespaceは割とどうでも良いよね
俺は使わない派だが、使いたければ使えばって感じ
329デフォルトの名無しさん
2019/08/04(日) 01:59:42.19ID:xBRRtFJn 確かにどうでもいいな
プルリクで簡単に見つかるから
というかコンパイルや静的解析でエラーにする方法はないかな
プルリクで簡単に見つかるから
というかコンパイルや静的解析でエラーにする方法はないかな
330デフォルトの名無しさん
2019/08/04(日) 09:37:37.80ID:7855nA4b331デフォルトの名無しさん
2019/08/04(日) 18:06:02.62ID:24EQJs3u min(), max() マクロのような件は別として、標準的なライブラリであるところの
std::系の名前は、using namespace std; してもそんなに問題ないということは
無いんですか???
他のライブラリの名前空間 XXX も同時に using namespace XXX; した場合に
もし衝突が起きる場合は、using namespace XXX; だけはしないようにすれば、
特に問題ないような気がします。実際やってみたことが無いので経験者の意見を
聞いてみたいです。
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したときにエラーがでまくるとか。
別に衝突しなくても問題は起こる。
using namespace stdで書いたコードをヘッダーのインライン関数に持って行く必要が出た場合とか、
using namespace std;
#inlucde "...."
となってしまっていてたまたま動いていたコードを、別の箇所でincludeしたときにエラーがでまくるとか。
334デフォルトの名無しさん
2019/08/04(日) 19:00:40.18ID:Rn2rET4f >>333
ほとんど言いがかりレベルw
ほとんど言いがかりレベルw
335デフォルトの名無しさん
2019/08/04(日) 19:02:23.99ID:nZL08BTE std::くらい書けで終わる話をいつまで続けるつもりだ
336デフォルトの名無しさん
2019/08/04(日) 19:04:24.66ID:Is6FE1ys >>335
10万行とかのソースでそれをやりますか?
10万行とかのソースでそれをやりますか?
337デフォルトの名無しさん
2019/08/04(日) 19:06:21.58ID:UDvg82p4 >>336
ところどころについてたり、ついてなかったりするくらいなら、最初からstd::つける方がはるかにマシ。
ところどころについてたり、ついてなかったりするくらいなら、最初からstd::つける方がはるかにマシ。
338デフォルトの名無しさん
2019/08/04(日) 19:06:25.70ID:nZL08BTE やるよ
339デフォルトの名無しさん
2019/08/04(日) 19:09:16.58ID:6Wul5V0e 普通頻繁に使うライブラリをusingするだけで、名前空間ごとはやらんだろ
chrono使う時はたまにやるけど
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)
1ファイルが10万行じゃないだろ(1ファイルならそこから直せw)
343デフォルトの名無しさん
2019/08/04(日) 20:54:10.96ID:Rn2rET4f >>341
size_t は大昔からあるのと明らかに型名っぽい名前なのでわざわざバッティングさせる奴もいないからじゃね?
size_t は大昔からあるのと明らかに型名っぽい名前なのでわざわざバッティングさせる奴もいないからじゃね?
344デフォルトの名無しさん
2019/08/04(日) 21:52:28.11ID:UDvg82p4 >>341
size_tはC言語時代から存在してるから、もともとnamespace関係なく使える
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のちょい設定いじるだけなんだがな(´・ω・`)
まぁ、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;
・・・・
};
↑のようにタイピングするのは余り賢いやり方だとは思えません。
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 と書くのかということです。
俺は書く。
> ↑のようにタイピングするのは余り賢いやり方だとは思えません。
お前の感想はどうでもいい
> 1ファイルの行数は関係有りません。
> 要は大きなプログラムを書いているとき、string で済むところを
> 全ての箇所で std::string と書くのかということです。
俺は書く。
> ↑のようにタイピングするのは余り賢いやり方だとは思えません。
お前の感想はどうでもいい
354デフォルトの名無しさん
2019/08/05(月) 22:09:13.72ID:B18jZANO >>348
高々数文字のタイピングに拘って名前空間のメリットが理解できないという主張を繰り返すお前さんの行動は、余り賢いやり方とは思えません。
高々数文字のタイピングに拘って名前空間のメリットが理解できないという主張を繰り返すお前さんの行動は、余り賢いやり方とは思えません。
355デフォルトの名無しさん
2019/08/05(月) 22:10:29.33ID:7u4aY/7T356デフォルトの名無しさん
2019/08/05(月) 22:17:59.20ID:vqN4pUkV 無駄だと思うならtypedefやusingすりゃいいじゃないか
そもそもstringって名前長すぎだろ
そもそも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に入れてからだが
でかすぎる
最近良くやるのは
namespace fs=std::filesystem;
だな
まあこれもヘッダで使うなら独自namespaceに入れてからだが
359デフォルトの名無しさん
2019/08/05(月) 23:33:53.82ID:/t1yyPXk using namespace std;をグローバルなスコープでやってしまうと
ソースコードを他に持って行ったとき困る
fooをstd::fooに変換するのはfooの種類が100台になると並みのエディタの置換機能では手間的にアウト
一方std::をとるのなら簡単にできる
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:tJwlIUsZ364デフォルトの名無しさん
2019/08/07(水) 08:04:40.03ID:go9nzBX4 入れ子となったクラスの内側のクラスから外側のクラスのprivateメンバにアクセスできるという
内側のクラスの特権はJavaやC#と同じくC++にもあるから、これを使って大規模なStateパターンでも書いた日には
ソースコードの行数も大規模にならざるおえない
このとき上記3言語の中で唯一大規模にならずに済むのはクラスの分割定義が可能なC#だけ
内側のクラスの特権は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:2Zq4F03j373デフォルトの名無しさん
2019/08/08(木) 03:51:27.57ID:TsWml31+ errnoに謝罪しる
374デフォルトの名無しさん
2019/08/08(木) 05:46:38.89ID:FTUf1Nuq375デフォルトの名無しさん
2019/08/08(木) 06:53:52.07ID:5ZN2ymvH 頭悪そう
376デフォルトの名無しさん
2019/08/08(木) 10:31:27.94ID:llWdm4EH それは設計の問題でしょ
30億通りのstateパターンで設計する方が悪い
言語の問題じゃあないな
あり得ないヘンな例を持ち出してdisる詐欺師の方法だ
30億通りのstateパターンで設計する方が悪い
言語の問題じゃあないな
あり得ないヘンな例を持ち出してdisる詐欺師の方法だ
377デフォルトの名無しさん
2019/08/08(木) 21:15:10.76ID:lDut6bjR378デフォルトの名無しさん
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()のようなものをイメージしています。
どのようにしたらできますか?
下記のようにしても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じゃだめよ。
moveで中身を奪い取るからconstじゃだめよ。
384デフォルトの名無しさん
2019/08/10(土) 06:27:08.55ID:9vKRFOhk >>381
そりゃデバッガ使える状況ならその方が速いことは誰でも知ってるだろw
そりゃデバッガ使える状況ならその方が速いことは誰でも知ってるだろw
385379
2019/08/10(土) 09:48:42.90ID:bGTBV06s386デフォルトの名無しさん
2019/08/10(土) 15:57:01.40ID:lQ/anG82 ググってもなかなか出てこないが__LINE__はlong型だったと思った!
387デフォルトの名無しさん
2019/08/10(土) 16:00:35.87ID:Azv7NalM388デフォルトの名無しさん
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:9vKRFOhk391デフォルトの名無しさん
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のアーキテクチャーが有り得るはず
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っぽいが
まあwindowsはLLP64っぽいが
395デフォルトの名無しさん
2019/08/10(土) 19:05:34.69ID:bGTBV06s バイナリファイルを一度に読み込もうとしています。
圧縮ありファイルと圧縮なしファイルを以下のように判定して読み込もうとしているのですが、
ファイルの全てを読み込む方法がわかりません。
@Aはどのようにしたら良いですか?
http://codepad.org/FwYwQ62R
圧縮ありファイルと圧縮なしファイルを以下のように判定して読み込もうとしているのですが、
ファイルの全てを読み込む方法がわかりません。
@Aはどのようにしたら良いですか?
http://codepad.org/FwYwQ62R
396デフォルトの名無しさん
2019/08/10(土) 19:14:37.23ID:J81sqFQj std::
これ自体は大した量ではないとは思うけど
これが何百何千と書かないといけないなら省略できる方法は必要だと思う
省略して且つ安全で簡単な方法が無いのが問題なんだと思う
ここまで読んででusing宣言を書き連ねたファイルを用意して
関数定義の次の行で#includeするのが今の所一番良い様な気がした
const何かも余りに書きすぎるので
これも何らかの形で省略できる記法を搭載できないのだろうかとは思ってる
classのpublic:
みたいに
const:
とかするとその後は記載しなくてもconst宣言になる
みたいな方法を搭載したりはしないのか?
と何時も疑問に思う
これ自体は大した量ではないとは思うけど
これが何百何千と書かないといけないなら省略できる方法は必要だと思う
省略して且つ安全で簡単な方法が無いのが問題なんだと思う
ここまで読んででusing宣言を書き連ねたファイルを用意して
関数定義の次の行で#includeするのが今の所一番良い様な気がした
const何かも余りに書きすぎるので
これも何らかの形で省略できる記法を搭載できないのだろうかとは思ってる
classのpublic:
みたいに
const:
とかするとその後は記載しなくてもconst宣言になる
みたいな方法を搭載したりはしないのか?
と何時も疑問に思う
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;
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]);
}
ありがとうございます。
とりあえず圧縮なしの方は以下で取得できたようです。
ここで一点疑問です。
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とかしても大丈夫な場合すらあることがある
もちろん動作は保証されない
処理系によるけど大抵の処理系では指定されたサイズをきっちり確保とかはしなくて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個までしかアクセスしていないので
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);
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パスにするとか
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++ 愛好家のグループによって作成され、メンテナンスされています。
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);
コメントありがとうございます。
全部読む以外に調べる方法は無いんですね。
ということで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:bWvktEwN417395
2019/08/11(日) 19:34:48.78ID:khTmYGk1418デフォルトの名無しさん
2019/08/11(日) 19:44:47.41ID:bWvktEwN >>417
> 2パスをググってもそれらしいものがなかったのですが、どういうものなのでしょうか?
1回目(Pass 1)ではデータの格納はせずにサイズだけ取得する
合計サイズ分を確保して2回目(Pass 2)で実際に格納するってこと
> あと、「各領域をリストで繋いて」というのはvectorに追加しながら最後に連結するということでしょうか?
そう言うこと
でかいデータはコピーにも時間がかかるからできるだけコピーしないようにした方がいい
> 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)
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つ用意して、そこに上書きしながら繰り返し読み込めばいい。内容は上書きされて読めなくなるけど、読み捨てるつもりなので気にしない。
固定長のバッファを1つ用意して、そこに上書きしながら繰り返し読み込めばいい。内容は上書きされて読めなくなるけど、読み捨てるつもりなので気にしない。
422デフォルトの名無しさん
2019/08/11(日) 21:42:34.43ID:bWvktEwN (最終的なところに)格納しないってことな
適当なバッファを1つ用意して毎回そこに格納しとけばいい
適当なバッファを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回読む方が速いんか?
ホントに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パスに切り替えるという投機的なやり方のが良い
と言いたいところだが他のスレッドが動いているとそうとも言い切れないかそうか、
この場合の2パス方式はgzipが2回走るのがいかにも実行時間の無駄でいやすぐる
最初に大きめの領域をmallocして足りんかったら2パスに切り替えるという投機的なやり方のが良い
428デフォルトの名無しさん
2019/08/12(月) 09:18:32.18ID:QXujyVaw だいたいいかにgzip様といってもファイルを毎回1/10まで圧縮できるわけはないのだから
読み込むファイルサイズの10倍を確保しておけばほぼ1パスで済む
展開後の実サイズがわかったら展開後の実サイズぴったりにreallocで縮小すれば良い
ちなメモリの断片化はガン無視
実使用サイズの倍のメモリも用意できないようなプアな環境のならmallocやreallocする設計から見直さねばならない
見直すべき
読み込むファイルサイズの10倍を確保しておけばほぼ1パスで済む
展開後の実サイズがわかったら展開後の実サイズぴったりにreallocで縮小すれば良い
ちなメモリの断片化はガン無視
実使用サイズの倍のメモリも用意できないようなプアな環境のならmallocやreallocする設計から見直さねばならない
見直すべき
429デフォルトの名無しさん
2019/08/12(月) 10:16:31.87ID:Mc0sgLDk430デフォルトの名無しさん
2019/08/12(月) 10:19:40.97ID:QXujyVaw >>429
ヒープメモリはスレッドで共有される
もしヒープメモリを使う他のスレッドが一切無いなら
realloc()でサイズ拡大してもコピーは生じない(後ろに領域伸ばせるから
この説明でまだ疑念が渦巻くのならプログラミング言語Cをきちんと読み直した砲が良い
(あのmalloc()実装例がmalloc()実装の全てとは言わんが基本
ヒープメモリはスレッドで共有される
もしヒープメモリを使う他のスレッドが一切無いなら
realloc()でサイズ拡大してもコピーは生じない(後ろに領域伸ばせるから
この説明でまだ疑念が渦巻くのならプログラミング言語Cをきちんと読み直した砲が良い
(あのmalloc()実装例がmalloc()実装の全てとは言わんが基本
431デフォルトの名無しさん
2019/08/12(月) 10:26:54.62ID:q+3SbcDd そうとは限らんのでは?
432デフォルトの名無しさん
2019/08/12(月) 10:28:45.76ID:Mc0sgLDk433デフォルトの名無しさん
2019/08/12(月) 10:35:35.84ID:q+3SbcDd 特にこの場合はgzipを使うからね
アウトプット用のメモリを確保した上でgzipを実行するわけだけど
gzipが内部で動的にメモリを確保するかしないかは知らんけど、多分するでしょ
そうすると新たに論理アドレス空間が使われるから
連続したメモリ空間を後ろに拡張できるかって言われるとね
アウトプット用のメモリを確保した上でgzipを実行するわけだけど
gzipが内部で動的にメモリを確保するかしないかは知らんけど、多分するでしょ
そうすると新たに論理アドレス空間が使われるから
連続したメモリ空間を後ろに拡張できるかって言われるとね
434デフォルトの名無しさん
2019/08/12(月) 10:43:33.86ID:QXujyVaw435395
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
どなたかの役にたてばと思い僕が調べた内容をお知らせします。
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回もやることが利いているでケテーイ
他のプロセス(他のサーバ利用者が居る 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)
ttps://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」ではありませんでした。
>>続きます
今読み込んだバイナリファイルの解析をしています。
ある一部の8バイトがビッグエンディアン形式で下記になっていて、これが少数点の数値で「2.500000e-04」となるようです。
3e 10 62 4d d2 f1 a9 fc
次に下記URLを参考に調べると今使っているサーバはリトルエンディアンでした。
(CPUはintel)
ttps://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」 に変換できるかわかりますでしょうか?
ビッグエンディアン→リトルエンディアン の変換時にもうひと工夫いるのでしょうか?
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:dO9cEAMi442デフォルトの名無しさん
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は何?
サーバのCPUは何?
444395
2019/08/12(月) 18:15:44.42ID:lzJUIRtk445デフォルトの名無しさん
2019/08/12(月) 18:17:10.91ID:ejXFqJv3 サーバじゃないか
もとデータ生成したビッグエンディアンのCPUは何かと
もとデータ生成したビッグエンディアンのCPUは何かと
446395
2019/08/12(月) 18:32:01.51ID:lzJUIRtk 同じサーバで生成されました。
生成したソフトは販売されているものなので問題はないと思うし、
他のソフトで読み取ってもちゃんと 2.5e-04 が出てくるのでデータに問題はなさそうです。
なぜそう読めるのか不思議です。。
生成したソフトは販売されているものなので問題はないと思うし、
他のソフトで読み取ってもちゃんと 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 が出てくるのでデータに問題はなさそうです。
他のソフトって何よ?
みんなエスパーじゃないんだから出せる情報は出しなよ
> 生成したソフトは販売されているものなので問題はないと思うし、
なぜそのソフトの名前を書かないの?
> 他のソフトで読み取ってもちゃんと 2.5e-04 が出てくるのでデータに問題はなさそうです。
他のソフトって何よ?
みんなエスパーじゃないんだから出せる情報は出しなよ
450デフォルトの名無しさん
2019/08/12(月) 19:44:21.64ID:Mc0sgLDk Calmaでググるとこれがヒットするけどこれかな?
https://en.m.wikipedia.org/wiki/Calma
これだとかなり古いソフトウェアだから浮動小数点のフォーマットが違うような気がする
https://en.m.wikipedia.org/wiki/Calma
これだとかなり古いソフトウェアだから浮動小数点のフォーマットが違うような気がする
451395
2019/08/12(月) 21:13:36.45ID:lzJUIRtk452395
2019/08/12(月) 22:32:15.08ID:lzJUIRtk 下記で数値からバイナリへの変換ができましたが、何の計算をしているのかさっぱりわかりません……
逆変換できるのでしょうか?
http://codepad.org/oSvOJP1p
---結果---
変換前の値:0.000250
変換後の値:3e 10 62 4d d2 f1 a9 fc
----------
逆変換できるのでしょうか?
http://codepad.org/oSvOJP1p
---結果---
変換前の値:0.000250
変換後の値:3e 10 62 4d d2 f1 a9 fc
----------
453デフォルトの名無しさん
2019/08/12(月) 22:37:12.67ID:S6a2ieXo454デフォルトの名無しさん
2019/08/12(月) 22:47:45.27ID:ikUKzGwn 浮動小数の正規化っぽいけど
( A < 0.0625 ) || ( A >= 1.0 ) ってのが特殊だと思う
何かそういう事情があったんでしょう
浮動小数の正規化ってのは検索すればわかる
別環境でデコードするだけならたぶん気にしなくて大丈夫
( A < 0.0625 ) || ( A >= 1.0 ) ってのが特殊だと思う
何かそういう事情があったんでしょう
浮動小数の正規化ってのは検索すればわかる
別環境でデコードするだけならたぶん気にしなくて大丈夫
455デフォルトの名無しさん
2019/08/12(月) 22:50:05.37ID:ikUKzGwn 確かに、IBM方式ってやつっぽい
気にしないといかんわw
無駄なこと書いてごめんね
気にしないといかんわw
無駄なこと書いてごめんね
456395
2019/08/12(月) 23:17:08.77ID:lzJUIRtk457デフォルトの名無しさん
2019/08/12(月) 23:30:07.71ID:S6a2ieXo 「エクセス64」とかでググればいいと思うよ
458蟻人間 ◆T6xkBnTXz7B0
2019/08/12(月) 23:30:19.79ID:rRSk3cI0459デフォルトの名無しさん
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);
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は捨ててください恥ずかしい
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で表現されててケチ表現なし。
半導体とかで使われる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で検索してもそんなに記事が出てこないですね。
かなりの難易度の予感……
コメントやサンプルコードありがとうございます。
こんな複雑なコードになるんですね。。
何やってるのかさっぱりわかりませんが、上記コードを参考に勉強してみます。
しかしエクセス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
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が変換できるものかもしれません。
これから調べてみます。
ttps://github.com/ulfgri/gdsii-toolbox/blob/de8deaa5972c1449aacc3eea5dda86472ef721a8/Basic/gdsio/convert_float_generic.h
ここのexcess64_to_ieee754が変換できるものかもしれません。
これから調べてみます。
ttps://github.com/ulfgri/gdsii-toolbox/blob/de8deaa5972c1449aacc3eea5dda86472ef721a8/Basic/gdsio/convert_float_generic.h
472デフォルトの名無しさん
2019/08/13(火) 22:30:02.23ID:b87Bd4Qh473395
2019/08/13(火) 23:33:41.23ID:yoyEPk6p >>472
わかりやすい解説ありがとうございます。
仮数部の計算がまだいまいち理解できていませんが、符号ビットと指数のところは理解できました。
なんとかプログラム作れそうです。
とても勉強になりました。ありがとうございました。
わかりやすい解説ありがとうございます。
仮数部の計算がまだいまいち理解できていませんが、符号ビットと指数のところは理解できました。
なんとかプログラム作れそうです。
とても勉強になりました。ありがとうございました。
474395
2019/08/14(水) 19:36:19.26ID:4qk3klko475デフォルトの名無しさん
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進数を扱ってますがバイトとニブル?がすぐわからなくなります。。
今回バイナリ読みで初めてどっぷり16進数を扱ってますがバイトとニブル?がすぐわからなくなります。。
477デフォルトの名無しさん
2019/08/15(木) 21:08:05.11ID:ICD/Kw2h バイナリ読み込むだけで大騒ぎだな
478デフォルトの名無しさん
2019/08/15(木) 23:25:44.65ID:ON8CHoCN ttp://www7b.biglobe.ne.jp/~robe/cpphtml/html02/cpp02007.html
上記URLで
・クラスの宣言はヘッダファイルにする
・クラスの実装部はソースファイルにする
・そのクラスを使いたいときはヘッダファイルのみインクルード
とありますが、これが一般的なのでしょうか?
上記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の機能が使えたりする...
でも付属の簡易コンパイラは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:RHoMoFJP491デフォルトの名無しさん
2019/08/17(土) 19:17:51.68ID:enMhOq0z492デフォルトの名無しさん
2019/08/17(土) 19:24:45.74ID:RHoMoFJP493デフォルトの名無しさん
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:aqKQgKLg499デフォルトの名無しさん
2019/08/18(日) 10:01:09.98ID:X/aF/qdA >>80
>Pythonは「CPythonの実装が規格だ」だし
それrubyと勘違いしてないか?
明文化されていない仕様なんてそんなに残っていないと思うが。
あと、MATLABはアカデミック分野では少なくともRやOctaveなんかより
信用されていると思うよ。
>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
コンパイルコマンド直たたきから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は指定がないと最初に見つけた作りたいファイルを作ろうとする)
簡単に言えば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とかクソみたいなものをありがたがるんだろうなと思う。
以下の文献とオライリーの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:XCKtcmfj508デフォルトの名無しさん
2019/08/18(日) 12:20:14.52ID:aqKQgKLg > ビルドと言語機能は綿密に絡み合ってるから。
具体例の1つも出せないクズ乙
具体例の1つも出せないクズ乙
509デフォルトの名無しさん
2019/08/18(日) 12:24:12.06ID:XCKtcmfj >>508
505の内容見て具体例に思えないようならもう話すことはないな。
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使え、
いや知らんけど
AntかMavenかGradle使え、
いや知らんけど
513デフォルトの名無しさん
2019/08/18(日) 12:39:00.99ID:4oEGaRbg >>509
ああ、そのまま黙っていてくれ。
ああ、そのまま黙っていてくれ。
514デフォルトの名無しさん
2019/08/18(日) 12:43:59.27ID:aqKQgKLg >>509
はい、逃げたーw
はい、逃げたー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の昨日とシェルコマンドを組み合わせてできた気がするが(忘れた
たかがこれだけのためになんでそんな糞面倒なことをせねばならんのじゃ、というキモス
※ 個人の感想です
なぜなら、
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 とか
Webpack, Gulp とか
517デフォルトの名無しさん
2019/08/18(日) 13:02:29.42ID:XgJSnVlI C++のモジュールシステムはいけてないよね
という話ならわかるが、
constexprとboost?
全く意味がわからねぇ
という話ならわかるが、
constexprとboost?
全く意味がわからねぇ
518デフォルトの名無しさん
2019/08/18(日) 13:07:44.93ID:rJ9LPM9I >>515
そこは gcc -M 類の出番。まぁ面倒なのは変わらないんだろうけど。
そこは 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
簡単に言えば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
こんなのもあるんですね。
これも調べてみたいと思います。
CC, CXXは個別インストールしているgccがあり、以前何かのモジュールをインストールしたときに、元からある
/usr/bin/g++
に関連したライブラリパスが使われることがありこれを設定しました。
今回の単純コンパイルには不要かもしれませんが、おまじないで残していました。
>>504
ありがとうございます。
基本はコマンドを並べていけばいいんですね。
何も指定しない時には先頭のものを指定したことと同じになることも参考になりました。
>>505
このあたりもちゃんと理解できるようになりたいです。
少しづつ勉強したいと思います。
>>512
こんなのもあるんですね。
これも調べてみたいと思います。
523501
2019/08/18(日) 15:01:32.97ID:kvaoi5YP >>512
それらが make に比して優れた点はなんでしょうか?
それらが make に比して優れた点はなんでしょうか?
525デフォルトの名無しさん
2019/08/18(日) 17:11:35.03ID:ToM84NKx526デフォルトの名無しさん
2019/08/18(日) 18:18:09.60ID:1zrPBBLI >>525
binutilsを使う例として、具体的にはどういうことがありますか?
binutilsを使う例として、具体的にはどういうことがありますか?
527デフォルトの名無しさん
2019/08/18(日) 18:19:29.10ID:XCKtcmfj なんなんだろうなこの「俺に手取り足取り教えろ」みたいな要求は。
528デフォルトの名無しさん
2019/08/18(日) 18:30:04.45ID:J+MNWXO/ お前には聞いてないから気にしなくていいぞ
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なんて使ったら、環境依存でコンパイル通らなくなったりする。
国際標準になってないbinutilsなんて使ったら、環境依存でコンパイル通らなくなったりする。
534デフォルトの名無しさん
2019/08/19(月) 03:39:22.51ID:uhqBoit2 VC++2017で std::string str = "abcd";ってやると
debugモードだとビルドできてるのに
ReleaseモードだとLNK2001エラーが出てしまいます
他に何か宣言かlibがいるのでしょうか
昨日一日この点で一日悪戦苦闘していました
ちなみにプロジェクトはコンソールアプリで
リンカーのシステムは処理の都合上、Windows(/SUBSYSTEM:WINDOWS)にしてあります
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:bPMhHkYv537デフォルトの名無しさん
2019/08/19(月) 07:12:08.46ID:p1963chb538デフォルトの名無しさん
2019/08/19(月) 09:00:35.28ID:uhqBoit2539デフォルトの名無しさん
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)に戻すと大量にエラーが発生しました。
この場合、どうすればよろしいのでしょう?
しかし、コンソール(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:rfX59j2s543デフォルトの名無しさん
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)なんで、引数の設定に釈然としないところありますが…
ありがとうございます。
以前ググって見つけたものをだまされたと思って
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:uhqBoit2545デフォルトの名無しさん
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:bov4igyL548デフォルトの名無しさん
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");
}
}
連続したバイトデータを比較するのに下記以外に簡素に書ける方法はありませんか?
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ライクな感じで比較できる気がするけど、おススメはしない。
エンディアン注意。
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 クヌース-モリス-プラット法とかボイヤー-ムーア法とかやらんかい
ttps://nebuta.hatenablog.jp/entry/20110127/1296115997
ttps://nebuta.hatenablog.jp/entry/20110127/1296115997
557デフォルトの名無しさん
2019/08/20(火) 01:22:04.58ID:PxgCmY+k >>554
memcmp とか std::equal とか。速度はどうなるかわからないので推測じゃなくて実測でよろしく。
memcmp とか std::equal とか。速度はどうなるかわからないので推測じゃなくて実測でよろしく。
558デフォルトの名無しさん
2019/08/20(火) 01:33:17.10ID:XxGMpj+X データの性質によるけどテーブル使ったCRC16で比較するのは?
559デフォルトの名無しさん
2019/08/20(火) 01:43:07.39ID:P90sZTO5560デフォルトの名無しさん
2019/08/20(火) 02:14:14.18ID:HUUEwIaK >>554
少量のメモリ上の値比較やコピーの処理時間なんて無視できる程度で考える必要もない。
大量のデータの比較を行うとしたら、その大量のデータがメモリ上に存在するために多くの場合はファイルI/Oなり通信なり演算なりしているはずで、そちらのコストの方が桁違いに大きいから単純な比較処理のコストを気にするのは無意味。
ほんとに気にする必要があるのか、まずは確認すべきだろう。つまらない高速化を考えるより、可読性の高い素直なコードを書いた方がいいよ。
少量のメモリ上の値比較やコピーの処理時間なんて無視できる程度で考える必要もない。
大量のデータの比較を行うとしたら、その大量のデータがメモリ上に存在するために多くの場合はファイル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で比較する場合には予測が出来るためだろうか。
しかし、昔より最適化する際にどっちが高速になるかの予想が難しくなってしまってる。
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') ||
誤: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つのオペランドに同時指定は
出来ないのに対し、レジスタは出来るので、確率的にレジスタの方が必要な
命令数が少なくて済むので高速になる場合があります。
あとキャッシュに乗って無い場合はメモリは遅くなります。
への読み書きの速度は同一です。
ただし、メモリとメモリは add, sub, mov 命令で2つのオペランドに同時指定は
出来ないのに対し、レジスタは出来るので、確率的にレジスタの方が必要な
命令数が少なくて済むので高速になる場合があります。
あとキャッシュに乗って無い場合はメモリは遅くなります。
574デフォルトの名無しさん
2019/08/20(火) 15:22:22.32ID:hCU5dYnH575デフォルトの名無しさん
2019/08/20(火) 15:23:45.52ID:hCU5dYnH あ、すまん俺の方が間違えてた・・
まさかとは思うけど最適化してないとか無いよね
まさかとは思うけど最適化してないとか無いよね
576デフォルトの名無しさん
2019/08/20(火) 15:29:52.16ID:lOKfo+mN >>575
最適化はどちらも同じオプションでしてますし、出力されたアセンブリ・コード
も見て、テーブルを使った方が命令数の少ないコードになっていることも
確認してます。条件jmp命令も少なくなっています。
最適化はどちらも同じオプションでしてますし、出力されたアセンブリ・コード
も見て、テーブルを使った方が命令数の少ないコードになっていることも
確認してます。条件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クロックほど速くなる場合がある程度です。
しかし、実測してみると、後者のやり方の方がもっと遅くなっている
ようなんです。
面倒ですが、マクロスイッチでコードを切り替えられるようにして
短時間の内に二つを切り替えて速度比較してみようかと思っているところです。
実はその影響もあると思っているのですが、それだけだと前者の場合には、
命令数から言えば1〜2クロックほど速くなる場合がある程度です。
しかし、実測してみると、後者のやり方の方がもっと遅くなっている
ようなんです。
面倒ですが、マクロスイッチでコードを切り替えられるようにして
短時間の内に二つを切り替えて速度比較してみようかと思っているところです。
579デフォルトの名無しさん
2019/08/20(火) 15:51:20.21ID:lOKfo+mN 最近のCPUは温度によってクロック数が変動する可能性もあるそうですね。
580デフォルトの名無しさん
2019/08/20(火) 16:13:18.12ID:hCU5dYnH テーブルがキャッシュに乗ってなかったり、
>>561と同じでテーブルがグローバル変数だと書き換えを懸念して最適化ぎ抑制されてんじゃないかな
>>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命令
を使ってしまっている点が、人間が最適化するより遅いコードになってしまって
います。
アセンブリコードを見る限り、特に問題なく、人間が単純に書いた場合
と似たようなコードになっています。
ただし、一点、テーブルの c 番目の要素を参照する際、バイト整数の c
をゼロ拡張して32BIT 整数にする必要があるのですが、自分の使ってるVC++
だと、movzx 命令を使わずに、xor eax,eax; mov al,cl のように2命令
を使ってしまっている点が、人間が最適化するより遅いコードになってしまって
います。
585554
2019/08/20(火) 18:34:23.13ID:4t2XBONQ コメントありがとうございます。
>>555
エンディアンを気にしないといけないのは後々分かりづらくなりそうですね。。
memcmpというのがあったんですね。
連続バイト比較ができてシンプルで良さそうです。
これを使ってみます。
>>555
エンディアンを気にしないといけないのは後々分かりづらくなりそうですね。。
memcmpというのがあったんですね。
連続バイト比較ができてシンプルで良さそうです。
これを使ってみます。
586デフォルトの名無しさん
2019/08/20(火) 19:55:32.24ID:otgnf5aI volatile命令の他にキャッシュ命令とか無いのかよ
ルックアップテーブルをキャッシュに載せときゃ爆速じゃん
もっと言えばテーブルを石に焼いた時一番早い
ルックアップテーブルをキャッシュに載せときゃ爆速じゃん
もっと言えばテーブルを石に焼いた時一番早い
587デフォルトの名無しさん
2019/08/20(火) 22:55:27.89ID:C94+kmpU588デフォルトの名無しさん
2019/08/20(火) 23:22:44.05ID:hCU5dYnH589デフォルトの名無しさん
2019/08/21(水) 01:15:10.83ID:X4j3osk/ 多分メモリが読めてない状態でも分岐予測して投機的実行はするんじゃないかな
近代的なCPUは
近代的な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
分岐予測と投機的実行が効力を発揮するのは多重ループで内側の分岐条件が大部分の時間変わらないというケース
>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で++や--を式の中で使えないのは故無きことでは無いんじゃ…
OoOと分岐予測を備えた今日日のCPUでは途中で打ち切るより全部評価してしまった砲が速い可能性がおおきい
このとき問題になるのは副作用のある式が問題であり、
副作用がある++や--があると、やっぱ言語規格どおり||や&&は条件成立で打ち切らないとソースコードに書かれた気体動作と
オブジェクトコードの動作が別物になってしまうので諸悪の根源
C言語を引きずった仕様のままでは時代について逝けてない
Rustで++や--を式の中で使えないのは故無きことでは無いんじゃ…
592デフォルトの名無しさん
2019/08/21(水) 06:00:45.09ID:Vc3YPkYv スマンGoと混同した
Rustに++や--は無い
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
だから何?って話だが
> (しかもLRU式に記憶が消える
知ったか乙
せめて
https://ja.m.wikipedia.org/wiki/分岐予測
くらいは読んでこい
> のでこのような場合は投機的実行結果が捨てられ続けかねない
そりゃ頑張って作れば最悪の状況は作れるよw
だから何?って話だが
595デフォルトの名無しさん
2019/08/21(水) 10:08:42.06ID:yoKe7uXb596デフォルトの名無しさん
2019/08/21(水) 20:40:17.99ID:fYY/XStv597デフォルトの名無しさん
2019/08/21(水) 22:54:56.30ID:Vc3YPkYv598デフォルトの名無しさん
2019/08/21(水) 23:02:56.86ID:Vc3YPkYv もし分岐予測制度を上げるためのキャッシュエントリのn状態化とキャッシュが溢れた場合の話を
混同しているんだとしたらきわめておめでたい話だといえる
あるアドレスの分岐命令に対応するキャッシュエントリがどの状態に居たとしても、
そんあことはお構いなしに溢れたときはどれかのエントリが消される.。
このとき他の制約が無ければ理想解はLRUという話
混同しているんだとしたらきわめておめでたい話だといえる
あるアドレスの分岐命令に対応するキャッシュエントリがどの状態に居たとしても、
そんあことはお構いなしに溢れたときはどれかのエントリが消される.。
このとき他の制約が無ければ理想解はLRUという話
599デフォルトの名無しさん
2019/08/21(水) 23:16:22.08ID:Vc3YPkYv600デフォルトの名無しさん
2019/08/21(水) 23:18:51.67ID:yoKe7uXb ただのこじつけじゃねーか
てかそんだけ御託並べて質問者へのアドバイスはゼロかw
(というかこいつの論調どっかで見たな・・・)
てかそんだけ御託並べて質問者へのアドバイスはゼロかw
(というかこいつの論調どっかで見たな・・・)
601デフォルトの名無しさん
2019/08/22(木) 00:05:50.83ID:F37ex36A602デフォルトの名無しさん
2019/08/22(木) 10:59:48.20ID:36M5lMYO いや、まてまて、そもそも今の話は、分岐予測の精度は関係無いのでは?
>「配列は読み出してみないと値がわからないので、予測が出来ず」
がおかしいって話でしょ
精度はともかく、分岐予測はするでしょ
というか、逆に、値が分からないから分岐予測するようなもので
分岐予測の精度に関しても、if文のかっこの中の計算が終わってない状態で
適当にジャンプするのは同じでしょ、配列が読めてようが読めてなかろうが
>「配列は読み出してみないと値がわからないので、予測が出来ず」
がおかしいって話でしょ
精度はともかく、分岐予測はするでしょ
というか、逆に、値が分からないから分岐予測するようなもので
分岐予測の精度に関しても、if文のかっこの中の計算が終わってない状態で
適当にジャンプするのは同じでしょ、配列が読めてようが読めてなかろうが
603デフォルトの名無しさん
2019/08/22(木) 11:58:47.76ID:Vlc++9B2 そりゃー予測なんかせず配列まるまる全部をキャッシュに乗せるから早いんだろ
つまり予測しないルックアップテーブルの時が一番早い
そのテーブルがCPUに焼きこんであればもっと早い
つまり予測しないルックアップテーブルの時が一番早い
そのテーブルが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がワケわからんことになっているのをどうにかしろと
使いたきゃboostにあるし
標準化されるとしたら、x86とかでハード実装された後に標準型として対応するんじゃね?
てかlong doubleがワケわからんことになっているのをどうにかしろと
608デフォルトの名無しさん
2019/08/22(木) 18:28:45.94ID:6PHJNtSf 'A' から 'Z と 'a'から'z' は連続した文字コードである
ここにcpuの速度の秘密がある はず
ここにcpuの速度の秘密がある はず
609デフォルトの名無しさん
2019/08/22(木) 19:44:40.23ID:/1dDo18x610デフォルトの名無しさん
2019/08/22(木) 20:52:16.00ID:KKaRKvsP611デフォルトの名無しさん
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:AFh1DZYh614デフォルトの名無しさん
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:QnESaaq9617デフォルトの名無しさん
2019/08/22(木) 22:29:56.92ID:AFh1DZYh618デフォルトの名無しさん
2019/08/22(木) 22:53:17.49ID:MZ7gjtS4 二進化十進数でも誤差でるから
当たり前だけど
有理数でやるんだよ
当たり前だけど
有理数でやるんだよ
619デフォルトの名無しさん
2019/08/22(木) 22:59:39.88ID:ywV62E2Z そういう話じゃない。
金融計算では10進数のどの桁でどういう丸めを行うか決まっているから、
その通りの結果になることが「誤差がない」状態なんだよ。
金融計算では10進数のどの桁でどういう丸めを行うか決まっているから、
その通りの結果になることが「誤差がない」状態なんだよ。
620デフォルトの名無しさん
2019/08/22(木) 23:13:26.11ID:4VSp96xm 普通そういうのは多倍長整数じゃないのか
621デフォルトの名無しさん
2019/08/23(金) 00:16:10.19ID:/B94cENN >>611
畳み込み和の計算はフーリエ変換して求めておいて最後に逆変換することで高速化できます (畳み込み定理) が、しばしば誤差の増大がネックになります
こういう問題で出てくる整数はとても大きいということもあります
だから巨大な数を普通に扱いたいのです
数論変換 (整数環上でのDFT) をすれば良いのですが、もっと単純化できないかという試行錯誤です
畳み込み和の計算はフーリエ変換して求めておいて最後に逆変換することで高速化できます (畳み込み定理) が、しばしば誤差の増大がネックになります
こういう問題で出てくる整数はとても大きいということもあります
だから巨大な数を普通に扱いたいのです
数論変換 (整数環上での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'が連続してることだけな
規格で保証されてるのは'0'から'9'が連続してることだけな
624デフォルトの名無しさん
2019/08/23(金) 21:07:50.69ID:1CEPBqe0 >>624
そういうのは windows 用と linux 用にわけるんじゃないでしょうか?
そういうのは windows 用と linux 用にわけるんじゃないでしょうか?
626デフォルトの名無しさん
2019/08/23(金) 21:30:32.32ID:9XBmxzHo CMakeもAutoconfなんかと比べたら簡単になったんだろうけど、自分で書くならgypだな。
627デフォルトの名無しさん
2019/08/23(金) 21:42:53.01ID:CGqYEl83628デフォルトの名無しさん
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になれるのが近道だとは思うけどね。
あれでヘッダー依存の取り扱いがしっかり書けるようになれば大抵のビルドシステムにも慣れるだろう。
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:+PLwcW2w635デフォルトの名無しさん
2019/08/25(日) 12:27:30.33ID:haXU+hCF makeじゃなくてmsbuild教える方がいいと思うならお前はそうしろ。
それが本当にいいと思ってんならな。
俺だったらmakeを教えるというだけの話だ。
それが本当にいいと思ってんならな。
俺だったらmakeを教えるというだけの話だ。
636デフォルトの名無しさん
2019/08/25(日) 14:08:01.24ID:Nf3A65/V また支離滅裂なw
makeとmsbuildの優劣なんて話はしてないんだが、日本語不自由なのか?
>少なくともデバッグするときはその環境毎のビルドがわかってないとほぼ詰むし。
という理由でmakeを覚えなければならないと主張するなら、同じ理由でwindows環境向けには
msbuildを覚えておかなければ片手落ちだろうと指摘しただけ。
まぁどうせ上の理由も後付けで、cmakeを知らない爺が横からmakeを布教しようとしただけなんだろうが。
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を見て何がおかしいか理解できない
一度手で触っておかないと吐き出されたmakefileを見て何がおかしいか理解できない
639デフォルトの名無しさん
2019/08/26(月) 11:17:55.70ID:mep62E1y std::condition_variableを使って複数のスレッドが待ち状態の時、
notify_oneで一つだけスレッドロック解除した場合、解除されるスレッドに優先度はある?
例えば、一番最初に待ち状態に入ったスレッドのロックが解除されるとか。
それとも完全に実装依存?
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
非エンジニアのものなのですが、下記のようなオープンソースのコードを使って
メッセージのウェブアプリケーションを創ってみたいのですが、
一番手っ取り早い方法はどういう方法でしょうか?
漠然とした質問で申し訳ございません
▶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いじったことあるのか?
あんなクソなものを本気で使ってんの?
てかヘッダ依存解決くらい書けなきゃまともなビルドシステムなんて絶対組めねーよ。
こういう誤誘導を平気でするやつってどういう神経してんだろうな。。
お前ほんとにmsbuildいじったことあるのか?
あんなクソなものを本気で使ってんの?
てかヘッダ依存解決くらい書けなきゃまともなビルドシステムなんて絶対組めねーよ。
こういう誤誘導を平気でするやつってどういう神経してんだろうな。。
646さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/08/26(月) 23:25:34.58ID:doK8kIo2 >>643
ウェブアプリなのにC++スレで質問するの? 根本的に間違ってるんじゃない?
ウェブアプリなのにC++スレで質問するの? 根本的に間違ってるんじゃない?
647デフォルトの名無しさん
2019/08/27(火) 00:16:27.36ID:tgTbqYO8 最近C++を学び始めたのですが、
テンプレート引数の型をコンパイル時に文字列に変換する方法ってあるのでしょうか?
できればテンプレートの特殊化やプリプロセス命令を使わずに以下の用な感じでかければよいのですが
template<typename Type>
class Hoge
{
public:
static constexpr char* Text = Typeを文字列に変換して納入したい
};
テンプレート引数の型をコンパイル時に文字列に変換する方法ってあるのでしょうか?
できればテンプレートの特殊化やプリプロセス命令を使わずに以下の用な感じでかければよいのですが
template<typename Type>
class Hoge
{
public:
static constexpr char* Text = Typeを文字列に変換して納入したい
};
648デフォルトの名無しさん
2019/08/27(火) 00:31:42.36ID:EWBBAhUG 無理ゲー
あくまで自動にこだわるならtypeid使え。
自作クラスだけならクラス名を名乗るメンバ関数でも作っとけ
あくまで自動にこだわるならtypeid使え。
自作クラスだけならクラス名を名乗るメンバ関数でも作っとけ
649デフォルトの名無しさん
2019/08/27(火) 01:14:06.25ID:tTk1EYER650デフォルトの名無しさん
2019/08/27(火) 08:26:10.70ID:CO6EoWnq >てかヘッダ依存解決くらい書けなきゃまともなビルドシステムなんて絶対組めねーよ。
いつの時代から来たんだよw
ソースに #include 書く度にいちいちMakefile書き換えんのか?
いつの時代から来たんだよw
ソースに #include 書く度にいちいちMakefile書き換えんのか?
651デフォルトの名無しさん
2019/08/27(火) 08:40:44.27ID:l579ej24 >>646
初心者狩りしてるこいつ一人ww
初心者狩りしてるこいつ一人ww
652デフォルトの名無しさん
2019/08/27(火) 17:31:34.79ID:icKeAJ7/653デフォルトの名無しさん
2019/08/27(火) 18:46:31.35ID:idJxRw9J 別にウェブだからって既存のブラウザ上で動くものという定義はあるまい
サーバーサイドもクライアントサイドも両方C++で作ればいい
そもそもブラウザだってC++で作られているんだから
サーバーサイドもクライアントサイドも両方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年単位で続きそうだわ。。
またクソシステムの再生産が10年単位で続きそうだわ。。
658デフォルトの名無しさん
2019/08/28(水) 10:10:28.35ID:mAC2Cq6c そりゃこのスレでも
「閃いた!stdを usingすれば文字を打つのが少なくなるよ!」って宣う輩がいるくらいだし
「閃いた!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
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には同意するわ
依存関係も考えた上で設計&利用しないとコンパイル時間の増大とかに全く対処できなくなる
新しい機能には飛びつくわりに古い部分(しかも無くなってるわけではない)をおざなりにするのはあかん
>>656-657には同意するわ
依存関係も考えた上で設計&利用しないとコンパイル時間の増大とかに全く対処できなくなる
新しい機能には飛びつくわりに古い部分(しかも無くなってるわけではない)をおざなりにするのはあかん
667デフォルトの名無しさん
2019/08/28(水) 20:21:30.73ID:4Zzob7TG >>662
テンプレートの export の問題とかさ。。ほんと何周同じことしてんだよって思うわ。
テンプレートの export の問題とかさ。。ほんと何周同じことしてんだよって思うわ。
668デフォルトの名無しさん
2019/08/28(水) 20:42:39.92ID:G5Ue/9b7669デフォルトの名無しさん
2019/08/28(水) 20:46:54.49ID:W4Wf3gf+670デフォルトの名無しさん
2019/08/28(水) 20:59:56.83ID:4Zzob7TG >>668
makeが実装が一番ネイティブでわかりやすいってことだよ。
bazelなんか中身はもろにmakeだろありゃ。
ただはじめからbazel使ってたらエラーメッセージ見てもわからんだろうし、
そういうのをはじめに薦める奴は詐欺だろ。
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なんかもっと暗黙の設定まみれだわ。
まあこれはわかる。
>アーカイブだの何だのを勝手に推定しておせっかいな処理挟み込むのを全部やめろ
これは逆に暗黙のルールを使ってるからだろ。
基本的に明示的な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
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とかだとリンカの最適化で削除されるかもしれないけど
まぁ運しだい
ともかく、規格では多分決まってない
多分生成される可能性が高いね
何故ならC++にはコンストラクタがあるから
つまりはstatic変数のコンストラクタで何かしているかもしれないだろう
だからリンカの最適化は削除をしないだろうね
ただ、普通のintとかだとリンカの最適化で削除されるかもしれないけど
まぁ運しだい
ともかく、規格では多分決まってない
682デフォルトの名無しさん
2019/08/29(木) 23:20:08.64ID:xxmh5CSn683デフォルトの名無しさん
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されるのが基本じゃね
組み込み用のコンパイラだとそれ以上に頑張ってサイズ削ることもあるだろうけど
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
定数初期化しとけるならそうしとくのがいいけどいつもできるわけでもない
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は触れない。
linuxは触れるがmacは触れない。
692デフォルトの名無しさん
2019/08/30(金) 21:41:54.95ID:OdSxakdr std::string="あいう";
c++って内部的な文字コードって何になるのかな?
あといまいちwstringの使い分けがわかんない、日本語だとwstring使えばいいのか?
c++って内部的な文字コードって何になるのかな?
あといまいちwstringの使い分けがわかんない、日本語だとwstring使えばいいのか?
693デフォルトの名無しさん
2019/08/30(金) 21:49:07.10ID:zlaBwQso 決まってない
最近ようやく明示的にutf8対応しだした
wstringはワイド文字列
最近ようやく明示的に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になる
普通の文字列リテラルの文字コードはそのソースコードが書かれたテキストの文字コード
文字列リテラルは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を使うように徹底するのは良いのかもしれない
もうさいしょからu8""とchar8_tとstd::u8stringを使うように徹底するのは良いのかもしれない
707デフォルトの名無しさん
2019/08/31(土) 13:49:09.93ID:gI08UaXy WindowsはTCHARで書くべしみたいなのはまだあるの?
最近Windows使ってないもんでよく分からん
最近Windows使ってないもんでよく分からん
708デフォルトの名無しさん
2019/08/31(土) 14:24:18.19ID:6oowjHUQ 昔から自分でオプション変えて好きにしろとしか
709デフォルトの名無しさん
2019/08/31(土) 14:25:31.75ID:Jddzk3ii >>706
でもUTF16の方が問題起きにくい気がする
でもUTF16の方が問題起きにくい気がする
>>709
ファイルシステム関係は uft16 で、それ以外は utf8 で分けるしかないでしょうね、"ファイルシステム uft16" はやったことがありますが、utf8 はまだ触ったことがありません…
ファイルシステム関係は uft16 で、それ以外は utf8 で分けるしかないでしょうね、"ファイルシステム uft16" はやったことがありますが、utf8 はまだ触ったことがありません…
711デフォルトの名無しさん
2019/08/31(土) 18:44:11.09ID:IP14yh++ utf8は冗長コードの問題があるから内部処理用コードには向かないんだよね。
712デフォルトの名無しさん
2019/08/31(土) 18:47:33.88ID:toQMNfCu 読みこみでハネるのが主流じゃね?
utf16が一番中途半端
utf16が一番中途半端
713デフォルトの名無しさん
2019/08/31(土) 18:54:01.60ID:IP14yh++ そうかな、場合にもよるけど、日常使う文字はほぼutf16に収まるし、
utf8だとstd::regexで日本語がまったくつかえないとかあるしで、
俺的には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対応するようになった
あれのおかげでようやく欧米人どもが真面目にUnicode対応するようになった
717デフォルトの名無しさん
2019/08/31(土) 21:17:21.24ID:ny+pXiR9 その代わり新宿ダンジョンよりも複雑奇怪になったけどな
718デフォルトの名無しさん
2019/08/31(土) 21:55:55.82ID:OiY9nyzL 絵文字はやめてほしいわ。そもそも架空の文字は登録しないんじゃなかったのかよ。
21bitも使えてコードポイントに余裕があるからといってロクなことしない。
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クラス切り替え
完璧じゃね?
カプセル化:ネットワーク部分、チャット部分
継承:継承元からサーバクラス派生、クライアントクラス派生
仮想:TCPクラス-UDPクラス切り替え
完璧じゃね?
736デフォルトの名無しさん
2019/09/03(火) 17:14:42.83ID:xpzn8aWg 別にじゃんけんだっていいだろ
継承:手の種類
多態性:手の画面出力
カプセル化:しわの数
継承:手の種類
多態性:手の画面出力
カプセル化:しわの数
737デフォルトの名無しさん
2019/09/03(火) 18:12:16.81ID:S+eQGM/g タイマーで早出し遅出しの判定とか
ネットワーク対戦機能とか
履歴取ってプレイヤーの手の傾向学習してくるAIとか
色々盛り込んでみればいい
ネットワーク対戦機能とか
履歴取ってプレイヤーの手の傾向学習してくる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:VgehgunL741デフォルトの名無しさん
2019/09/03(火) 22:59:40.18ID:29yFlgBG まあすべては委譲です
というか抽象化のためのパターンです
というか抽象化のためのパターンです
742デフォルトの名無しさん
2019/09/04(水) 09:05:55.41ID:42AhKM7p >>728
コードポイントで合ってるはず。
文字符号の1つずつの番号の場所をコードポイントと言う。
例えば、ASCIIコードなら、A の文字の番号である 0x41 の占めている
場所みたいなニュアンスがある。
コードポイントで合ってるはず。
文字符号の1つずつの番号の場所をコードポイントと言う。
例えば、ASCIIコードなら、A の文字の番号である 0x41 の占めている
場所みたいなニュアンスがある。
743デフォルトの名無しさん
2019/09/04(水) 09:20:24.49ID:42AhKM7p >>742
追伸。なお、0x41の番号そのもののこともコードポイントと言う。
番号に就いては単に「コード」とも言うが、2019年現在において
単に「コード」と言ってしまうと、プログラムの内の命令が並んでいる
部分のことを指すことが多くて混乱が生じやすいので、文字符合の
番号に対しては、「コード」ではなく「コードポイント」という
ことがある。「文字符号」と言ってしまうと、ShiftJISの体系そのもの、
UnicodeやUTF8の体系そのものを指すことも有り、どうしても曖昧さが残る。
そこで、0x41という番号そのものの事を言っていることを曖昧さなく
示したい場合には、文字符号ではなく「コードポイント」ということがある。
追伸。なお、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って何でしょうか? 関数宣言って引数宣言の後に何か書けましたっけ?
上記はtypedef struct内に書かれていた関数ポインタの宣言で、
返り値がint、引数が(struct bContext *, struct wmOperator *)の関数ポインタexecなのは分かりますが
最後のATTR_WARN_UNUSED_RESULTって何でしょうか? 関数宣言って引数宣言の後に何か書けましたっけ?
745デフォルトの名無しさん
2019/09/04(水) 10:46:36.08ID:3LCw+twW746デフォルトの名無しさん
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?
大雑把にこういう感じ?
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;
}
#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>使いたいところですね。
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++は歴史が長いため、色々なやり方がある。
また最新の仕様を使うことがベストな選択とは限らず、むしろ分かりにくく
なることも多い。
間違いではない。
「C++でのやり方」と言ってもC++は歴史が長いため、色々なやり方がある。
また最新の仕様を使うことがベストな選択とは限らず、むしろ分かりにくく
なることも多い。
758デフォルトの名無しさん
2019/09/04(水) 23:34:44.99ID:3YkDCQ2q759デフォルトの名無しさん
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」
だ。
今回の様にclassを使うメリットが無い場合は、C++の内、
昔からあるCの部分で十分である。エンジニアリングの世界では
「simple is best」
だ。
761デフォルトの名無しさん
2019/09/04(水) 23:38:38.42ID:3YkDCQ2q >>759
新しい機能はC++委員会が好き勝手に追加しているだけで、
学ぶ意味が無い。
しかも、あなたも分かってないのに、人を馬鹿にするのはいかがなものか。
まずは動くコードが大事で、最新のやり方を使うことは重要ではない。
変に難しくしても意味がない。
新しい機能は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 );
この乱数に対する意識の低さがくそ
> ((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 );
まだ間違いがあるかも知れんが。
間違えてた。正しくはこうだと思う:
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() はアルゴリズムが良くなくて
モンテカルロシミュレーションなどでは余り良い結果が出ない。
昔やってみて分かった。ネットに転がってたもっといいアルゴリズムの乱数に
変えてみたら結果が良くなった。
知らなかっただけで、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 のような便利なライブラリが
> あるんだったらそっちを使ったほうがいい。
> 新しい機能はC++委員会が好き勝手に追加しているだけで、
> 学ぶ意味が無い。
↓
> 知らなかっただけで、std::uniform_int_distribution のような便利なライブラリが
> あるんだったらそっちを使ったほうがいい。
771デフォルトの名無しさん
2019/09/05(木) 00:15:04.65ID:ymsvBiyv772デフォルトの名無しさん
2019/09/05(木) 00:16:17.70ID:wSq6T90P773デフォルトの名無しさん
2019/09/05(木) 00:18:23.32ID:wSq6T90P >>772
間違い修正:
誤:int idx = rand() % RAND_MAX;
正:int idx = rand() % STR_MAX;
このように書いた場合、直感では、RAND_MAXがSTR_MAXの倍数で無い場合
に均等確率にならないハズ。
間違い修正:
誤: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()みたいな小学生でも推測できる危険極まりないゴミクズを使ってる時点で目くそ鼻くそだけど
rand()みたいな小学生でも推測できる危険極まりないゴミクズを使ってる時点で目くそ鼻くそだけど
775デフォルトの名無しさん
2019/09/05(木) 00:21:02.57ID:wSq6T90P776デフォルトの名無しさん
2019/09/05(木) 00:21:37.88ID:5Cw7Ao7f Nが2の累乗でない限り%Nは上位ビットも影響するけど
777デフォルトの名無しさん
2019/09/05(木) 00:22:46.70ID:wSq6T90P778デフォルトの名無しさん
2019/09/05(木) 00:25:08.12ID:M7+W0IyT 初心者にこそrand()みたいな絶対に使ってはいけない危険物を紹介したらダメだろうが
お前は初心者が入力読み込みの質問したらgets()を教えるのか?
お前は初心者が入力読み込みの質問したらgets()を教えるのか?
779デフォルトの名無しさん
2019/09/05(木) 00:25:11.59ID:wSq6T90P >>774
>低劣なrand()のさらに劣悪な下位ビットを使うくらいならアホが書いてる形の方がまだましではある
あなたは、% と & を間違えてませんか。
x % y : x を y で整数除算したときの余り。
x & y : x と y の BIT 積 (and)。
>低劣なrand()のさらに劣悪な下位ビットを使うくらいならアホが書いてる形の方がまだましではある
あなたは、% と & を間違えてませんか。
x % y : x を y で整数除算したときの余り。
x & y : x と y の BIT 積 (and)。
780デフォルトの名無しさん
2019/09/05(木) 00:25:49.83ID:wSq6T90P >>778
rand()のどこが危険なのですか?
rand()のどこが危険なのですか?
781デフォルトの名無しさん
2019/09/05(木) 00:27:59.92ID:6cA0wVT5 てか、今時まだ下位ビットに周期性あるのかね?
782デフォルトの名無しさん
2019/09/05(木) 00:30:09.80ID:ymsvBiyv std::minstd_rand は 線形合同法デス。
!
おわかりいただけただろうか。
mt19937最強!
!
おわかりいただけただろうか。
mt19937最強!
783デフォルトの名無しさん
2019/09/05(木) 00:32:23.63ID:M7+W0IyT784デフォルトの名無しさん
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] の区間の整数値を均等確率で生じさせません。
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案件だ
>あんたそんな事も知らないでプログラマーやってんの?
自分の専門は自然科学系で、シミュレーションで使うことはありますが、
パスワード系で使うことは一度も想定したことが有りませんでした。
>劣悪だからっつってんだろ
>あんなもの数個連続で観測されただけで簡単に予想できる
>うっかりセッションIDやら初期パスワードやらの生成に使おうもんなら簡単に7pay案件だ
>あんたそんな事も知らないでプログラマーやってんの?
自分の専門は自然科学系で、シミュレーションで使うことはありますが、
パスワード系で使うことは一度も想定したことが有りませんでした。
786デフォルトの名無しさん
2019/09/05(木) 00:36:33.70ID:wSq6T90P787デフォルトの名無しさん
2019/09/05(木) 00:38:32.53ID:M7+W0IyT 自然科学だとしてもあんな偏りまくりのクソ使っちゃダメだろ…
まさかとは思うが2連続で呼んで座標値作ったりしてないだろうな
もしやってたらそのシミュレーション全部カスだから作り直してやり直せ
まさかとは思うが2連続で呼んで座標値作ったりしてないだろうな
もしやってたらそのシミュレーション全部カスだから作り直してやり直せ
788デフォルトの名無しさん
2019/09/05(木) 00:39:51.44ID:ymsvBiyv https://cpprefjp.github.io/reference
https://cpprefjp.github.io/reference/random.html
このサイト良いよ。ランダム見たら驚くよ。
自然科学なら分布の偏りから正規分布まであるのは天国のような気がするな。
https://cpprefjp.github.io/reference/random.html
このサイト良いよ。ランダム見たら驚くよ。
自然科学なら分布の偏りから正規分布まであるのは天国のような気がするな。
789デフォルトの名無しさん
2019/09/05(木) 00:42:23.49ID:wSq6T90P790デフォルトの名無しさん
2019/09/05(木) 00:45:37.20ID:wSq6T90P791デフォルトの名無しさん
2019/09/05(木) 00:47:57.94ID:ymsvBiyv モンテカルロやるんだったら、メルセンヌツイスタはグレートな動きするよ。
623次元均等分布とかいうよくわからんものだ。かなりクレイジー。
mt19937がそれだ。
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:ymsvBiyv795デフォルトの名無しさん
2019/09/05(木) 01:16:30.46ID:ymsvBiyv796デフォルトの名無しさん
2019/09/05(木) 01:26:21.35ID:lN+O1qau 乱数って/dev/randomから取ってもいいんでしょ?
なんか今システムコールもあるみたいだけど
なんか今システムコールもあるみたいだけど
797デフォルトの名無しさん
2019/09/05(木) 01:28:10.60ID:ymsvBiyv798デフォルトの名無しさん
2019/09/05(木) 01:49:34.32ID:lN+O1qau シミュレーションなら当然疑似乱数だけども
暗号用とか一発モノ
暗号用とか一発モノ
799デフォルトの名無しさん
2019/09/05(木) 01:51:14.01ID:ymsvBiyv800デフォルトの名無しさん
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
https://cpprefjp.github.io/reference/random/random_device.html
803デフォルトの名無しさん
2019/09/05(木) 07:22:17.46ID:TZCSkvxf パスワード生成とかシミュレーションとかマウント取りたくてしかたない老害だらけだなw
>>747はじゃんけんゲームだろ?
>>747はじゃんけんゲームだろ?
804デフォルトの名無しさん
2019/09/05(木) 07:25:46.47ID:OtMARD1h805デフォルトの名無しさん
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:Scz25acM809デフォルトの名無しさん
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年程度で新仕様はいるようになる予定だ。
今後は3年程度で新仕様はいるようになる予定だ。
820デフォルトの名無しさん
2019/09/05(木) 18:47:06.02ID:04ZPpNlH821デフォルトの名無しさん
2019/09/05(木) 19:12:25.60ID:ymsvBiyv822デフォルトの名無しさん
2019/09/05(木) 19:47:31.38ID:Scz25acM >>779
% を使う、というのは「下位ビット」を使う、という意味と同じですよ
% を使う、というのは「下位ビット」を使う、という意味と同じですよ
>>780
rand() は線形合同法でインプリメントされているので、乱数の質はあまりよろしくないのです
rand() は線形合同法でインプリメントされているので、乱数の質はあまりよろしくないのです
825デフォルトの名無しさん
2019/09/05(木) 20:58:58.28ID:XFJCfiEp >>823>>824
うぜーなーそんなもん誰でも知ってる
うぜーなーそんなもん誰でも知ってる
826デフォルトの名無しさん
2019/09/05(木) 21:59:37.41ID:04ZPpNlH827デフォルトの名無しさん
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 危険性 下位ビット
辺りで検索して出直してこい
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() の質が悪い事を危険と思っていたりとかな。
rand() の質が悪い事を危険と思っていたりとかな。
839デフォルトの名無しさん
2019/09/05(木) 23:25:02.42ID:dJChsmUT840デフォルトの名無しさん
2019/09/05(木) 23:30:31.24ID:mvC8Xt02 mtだってセキュリティ目的で使うべきではないが他に分野では一般的に用いられる優秀な乱数
要件次第で何が良いかは変わる
randは対応できる要件が少なくて大抵の場合xorやmtが上位互換になれる
メモリ周りがキツい環境下なら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:HDKa127r843デフォルトの名無しさん
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の累乗を約数とする場合も下位ビットの影響が大きい。
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と同じ挙動だな。
試しに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:cs8CUE0i852デフォルトの名無しさん
2019/09/06(金) 01:48:27.80ID:cs8CUE0i >>851
定義済みマクロで調べてみたら実行環境Mingwぽい・・・・
定義済みマクロで調べてみたら実行環境Mingwぽい・・・・
853デフォルトの名無しさん
2019/09/06(金) 01:55:47.74ID:cs8CUE0i sololearnの実行環境、Mingw GCC 7.2.0らしい
Mingw GCCのrandom_deviceが治ったのは9.2から・・・
Mingw GCCのrandom_deviceが治ったのは9.2から・・・
854デフォルトの名無しさん
2019/09/06(金) 07:14:39.55ID:ZIHlUiP/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:7h7MjjwN858デフォルトの名無しさん
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命令使ってくれないな
こうやってもrdrand命令使ってくれないな
861デフォルトの名無しさん
2019/09/06(金) 20:30:19.25ID:mhFSZpwS どうやったら使うの
862デフォルトの名無しさん
2019/09/06(金) 20:43:09.72ID:cs8CUE0i たぶんだけど、rdrand単体は信頼度が低いから必ずシステムの乱数源から取得するようにしてるんだと思う
>>828
どう違うのですか?
どう違うのですか?
>>830
mt 使え、っていう意味なのでは?
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だってセキュリティ目的で使うべきではない
>それはなぜですか?
これはさすがにググレカス言うべきだろ。本人のためにも。
てかググって調べた方が実際本人のためだわ。
>>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:HDhw8kAD878デフォルトの名無しさん
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でも使え
実行時なら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++ にはそういう機能はないんではないかと思うんですが。
個人的には 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:qEJgkL29892デフォルトの名無しさん
2019/09/08(日) 16:23:33.90ID:m+XQHtHp893デフォルトの名無しさん
2019/09/08(日) 16:25:39.30ID:rbzdrKrZ Typeを保持するタイプが欲しいわ。。
type t=int;
的な。
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 以下略
}
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()がそれだが参考になるか?
ユニークでなければならないクラス名を文字列で指定はかなりキツいという意味で
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;
};
一応これでも要件は満たしているのですが、
いかんせんこれだと使うクラスを予め手動で登録している必要があり、
保守管理が手間なので皆様のお知恵を拝借できればと思い質問した次第です。
頂いた情報はこれから勉強します。
私が考えていたのは実行時に型を登録するようなクラスを使う方法です。
仮コードですが下記のような感じです。
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可能なクラス若しくは構造体はどうやって判定するのがスマートですか?
memcpy可能なクラス若しくは構造体はどうやって判定するのがスマートですか?
904デフォルトの名無しさん
2019/09/09(月) 00:11:49.05ID:PN/XD42X905デフォルトの名無しさん
2019/09/09(月) 00:22:36.87ID:9HmBuaOU >>904
1から作られればそうするのですが、c言語のベースがあって、それをコピペでc++で改修して、そいつの改造なんでどうしても必要なんですよ。
手を出せない共通処理がmemcpyを使ってるから、チェック処理が必要だったので
1から作られればそうするのですが、c言語のベースがあって、それをコピペでc++で改修して、そいつの改造なんでどうしても必要なんですよ。
手を出せない共通処理がmemcpyを使ってるから、チェック処理が必要だったので
906デフォルトの名無しさん
2019/09/09(月) 00:23:34.34ID:gU/0Tin3907デフォルトの名無しさん
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 で作られてる?
コンパイラのビルトイン? それとも 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:qT2kJ6NO913909
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
};
自分で調査してみたところ、以下の様に、あなたのおっしゃるとおり、
中核部分は、__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だと思うが。
単純にQtだと思うが。
916デフォルトの名無しさん
2019/09/09(月) 13:01:23.17ID:a6mWw99g 小学生のどっちが強い議論かよ
917デフォルトの名無しさん
2019/09/09(月) 13:14:59.70ID:By40c52C >>901
pythonのPyObjectのコード観てみ
pythonのPyObjectのコード観てみ
918デフォルトの名無しさん
2019/09/09(月) 13:38:51.72ID:BaqZzWRe919デフォルトの名無しさん
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みたいな感じで勝手にカンマがついてしまうんだけど
カンマがつかないフォーマットで出力する方法を教えてください
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
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でカンマが付くなんて知らなかった
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=() は見つかります。
とすると、 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
誤:とすると、 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だからね
一応マジレスしておくと、そのサイトの一番下を見よう
> 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();
}
という構造体の操作等をクラス化したモノ。
なので、インデックサが無いはずである。
リンクドリストのよくあると思われる実装は、
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
};
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;
}
なお、_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:G9jMTORL936デフォルトの名無しさん
2019/09/09(月) 21:43:26.98ID:jbm+gpsV937デフォルトの名無しさん
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 になった場合にマクロ展開の動作を停止するためのものです。
ちなみに、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のバッカス・ナウア記法
>>933の(1)(2)併せてtupleのバッカス・ナウア記法
939デフォルトの名無しさん
2019/09/10(火) 12:01:32.29ID:wmYy4ZD0940デフォルトの名無しさん
2019/09/10(火) 17:10:53.21ID:BQ4j7tjI C#には文字列で指定したメソッドを呼び出す方法がありますが、
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:H3vpu58u944デフォルトの名無しさん
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表示をオフれ
専ブラ使ってるならAA表示をオフれ
947デフォルトの名無しさん
2019/09/10(火) 18:30:27.12ID:/IdzRyhX mapに入れるにしても呼び出す関数の引数戻り値の型が一致してる必要があるくね
948デフォルトの名無しさん
2019/09/10(火) 18:36:26.12ID:lKNyd4my949デフォルトの名無しさん
2019/09/10(火) 21:34:14.67ID:ihR0gUx6950デフォルトの名無しさん
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:ER41jhKS953デフォルトの名無しさん
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みたいなのもちょっと無理を感じなくもないがアリ
.netみたいなのがあればそれでいいし、CのGLibみたいなのもちょっと無理を感じなくもないがアリ
958デフォルトの名無しさん
2019/09/11(水) 01:04:41.71ID:Au6CJXG/959デフォルトの名無しさん
2019/09/11(水) 01:17:18.25ID:xNhcwpCp 戻り値だけ違う関数を作りたきゃテンプレートを使え
以上
以上
960デフォルトの名無しさん
2019/09/11(水) 01:57:43.22ID:TkJgDVYV TypeHolderTypeがほしい。
リフレクションは23で入るそうな。
リフレクションは23で入るそうな。
961デフォルトの名無しさん
2019/09/11(水) 07:00:09.68ID:KrQUVjgm >>952
AからRを推定させたいっていことか?
AからRを推定させたいっていことか?
962デフォルトの名無しさん
2019/09/11(水) 08:37:00.29ID:BcUfEF7y リフレクションどうやって実装するんだろう・・
現行のC/C++とリンカの仕様と互換性たもったまま実装するのかなり難しそうだけど
現行のC/C++とリンカの仕様と互換性たもったまま実装するのかなり難しそうだけど
963デフォルトの名無しさん
2019/09/11(水) 10:13:16.97ID:px+Xr7os C++に不可能は無い
964デフォルトの名無しさん
2019/09/11(水) 10:17:36.03ID:4wA+sXag965デフォルトの名無しさん
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;
};
いずれも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.
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:9WrJeA7f968デフォルトの名無しさん
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] はなんという名称(概念)ですか?
また、[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]
自己レスですが、[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:9WrJeA7f972デフォルトの名無しさん
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(){} ができればよいのだけどね。
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->???;
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ポインタの配列
実際は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/6lHRNc988デフォルトの名無しさん
2019/09/12(木) 07:02:09.27ID:7HqgwkVj989デフォルトの名無しさん
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にすべてのメンバ乗せたらええやん。
それか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/onN1000デフォルトの名無しさん
2019/09/13(金) 12:54:06.04ID:/ygW08Jq vtableがあればdynamic_castもできるのに何でダウンキャストなんだ?
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 52日 23時間 35分 31秒
新しいスレッドを立ててください。
life time: 52日 23時間 35分 31秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性には共通点が [Hitzeschleier★]
- テレビ朝日 本社から男性が転落し死亡。関連会社社員か 当たった通行人が左肩軽傷 [阿弥陀ヶ峰★]
- 中国軍機がレーダー照射 小泉防衛大臣の説明に「矛盾している」中国外務省報道官が批判 [♪♪♪★]
- テレビ朝日本社から20~30代の関連会社社員とみられる男性が転落し死亡 六本木けやき坂通りの通行人にはけが人なし [少考さん★]
- 「これいいじゃん!!!」 セブン-イレブンの1620円で買える“1人用クリスマスケーキ”🎂に注目殺到「天才すぎる」 [パンナ・コッタ★]
- 高市早苗首相が天理教系企業に“巨額発注” 総額5000万円 本人は「政治団体の活動に必要な支出」と回答 ★2 [Hitzeschleier★]
- 【実況】博衣こよりのえちえちスーパーダンガンロンパ7🧪
- 【乞食速報】プロクオリティ ビーフカレー 96食 4262円 [268244553]
- 年末のvip芋煮会って何日だっけ?
- 【速報】福島原発でキセノン135が検出されてる模様、再臨界か [668970678]
- 【速報】テレビ朝日本社から20代〜30代の男性が飛び降り自殺して死亡 東京・六本木 [597533159]
- 歴史って「この教科には暴力的な表現が含まれます」とか警告しといた方がいいよな
