C++相談室 part144at TECH
C++相談室 part144 - 暇つぶし2ch1:デフォルトの名無しさん
19/07/22 13:18:35.52 gptRHpgT.net
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part143
スレリンク(tech板)
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
スレリンク(tech板)
■長いソースを貼るときはここへ。■
 URLリンク(codepad.org)
 URLリンク(ideone.com)
[C++ FAQ]
URLリンク(isocpp.org)
URLリンク(www.bohyoh.com) (日本語)
----- テンプレ ここまで -----

2:デフォルトの名無しさん
19/07/22 15:58:46.65 sp7+c3NQ.net
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
---- テンプレ ここまで ----

3:デフォルトの名無しさん
19/07/22 17:03:26.86 YPZZyU9O.net
すっぱい葡萄
URLリンク(ja.wikipedia.org)
 自分のものにしたくてたまらないにもかかわらず、努力しても到底かなわない対象である場合、
 人はその対象を「価値の無いもの」「自分にふさわしくないもの」と見なそうとし、
 それをあきらめの理由として納得し、心の平安を得ようとするものである。
 フロイトの心理学では、これを防衛機制および合理化の例とする。また、社会心理学においては、認知的不協和の例とされる。
 英語には、この寓話を元に生まれた熟語として "sour grapes" があるが、これは「負け惜しみ」を意味する。

4:デフォルトの名無しさん
19/07/22 18:10:49.34 8zlk2sqy.net
>>2
void君諦め悪いよ

5:デフォルトの名無しさん
19/07/23 15:37:41.03 zEKbbod3.net
江添がCADDIの常勤になった

6:デフォルトの名無しさん
19/07/23 16:24:43.67 Rjd8/nXp.net
ループの中で剰余演算子が沢山出てくるとまぁよく知られてるように遅いわけだが、
(x += a) %= m;

x += a;
if(x >= m) x -= m;
としたら高速化された
だったら言語仕様として剰余演算子の定義をこう変えれば良いのに、なぜ遅いままなのですか?

7:デフォルトの名無しさん
19/07/23 16:32:47.77 tt/1GdHu.net
>>6
それじゃ変更前と同じ演算になってないだろ。x>=2mやx<0の可能性を排除しているから速いんじゃね。

8:デフォルトの名無しさん
19/07/23 16:32:54.11 +dwx5m0u.net
お前のプログラムa=999999、m=2の時に壊れてるよ

9:デフォルトの名無しさん
19/07/23 16:54:30.60 Rjd8/nXp.net
>>7-8
確かに
すみませんでした

10:デフォルトの名無しさん
19/07/23 17:33:44.97 35PXZxTn.net
URLリンク(cpplover.blogspot.com)

11:デフォルトの名無しさん
19/07/23 18:24:59.51 u/gGnwtd.net
>>10
それ読んでもc++使う理由わからんよな
高速化が必要なコアのアルゴリズムにc++最新機能不要だろ
それより確率モデル使ってGPUで解くとかもっと賢くやれよと思うわ

12:デフォルトの名無しさん
19/07/23 20:42:24.11 Ptp4kmtT.net
単なるファッションだろ。江添もさ。

13:デフォルトの名無しさん
19/07/23 21:35:57.63 04X8GIZv.net
自分が食っていくためには自分に仕事が必要であるため、
C++言語仕様周辺で食ってる人は永遠にコネクリ回したいはず。

14:デフォルトの名無しさん
19/07/23 21:41:03.53 Ffr5F2PG.net
最新規格に合わせた方が生産性高く保守も容易になる
それに、cudaだってc++17相当で書けるだろうに

15:デフォルトの名無しさん
19/07/23 21:46:35.19 u/gGnwtd.net
やってから言え

16:デフォルトの名無しさん
19/07/23 22:06:34.72 q6q7AnvM.net
自明だよね

17:デフォルトの名無しさん
19/07/23 22:06:42.46 Ffr5F2PG.net
普通にc++17は便利に使っているが?
てか使っている実例に対して、無意味断定する根拠が適当過ぎる
それこそコードで示せと
そんなに大きくない会社が金かけてまでやっているのだから、それで利益が出る効果はあるんだろう

18:デフォルトの名無しさん
19/07/23 22:13:30.35 u/gGnwtd.net
>>17
お前が保守してるコードについて詳しくきかせてもらおうか

19:デフォルトの名無しさん
19/07/23 22:20:10.76 Ffr5F2PG.net
コーディング量減るし、constexpr ifでlambdaの記述が捗るだろ?

20:デフォルトの名無しさん
19/07/23 22:23:24.83 NxPnU+JE.net
俺c++03民、autoが使いたいです

21:デフォルトの名無しさん
19/07/23 22:36:46.59 u/gGnwtd.net
>>19
ごまかすなよw
お前が今保守してるコードについて聞いてる
c++のバージョンは?
行数は?

22:デフォルトの名無しさん
19/07/23 22:39:03.45 TGpHom7B.net
速度とC++を使用する意義について問題提起したのかと思いきや生産性の話になってる

23:デフォルトの名無しさん
19/07/23 22:51:25.14 LMG0h0kR.net
constexpr ifって言ってんのにC++のバージョン聞くってどういうこっちゃ
まさかC++20?

24:デフォルトの名無しさん
19/07/23 22:53:38.63 Ffr5F2PG.net
>>21
今のところc++17だな
17で0から書いたわけじゃないが、少なくとも有効にしないと通らん
行数はひとつじゃなくライブラリ沢山だから分からん
昔はlinuxメインでcudaとかも使って数値演算だったがここ数年はwindowsばかり
画像処理系、GUI、数値演算ライブラリその他装置制御とかのライブラリと組み合わせたアプリ作っている感じだな

25:デフォルトの名無しさん
19/07/23 22:58:50.26 Ffr5F2PG.net
画像処理だと要素型のテンプレートで基本操作をそれぞれ特殊化してintrinsicsで書いておいて、それを組み合わせて応用機能を実現している感じ
組み合わせで最適化可能な操作も基本操作に加えているけど

26:デフォルトの名無しさん
19/07/23 22:58:57.04 TGpHom7B.net
>>23
何言ってだお前

27:デフォルトの名無しさん
19/07/23 23:02:07.66 N0M0V2oE.net
constexpr ifはC++17以降じゃないと使えない

28:デフォルトの名無しさん
19/07/23 23:03:45.37 Ffr5F2PG.net
通称constexpr ifなのに書くときは逆という罠

29:デフォルトの名無しさん
19/07/23 23:22:42.08 viG1+s3R.net
>>24
それ保守じゃねーだろ

30:デフォルトの名無しさん
19/07/23 23:25:00.99 Ffr5F2PG.net

開発したアプリやライブラリの機能追加とかバグ対応とかって保守だろ

31:デフォルトの名無しさん
19/07/23 23:38:39.91 OTk37+kC.net
それ保守ってほど時間たってないんじゃね?
しかも他人のコードじゃないならなおさら

32:デフォルトの名無しさん
19/07/23 23:42:48.79 Ffr5F2PG.net
17にしてからは1年も経ってないかも知らんが、14,11の頃から数えれば数年前のソフトいじるとかは普通にある
弄るついでに最新規格でコンパイル通るようにしたり、使ってたライブラリ最新版に置き換えたりしてる

33:デフォルトの名無しさん
19/07/23 23:43:53.31 OTk37+kC.net
>>32
だからそれ保守じゃねーから
変えてんじゃん

34:デフォルトの名無しさん
19/07/23 23:46:09.85 OTk37+kC.net
自分のちっさいライブラリでしょどうせ
他人の膨大なソースコードでそれできんのかと
仕事で保守したことないやつの戯言

35:デフォルトの名無しさん
19/07/23 23:50:18.68 +dwx5m0u.net
機能追加やリファクタも保守だぞ
変えないことが保守だと思ってんの?仕事で保守したことないやつの戯言

36:デフォルトの名無しさん
19/07/23 23:51:10.09 Ffr5F2PG.net
他人のなら、1ソース数10万行のが50ファイルとかあって、中身がコピペ改変のネスト構造になっているとか頭おかしいコードのデバッグとかすることもあるよ。
おんなじバグが100箇所くらいあったりするのw

37:デフォルトの名無しさん
19/07/24 06:44:19.68 8xr9hPJ6.net
cudaに対してc+17使うとか100%死亡パターンだろw

38:デフォルトの名無しさん
19/07/24 07:38:12.78 xGXQ+cSs.net
>>36
そういうやつは触れない
そうじゃないやつはリファクタリング可能
統一して語る必要はない

39:デフォルトの名無しさん
19/07/24 15:35:36.80 51dv4//C.net
修正は保守に入るだろうけど、
機能追加はどうかな。保守ではないような気がするが。
別にどうでもよいけど

40:デフォルトの名無しさん
19/07/24 17:30:07.43 2ifmVNIE.net
新しいOSに対応しろ、ファイル形式に対応しろ、こういうAPI追加しろ、出力形式変えろ、速くしろ、軽くしろ
保守ってそういう要求に対応すること・対応できる体制を維持することだと思ってたんだが、そうじゃない宇宙もあるのかな

41:デフォルトの名無しさん
19/07/24 20:29:11.56 TdGR8UUG.net
ソフトの保守って受けたことねーや
納品したらそれまで
改修や機能追加は別料金

42:デフォルトの名無しさん
19/07/24 21:09:49.20 j4f+/jKb.net
> 改修や機能追加は別料金
オレが決められるなら当然そうするんだが
クソ脳無しの営業どもが

43:デフォルトの名無しさん
19/07/24 21:52:55.40 94R5D7K2.net
元来の意味は現状維持なんだから機能追加するものは保守とは言わんよなぁ
どうしても直さないといけないバグとか、開発環境変わったことによる対応とか、そういうのだけいやいややる感じ

44:デフォルトの名無しさん
19/07/24 22:50:28.58 2ifmVNIE.net
保守(maintenance)ってのはソフトウェアの利用価値を持続させることでしょ
そのために必要なら修正もするし機能追加もする
「保守だから現状維持、改修や追加なんてしないししてはいけない」なんてのは思考停止

45:デフォルトの名無しさん
19/07/24 23:04:23.71 u4NdgWgN.net
パッケージだと正式リリースした後のバージョンアップはすべてメンテナンス

46:デフォルトの名無しさん
19/07/24 23:30:16.15 bRKaVM+S.net
業務で保守契約っていわれたら機能追加はないイメージだな

47:デフォルトの名無しさん
19/07/24 23:31:07.37 8xr9hPJ6.net
思考停止っつーか実際問題そんな仕事ないだろ。
c++バカによくある妄想に付き合う必要はない。

48:デフォルトの名無しさん
19/07/24 23:38:01.87 TdGR8UUG.net
ある人にとっての「保守」は
趣味プログラマによるお仕事ごっこという文脈でのそれなのかな

49:デフォルトの名無しさん
19/07/25 00:16:11.89 f/JymLGM.net
ソースコード変えたらテストせねばならないがC++は単体テストの記法がイマイチ
Google Test一時期使ってたがテスト対象を呼び出すコードを書くまでのタイピング量がけっこう生じる
GoやRustはいいいぞ~☆

50:デフォルトの名無しさん
19/07/25 02:35:44.89 f/JymLGM.net
ていうかC++の自己責任が伴いすぎる自由に疲れた、

51:デフォルトの名無しさん
19/07/25 02:39:40.09 f/JymLGM.net
苦労して自由を行使した末に得られる見返りのは
たいていはわずかばかりのパフォーマンス向上と
二度と見る気がしない気がする醜いソースコードやし、
保守wwwwwwwwww

52:デフォルトの名無しさん
19/07/25 06:25:29.69 GrqrASiv.net
const std::string & を std::string_viewに置き換えている記事をよく見かけます
後者を使うことに何か意味はありますか?
単に置き換え可能だと言うことを解説したかっただけなのでしょうか

53:デフォルトの名無しさん
19/07/25 06:43:57.53 jgZKUqYh.net
後者は部分文字列を切り出したいときにメモリ確保と文字列のコピーが発生しない

54:デフォルトの名無しさん
19/07/25 09:08:23.71 fv/O10Ch.net
c++は、スマホでは動作しませんか?
VSでコンパしたものでは、ダメですか?

55:デフォルトの名無しさん
19/07/25 09:17:00.66 QDSJiMEy.net
はい
URLリンク(docs.microsoft.com)

56:54
19/07/25 09:25:28.09 fv/O10Ch.net
>>55
丁寧な解説を、ありがとうございます。

57:デフォルトの名無しさん
19/07/25 12:47:32.28 i0AuwjJi.net
streamで固定長の文字列分解したい
以下イメージ
istreamstring ss(“0123456789”);
string no1;
int no2;
char no3;
ss >> std::setw(4) >> no1;
ss >> std::setw(4) >> no2;
ss >> std::setw(2) >> no3;
結果
no1=0123
no2=4567
no3=89
みたいな感じで
環境はコンパイラc++03、boost使えず
std::string::substr使ったやつはもう作ってます
よろしくお願いします

58:デフォルトの名無しさん
19/07/25 13:05:43.49 eYgqWI8M.net
>>57 「substr()使ったやつ」で何が不満なのか?

59:デフォルトの名無しさん
19/07/25 14:10:42.84 HIqmru9O.net
>>58
項目ごとにstreamかまさないと、型で自動変換してくれないし、抜き取り開始位置指定しなくちゃいけないし、なんか冗長でカッコ悪し
みたいな理由です。

60:デフォルトの名無しさん
19/07/25 15:06:48.36 eq0G00ml.net
ABIの変更ってこれから先何度もあるんでしょうか?
stringとか基本のクラスが変わるのはきついんですが

61:デフォルトの名無しさん
19/07/25 16:49:16.74 E2feltVj.net
そのあたりほんとc++クソだよ
というか標準化委員会がクソ

62:デフォルトの名無しさん
19/07/25 17:01:42.02 XeL2zPLs.net
ABIはしゃーないな
VCとgccが違うの知った時泣いたわ

63:デフォルトの名無しさん
19/07/25 17:11:22.15 DsBc3y+y.net
BeOSっていうOSが昔あって、純粋にC++でゼロから作られたOSなんだけど
コンパイラのバージョンアップだとかでABIが変わって
アプリの使うAPIの互換性が保たれてなかったんだよね
(後継のHAIKU OSも同じ問題抱えてる)
そこらへん標準で決めててくれればいいのにねぇ

64:デフォルトの名無しさん
19/07/25 21:34:32.20 E2feltVj.net
OS作ってんならABIは自分で定義しろよ

65:デフォルトの名無しさん
19/07/25 21:46:01.89 PNoIdPh5.net
それ言い出すとcでいいやんてなる。

66:デフォルトの名無しさん
19/07/25 23:57:42.04 n2Si4yAe.net
C++の委員会って規模やリソース的に多言語と比べてどうなんでしょう?
かなり恵まれているほうえすかね?

67:デフォルトの名無しさん
19/07/26 00:08:47.64 v7MbZVD8.net
C++くらい規格化ちゃんとやってる所って他にある?

68:デフォルトの名無しさん
19/07/26 00:21:17.49 wfZPJP/7.net
Javascript?

69:デフォルトの名無しさん
19/07/26 00:33:24.31 eT9T+6Bl.net
規格合致したコンパイラなんて過去に存在したのかしら

70:デフォルトの名無しさん
19/07/26 00:47:51.48 qhxgv2BF.net
そもそも1つの規格を元に複数のコンパイラが存在するって言語が少ないだろ

71:デフォルトの名無しさん
19/07/26 01:25:43.63 6ttC61YN.net
>>52
例えば文字列リテラルを与えた時にconst std::string &だと暗黙的に一時オブジェクトが構築され、バッファの確保と文字列のコピーが発生する。
std::string_viewを使うと、文字列の先頭アドレスと長さだけが渡されることになるので、効率の良いコードが生成される。

72:デフォルトの名無しさん
19/07/26 03:37:13.13 8OK0KeqS.net
>>69
VSコンパイルで、なんでもOKだろ。

73:デフォルトの名無しさん
19/07/26 06:49:13.69 4yTQHcMn.net
>>55
これは、IDEはVSでも使用するコンパイラ本体は MSC(?)ではなくclang ですか。

74:デフォルトの名無しさん
19/07/26 06:51:05.54 /WSqmbNM.net
>>70
せ、せやな
   FORTRAN, COBOL

75:デフォルトの名無しさん
19/07/26 08:35:39.46 TlXJotF6.net
実用的な言語の話をしているキリッ

76:デフォルトの名無しさん
19/07/26 08:49:06.77 PZK88cLJ.net
ecma334

77:デフォルトの名無しさん
19/07/26 13:37:03.81 X7S0ZvoC.net
Fortran今も使われてるのか
研究室のコードが軒並みFortranでイヤイヤ使わされた記憶がよみがえった
C++だのなんだの色々流行ってるが研究者はそんなものに振り回されるな
Fortranは完成された言語なんだとボスが力説してたわ

78:デフォルトの名無しさん
19/07/26 13:40:16.10 X7S0ZvoC.net
言い忘れたがFORTRAN77ね
90とか使うと怒られた

79:デフォルトの名無しさん
19/07/26 14:33:55.87 qhxgv2BF.net
今はPythonかMATLABが多いかと

80:デフォルトの名無しさん
19/07/26 14:48:21.28 pSMqg5vs.net
Pythonは「CPythonの実装が規格だ」だし
MATLABはそもそもプロプラで言語仕様や変更プロセス自体ブラックボックスだし
あんまり依存するのは危険だと思うんだけどな
アカデミックでは特に

81:デフォルトの名無しさん
19/07/26 16:28:07.22 /WSqmbNM.net
>>77
Fortran 2008の規格書印刷してボスの机の上に置いてやれw

82:デフォルトの名無しさん
19/07/26 16:39:45.36 1S1aSnkU.net
かといってANOVAやMCMCをC++で実装するのは検証も含めて愚かでしょ

83:デフォルトの名無しさん
19/07/26 18:18:30.43 4cv+0ZCY.net
ボイジャーのメンテナにFORTRAN使い募集してたやん

84:デフォルトの名無しさん
19/07/26 22:42:11.25 eT9T+6Bl.net
JAXAの若手プログラマは自殺してなかったっけ?

85:デフォルトの名無しさん
19/07/27 01:32:43.02 KwccJBez.net
>>80
それでもpythonのリスト処理の仕様の方がc++のuniversal initializerなんかよりも
よっぽど仕様として安定してる。それが現実だ。

86:デフォルトの名無しさん
19/07/27 07:33:07.73 NQ4+UjHL.net
>>53
それは存じていたのですが、単にstringの参照を渡したいときにまで(const std ::string &)std::string_viewを使う意味はあるのかなぁ…?というのが疑問でした
上手く伝えられずすみません
>>71
非常に納得しました。そういう意図が有ったのですね
ありがとうございます

87:デフォルトの名無しさん
19/07/27 08:41:09.41 m1vSIns3.net
個人的な話だけどstring_viewはconstexpr対応してる点で有利。

88:デフォルトの名無しさん
19/07/27 09:24:24.73 utI+NfFM.net
パイソン2と3が混在してるのがややこしい。
spirvのビルドスクリプトは2でしか動かない記述なのに勝手に3を探してきて動かそうとするとか混乱が甚だしい

89:デフォルトの名無しさん
19/07/27 11:41:57.01 zR8v2AWF.net
>>88
ちょっと話はそれるけど、外国製の言語処理で最近やたらとネットから勝手に
いろんなものをダウンロードしてくるものが増えて嫌だ。

90:デフォルトの名無しさん
19/07/27 13:02:56.66 P/JKsCl6.net
なんというか世の中全てがオンラインが前提みたいになってて辟易します

91:デフォルトの名無しさん
19/07/27 13:17:47.97 zR8v2AWF.net
>>90
凄い分かる。
>>89
誤:言語処理
正:言語処理系

92:デフォルトの名無しさん
19/07/27 13:57:22.46 zfEkdoko.net
別にオンライン前提でもいいんだけどエラー処理が糞なのが多くて、オフラインだと起動が超遅くなるとかそもそも起動しないとかあるのが

93:デフォルトの名無しさん
19/07/27 17:04:11.07 BDHmD2jF.net
これからはonline merged offlineらしいです

94:デフォルトの名無しさん
19/07/27 17:04:42.40 BDHmD2jF.net
あ、dはいらんか

95:デフォルトの名無しさん
19/07/27 17:25:47.08 zR8v2AWF.net
要らない物を売りつけてくる天才みたいな感じだからな、アメリカは。

96:デフォルトの名無しさん
19/07/27 18:56:25.83 KwccJBez.net
アメリカ関係ないだろ。
エヴァンジェリストとか名乗る馬鹿が要らんものばっか押し付けてるだけで。

97:デフォルトの名無しさん
19/07/27 19:08:52.15 zR8v2AWF.net
VSもASもみんなそうだし。

98:デフォルトの名無しさん
19/07/28 03:30:37.94 tecnuiEb.net
エヴァンジェリストっていう単語はじめてきいたときは
エヴァンゲリオンのファンの事かとオモテタ

99:デフォルトの名無しさん
19/07/28 03:52:29.03 5UHV96py.net
ヒエッ…い、祝福王……!

100:デフォルトの名無しさん
19/07/28 06:12:59.88 mOcFR82C.net
広告宣伝しまくってプロパガンダのゴリ押しで本当に要らないものを買わせる奴らだろ
神からプログラミング言語までなんでもアリだ
ハロウィン文書なんかは異教徒抹殺のための冷静な分析でこれは宗教ヤってる目つきの物言いだ
キリスト教各宗派の合宗国のアメリカはそういうの強いよ
どこかのバカが州とか訳したけどね、真実を悟らせないようにする翻訳テクニックじゃねえの
つまりあいつらのやってることは邪悪だから気をつけろ、ってことだ

101:デフォルトの名無しさん
19/07/28 09:08:49.65 cFlW55NM.net
で、C++の話題はまだかい?

102:デフォルトの名無しさん
19/07/28 09:44:05.47 5UHV96py.net
C++がいかに委員会制を敷いて仕様をがっちり固めているといっても
元になっているC言語がUnix記述のためにデニスリッチーがほぼ一人で考えたドメイン固有言語みたいなものなので
後方互換性というものを重視すればするほど後発言語に対してハンデ戦になってしまうのは仕方が無い
Rustを見たらC++のconstや参照がいかに危険で不用意なブツになってしまっているかがワカル
・こんな人はRustを使うべき(中略
・今すぐRustを使うべき10の理由(ry

103:デフォルトの名無しさん
19/07/28 09:53:00.46 5UHV96py.net
ていうかUnixの記述自体が文書整形をやりたいから(後にroffとして結実)という
システム記述ではなくてアプリ実現要求に端を発しているから、
やっぱ全体を俯瞰するとろくでもない流れの末に生まれたC++は不幸な出自と言えるかもしれん…

104:デフォルトの名無しさん
19/07/28 10:38:12.67 p9n7KwZ9.net
C互換無くなってきてるやん

105:デフォルトの名無しさん
19/07/28 10:57:33.68 c9+bQbdr.net
2の補数以外を捨てたのと、評価順序を規定したあたりでCとは決別したと思ってる
これ生粋のCerは絶対受け入れられないでしょ

106:デフォルトの名無しさん
19/07/28 10:58:21.15 /T7nmvYx.net
>>89
ウチは羹に懲りて膾吹いてるので許可したサイトにしかつながらない
パイパイすらつながらない

107:
19/07/28 12:58:43.48 GPK25ks7.net
>>105
kwsk, wktk

108:デフォルトの名無しさん
19/07/28 13:00:05.35 2BtEWPhc.net
古いシステムでは1の補数表現を用いていたものもあったという伝説じゃよ

109:デフォルトの名無しさん
19/07/28 13:18:40.37 c9+bQbdr.net
1の補数や符号ビットだと0のエイリアス(+0と-0)が出来てハッシュの要件満たさなくてめんどくせえし、
もう2の補数ばっかりなんだから2の補数に限定しようぜーってなってC++20から整数型は2の補数限定になる
例によってIBMはキレてる

110:デフォルトの名無しさん
19/07/28 13:25:39.79 N2Io9ZPD.net
あと宇宙船演算子の戻り値型が符号付整数だけstrong_orderingじゃなくなったりとよろしくない

111:デフォルトの名無しさん
19/07/28 14:06:25.65 5UHV96py.net
1BM = 1の補数表現のBinaryを使うMaker

112:デフォルトの名無しさん
19/07/28 23:13:55.96 U1WujzOS.net
今のIBMはC++にどれくらい貢献してるんです?

113:デフォルトの名無しさん
19/07/30 03:50:43.53 yEpi9Vih.net
BOOST_FOREACH と c++11の範囲ベースfor文ってどっちが早いんですか?

114:デフォルトの名無しさん
19/07/30 07:26:38.31 FJcM1oBD.net
同じ

115:デフォルトの名無しさん
19/07/30 07:30:33.15 9ymDyD6T.net
>>113 効率は実測が基本。

116:デフォルトの名無しさん
19/07/30 08:06:04.93 4WmgeffG.net
>>113
速いでなく早いならboostじゃないかな

117:デフォルトの名無しさん
19/07/30 08:36:20.97 mDNZ+mDk.net
ほえー宇宙船演算子なんてできるのか…
勉強になったわ
しかしおふざけネーミングなの珍しいな。総合比較演算子とかならなかったのか

118:デフォルトの名無しさん
19/07/30 09:50:00.73 cezd+02w.net
エルヴィス演算子とか

119:デフォルトの名無しさん
19/07/30 10:41:06.47 AXUtE9A1.net
正式名称は三方比較演算子(three-way comparison operator)

120:デフォルトの名無しさん
19/07/30 12:14:04.15 reNIrpCV.net
エルビス演算子の名前ってまじでプレスリーなんかよw

121:デフォルトの名無しさん
19/07/30 14:58:53.30 q4AvHDZp.net
宇宙船演算子なんてなんかのタイポだろうと思って読み飛ばしていたけどマジな用語だったのか、勉強になったわ…
FORTRANの算術IF文みたいに宇宙船if文とか作ってくれればいいのに
space_ship_if(x)
equal { … }
plus { … }
minus { … }

122:デフォルトの名無しさん
19/07/30 17:37:24.04 cezd+02w.net
ネコ演算子 ^..^
かわいい

123:デフォルトの名無しさん
19/07/30 17:41:57.53 hcEFIsmn.net
xは何と比較してるん?
switch見たいな構文やな。

124:デフォルトの名無しさん
19/07/30 19:15:29.41 YQWzaJvj.net
Opencvで空の画像に点を1000個程度書きたいです
X座標Y座標が既知の場合に最速で点を1000個描画するにはどうしたらいいんですかね?

125:デフォルトの名無しさん
19/07/30 20:14:10.30 q4AvHDZp.net
>>123
> xは何と比較してるん?
0 と比較してるつもり
space_ship_if(x, y)
== { … }
< { … }
> { … }
の方がわかり易いかな

126:デフォルトの名無しさん
19/07/31 14:05:31.56 /qk9IG8W.net
gitに公開されているcpp環境を使おうとしたところ、サンプルコードのcppファイルのコンパイル時に
「undefined reference to ~」
と出てコンパイルできませんでした。
何が原因かわかりますでしょうか?
操作した手順は以下になります。
#-------------
# 1. インストール
#-------------
git clone URLリンク(github.com)
cd libGDSII
mkdir m4
sh autogen.sh --prefix=/home/user/install/libGDSII
make install
2. につづく

127:デフォルトの名無しさん
19/07/31 14:08:46.05 /qk9IG8W.net
#-------------
# 2. 下記URLにあるSample codeを元にファイル作成
# ->URLリンク(github.com)
#-------------
--- 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:デフォルトの名無しさん
19/07/31 14:09:39.80 /qk9IG8W.net
#-------------
# 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:デフォルトの名無しさん
19/07/31 14:28:29.92 OXiBQODl.net
まずエラーメッセージ(undefined reference to )でググろう

130:デフォルトの名無しさん
19/07/31 14:47:50.63 619hUwfJ.net
単純にライブラリ参照できてないだけだと思うけどなぜ作者に聞かないのか

131:デフォルトの名無しさん
19/07/31 15:36:14.85 GSIi4G30.net
stdをusingする子は嫌いだよ

132:デフォルトの名無しさん
19/07/31 16:18:44.92 /qk9IG8W.net
ググりましたが難しかったです。
make install時に*.aなどのlibパスを入れるとか、コンパイル時にlibパスを入れるとかありましたがうまくいかず。。
作者がいるので問い合わせればよいですね。
まずは問い合わせてみます。
ありがとうございました。

133:デフォルトの名無しさん
19/07/31 17:43:06.37 5OHVc1Pr.net
ライブラリの中身関係ない質問されるとか作者かわいそう

134:デフォルトの名無しさん
19/07/31 18:10:51.91 qr1YW5nx.net
ggrksファッキューって言われたら戻って来てね
優しいお兄ちゃん達が解決してくれるよ

135:デフォルトの名無しさん
19/07/31 18:38:26.40 3lzQcoQt.net
あれーmake installする前にmakeやるんじゃなかったっけ。ライブラリがそもそも生成されてないんじゃないの
それとライブラリのパス入れるときは-Lか-lだけどもしかして-Iでやってたりしない?

136:デフォルトの名無しさん
19/07/31 18:46:16.25 /POyZPT4.net
肝心のlibGDSIIをリンクしてるか?

137:デフォルトの名無しさん
19/07/31 20:42:21.65 P7Lm1qLK.net
>>131
理由は?

138:デフォルトの名無しさん
19/07/31 20:52:22.57 ik5GKAMP.net
理由なんてきくまでもないだろ

139:デフォルトの名無しさん
19/07/31 22:08:20.49 MO/qze1m.net
>>138
usingを使えば。std:: と打ち込む手間が減って便利になるメリットが
ある。逆にデメリットは何か聞いてみたい?

140:デフォルトの名無しさん
19/07/31 22:09:40.65 619hUwfJ.net
名前空間の汚染

141:デフォルトの名無しさん
19/07/31 22:41:36.16 IFyIPjvz.net
using namespaceのデメリットが分からないのは名前空間を理解していないのでは

142:デフォルトの名無しさん
19/07/31 22:53:59.23 P7Lm1qLK.net
実際問題、std は standard template library の 「standard(標準)」な
訳だから、using 使っても、他の何らかの(ライブラリなど)の名前と
衝突する可能性は低いですよね。汚染と言っても現実に衝突する可能性
は低い。もしstd::が必須なのであれば、Stdという接頭辞を最初から
付けていればよかったはずであって、敢えて std:: という 5文字分を
タイプする必要は無かったはず。
仮に何かと衝突するというなら設計の不味さを感じますね。

143:デフォルトの名無しさん
19/07/31 22:59:46.59 IFyIPjvz.net
ちょっと何言ってるか分からない・・・

144:デフォルトの名無しさん
19/07/31 23:05:09.42 jjf+PlTq.net
>>142
衝突する可能性は低いという前提が抑間違い。
お前さんは広範な標準ライブラリのすべてを熟知してstd名前空間で定義された名前とはぶつからない命名が常にできる自信はあるのかい?
今現在問題なかったとして、後に標準ライブラリが拡張されて、自分でつけた名前にぶつからない保証は?
そんな諸々の厄介ごとを回避するために名前空間はあるのだから、自分しか使わないソースで誰にも迷惑かけないなら好きにすればいいよ。

145:デフォルトの名無しさん
19/07/31 23:06:54.23 jjf+PlTq.net
不要な抑の字が入ったのは無視して。

146:デフォルトの名無しさん
19/07/31 23:18:20.34 pv+GZng6.net
設計の不味さを感じますね(ドヤァ

147:デフォルトの名無しさん
19/07/31 23:26:41.52 pv+GZng6.net
仮に線形代数のベクトルクラスとか作ったらいきなり衝突するんだがな
他にも衝突しそうな名前なんか腐る程ある
何のための名前空間だと思ってんのかと小一時間
どうせ標準ライブラリしか使ったことが無いようなド素人なんだろ

148:デフォルトの名無しさん
19/07/31 23:52:34.02 F67noKPW.net
まぁ必要最低限のものだけimportしましょうっていうだけ
他言語と同じだよ

149:デフォルトの名無しさん
19/08/01 00:01:43.50 x8K/VZkX.net
>>128
libzzz.a または libzzz.so とリンクするには gcc のオプションに -L 該当ファイルのパス -l zzz が必要。
て事も知らないなら入門書からやり直しが必要な初歩レベル

150:デフォルトの名無しさん
19/08/01 00:11:28.53 jAJZsaMK.net
using namespaceが悪なのはヘッダのグローバル空間でかますのが絶対悪ってだけで
それ以外では大概どうでもいい話

151:デフォルトの名無しさん
19/08/01 01:27:47.64 EAAzAfmw.net
>>142
競合するかどうかは問題の本質ではない。
using stdをつけてstd::を省略したコードは、using stdをつけていない他の環境に持っていったときに動かない。
std::をつけていれば、どんなusingが使われていようと関係なく動作する。
using stdを使うべきではない理由はこれだけで十分。
せっかく標準規格化されてどの環境でも同じように動作するライブラリのポータビリティを阻害するのは長い目で見ればデメリットしかないと思う。

152:デフォルトの名無しさん
19/08/01 02:08:20.24 YZxnvLL/.net
プロのプログラマでもないしstdやboost使う程度なんで名前空間汚染問題とか大げさにしか思えない
大したコードでもないのにstd::つけまくってるコード見るとアホらしくなる
職業や用途あるいは個々人の技量によって求められるものは違うでしょうに、十把一絡げに議論して意味あるの?

153:デフォルトの名無しさん
19/08/01 02:19:13.29 AVudDz+c.net
>>152
元の質問者が何も分かってないから突っ込まれているだけで、問題点とか自分以外の人がどう認識しているかを知った上で、使う使わないって判断は好きにすればいいだろうよ。

154:デフォルトの名無しさん
19/08/01 02:20:44.23 53RNnp/+


155:.net



156:デフォルトの名無しさん
19/08/01 02:21:00.23 EAAzAfmw.net
>>152
オレオレコードを一人で書いて満足するのが好きなら、別に止めはしない。
でもそんな主張をここでされても多分同意は得られないと思うよw
議論する気があるなら、みんなが分かるコードを書かないとだめでしょ。

157:デフォルトの名無しさん
19/08/01 02:21:21.39 xENMcR2S.net
>>152
>>142を読み直せ
言わずに我慢してたけど、
てか今まで何度も言ってきたが最近C++数年かそれ以下の初心者が偉そうにしすぎ
初心者だからと貶したいんじゃない、自分が知らないことや先人(俺のことじゃないよ、念の為)への畏怖や敬意が全く無いから
>>142の最後の行みたいな思い上がったセリフが出てくる
そういうやつが今後上達するかというと俺は首ひねるけどね

158:デフォルトの名無しさん
19/08/01 02:52:55.71 EzhbGyK1.net
stdだけusingしてライブラリはusingしなければいいだけちゃうの?

159:デフォルトの名無しさん
19/08/01 03:13:40.26 xENMcR2S.net
それが都合がいいなら好きにすればいいんだよ
誰もstd名前空間は取り込んじゃいけないとは言ってない
そんなのは個々の設計の意思決定と責任の話で、std取り込む奴がアホとか取り込まないのがアホとかいう話じゃない

160:デフォルトの名無しさん
19/08/01 05:07:42.89 z8lvaa68.net
ヘッダにusing namespace書くやつは許さんけど、実装部分では好きにさせてやれよ

161:デフォルトの名無しさん
19/08/01 07:34:07.43 RgaAx32e.net
>>151
「他の環境に持っていったときに動かない」って、どういうこと?
ソース丸ごと持っていくなら、ソースにusing namespace std;が含まれるから動くでしょ。
もしかして、ソースの一部だけコピペして持っていく場合の話?
「コピペでも動くソースにしなければならない」という主張はちょっとどうかとおもうけど。

162:デフォルトの名無しさん
19/08/01 07:36:43.17 crx0fETR.net
ソースレベルのライブラリを持ってくとか

163:デフォルトの名無しさん
19/08/01 07:59:03.96 dXXftso1.net
>>159
俺もこれに同意
>>151の主張はちょっと意味わからん

164:デフォルトの名無しさん
19/08/01 08:05:18.75 xENMcR2S.net
>>160
標準以外のライブラリの存在が全く想定できてない
自前のちょっとしたライブラリのヘッダでもusing namespace stdって書いてたら
その後or中でインクルードしたヘッダ類が全部巻き込まれて名前の衝突が起きうる
ソースでusingした後にインクルードした場合も同じ(これはあんま無いと思うけど
仮にライブラリとしてファイルが綺麗に別けられてても別のプロジェクトに移して動かない場合があるってのはこれのことでしょ

165:デフォルトの名無しさん
19/08/01 08:20:05.74 RgaAx32e.net
ヘッダの話なら最初からそう書いてほしい

166:デフォルトの名無しさん
19/08/01 08:24:27.74 OXlLEF/q.net
>>163はヘッダの話と一緒くたにしてるのか…

167:デフォルトの名無しさん
19/08/01 08:30:48.58 EAAzAfmw.net
ヘッダーにインラインで書くときはstd::つけて、ソースには個別にusingしてstd::を省略するってこと?
そんな面倒なことしてなにか良いことあるの?

168:デフォルトの名無しさん
19/08/01 08:41:54.03 xENMcR2S.net
あーすまん、ヘッダには一切書かないのならわかる
ただ、標準と別のライブラリで衝突する名前があるならどちらかはusingしない、あるいは衝突するものはいちいち指定するかしなきゃいかんでしょ

169:デフォルトの名無しさん
19/08/01 08:48:03.19 xENMcR2S.net
>>166
衝突しないことがわかってるならいいけど、ライブラリのヘッダでusingしてたら
そのライブラリのユーザーは衝突する名前をグローバルで書けないんだよ
自分しか使わないのなら好きにすれ

170:デフォルトの名無しさん
19/08/01 09:12:15.95 +lGsNRBr.net
させたくないならそれが出来ないようにルールそのものが無いはずだ
でもルールがあるなら使っていいでしょう
それが出来るようにそのルールがあるんだから
それともルールはあるが使ってはいけないという宗教なの?

171:デフォルトの名無しさん
19/08/01 09:20:25.62 z8lvaa68.net
そういうのはもういいから

172:デフォルトの名無しさん
19/08/01 09:21:49.


173:05 ID:53RNnp/+.net



174:デフォルトの名無しさん
19/08/01 09:44:39.86 lFlDu5J/.net
>>169
どうして0か1でしか考えられないんだ?
使うことでメリットがあり問題ないなら使えばいい。
問題あるなら使うな。
メリットデメリットがあるならトレードオフで判断しろ。

175:デフォルトの名無しさん
19/08/01 09:53:26.68 cScMcWqS.net
おれの職場ではコード規約でusing stdはもちろんその他の名前空間も省略禁止
ファイルローカルでaliasは可能というか推奨
基本的にコードは後で誰でもすぐ読めるように書く方針だからね
仕事で使うときはこんなもんだよ
似たようなの話でauto多用が読みやすいか読みにくいかは結構議論になる
こっちはまだ規約化されてないな

176:デフォルトの名無しさん
19/08/01 10:40:45.28 X8QVfxL8.net
関数の返り型にauto使いまくりなんですけどまずいですかね?

177:デフォルトの名無しさん
19/08/01 12:15:50.33 RwOvmdDx.net
auto & shared_data = *this->m_data;
とか多用してる

178:デフォルトの名無しさん
19/08/01 17:35:55.46 H6AbKfkF.net
構造体メンバ間のパディングをコンパイル時に知る方法

179:蟻人間
19/08/01 17:48:47.61 xdkWuzft.net
>>175
#include <cstddef>
offsetof

180:デフォルトの名無しさん
19/08/01 18:18:03.26 tmRbumxZ.net
auto導入によってハンガリアン記法が再評価の機運

181:デフォルトの名無しさん
19/08/01 19:18:28.91 Ag3GiCEL.net
>>156
流れ読んでないし本題には触れずにレスするけど同意
「ニワカなやつほど語りたがる」のは世の常だけど
C++ちょっと触っただけくらいの駆け出しのカスが
「C++は~」なんて知った風に語ってるのたまにあるよなw
それも、スレに参加してるなかでお前一番素人やろってやつが
平然と調子こいてきたりするから驚く

182:デフォルトの名無しさん
19/08/01 22:39:23.89 re8BbLkf.net
すまないC++20の新機能諳じて言えない奴は例外なく初心者なので出ていってくれないか

183:デフォルトの名無しさん
19/08/01 22:41:32.13 IjUNQuw2.net
>>176
めっちゃ構造体ネストしてsizeofで差分取るとか?
わからん

184:デフォルトの名無しさん
19/08/01 22:51:01.89 i4bRK0c3.net
alignofとsizeof使えばわかるんじゃね

185:デフォルトの名無しさん
19/08/01 22:56:22.56 8zpMvWHA.net
パディングの有無ならstd::has_unique_object_representationsでわかると思う
どこにいくつあるかは難しい・・・

186:デフォルトの名無しさん
19/08/01 23:14:16.19 Phw6FYmd.net
>>177
うわああああああ!!!これだ!これだやりたかったの!サンクス!
そうか0を対象の構造体へcastした後メンバアクセスしてそのアドレス値を取るのか!全然思い付かんかった!
俺に向けたレスかは分からんけど助かった!サンクス!
>>181
それ思い付いたんだけど苦行過ぎてやめてもうた…
>>182
あーalignofで上手く取るってのも有ったのか!使う機会があまり無いポンコツなもので気付かんかった!
>>183
うむむ?初耳機能だ
後で調べてみまする
皆さんありがとうございました!

187:デフォルトの名無しさん
19/08/02 01:30:02.97 Baufd8HM.net
メンバポインタの差取る方法もありそう
規格の保証はなさそうだけど

188:デフォルトの名無しさん
19/08/02 02:03:55.33 zOtmkI/7.net
>>151
using を絶対に全く使わないのであれば、そもそも namespace の概念自体が
意味が無いと思いますよ。タイプ量を減らすことはとても大切だからこそ、
衝突しない場合には、using を使えるように設計してされているわけですから。
もし絶対に std:: を付けるのであれば、例えば、std::vector と書かずに
最初から StdVector などと固定の名前でも良かったわけです。しかし
それだと長くなってコーディング効率が下がるので、可能ならば
std:: を省略して vector と書けるように設計されているわけです。
それこそが namespace の思想なのでしょう。

189:デフォルトの名無しさん
19/08/02 02:09:48.23 zOtmkI/7.net
>>173
usingを使わない方針は気持ちは分かります。しかし、usingを使い辛くなって
しまうのは想像力を働かせればSTLやC++の言語使用設計の段階から
最初から分かっていたはずで、そもそもSTLが最初からstd という
namespace に入れて有ること自体が余りセンスが無かった可能性があると
自分は思ってます。

190:デフォルトの名無しさん
19/08/02 02:16:04.07 zOtmkI/7.net
1. std::string
2. StdString
3. CString
最も効率がいいのは、3 の CString でその意味では CString の設計者は
センスが良かったと私は思っています。using を使って std:: を書かないように
した場合、確かに何かのライブラリと衝突の危険性が出てきます。
ならば、標準のライブラリ(STL)は、デフォルトでは namespace の中に入れる
べきではなかったのではないかとも思います。
namespaceは、たまたま衝突が起きた場合には、その時点で使うと助かる場合が
あると思いますが、最初から入れてしまった事で新たな問題が入ってしまった
可能性があります。

191:デフォルトの名無しさん
19/08/02 02:35:42.08 TGlmBsBg.net
>>186
namespaceってその名の通り名前空間を分割することで識別子名の競合を避けて、命名の自由度を上げる(楽をする)ための機能でしょ。
ある程度大きな規模のプロジェクトでは大変重宝するものだと思うんだけど、なんかものすごく偏った理解のしかたしてない?

192:デフォルトの名無しさん
19/08/02 02:46:27.31 TGlmBsBg.net
>>188
CStringとタイプするには、shiftを押したり離したりしないといけないし、手間としてはstd::とそれほどかわらないと思うんだけどw

193:デフォルトの名無しさん
19/08/02 02:49:52.24 zOtmkI/7.net
>>190
Shiftキーは同時押し可能なので速度が全然違う。
CStringの場合、実質Cの1文字が増える程度で済むが、
std::stringは確実に5文字分増える。

194:デフォルトの名無しさん
19/08/02 02:51:05.19 zOtmkI/7.net
>>189
環境の変化での不安定さを避けるためにstd::を付けざるを得ないなら
命名の自由度は全く上がってません。

195:デフォルトの名無しさん
19/08/02 02:54:02.02 TGlmBsBg.net
>>191
いやいや、実際はshiftを若干早くおしとかないと、cStringになっちゃったりするだろw
離す時も気をつけないとCSTringになっちゃったりするし。
それに最近のエディタ(統合開発環境)には補完機能が付いてるから、std::で候補が絞られる分、選択に有利に働く。

196:デフォルトの名無しさん
19/08/02 02:54:16.42 1bW2v8eW.net
>>186
外から使うことだけしか考えてないみたいだけど、名前空間内の実装を読み書きしやすくする効果もあるでしょ。

197:デフォルトの名無しさん
19/08/02 02:55:50.33 TGlmBsBg.net
>>192
命名の自由度があがるのはnamespaceの中での話だよ。
namespaceで囲っておけば、変数にhogeとか適当な名前をつけても競合する心配がなくなる。

198:デフォルトの名無しさん
19/08/02 03:01:42.94 zOtmkI/7.net
>>195
namespace std で囲まれている事で気が緩んで hoge みたいな短い名前付けて
しまうことで、std:: を外すことが不可能になってしまう恐れが有る。
結局なんのための名前空間なのか分からなくなってしまうという。
外せない名前空間なら、std_ でも Std でも Stl を付けた方がタイプ量が
少なく済んだのに。

199:デフォルトの名無しさん
19/08/02 03:04:55.47 TGlmBsBg.net
>>196
あくまで外すことが前提なのかw

200:デフォルトの名無しさん
19/08/02 03:07:18.69 zOtmkI/7.net
>>195
大丈夫だと思って i という一文字のグローバル変数を定義したとしよう。
すると、std::i としている場合には問題ないが、using namespace std;
とした場合、大変な現象が起きる。伝統的な for のループ変数と衝突
するから。

201:デフォルトの名無しさん
19/08/02 03:07:57.71 zOtmkI/7.net
>>197
絶対に外さないなら namespace に何のメリットが有るの。

202:デフォルトの名無しさん
19/08/02 03:08:43.92 zOtmkI/7.net
>>197
外さないなら、StdVector, StdList で良かったはず。

203:デフォルトの名無しさん
19/08/02 03:10:27.53 tRQdKQsJ.net
別に外さなくとも、その名前空間内で書くときは省略できるんで楽なんだけどな
(ライブラリ書いてるときとか

204:デフォルトの名無しさん
19/08/02 03:10:40.06 zOtmkI/7.net
>>193
それに、コロン(:)はキーが打ちにくい場所にある上に、同じキーを
二回連打しなくてはならない。これが時間がかかる。

205:デフォルトの名無しさん
19/08/02 03:11:25.60 zOtmkI/7.net
>>201
作る側の意見???
普通、ライブラリは使い勝手が良いことの方が重要ですよね。

206:デフォルトの名無しさん
19/08/02 03:14:20.48 Baufd8HM.net
この世の名前空間はstdしかないと思ってるのかな?
mylib::vectorとかyourlib::vectorとかを安心して作れるようにするための機能が名前空間だぞ

207:デフォルトの名無しさん
19/08/02 03:15:42.09 zOtmkI/7.net
>>201
もしかしてアプリなどでは使わないのにライブラリを作ることだけで
満足している人たちが多いのでしょうか。
なるほど、それで stl や boost が究極にセンスの悪い代物になっているのかも
知れない。コンテナ類は、C/C++のリストの概念が全く理解できて無い人
が作ったとしか思えない。リストは構造がリストであればリスト足りえると
思っているのが頭が悪い。ポインタでアクセスできないリストはリストじゃない。
O(1)で済むところがO(N)になってしまっていて、stlは全くセンスの
悪い欠陥ライブラリ。

208:デフォルトの名無しさん
19/08/02 03:17:07.37 zOtmkI/7.net
>>204
だったら MylibVector で十分。そのほうが短い。
接頭辞を変えたければ、grep置換すればいいだけ。wz grepで一発。
それともstlの設計者はgrep置換使ったことが無いんだろうか。
とても頭が悪い感じがする。

209:デフォルトの名無しさん
19/08/02 03:37:49.81 Baufd8HM.net
最初にusing mylib::vector;って書いとけば以後は単にvectorと書いたらmylib::vectorの意味になるんだよ
vectorを100回使うならその方が短いだろ?
後でyourlibやmylib_ver2のvectorを使いたくなればgrep(笑)なんかしなくても最初のusing宣言を一箇所書き換えるだけでいい
名前空間ってのはそういう機能で、ただの接頭辞じゃねえんだよわかったか知恵遅れ

210:デフォルトの名無しさん
19/08/02 03:53:52.52 tRQdKQsJ.net
>>205
使うから書いてる、というか今後何度もソフト作るのに必要だから書いてるんだが
まぁあんたの言うような変な奴も居るだろうけどな
なんか大事な基本すっとばし過ぎで相手する気力も失せた

211:デフォルトの名無しさん
19/08/02 04:05:35.16 HNnVO++M.net
>>186
タイプ量を減らすなんてのは開発において些末なことだろ。通常は開発時間の多くは設計、思考に費やして、コードをタイプする時間の比率なんて誤差程度のものだよ。
お前さんのプログラミングではほんの数文字のタイプがそれほど重みがあるのか?もしかして頭使わずに写経だけしてるのか?

212:デフォルトの名無しさん
19/08/02 04:13:12.69 HNnVO++M.net
>>200
どうして外すか外さないかの二択しかないのか?
外すことでメリットがある使い方をするときは外せばいいよ。
外すための方法がいくつかあるのは分かるか?その書き方の違いや、それを使う場面や文脈で良し悪しが変わるというのは理解できるか?
お前さんは名前空間に関する仕様の理解と現実の開発作業の経験が少ないのにその自覚がなく、自分の考えに凝り固まってるから議論が進まない。

213:デフォルトの名無しさん
19/08/02 04:26:28.62 HNnVO++M.net
>>206
自分のコードを再利用しやすくするためにライブラリ化する。その歳に名前の衝突を容易に回避できるよう名前空間を使用する。
名前がぶつかるからって安易にコピペして置換するなんて愚の骨頂だろう。
そんなやり方を良しとするというのは、規模が小さく保守の必要もない使い捨てのような小さなプログラムしか作ったことがないのだろうか。

214:デフォルトの名無しさん
19/08/02 05:07:02.54 qy++cDJt.net
なんかやべーやついる

215:デフォルトの名無しさん
19/08/02 06:16:59.13 DB/RmtTt.net
長文なのに書いてある事はスカスカだな
腐ってもプログラマーの端くれなら言いたい事は短く簡潔に書いてくれ

216:デフォルトの名無しさん
19/08/02 06:29:04.32 QcV1urKo.net
夏休み恒例爆釣り天国(゚∀゚)

217:デフォルトの名無しさん
19/08/02 06:49:45.16 CuK6m4Hq.net
どこのスレも荒れてると思ったら夏休みだった

218:デフォルトの名無しさん
19/08/02 07:04:11.63 OZv2fXQJ.net
名前空間やクラスに別名付けれるの忘れてね?

219:デフォルトの名無しさん
19/08/02 07:27:30.51 uj4cDNt2.net
だいたい標準ライブラリがvectorとあstringみたいなきわめて衝突しやすい名前を使っているのが悪い
諸悪の根源すぎて死ぬ
std_vectorとかstd_stringとか衝突しにくい名前にすれば済んだ話
しかしそれだと標準ライブラリ内部のコードがダサくなって逝けてないから、という理由で導入されたのがstd名前空間。
所詮センスの問題なためにいつまでたっても議論が収束しない
ここはRustのパッケージのようにパッケージが公開/非公開の唯一の境界、みたいに割り切って
名前空間の設定に論理的必然を持たせたらよかったんじゃ…

220:デフォルトの名無しさん
19/08/02 07:35:54.09 uj4cDNt2.net
だいたいfoo::some_symbolと書いたときfooがクラスのときご名前空間のときがあって、
それぞれやれることが微妙に違いもあるがだいたいオーバーラップしているとか嫌すぐる…
疑問に思わないのはC++に脳が汚染されている証拠
後方互換性命で変えるな派と後方互換性を失っても改良すべき派の合意が見られない事案については
前者が勝って後者は追加で我慢するというWIN-win決着で永遠に先送りされつつ混迷だけが深まっていくのがC++の宿命

221:デフォルトの名無しさん
19/08/02 07:38:50.92 Mf8CxiUW.net
namespaceも分からない初心者が上級者面して住み着いてるのか・・・

222:デフォルトの名無しさん
19/08/02 07:42:20.24 uj4cDNt2.net
なにおうnamespaceがイミフな言語機能であることぐらいはよくわかっとるわ!
標準ライブラリ内部のコードにおいてもほとんどがテンプレートであるために、
using std;することが許されない
つまり、std_vectorやstd_stringという風に名前を長くするのに対してなんのメリットも提供されていない

223:デフォルトの名無しさん
19/08/02 07:43:02.09 uj4cDNt2.net
訂正orz;
誤: using std;
正: using namespace std;

224:デフォルトの名無しさん
19/08/02 08:15:18.88 WBAmTSV/.net
関数名_ローカル名 ってすれば全部グローバル変数でいいだろっていう主張?

225:デフォルトの名無しさん
19/08/02 09:01:08.99 r+xcYYgK.net
数多くの言語で採用されているnamespaceが意味不明って・・・

226:デフォルトの名無しさん
19/08/02 09:13:54.00 9zV6XrP/.net
なんでこういう馬鹿が定期的に沸くんだ
ちょっと調べればなぜこんな機能が必要とされたか位わかるだろ
名前空間の問題なんてC++固有の問題じゃないのに

227:デフォルトの名無しさん
19/08/02 11:01:28.88 OZv2fXQJ.net
>>220
邪悪なADLが利点だよ

228:デフォルトの名無しさん
19/08/02 14:45:11.22 Tt8ZbjXp.net
complex<__float128>ってできないの?

229:デフォルトの名無しさん
19/08/02 16:35:01.23 aGnTdw


230:VX.net



231:デフォルトの名無しさん
19/08/02 16:54:49.60 Bzyz7IRB.net
なんかLinus TorvaldsがC++ディスってる記事でnamespace絡みで
「Cならmy_foo()って名前にするね、やっほー、grep my_fooが機能するぜ!」
みたいな話があったような気がするんだけど検索しても見つからない(´・ω・`)

232:デフォルトの名無しさん
19/08/02 16:56:52.52 T+FnjWGP.net
テンプレートはコンパイル時に決まる値しか渡せない

233:デフォルトの名無しさん
19/08/02 17:08:25.07 aGnTdwVX.net
>>229
なるほど

234:デフォルトの名無しさん
19/08/02 18:19:12.53 zOtmkI/7.net
>>218
aaa::bbb::ccc::ddd みたいな名前が大量に必要になったりして、
STLの設計者は設計が下手だと思う。

235:デフォルトの名無しさん
19/08/02 18:33:35.61 6Fm4tKt9.net
>>231
あーなるほどusingも知らない初心者ですか。
ここはまだ早いの初心者スレへどうぞ

236:デフォルトの名無しさん
19/08/02 18:46:25.31 v+e6jaBZ.net
おい!
4倍精度複素数は!?
ないの!!???

237:デフォルトの名無しさん
19/08/02 18:49:34.26 qy++cDJt.net
boost::multiprecision 使え

238:デフォルトの名無しさん
19/08/02 18:51:13.74 OZv2fXQJ.net
今std::chronoとかstd::filesystemとか標準の名前空間も細分化するようにしてきてるからusing namespace std;の影響もそこまで酷くならないかもしれない

239:デフォルトの名無しさん
19/08/02 18:52:43.15 4a7qvAUu.net
stdの中に全部ぶちこんであるのが問題
std::header名の名前空間に入れて、std内でusing namespace header名していればいいのに
std::xxxでも使えるし、using namespace std::header名すればそのheaderの中身だけが省略して使える

240:デフォルトの名無しさん
19/08/02 18:56:02.63 zOtmkI/7.net
>>232
なんでも初期状態で使いやすいことが重要。
使いやすくするには各自でやれというのは設計が下手な証拠。

241:デフォルトの名無しさん
19/08/02 18:59:20.11 zOtmkI/7.net
匿名性掲示板が困るのは、何かの欠点を指摘するとそれを作った当事者らしき人が
全否定をしてしまうことで話が深まらないこと。
同意する人がいればもっと良いライブラリを探す話とかに発展できる
かも知れないのに。

242:デフォルトの名無しさん
19/08/02 19:00:52.12 4a7qvAUu.net
ABI互換が問題ならextern "C"みたいに
extern ::std
みたいなので、マングリング時の名前空間を強制できる機能つければなんとかならんかね

243:デフォルトの名無しさん
19/08/02 19:05:43.92 TY1gde0p.net
>>237
お前の「使いやすい」と世間一般の「使いやすい」が一致してないというだけだろう。
お前の「こうあるべき」と世間一般の「こうあるべき」のズレが大きいから、今のC++はお前にとって不満の大きいものになっているんだろう。もしかすると家庭や学校、社会全体も。

244:デフォルトの名無しさん
19/08/02 19:09:51.86 zOtmkI/7.net
>>240
そういう話がやっぱり、「ポジショントーク」だと思うんだよ。
そこまでして人の意見を全否定するには何らかの背景事情があると
しか思えない。

245:デフォルトの名無しさん
19/08/02 19:10:14.38 TY1gde0p.net
>>238
C++の仕様策定に関与したような人がこんなスレを覗いて低レベルな指摘にわざわざ反応するわけないだろう。想像力が豊かだな。

246:デフォルトの名無しさん
19/08/02 19:12:46.85 yAHSp118.net
否定的意見はマウンティングとか強すぎるな

247:デフォルトの名無しさん
19/08/02 19:12:52.67 zOtmkI/7.net
>>242
でも、オイラはそのくらいできるくらい優秀だよ。

248:デフォルトの名無しさん
19/08/02 19:15:19.48 zOtmkI/7.net
暗に陽にアメリカを褒めちぎって日本をけなすような人が5chには多い。
それで日本はめちゃくちゃに成ったんじゃなかろうか。
例えば「日本製スマホが全然駄目」などという説が5chでは大量に流布
されている。実際、そういう情報を信じて損する人は多かろう。
大問題だ。

249:デフォルトの名無しさん
19/08/02 19:49:20.44 azkiHyJD.net
>>237
だからお前みたいなやつのために
名前空間省略する仕組みあるでしょ?
何が不満なのさ

250:デフォルトの名無しさん
19/08/02 21:08:13.86 9zV6XrP/.net
VSスレで暴れてたジジイと芸風が同じだな

251:デフォルトの名無しさん
19/08/02 23:12:48.91 zqhkSChf.net
誰も書かなかったので仕方無いので漏れが書くが、namespaceの唯一の便利な使い方は(「唯一の」だ
、すでに衝突したあるいは衝突不可避なソースコードAとソースコードAを
namespace a { A }
namespace b { B }
と囲う等して分離できる ( こともある ) というだけやんけ
それとて完全には果たせないというあたりがいかにも行き当たりばったりで中途半端な言語要素感を醸し出してゐる
(中で::fooで呼んでたり入れ子のnamespaceを外から呼んでたりのケースは救われない

252:デフォルトの名無しさん
19/08/02 23:17:29.32 4a7qvAUu.net
てかnamespaceは色々中途半端な点はあるが、便利に使える機能だろ
無いと物凄く不便
using namespace stdは使わんな

253:デフォルトの名無しさん
19/08/02 23:19:05.25 jyJeqz7W.net
名前空間ネストして書くのが超めんどくさかったがようやく改善するとか

254:デフォルトの名無しさん
19/08/02 23:37:02.96 DB/RmtTt.net
関数呼び出し時に宣言が必要か否かってCとC++では異なってたりしますか?
規格書読めないマンで申し訳ないのですがgccだとC/C++でそれぞれOK/NGと結果が異なります

255:デフォルトの名無しさん
19/08/03 00:35:18.25 T50aUZPM.net
翻訳単位超えるお話?

256:デフォルトの名無しさん
19/08/03 02:27:32.85 m/VIbHu2.net
>>222は、FSMとPDAの区別もつかない
くるくる
((ヽ三/)   (ヽ三/))
  (((」) ___ (L)))
 / // ノヽ\\ \
( </ (● ●)\> )
 \| ⌒(_人_)⌒|/
   \   ̄  /
パーだおwwwwww
  n「「「|   「「「h
  |ー ⊃  ⊂ ー|
  >ーノ___ヽー<
 / // ノヽ\\ \
( < o゚(● ●)゚o> )
 \| ⌒(_人_)⌒|/
   \  |┬| /
     ヽノ

257:デフォルトの名無しさん
19/08/03 07:47:52.71 NzOgSHrF.net
お前らが名前空間で議論したところで何のメリットもデメリットもない事に気づけ、そしてRustを使え
ゴミ言語

258:デフォルトの名無しさん
19/08/03 08:16:58.65 ulHqgYUF.net
C++じゃないと出来ない事があるのでRustは使えん。

259:デフォルトの名無しさん
19/08/03 08:30:10.28 NzOgSHrF.net
>>255
(そのロジックを)Rustで書くことが出来ないと表現した方が正しそう

260:デフォルトの名無しさん
19/08/03 10:47:51.13 m/VIbHu2.net
Ristがチューリング完全かどうかについては誰もが口を濁すが
それはそうとして、これからはRustでプロトタイピングしてC++のコードを上司には提出するという
スタイルに移行するのではないかと思う

261:デフォルトの名無しさん
19/08/03 11:01:51.61 L8lVlVkx.net
Ristは流したけど上司に提出でふいた

262:デフォルトの名無しさん
19/08/03 12:46:23.14 nO8f/Gbv.net
>>234
2成分の vector<__float128> を使うことにしました

263:デフォルトの名無しさん
19/08/03 12:51:32.63 oHrDPFKS.net
名前空間つかうようりは、意味変数を使った方がよい

264:デフォルトの名無しさん
19/08/03 13:07:00.48 eeu00PkY.net
>>257
それはない。

265:デフォルトの名無しさん
19/08/03 13:47:24.37 ulHqgYUF.net
>>260
意味変数って何?造語?

266:sage
19/08/03 15:26:08.69 dTS2sKLx.net
>>261
unsafeを使わない場合の話

267:デフォルトの名無しさん
19/08/03 15:39:33.35 bjverAuH.net
>>166
名前のバッティングが防げてコーディングの手間が減る
いいことばかりじゃん

268:デフォルトの名無しさん
19/08/03 15:51:00.92 bjverAuH.net
namespaceそんなに不便かのう。
他の言語もやたらとパス掘って面倒なことになってるが。
pythonでも
import matplotlib.pyplot as plt
みたなのあるしな。
C++でやるなら
namespace plt = matplotlib::pyplot
とできるわけで、他の言語とにたりよったり

269:デフォルトの名無しさん
19/08/03 16:06:05.71 dTS2sKLx.net
>>264
using namespaceによって名前のバッティングのリスクはむしろ増す
なぜなら、namespaceの中身を記述する中の人がnamespaceで守られているつもりで短い名前を使いまくることがあるからじゃ
つまりnamespaceの中の人の思惑に反してusing namespaceしたとき、
namespaceは本来の言語要素としての目的とは真逆の危険なブツ(衝突の加速器)に早変わりする。
ファイルスコープでusing namespaceして書いたコードは他にもっていったとき地獄が始まる
ていうか同じものに複数の表記を許すのはそもそも美しくない
以上の理由によりusing namespaceは(特にファイルスコープでは)使ってはならない
C++から削除したほうが良い

270:デフォルトの名無しさん
19/08/03 16:11:48.01 ve9YLJaL.net
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;
みたいな事を使う名前の文だけやらなくちゃいけないのはかなり非効率だと思う。

271:デフォルトの名無しさん
19/08/03 16:15:24.12 eeu00PkY.net
>>267
誤:みたいな事を使う名前の文だけやらなくちゃいけないのはかなり非効率だと思う。
正:みたいな事を使う名前の分だけやらなくちゃいけないのはかなり非効率だと思う。

272:デフォルトの名無しさん
19/08/03 16:21:38.24 dTS2sKLx.net
>>265
namespace(やパッケージ名やモジュール名)のエイリアスえは安全性とタイピング量の効率の良い妥協点だとは思う
ただし、ファイルスコープでエイリアスしたコードを他に持っていったとき(ry
ちなRustではモジュール名の別名の付け替えはできないが、using namespaceみたいなことを
してほしいのかしてほしくないのかを中の人がモジュール名の末尾の階層を「prelude」にするという慣例で凌いでゐる

273:デフォルトの名無しさん
19/08/03 16:23:34.90 bjverAuH.net
>>266
あの、.hでは使わず.cppで使う話についてなんだが

274:デフォルトの名無しさん
19/08/03 16:24:37.04 bjverAuH.net
>>269
だからなんでヘッダでそういうエイリアスやらを使う前提で話してんだ、おまえはバカか

275:デフォルトの名無しさん
19/08/03 16:26:49.27 bjverAuH.net
.cppの方は読み込むヘッダがそこに書き込まれてるんだからusingしようがaliasしようが問題ないだろと。
どこで読み込まれるかわからないヘッダに使うことと分けて考えられへんのかね、このバカは

276:デフォルトの名無しさん
19/08/03 16:26:57.92 dTS2sKLx.net
>>270>>271
.hでは使わず.cppで使う話してるんだけど…
ひょっとしてファイルスコープでusing namespaceするというのを.hで使う意味だと
この暑さで短絡しているのでは…

277:デフォルトの名無しさん
19/08/03 16:27:31.31 ve9YLJaL.net
大部分のここの人達の主張は、直接
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++ は取り入れてしまった。

278:デフォルトの名無しさん
19/08/03 16:32:21.74 dTS2sKLx.net
>>274
Javaのimport文も一応「*」でusing namespaceと同じようなことができるはず…
問題なのは、中の人の意図がusing namespaceしてほしくないケース(namespace内で短い名前を使いまくっている(>>266))
においてもusing namespaceできてしまうことにある

279:デフォルトの名無しさん
19/08/03 16:35:39.76 s7JzQoXH.net
stdつけるのそんなに嫌かね?
1つなら良いじゃないかと思う
長い奴は別名つけりゃいいし
IDE使っているとnamespace付きの方が候補が絞れてむしろ便利じゃね
ADLでつけなくても呼べる場面であったとしても

280:デフォルトの名無しさん
19/08/03 16:46:08.58 eeu00PkY.net
>>276
IDEのエディタは使ってないので補完機能は使わない。

281:デフォルトの名無しさん
19/08/03 16:52:55.00 M1zmWsZu.net
IDE使え

282:デフォルトの名無しさん
19/08/03 16:58:03.17 bjverAuH.net
>>276
なんでstdに限定するのかな

283:デフォルトの名無しさん
19/08/03 16:59:59.07 bjverAuH.net
>>275
なにが困るんだっての。
名前が被ったらスコープ内での命名が優先されるが、読み込んだヘッダの中の名前に影響は及ぼさないだろ
そして、隠蔽された名前にはnamespace名を使えばアクセスできるんだから何ら問題はない

284:デフォルトの名無しさん
19/08/03 17:00:41.48 s7JzQoXH.net
>>279
stdじゃなくてもalias作れば良いだろ
class scopeでnamespace alias作れないのは結構面倒だが

285:デフォルトの名無しさん
19/08/03 17:08:23.80 dTS2sKLx.net
>>280の言っている「問題にならないケース」はusing namespaceしなければ
そもそも名前が被ったりしないことから尻拭いの手間が生じないケースなので
using namespace擁護としては意味がない
既存の型と短い名前の組み合わせでも名前が衝突しないようにnamespaceという仕組みを設けたというのに
その崇高な理念を忘却しし、衝突させておいてから尻拭い可能だからおk、というおよそ合理精神0のが>>280の主張

286:デフォルトの名無しさん
19/08/03 17:14:33.69 eeu00PkY.net
>>280
その話とは関係ないかもしれないけど、以下のようなことがあった。
その時には、理由は追求しなかったんだけど、昔、Javaで
impot com.sun.xxx.xxx.*;
impot com.sun.yyy.yyy;
・・・
みたいなことをやった時、* を付けたことによって javacでコンパイル時に名前衝突が起きた
ことがあった。それで * を使うのをやめて個別に直したら衝突しなくなった。
最後の方の名前は同じで、それを限定している名前、例えば、
zzz.aaa.ccc;
zzz.bbb.ccc;
みたいなのがあって、ccc の部分が同じだから ccc だけでアクセスできるようにした場合に
衝突が起きたのかもしれない。

287:デフォルトの名無しさん
19/08/03 17:18:00.03 eeu00PkY.net
>>283
Javaの仕様も忘れてしまったけど、
import zzz.aaa.*; // たまたま zzz.aaa.ccc というのが有ったとする。
import zzz.bbb.ccc;
↑のような場合に、ccc という名前が衝突するのかも。

288:デフォルトの名無しさん
19/08/03 17:23:56.42 L8lVlVkx.net
>>274
> 大部分のここの人達の主張は、直接
>
> std::vector, std::list, ・・・ を書くか、それが嫌なら、
これはよい
でも
> using std::vector;
> using std::list;
> ・・・
>
> を延々と書けというんですよね。
これを言ってる人いたっけ?
名前空間を明示するというポリシーに反してるからおれは使わないな

289:デフォルトの名無しさん
19/08/03 17:28:41.36 bjverAuH.net
自分のコントロール下にあるところで機能を使うなってのは自分が上手くつかえないだけの話だわな。
ブロック作ってブロック外と同じ名前の変数作ることすら禁止しそうな勢いだな。
ヘッダで使うなってのは自分のコントロール範囲外でバッティングが生じるからだ。

290:デフォルトの名無しさん
19/08/03 17:29:59.98 rAotfWJY.net
そもそも名前空間の柔軟性は、C++が最強だから。
文句言うのは筋違い。

291:デフォルトの名無しさん
19/08/03 17:34:07.35 eeu00PkY.net
そもそも標準のライブラリなので、namespace std の中に入れる必要なかった。
下手に入れてしまったからむしろ std:: を外したときに衝突する問題が
起きる可能性が出てきてしまった。

292:デフォルトの名無しさん
19/08/03 17:37:28.85 rAotfWJY.net
>>288
標準ライブラリとバッティングさせるようなバカはその場で処刑したほうが良いのでは。
標準ライブラリくらい暗記しとけよ。

293:デフォルトの名無しさん
19/08/03 17:42:58.60 ulHqgYUF.net
Microsoftのmin,maxマクロの事か

294:デフォルトの名無しさん
19/08/03 17:46:28.08 eeu00PkY.net
>>289
using namespace std; としたときに衝突するライブラリが
あるそうですが。

295:デフォルトの名無しさん
19/08/03 17:47:44.86 rAotfWJY.net
>>291
殺せ。

296:デフォルトの名無しさん
19/08/03 17:48:34.32 rAotfWJY.net
>>290
あれは許せんな。
いや、許してはならない。
いつかレッドモンドに爆撃機を送り込むべき。

297:デフォルトの名無しさん
19/08/03 17:50:54.20 eeu00PkY.net
そういえば、min(), max() は C の時代、確かマクロ実装版が基本だったり
して複雑なことになっているのかな。よく知らないけど。

298:デフォルトの名無しさん
19/08/03 17:53:29.88 3VuQ5ICx.net
そこでBOOST_PREVENT_MACRO_SUBSTITUTIONですよ
BOOST_PREVENT_MACRO_SUBSTITUTIONを崇めよ

299:デフォルトの名無しさん
19/08/03 17:55:43.43 rAotfWJY.net
マイクロソフト最大のチョンボだよな。

300:デフォルトの名無しさん
19/08/03 17:59:48.03 3VuQ5ICx.net
関数は関数呼び出しが遅いから使うなマクロにしろ
処理は全部mainに入れろ
という恐ろしい時代から引きずってるから仕方ないといえば仕方ない

301:デフォルトの名無しさん
19/08/03 18:02:18.88 eeu00PkY.net
だったら STL の方が、std::max とかじゃなくて、
std::smax とかにすべきだったような気がしますが。

302:デフォルトの名無しさん
19/08/03 18:03:42.44 ulHqgYUF.net
NOMINMAXしたらしたでgdiplusでエラーになったので、仕方なくusing std::min;using std::max;を書いてしまった。

303:デフォルトの名無しさん
19/08/03 18:03:43.41 SSA79Euw.net
>>288
どんなusingがされている箇所でもstd::をつけさえすれば確実に標準ライブラリにアクセスできるんだから、記述の一貫性を保つのに役立つよ。

304:デフォルトの名無しさん
19/08/03 18:07:41.16 eeu00PkY.net
元々 min(), max() は非常に古い C時代から #define されているマクロですよね、
std::min(), std::max() と書いても結局マクロ展開されてしまうのでは
ないでしょうか???

305:デフォルトの名無しさん
19/08/03 18:08:18.92 rAotfWJY.net
>>298
でも実際に引っかかったら、何でこういうことする!マイクロソフト死ね!!っておまえも思うはず。

306:デフォルトの名無しさん
19/08/03 18:10:37.82 eeu00PkY.net
STL の方の min(), max() を使いたい場合は、
(min)(a,b)
(max)(a,b)
でいけるようです。C/C++ の前処理層によるマクロ展開は
マクロ関数名(
という並びが有る場合にのみ展開されますので。

307:デフォルトの名無しさん
19/08/03 18:14:26.75 eeu00PkY.net
>>302
いや、むしろ逆に、std::min の設計者の方がCの常識を知らない人だな、
と思ってしまいます。
そもそも、min(), max() マクロは、1980年代のC言語の時代から有るよく
知られたものなので、後から登場した C++ 標準ライブラリは、それが
有る場合にでも当然問題なく使えるようにしなくてはならなかったが、
そうなってません。それはどちらに原因があるかは明確です。

308:デフォルトの名無しさん
19/08/03 18:19:07.11 dTS2sKLx.net
>>301
左様
.cppのヘッダファイルをインクルードし終わった以降の適当な場所でおもむろに
#undef min
#undef max
インクルードしたヘッダファイルにマクロ版のmin()、max()に依存したマクロが存在せず、
かつマクロ版のmin()、max()を使わない限りにおいてこれでおk、

309:305
19/08/03 18:26:53.75 dTS2sKLx.net
適用条件訂正orz
正: マクロ版のmin()、max()を使わない限りにおいてこれでおk、
インクルードしたヘッダファイルに含まれるマクロ版のmin()、max()に依存するマクロ経由で
間接的にマクロ版のmin()、max()を使おうとした場合はコンパイルエラーになるからワカル
そうなった場合の処置は知らんが、コンパイルが通ったら>>305の方法で安全なはず

310:デフォルトの名無しさん
19/08/03 18:29:09.20 3VuQ5ICx.net
一番安全なのはこれだってboostの長年の結論だから
max BOOST_PREVENT_MACRO_SUBSTITUTION (a,b)

311:デフォルトの名無しさん
19/08/03 18:29:45.19 eeu00PkY.net
マクロ版 min(), max() が #define されている状態でも、
#define smin (std::min)
#define smax (std::max)
としてしまえば、smin(a,b), smax(a,b) と書くだけで
それぞれ std::min(), std:max()
が使えるでしょう。

312:デフォルトの名無しさん
19/08/03 18:32:51.04 dTS2sKLx.net
>>307
正しいがIQが高すぐる答案
>>308
sminやsmaxという名前が衝突したらどうすんじゃ…

313:デフォルトの名無しさん
19/08/03 18:55:02.09 aqiFUikh.net
この手の無駄に一般化は大抵バグを引き起こす。

314:
19/08/03 19:39:31.49 NDKzILOT.net
>>267
ふつうに std::cout << "hello, world!" << std::endl;
と地の文として書いていますが、そういうのは駄目なのですか?

315:デフォルトの名無しさん
19/08/03 19:47:04.82 M1zmWsZu.net
std::を書くと死ぬ人が発狂してるだけなので、std::を普通に書ける人にはしょうもない話

316:デフォルトの名無しさん
19/08/03 19:50:41.99 XP2vdzkU.net
これは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;に変えると問題ない

317:デフォルトの名無しさん
19/08/03 19:58:09.36 M1zmWsZu.net
普通にビルドできたけどプロジェクトのC++言語基準をちゃんとC++17にしたか?

318:デフォルトの名無しさん
19/08/03 19:59:17.19 gpWi1Ho2.net
>>288-289, >>291-292
だからベクトルとかでもいきなり衝突するっつってんだろバカチンが
どんだけ経験不足なんだお前らは

319:デフォルトの名無しさん
19/08/03 21:04:27.05 3VuQ5ICx.net
using namespace はその名前空間の中の名前を私が責任持って現在の環境に導入しますという宣言だ
中身を把握してないくせにそんな事して事故った奴が全部悪いんであって、使われた側には責任はない
stdとて例外ではない

320:デフォルトの名無しさん
19/08/03 21:27:39.99 dTS2sKLx.net
>>316
使われた側の未来のふるまいまで予測してnamespaceの中身を理解などしていられない件について:
namespaceの正しい使われ方の下では、aというnamespaceに将来どんな名前が追加されようとも
bというnamespaceの名前とは衝突しないはずである
ところがaとbをusing namespaceしてしまったが最後、誰にも責任が持てないカオスが訪れる
これはnamespaceが無かったころの言語に先祖返りするだけではなく、より悪い状況を招くことに注意。
namespaceの利用によって、open、close、copy、find、vector、list、string、.....といった「自然な」名前がいっぱい使用されるからである。
namespaceは崇高だが、using namespaceはそうされることを意図されたnamespace意外には邪悪すぐる

321:313
19/08/03 21:32:17.54 xzejIjJP.net
>>314
再インストールしなおしてプロジェクトの設定をC++17なのを確認してもエラーが出た
うちの環境だけか・・・
Visual Studio 2019 Community Version 16.2.0

322:デフォルトの名無しさん
19/08/03 21:38:58.27 M1zmWsZu.net
>>318
こっちも16.2.0で、ワークロードは「C++によるデスクトップ開発」のオプションに全部チェック
他はQtツール入れただけ

323:デフォルトの名無しさん
19/08/03 21:51:26.72 3VuQ5ICx.net
>>317
完全に同意
そういう事態が起きないと確信できるほど中身を理解してるnamespaceか、起きても問題ないほど狭いスコープか
そのどちらかでしか使ってはいけないものだ
using namespaceというのはそういう乱暴な機能

324:317
19/08/03 21:51:59.64 dTS2sKLx.net
訂正;
語: namespaceは崇高だが
正: namespaceは崇高かもしれないが
>>316みたいな無根拠で実害のある精神論に後退するぐらいなら、
namespaceで修飾するかわりに接頭辞をつけた名前を使うという>>228な方策も現実の選択肢足りえる
>>228がネットをgrep my_fooして見つからなかったのは不幸な事故だが

325:デフォルトの名無しさん
19/08/03 21:54:29.31 3VuQ5ICx.net
>>321
同意した直後に正反対のこと言うのやめて?
316のどの辺が精神論で有害なのさ
C++だけの話でもなくて、pythonのimport * がカスと言われてるのと本質的に同じだろ

326:デフォルトの名無しさん
19/08/03 22:06:21.81 CM1VqrV7.net
>>316の精神論にはある意味同意するけどな
(ヘッダでの名前空間取り込みも、ある名前空間に別の名前空間を取り込む場合など、合理性があるなら設計上の選択の一つと言えるし
その辺は設計者の責任だと思う)
あと>>298, >>301はバカチンじゃなかった、すまんかった

327:デフォルトの名無しさん
19/08/03 22:09:28.81 bbhz9sWw.net
using namespaceの話はも止めたら?
使いたい人は使えばいいし
使いたくない人は使わなければいい
でいいじゃん
大した問題じゃないだろ

328:デフォルトの名無しさん
19/08/04 00:06:21.11 gKArgCAM.net
ダメに決まってるだろw
Coding Standardの話なのにw

329:デフォルトの名無しさん
19/08/04 01:17:09.87 uuq2lSJI.net
どうでもいいだろ
C++のようなアレな言語を扱う上では些細な事さ

330:デフォルトの名無しさん
19/08/04 01:20:42.30 6uyvUJES.net
そもそもプログラミングは間違ったことを信じている人がはっきり損をする世界
(ことあるごとにエラーが多発するとか作成に余分な時間がかかるとか完成品の質が悪いとかの話で)
リアルで誰かと作業するならともかく
ネットの向こうの間違ってる誰かなんて放っておいても損を勝手に積み立てて自らつぶれていくものだ

331:デフォルトの名無しさん
19/08/04 01:21:14.60 uuq2lSJI.net
おれはね
C++はね
正しく扱うのに本当にコツのいる言語だと思うんよ
そんな中using namespaceは割とどうでも良いよね
俺は使わない派だが、使いたければ使えばって感じ

332:デフォルトの名無しさん
19/08/04 01:59:42.19 xBRRtFJn.net
確かにどうでもいいな
プルリクで簡単に見つかるから
というかコンパイルや静的解析でエラーにする方法はないかな

333:デフォルトの名無しさん
19/08/04 09:37:37.80 7855nA4b.net
>>327
正確にはそれをリカバーする人だがな。
バカはリカバーされて成り立ってることすら理解せず同じことを繰り返す。

334:デフォルトの名無しさん
19/08/04 18:06:02.62 24EQJs3u.net
min(), max() マクロのような件は別として、標準的なライブラリであるところの
std::系の名前は、using namespace std; してもそんなに問題ないということは
無いんですか???
他のライブラリの名前空間 XXX も同時に using namespace XXX; した場合に
もし衝突が起きる場合は、using namespace XXX; だけはしないようにすれば、
特に問題ないような気がします。実際やってみたことが無いので経験者の意見を
聞いてみたいです。

335:デフォルトの名無しさん
19/08/04 18:48:22.76 xBRRtFJn.net
個人の趣味プログラミングならご自由に
仕事ならコーディング規約にあわせる
コーディング規約作る立場なら、チームにバカが混ざってる前提で非属人的になるようにルールを設ける
で経験を積めば積むほど自分がバカであることが身にしみてわかる
そういうことだよ

336:デフォルトの名無しさん
19/08/04 18:54:59.65 UDvg82p4.net
>>331
別に衝突しなくても問題は起こる。
using namespace stdで書いたコードをヘッダーのインライン関数に持って行く必要が出た場合とか、
using namespace std;
#inlucde "...."
となってしまっていてたまたま動いていたコードを、別の箇所でincludeしたときにエラーがでまくるとか。

337:デフォルトの名無しさん
19/08/04 19:00:40.18 Rn2rET4f.net
>>333
ほとんど言いがかりレベルw

338:デフォルトの名無しさん
19/08/04 19:02:23.99 nZL08BTE.net
std::くらい書けで終わる話をいつまで続けるつもりだ

339:デフォルトの名無しさん
19/08/04 19:04:24.66 Is6FE1ys.net
>>335
10万行とかのソースでそれをやりますか?

340:デフォルトの名無しさん
19/08/04 19:06:21.58 UDvg82p4.net
>>336
ところどころについてたり、ついてなかったりするくらいなら、最初からstd::つける方がはるかにマシ。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch