19/06/15 13:51:53.57 DKQ0QQLH0.net
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part142
スレリンク(tech板)
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
スレリンク(tech板)
■長いソースを貼るときはここへ。■
URLリンク(codepad.org)
URLリンク(ideone.com)
[C++ FAQ]
URLリンク(isocpp.org)
URLリンク(www.bohyoh.com) (日本語)
----- テンプレ ここまで -----
VIPQ2_EXTDAT: default:vvv:1000:512:----: EXT was configured
2:デフォルトの名無しさん
19/06/15 16:03:43.75 yU4M2XeV0.net
すっぱい葡萄
URLリンク(ja.wikipedia.org)
自分のものにしたくてたまらないにもかかわらず、努力しても到底かなわない対象である場合、
人はその対象を「価値の無いもの」「自分にふさわしくないもの」と見なそうとし、
それをあきらめの理由として納得し、心の平安を得ようとするものである。
フロイトの心理学では、これを防衛機制および合理化の例とする。また、社会心理学においては、認知的不協和の例とされる。
英語には、この寓話を元に生まれた熟語として "sour grapes" があるが、これは「負け惜しみ」を意味する。
3:デフォルトの名無しさん
19/06/16 12:29:06.82 yEr4r4hL0.net
URLリンク(qiita.com)
>Paul曰く:
>人は、その人のアイデンティティの一部となっている事について、実りある議論はできない。
>これすなわち、自分のホームに近い話題ほど論理よりも感情が優先されてしまうということ。
>Kathy曰く:
>他の人が夢中になるほど、そのプロダクトやブランドへの憎しみは強くなる
>これはつまり、彼らはクールエイドを飲んでしまってるということだ。
4:デフォルトの名無しさん
19/06/16 16:55:32.05 NJ2skO190.net
質問です。
URLリンク(dotup.org)
ここまで作ってデバッグしようとしたらシェアードポインタが継承扱ってくれない感じになった。
2017ではできていた気がしたけど、なぜですか?
5:デフォルトの名無しさん
19/06/16 17:32:43.45 /ZY8dphZ0.net
thinkFirst
ThinkFirst
オーバーライドするときはoverrideつけたら?
6:デフォルトの名無しさん
19/06/16 17:36:44.99 NJ2skO190.net
>>5
サンクス。こんなことか・・・。
そういえばそういう習慣持ってないなぁ。余裕があったらやってみる。
コンパイル通ったので再開。
助かりましたありがとう。
7:
19/06/16 19:27:55.97 gDHKfsB60.net
test
8:デフォルトの名無しさん
19/06/17 00:12:48.76 oaY4OAXG0.net
>>1乙
前スレ>>1000の人は関数型プログラミング的プログラミングを自らに課している人なのであろう
つまり全てのオブジェクトは属性がコンストラクタで設定され、immutable、、、
9:デフォルトの名無しさん
19/06/17 00:55:04.38 qMa7jD650.net
getterは読み取り専用のメンバを作りたいときに必要
setterはpimpl化したときに必要
10:デフォルトの名無しさん
19/06/17 01:18:11.69 a5RA1dZMa.net
const publicがあればいいのか
11:デフォルトの名無しさん
19/06/17 09:36:57.72 FBMbqlks0.net
getterならread only修飾子を導入して
コンパイル時に書きこまれないことを保証すればいい
かんたんだろ
12:デフォルトの名無しさん
19/06/17 09:43:06.17 NDzOpmZcM.net
mutable なオブジェクトだとしても、setter を付けるメンバー変数は少ないな。
3つのうち1つぐらいの感じ。
13:デフォルトの名無しさん
19/06/17 14:59:51.76 otIzoLhyd.net
セマンティクス上で重要なメンバ関数の区別は、オブジェクトの内部状態を変更するものか(非constメンバ関数)と、変更せずに内容を見るためのものか(constメンバ関数)の違いであって
その具体的な処理内容が特定のprivateデータメンバのgetterかsetterかなんて観点は大して重要じゃないし、そんなものに固執して設計を考えるのは馬鹿馬鹿しいし危険だと思う
14:デフォルトの名無しさん
19/06/17 15:13:59.52 NDzOpmZcM.net
>>13
「状態を変更」の方はまあいいけど「内容を見る」という表現は狭すぎないか。
15:デフォルトの名無しさん
19/06/17 15:20:09.82 otIzoLhyd.net
そうね引数を加工するとか他のオブジェクトへのプロキシになるとか色々あるね
getterのイメージに引きずられすぎちゃった
16:デフォルトの名無しさん
19/06/17 15:54:46.05 cgazGIue0.net
コンテナのset, map, multi_mapはconst_iteratorじゃないと正しくforループを回せないって制限あった気がする。どうだっけ?
17:デフォルトの名無しさん
19/06/17 16:13:33.58 ikLTlFyV0.net
ペアのインデックサがわを弄ったら、ソートぶっこまれて順番が狂う感じの奴かい?
18:デフォルトの名無しさん
19/06/17 17:06:03.61 xa2u5Y3Ua.net
構造体のメンバ変数をまとめて以下のように文字列でアクセスできるようにしたいのですが、
構造体のポインタを以下のpointerに一括で割り当てる方法はないでしょうか?
Params {
int param1, param2;
} params;
std::map<std::string, void*> pointer;
// 同じ操作
params.param1 = 1;
*static_cast<int*>(pointer["param1"]) = 1;
19:デフォルトの名無しさん
19/06/17 17:11:32.29 xa2u5Y3Ua.net
Paramsは複数の型のメンバ変数を持ちますがpointerにtypeidを合わせて持たせることで使用時の問題は解決できます
20:デフォルトの名無しさん
19/06/17 17:11:48.82 cgazGIue0.net
>>18
日本語でok
21:デフォルトの名無しさん
19/06/17 17:15:04.87 xa2u5Y3Ua.net
以下のように一つずつ割り当てるのではなく、構造体に含まれるメンバの名前とポインタをイテレートして割り当てたいのです
pointer["param1"] = ¶ms.param1;
pointer["param2"] = ¶ms.param2;
22:デフォルトの名無しさん
19/06/17 17:26:50.49 FBMbqlks0.net
リフレクションすれば早い
そうでしょう?
23:デフォルトの名無しさん
19/06/17 18:55:58.16 8WZxEIm50.net
そこでプロパティ型ですよ。
24:デフォルトの名無しさん
19/06/17 21:01:33.96 kTiNst+JM.net
中身が長ったらしい(と言っても200行程度)ラムダ式ってやめたほうがいいですか?
一般的には普通の関数にするんでしょうがヘッダーに書きたくないんです
25:デフォルトの名無しさん
19/06/17 21:09:43.46 Xk2fRyfla.net
その関数に名前がつけれないならいいんじゃない
26:デフォルトの名無しさん
19/06/17 21:20:42.23 qMa7jD650.net
ヘッダーに書きたくないって…、cpp内で関数を宣言/定義してもいいんだぞ
27:デフォルトの名無しさん
19/06/17 22:03:41.11 cgazGIue0.net
ラムダ式の存在意義は、コンパイラではなく人間にとっての可読性の改善にある。
どうも可読性が低いなぁと思ったら、ラムダ式をやめるべきだね。
28:デフォルトの名無しさん
19/06/17 23:09:14.61 W17QvXl10.net
>その関数に名前がつけれないならいいんじゃない
完全にダメなパターンだろ。。
29:デフォルトの名無しさん
19/06/17 23:37:37.03 ZwasbMRy0.net
カッコよくラムダで比較関数を書いたものの、あちこちで同じ比較関数が必要になって結局関数オブジェクトを作る不毛な作業
30:デフォルトの名無しさん
19/06/17 23:40:11.50 D3j4bHhT0.net
>>21
c++使わないのが正解
31:デフォルトの名無しさん
19/06/17 23:44:17.67 DTomrwq60.net
>>29
別にいいじゃない
32:デフォルトの名無しさん
19/06/17 23:44:34.66 DMQyXySba.net
>>29 わざわざ関数オブジェクト作成するくらいならラムダをauto変数にいれるのはどうですか?
33:デフォルトの名無しさん
19/06/17 23:45:22.46 W17QvXl10.net
クロージャの利点っていうのは
クラスとメソッドに比べたらアクセスするデータのスコープがわかりやすく渡せるってことだが
c++だと同時にデータが処分されるタイミングを考えなきゃならなくて逆にむずい。
34:デフォルトの名無しさん
19/06/17 23:49:52.62 x+yzwFNm0.net
大抵の言語でループ変数をキャプチャするlambdaを配列に入れるとかするとはまるよね
c++の場合コピーキャプチャ使えばすむけど、キャプチャ方式指定できない言語だと結構面倒なことになる
35:デフォルトの名無しさん
19/06/17 23:56:31.71 kTiNst+JM.net
>>26
そういえばそうでした…そうします
>>27
ですよね
初歩的な質問ですいませんでした
36:デフォルトの名無しさん
19/06/18 03:06:02.01 0f68xvDd0.net
>>22
リフレクションっていうんですね
このサイトのリフレクションの実装を超簡易的に真似してみました
結局一つずつ追加することになりますが扱いやすさは悪くないはず…
URLリンク(motchy-usk.blogspot.com)
URLリンク(ideone.com)
37:デフォルトの名無しさん
19/06/18 06:13:56.61 3nOE2mBA0.net
プログラム板にキチガイ降臨中!botに一晩も反応する異常さ
一般人(学校恩師)に殺害予告をしているのでスレ建て通報してください。
スレリンク(tech板)
142 名前:a4 ◆700L1Efzuv 投稿日:2019/06/18(火) 05:29:55 ID://qVkzO
>>141
名古屋の人な 俺ね、君の問題を大橋先生と混ぜないことにする。つまりね、
片桐孝洋のことをボコろうと思う。普通に顎の骨を折る。これくらいで警察来るか?
一般市民とかさ、普通にさ、俺らの秘密なんだけどさ、日本人なんて復活ねーから。
38:デフォルトの名無しさん
19/06/18 08:12:45.67 Y0myl0p20.net
BoostのSerializationはいつ標準ライブラリに入るの?
もしかしてあまり使われてないの?
39:デフォルトの名無しさん
19/06/18 19:32:46.11 lBFdU5Sd0.net
現場で困った早引きできるいい本ってないですかねぇ。今度の現場が初のC++でして
40:デフォルトの名無しさん
19/06/18 20:34:17.73 DSQg2zLR0.net
>>39
URLリンク(github.com)
41:デフォルトの名無しさん
19/06/19 02:12:33.91 /zwjJHhK0.net
そこでマクロですよ。
42:デフォルトの名無しさん
19/06/19 02:37:43.11 0yjsH3hg0.net
>>39
cpprefjp
43:デフォルトの名無しさん
19/06/19 02:46:18.73 8qBvJS/J0.net
URLリンク(postd.cc)
>最近のC++のアップデートにより、コンパイラ開発にかかる時間が大いに短縮されました。
これって具体的には何ですか?
44:デフォルトの名無しさん
19/06/19 02:46:53.30 G/RPQnNp0.net
言語仕様系なら「C++11/14 コア言語」??
45:デフォルトの名無しさん
19/06/19 02:49:21.59 G/RPQnNp0.net
オートとレジスタが死んだこと?
46:デフォルトの名無しさん
19/06/19 03:19:29.65 0DgdOBcz0.net
>>43
GCCのバージョンアップでカスタマイズしやすくなった、とかじゃないの?
47:デフォルトの名無しさん
19/06/19 07:16:37.76 h4x/aIUc0.net
>>43
原文は "The pace of compiler development has increased with the recent updates to C++, ..." で、
C++03時代はバグ修正や最適化の向上がメインだったコンパイラ開発が、C++11以降は
大きな機能追加も伴う規格の改定に追いつくためにペースアップした、という感じかと。
改めて訳すとしたら「最近のC++のアップデートに伴ってコンパイラ開発のペースは増しており、~」ぐらいかな。
48:デフォルトの名無しさん
19/06/19 12:07:30.39 52Ph4xCha.net
>>39
ポケットリファレンス
ただ次の現場がレガシーC++ならあまり参考にならないだろうけど
49:デフォルトの名無しさん
19/06/19 13:56:12.54 20CU6qie0.net
原文なんて読む必要あるの?
50:デフォルトの名無しさん
19/06/19 14:50:44.89 mPuTh16gM.net
実務で原文読んでたら、一生原文読むだけで終わりそう
51:デフォルトの名無しさん
19/06/19 15:09:23.72 hDOeQD4v0.net
大部分の軍人は銃や刀剣の作り方について深く知る必要はない。
52:デフォルトの名無しさん
19/06/19 16:36:38.81 yMqJGQdwM.net
バカな日本語訳や要約を読んで首ひねる暇があれば原文読んだほうが早い
53:デフォルトの名無しさん
19/06/19 17:36:22.46 0yjsH3hg0.net
日本語と同じく速度で英語を読めるようになりたい
54:デフォルトの名無しさん
19/06/19 19:14:55.87 hDOeQD4v0.net
>>53
結局のところ、たくさんの単語を覚えるしかない。数は力だよ。
55:デフォルトの名無しさん
19/06/19 20:55:08.64 DQACirUv0.net
昔に比べれば英文なんてそこら中にあるんだから読めばいい。
56:デフォルトの名無しさん
19/06/19 21:04:53.64 0Op2NPvz0.net
引き籠りが毎日ひたすら英語版のwikipediaを読んでいたらいつのまにかとんでもない英語力が
57:デフォルトの名無しさん
19/06/19 23:14:25.37 hDOeQD4v0.net
昔は民主主義はどうのこうのとか洗脳じみたreaderしかなかったよな?
58:デフォルトの名無しさん
19/06/19 23:58:30.86 pr4rVpx+0.net
C++のスレッドや並行処理でこれ読んどけっていう資料や本などありますか?
pthreadはもう使いたくない
59:デフォルトの名無しさん
19/06/20 00:00:20.59 nbok5ERN0.net
今時はstd::thread使えば済むんじゃね
60:デフォルトの名無しさん
19/06/20 00:11:04.17 lLho4HyI0.net
えーっと、終わりが明確なものは、std::asyncでスレッド投げればいいと思うよ。
61:デフォルトの名無しさん
19/06/20 00:35:57.46 984l1qct0.net
>>58
他の本はしらないが、「Effective Modern C++」には必要なことは書いてある、と思う。
62:デフォルトの名無しさん
19/06/20 04:18:30.46 fuxDfWBK0.net
std::asyncって生まれた瞬間にdeprecated送りになってなかったっけ?
63:デフォルトの名無しさん
19/06/20 11:45:49.37 M/WWMkF90.net
std::asyncはダメなの?
64:デフォルトの名無しさん
19/06/20 12:24:14.76 j9Uc7TedM.net
>>62
なんか別のものと間違えてない?
65:デフォルトの名無しさん
19/06/20 14:54:38.04 bgVEzQPq0.net
11でのasyncの自動でjoinする仕様について
『致命的な問題でありasyncは実用にならない欠陥品。
破壊的変更になっても次の規格で修正すべき』
って声が(一部で)あったんよ(※表現は誇張しております)
66:デフォルトの名無しさん
19/06/20 15:21:36.40 M/WWMkF90.net
std::async使ってみましたがstd::launch::async指定すると自動でjoinしますね
デストラクタで待ってるんですかね
std::launch::defferredを指定するとすぐ返ります
確かに微妙に使いにくいw
67:デフォルトの名無しさん
19/06/20 15:52:17.95 lDaMx0VnM.net
実装依存だから環境によってはスレッド作成すらしてないかも知れない
68:デフォルトの名無しさん
19/06/20 16:18:06.15 lLho4HyI0.net
お約束ですね。
69:デフォルトの名無しさん
19/06/20 17:57:10.96 BT0cBtynM.net
rust使ったほうが楽
70:デフォルトの名無しさん
19/06/20 18:03:13.72 lLho4HyI0.net
コンセプトですよコンセプト。来年に期待しましょう。
unifide call syntaxもその後入ることに期待です。
関数チェインしたいんです!
と、唐突に宣伝を始めるなど。
71:デフォルトの名無しさん
19/06/20 19:15:02.26 EITLfG5y0.net
>>56
不思議なことに、読めるようになると、聞き取れるようにもなるんだよね。
どうしてだろね。
不思議不思議。
72:デフォルトの名無しさん
19/06/20 23:00:29.85 H2FAKrDC0.net
読み書き話すはできるが聞き取れねーんだけど・・・
73:デフォルトの名無しさん
19/06/21 00:28:19.29 5xL7WT2l0.net
読み書きは下手くそでも時間かかってもなんとか通じるからいいけど音声はGoogle翻訳に頼れないのがつら
74:デフォルトの名無しさん
19/06/21 00:32:02.14 5mFcIDLA0.net
Youtubeに音声自動翻訳字幕機能ほしいよねw
75:デフォルトの名無しさん
19/06/21 16:04:18.10 Vcgrp8ZVp.net
再帰を用いずに、
a0=0
an=( an-1×an-1 )+1
の1~6を出せ
ってやつが全然できないので教えてください。
76:デフォルトの名無しさん
19/06/21 16:41:53.38 rC321OP20.net
意味わからん
77:デフォルトの名無しさん
19/06/21 16:49:46.98 vf8hmAK4M.net
0からループ使えばいいだけじゃないの
78:蟻人間
19/06/21 16:52:32.29 uFs7CW+50.net
>>75
#include <stdio.h>
int f(int n)
{
int i, a = 0;
for (i = 1; i <= n; ++i) a = a * a + 1;
return a;
}
int main(void)
{
int i;
for (i = 1; i <= 6; ++i) printf("a_%d: %d\n", i, f(i));
return 0;
}
79:デフォルトの名無しさん
19/06/21 20:41:29.94 9XN8XoXIM.net
>>75
> 再帰を用いずに、
その意図は?
単にスタック使いたくないだけなら最近のコンパイラにまかせりゃ末尾呼出最適化ぐらいはするから気にすんな
80:デフォルトの名無しさん
19/06/21 21:07:41.81 G412ZpUw0.net
なんかの課題だろ
81:デフォルトの名無しさん
19/06/21 21:12:24.28 o/bRPi0pa.net
平均値も出せないMath.hはクソだと思う理由
1.エクセル関数で簡単にできちゃう
2.電卓でもできることがプログラムになると煩雑になる
3.平均値を出すのにコードを書き換える手間など
82:デフォルトの名無しさん
19/06/21 21:19:00.28 dWgEej/X0.net
平均値の計算は実は簡単ではない
83:デフォルトの名無しさん
19/06/21 21:21:02.30 rC321OP20.net
そもそもmath.hはC言語のライブラリ
84:デフォルトの名無しさん
19/06/21 21:29:06.50 5xL7WT2l0.net
そのエクセルの関数の機能や電卓ツールはmath.hを使って作られている
85:デフォルトの名無しさん
19/06/21 21:48:48.65 0JVOBbqs0.net
浮動小数甘く見過ぎ
86:デフォルトの名無しさん
19/06/22 15:16:07.71 ecTKxvDL0.net
C++コードをC++コンパイラでコンパイルするのと
CにトランスパイルしてCコンパイラでコンパイルするのと
どっちが性能良いんだろう?
トランスパイラの優秀さにもよりそうだが
87:デフォルトの名無しさん
19/06/22 15:35:26.46 XJUTErWD0.net
CがC++よりハイパフォーマンスという前提がありそうだが、そんなことはない
88:デフォルトの名無しさん
19/06/22 16:04:32.30 LOXx/aGE0.net
今時c言語のみのコンパイラなんて見かけないな
89:デフォルトの名無しさん
19/06/22 16:12:52.94 9zxAgsAB0.net
>>86
いったんトランスパイルを挟むと、C++の元のコードをCで表現できる範囲内のコードに置き換えなきゃならないから、その時点で元のコードのままならなできた最適化のうちの一部はできなくなるだろうし、わざわざ効率の悪いコードに置き換えなきゃならないこともあるだろう。
トランスパイルの方が効率が上がる理由はないと思うよ。
90:
19/06/22 16:38:05.67 ICCmixle0.net
現時点で利用可能な C++→C トランスパイラは何ですか?
91:デフォルトの名無しさん
19/06/22 16:53:56.35 3PgdpjOh0.net
llvm
92:デフォルトの名無しさん
19/06/22 17:03:11.19 ecTKxvDL0.net
URLリンク(benchmarksgame-team.pages.debian.net)
C++がCに勝ってる項目があるんだけど信じがたい
93:デフォルトの名無しさん
19/06/22 17:16:00.48 ecTKxvDL0.net
URLリンク(gist.github.com)
こっちだとJavaにすら負けてる
なんなんだろうねベンチマークって
94:デフォルトの名無しさん
19/06/22 17:19:10.62 ecTKxvDL0.net
URLリンク(blog.dhananjaynene.com)
どうやらC++はメモリの確保と解放にコストがかかるから
Javaはまとめて大量にヒープをもってプールして使ってくから
そこでJavaが勝利する場合があるらしい。
C++もメモリをプールしていちいち確保しないようにすればJavaより速くなる。
しかしいちいちそんな事やってられるか?
95:デフォルトの名無しさん
19/06/22 17:20:50.35 VTgUFffK0.net
>>89
c++のままでないとできない最適化って何がある?
96:
19/06/22 17:40:41.59 ICCmixle0.net
>>91
LLVM は C++->C はできないのでは?LLVM のこと、わかってますか?
97:
19/06/22 17:41:56.82 ICCmixle0.net
>>92
C++ の template は #define の親玉のようなものですから、qsort() とかの間接ポインタ渡しでなんとかするしかない C が不利な場合はあるとおもいますよ
98:デフォルトの名無しさん
19/06/22 17:55:09.83 VTgUFffK0.net
あとconstexprで事前計算してるのもあるね
99:デフォルトの名無しさん
19/06/22 18:03:29.07 kVNYu7LP0.net
>>94
allocatorってまさにそのための仕組みなんだけど
100:デフォルトの名無しさん
19/06/22 18:48:22.39 MmmgKpwaa.net
>>95
具体的にはあげられないけど、現在の文脈においてある前提が成り立つことが分かることによりできる最適化が、
(最適化を除いて)同じ動作となる別のコードに置き換えられることにより、元の文脈での前提条件が成り立つことを断定できなくなり適用できないという状況があるのではないかと思う。
101:デフォルトの名無しさん
19/06/22 18:58:11.17 3PgdpjOh0.net
>>96
そちらこそllvmをまるで理解していないみたいですね
102:デフォルトの名無しさん
19/06/22 19:04:53.83 cW7wMvLUM.net
>>100
具体的なのが聞きたい
gccもllvmも中間言語でやる最適化が中心でしょ
そういうc++の特別なフェーズがあるなら興味ある
けど知らずに言ってるなら聞いても無駄だね
103:
19/06/22 19:27:19.94 ICCmixle0.net
>>101
llvm が変換した IR を C コードに戻すことができるのですか?
104:デフォルトの名無しさん
19/06/22 20:26:09.97 /7bwQJ5j0.net
(1) コンストラクタの呼び出し回数削減最適化
(2) クラスが絡むmemory ariasing
(1)はC++かその意味を保った中間言語上で行う必要があり、C言語に逐語訳してからでは手遅れ
(2)も同じくで、クラスの意味を失うような低レベルへの変換を一揆にかけると
クラスFooのthisポインタとかクラス固有のアドレスが他のクラスにもグローバルな関数にも渡っていないことの保証がC言語に逐語訳してからでは手遅れ
な印象
想像なので詳しくは知らん
105:デフォルトの名無しさん
19/06/23 01:02:56.59 PTFzQo+G0.net
初歩的な質問で申し訳ないんですけどcinってどういうもんなんでしょうか
cpprefjp見ると標準入力に対する入力ストリームオブジェクトなんて書いてありますけど
iostream.hで定義されてる「なにか」だとは思うんですがどういう型のものなのかとかそういえば全然知らずに使ってたなって
よろしくおねがいします
106:デフォルトの名無しさん
19/06/23 01:04:06.42 tL1CwC/m0.net
console input
107:蟻人間
19/06/23 01:50:58.01 DI9+Pcki0.net
マニュアルみれ
URLリンク(cpprefjp.github.io)
std::istream
character input
108:デフォルトの名無しさん
19/06/23 02:02:56.98 7pjzMc7c0.net
const inputかと思って親近感がわいていたのに…
109:デフォルトの名無しさん
19/06/23 06:15:35.61 6LMXkq2m0.net
じゃあCトランスパイラのNimはC++より遅いのかな?
URLリンク(github.com)
ぐぐったらマジでそうだった
高水準言語から直接コンパイルした方が速いんだな
110:デフォルトの名無しさん
19/06/23 06:35:12.06 6LMXkq2m0.net
C++でクロスプラットフォームなコードを書くのはどれくらい難しい?
Nimはクロスプラットフォームを主張してるんだけどどっちがいいんだろう?
111:デフォルトの名無しさん
19/06/23 06:38:35.47 xbroTRmV0.net
Qtで書くだけ
112:デフォルトの名無しさん
19/06/23 07:05:57.27 6LMXkq2m0.net
WindowsもLinuxもMacもカーネルがCで書かれてるらしいけど何でC++じゃないんだろう?
113:デフォルトの名無しさん
19/06/23 09:01:51.47 Xq17DW5L0.net
C++がそこまで整備されていなかったから
OSといえばC言語で書くのが当たり前だから
そもそもC言語で十分だから
Linus「C++はレベルの低い奴が使うものだから」
114:デフォルトの名無しさん
19/06/23 09:11:04.02 p0iHiqR80.net
>WindowsもLinuxもMacもカーネルがCで書かれてるらしいけど何でC++じゃないんだろう?
何回質問されたことだろうか。
115:デフォルトの名無しさん
19/06/23 10:55:33.78 6LMXkq2m0.net
OSじゃなくて組み込みでも大部分Cでしょ?
なんで?
116:デフォルトの名無しさん
19/06/23 10:57:16.59 6LMXkq2m0.net
URLリンク(news.mynavi.jp)
>組み込みシステム向けプログラミング言語の中で「一番好きな言語」としても「C」(29.1%)を選んだ人が最も多く、これに「Microsoft Visual Basic」(16.8%)、「C++」(15.3%)が続いた。
117:デフォルトの名無しさん
19/06/23 11:17:45.87 6LMXkq2m0.net
Linus TorvaldsのC++批判は正しかったのか
URLリンク(developers.srad.jp)
C++の最大の問題は学習が難しい事か。
たぶんC++を学ぶ時間でCとJava両方学べるね。
118:デフォルトの名無しさん
19/06/23 11:20:59.77 JKCTeXCU0.net
超堅牢に作らないといけないから、
見えないところでコピコン大量に走ったりするような言語は避けられるんじゃないか
ヘッダーに実装書き散らしてるのよくないね
OSはバイナリ境界意識しないといけないし
まあどのみち標準ライブラリは使えないけど
119:デフォルトの名無しさん
19/06/23 11:28:01.94 6GXr3JQp0.net
最近BS/CSが映らなくなった人はここを見ると良い
【B-CAS改造】Bカスカード2038化書き換えツール配布所 205
スレリンク(avi板:1番)-100
120:デフォルトの名無しさん
19/06/23 11:39:08.67 4lSN7b3Y0.net
URLリンク(nlab.itmedia.co.jp)
人の顔を生成するaiはどうやって作れますか?
121:デフォルトの名無しさん
19/06/23 11:39:50.16 Xq17DW5L0.net
>>115
各ベンダーがサポートするにはC言語がちょうどいい規模だから
122:
19/06/23 12:03:58.80 DC/NnmXU0.net
>>112
C++ のデフォでのマングリングが外部結合(リンク)を阻害するから、に一票
123:デフォルトの名無しさん
19/06/23 12:09:47.82 LchWS7uN0.net
ちがう
ちがうなぁ
ポインタがあって適度に奥が深いから、だ
124:デフォルトの名無しさん
19/06/23 12:22:24.97 BQwXISYN0.net
メモリの制御が難しいからじゃね
最近やっと標準でまともなメモリ管理の仕組みを作り込めるができるようになったくらいだし
125:デフォルトの名無しさん
19/06/23 14:34:24.36 hhhlIxdX0.net
昔からメモリ制御なんてCと同じことはできるだろ
126:デフォルトの名無しさん
19/06/23 14:56:33.46 WUJS/EaT0.net
今のC++なら十分使えるよね
継承やSTL、shared_ptrみたいなことをCで実装してるわけで
それを考えたらC++で良い
127:デフォルトの名無しさん
19/06/23 16:01:29.78 EoSayXaXa.net
プログラムの一部にでもRTTIを使用した部分があるとプログラム全体のパフォーマンスが低下する?
128:デフォルトの名無しさん
19/06/23 16:37:25.79 p0iHiqR80.net
まあc++でちゃんとしたもの組もうと思ったらデストラクタをしっかり用意するってのが
大事なわけだが、かなりいろんな状況に対応したものにしないとまともに使い物にならん。
これはメタプロバカが思ってるほど難易度は低くない。
129:デフォルトの名無しさん
19/06/23 16:59:21.61 7M38Ae5l0.net
>>127
コンパイラオプションでRTTIを無効化するとデータ量が減るのでパフォーマンスが上がる
→つまり一部でも使ってると低下する
まぁ今時は気にする必要無いと思うけど
速度は実測が基本
130:デフォルトの名無しさん
19/06/23 17:38:56.55 hhhlIxdX0.net
自前でデストラクタ書くなよ
131:デフォルトの名無しさん
19/06/23 18:20:15.96 xbroTRmV0.net
えっ
132:デフォルトの名無しさん
19/06/23 18:29:28.72 BQwXISYN0.net
ちゃんと例外を投げないデストラクタを書くんだぞ
fcloseの失敗はもみ消せ
どうせ回復などできない
133:デフォルトの名無しさん
19/06/23 21:01:47.41 EoSayXaXa.net
>>129
やはりそうですか、ありがとうございます
速度は今試せないのでまたこんどやってみます
134:デフォルトの名無しさん
19/06/23 21:13:15.69 PTFzQo+G0.net
>>107
えーっとcinってのはistream型のオブジェクトってことでいいんですかね
externをいまいちよく分かってないですがヘッダ内で定義されてるから他のファイルでも使えるとという認識で大丈夫ですかね
135:デフォルトの名無しさん
19/06/24 07:55:10.22 6Zff8TGS0.net
1.思考停止してそのまま使う
2.外界から齎される無限長の情報列がストリームである、と理解する
好きな方を選べ
136:デフォルトの名無しさん
19/06/24 15:40:31.96 DnOtpTuq0.net
何でC++使ってる職場少ないのにプログラム板で上位なの?
137:デフォルトの名無しさん
19/06/24 15:56:59.67 OO73LhBR0.net
すく・・・ない・・・?
138:デフォルトの名無しさん
19/06/24 16:10:16.23 vRXjoyqNM.net
Web業界の人とかなんだろ
139:デフォルトの名無しさん
19/06/24 17:32:13.27 i4YKAGQ3r.net
「C++実践プログラミング」って良い本?
140:デフォルトの名無しさん
19/06/24 18:02:59.78 HUc+KEird.net
実は多いだろ?
社内に囲われているだけで
141:デフォルトの名無しさん
19/06/24 22:05:46.06 qyAEE2sQ0.net
C++プライマーとaccelerated C++一通りやってeffective C++始めたんだけどすんごくめんどくさーい
acceleratedの後半あたりから思ってたんだけど純粋なロジックやテクニック以外のところで考えなきゃいけないこと無限にあってできるようになる気がしない
実際に開発になってクラスやインターフェイスの設計ってみんなこんな色々考えてやってんの?って
競プロっぽい問題だったりちょっとしたもの作るのは割と面白いけどなんかもう萎えてきた
世の中のプロってやっぱ(modern) effective C++とかmodern C++ designとかその辺りは基礎教養レベルまでもっていってるもんなの?
2年目のペーペーだけどとてもC++のプロになれる気がせんわ
142:デフォルトの名無しさん
19/06/24 22:08:08.69 tWJeInAS0.net
そのへんはさらっと何が書いてあるか見ておいて、実際書くときに関係ある部分を参照する本では?
143:デフォルトの名無しさん
19/06/24 23:54:52.99 4vQIe5sT0.net
>>141
それは思うわ
結局その辺の不満を改善したのがJava以降のオブジェクト指向言語だから
今C++を勉強すると面倒すぎると感じるはず
144:デフォルトの名無しさん
19/06/25 00:51:00.92 rXRUIvly0.net
必要だと思うもんだけ使えばええがな
145:デフォルトの名無しさん
19/06/25 01:40:27.96 rF6w0adX0.net
11 名前:(´・ω・`)(`ハ´ )さん[] 投稿日:2019/06/24(月) 17:55:34.54 ID:PqEssjoP
世界三大英雄は野茂と村田と、あと1人は誰?
142 名前:(´・ω・`)(`ハ´ )さん[sage] 投稿日:2019/06/24(月) 21:21:51.77 ID:osRVwCku
>>11
中野英雄
146:デフォルトの名無しさん
19/06/25 07:42:37.27 p22LimGY0.net
>>132
回復できないエラーでもユーザーに通知する余地はあるでしょう。最悪abort()でも、もみ消すよりはマシ。
147:デフォルトの名無しさん
19/06/25 12:36:52.78 U+wxsv9j0.net
JavaもC++も大して変わらないと思うけど
148:デフォルトの名無しさん
19/06/25 12:59:41.31 gYxx7iw3p.net
>>141
modern C++ designはメタプログラミングに片足突っ込んでるからだいぶ後回しでいいと思う
考えること無限にある、は同意だけど優先順位低いものは忘れた方がいいんじゃないかね(特に、ループ回しもしない箇所の速度効率とか
149:デフォルトの名無しさん
19/06/25 17:37:46.05 kxXa+TrUd.net
むしろjavaの方がいろいろ面倒くさくね
150:デフォルトの名無しさん
19/06/25 17:56:57.79 Cc6pu6kp0.net
使用する概念としてはJavaとCを足してさらに多重継承とか演算子オーバーロードとかを足した
のがC++という印象だった。
151:デフォルトの名無しさん
19/06/25 18:01:11.39 Cc6pu6kp0.net
プログラミング言語 収入 ランキング
とかでぐぐると
難しい上に重要なはずのC++が年収ランキングで10位以内に無いんだが
152:デフォルトの名無しさん
19/06/25 18:15:31.86 U1S86Wri0.net
統計の取り方が不明
153:デフォルトの名無しさん
19/06/25 18:20:11.68 4vpt+Hzy0.net
>>140
多いってのはどこで集計されて発表されてるの?
154:デフォルトの名無しさん
19/06/25 18:30:38.49 U+wxsv9j0.net
一発当てて稼げてるのがwebサービスやってる人たちだから
155:デフォルトの名無しさん
19/06/25 19:12:58.12 p4xx1Je/a.net
C/C++まともに書ける人は貴重になってきてるのに何故か低いよねえ
特定の会社に行くしかない気がする
156:デフォルトの名無しさん
19/06/25 19:18:47.91 S67hXFxm0.net
>>151
経済の世界でよくあること:
・高度な能力を持つ人は給与ではない部分にやりがいを感じるので給与に
関係なく集まってしまう。アニメーターは絵がものすごくうまいのに、
マクドナルド店員よりも自給が低い。「やりがい搾取」。
・高度な分野は、人材も高度な人が集まってくるので需要よりも大き過ぎる過剰な
成果を出してしまうので給与が下がるらしい。プログラマや数学者、
コンピュータ業界なんかは大体、そんな感じのところがある。
157:デフォルトの名無しさん
19/06/25 1
158:9:21:25.34 ID:Xe7ucSUW0.net
159:デフォルトの名無しさん
19/06/25 19:28:18.56 U+wxsv9j0.net
みんな勘違いしてるが儲かる商売してるかどうかだけが稼ぎに関係している
儲からない商売に超絶技巧を投入しても意味ない
サービスで一発当てる方が100倍稼げる
160:デフォルトの名無しさん
19/06/25 19:43:08.34 0zPp4OkO0.net
というか自分のビジネス思いつくタイプでもないプログラマーが稼ごうと思ったらなるべくニッチな言語を探していくべきなんだと思う
C/C++なんてメジャーどころは一番だめなんじゃないか。まだまだ人が少ないか、書ける人がどんどん減っていきそうなところを
161:デフォルトの名無しさん
19/06/25 19:50:04.75 U1S86Wri0.net
COBOLは意外と稼げるらしい
162:デフォルトの名無しさん
19/06/25 20:09:29.07 U+wxsv9j0.net
>>159
違うぞ稼げる商売やってる人に乗っかるのが正解
現在儲かってしょうがない会社に入るか今後そうなる会社に入っておくしかない
専門分野は関係ないが一発当てようがない業界というのはあるからそういうところは目指さない方がいい
163:
19/06/25 21:00:35.29 eaNcyZwN0.net
言語は表現手段にすぎないので、言語で分野が決まってしまう現状には疑問を持ちます
少なくともライブラリーは統一されるべきだと昔から夢想してきています
164:デフォルトの名無しさん
19/06/25 21:02:24.65 i1Zv6l/dM.net
現実にあったんじゃよCOMというものがな
165:デフォルトの名無しさん
19/06/25 21:03:41.95 zDe7yE4Q0.net
ライブラリはCインターフェースさえあれば全てのまともな言語から呼べるから問題ない
166:
19/06/25 21:07:14.96 eaNcyZwN0.net
>>163
OLE は重過ぎるんじゃないでしょうか?単に名前と仕様が「ある程度」統一できればいいかと考えています
でも OLE はもう一度調べなおしてみます、キーワード提供ありがとうございます
167:
19/06/25 21:07:47.47 eaNcyZwN0.net
>>164
OO であるべきでは?
168:デフォルトの名無しさん
19/06/25 21:10:43.33 6yREXBxQ0.net
素朴な疑問なんだけど
オブジェクトをshared_ptrで管理するとき
そのオブジェクトから他のオブジェクトにポインタを渡したいときってどうするの?
コンストラクタ以外のメソッドからならenable_shared_from_thisで
生なthisポインタからshared_ptrを生成して渡せばよいけど
コンストラクタだとそれも無理だよね(shared_ptrが作られるのはnewの後だから)
どうするの?
169:デフォルトの名無しさん
19/06/25 21:11:27.40 paQRKRTX0.net
ポインタ指向プログラミングとオブジェクト指向プログラミングは根本的に相性が悪い
これがC++高難易度化の一要因
170:蟻人間
19/06/25 21:13:45.53 ayyd1Kg3d.net
>>167
make_sharedじゃね?
171:デフォルトの名無しさん
19/06/25 21:15:54.14 6yREXBxQ0.net
てかさ
自分自身のスマポを
外部から渡してもらわないと、自分では知れないってのは
設計ミスなんじゃね?
当たり前、JavaやC#だとそんな制約ないからなぁ
172:デフォルトの名無しさん
19/06/25 21:18:19.51 p4xx1Je/a.net
代入がメンバのコピーという仕様が全ての複雑さの元凶
互換性のために仕方なかったとはいえ
おかげで完全に動くクラスをつくるのが凄まじくしんどい
それを改善しようとしたJavaは全てポインタのコピーというふうに割り切ったが
Optinalを導入しなかったせいかヌルポの山を築いた
それを改善しようと
Rustは全てがムーブという世界を作ったがまだ受け入れられるには早かった
173:デフォルトの名無しさん
19/06/25 21:24:24.92 6yREXBxQ0.net
>>171
これまた不思議なもんで
Cからして配列は参照渡しなのに構造体は値渡しだからねぇ
Cの構造体が配列みたいにアクセスするとポインタに成り下がる仕様だったのなら
C++もまた違ってただろうねぇ
どちらがいいかは分からないが
174:デフォルトの名無しさん
19/06/25 21:26:08.00 i1Zv6l/dM.net
えっ
普通は呼吸をするように
const T& var
て書く様に訓練されてるだろ?
175:デフォルトの名無しさん
19/06/25 21:29:04.07 U+wxsv9j0.net
任意にコピーとポインタとムーブを使い分けることになんの苦労も無いと思うけど
176:
19/06/25 21:29:56.71 eaNcyZwN0.net
>>172
私は逆を考えていました、すなわち、配列ですら値渡しであるべきかと
参照渡しにしたいのなら、そのすべてに * をつけて明示するべき
177:デフォルトの名無しさん
19/06/25 21:32:48.81 6yREXBxQ0.net
そうではなくて
構造体において何も考えずに代入した場合
実体のコピーになるって話では
その点、配列では実体のコピーにならないので
JavaやC#のオブジェクトに近い仕様で
なかなか先鋭的
178:デフォルトの名無しさん
19/06/25 21:44:51.24 6yREXBxQ0.net
そんなことより
コンストラクタで自分自身のshared_ptrが欲しい時
どうするの?
欲しい理由としては、どっかシステム的なところにattachしたり
自分のコンポジションした子供たち?に渡したり
そういうことをコンストラクタですっかりしたい場合どうすんの
enable_shared_from_thisを継承して二段階初期化ってのもかっこ悪いし
(↑生成する側がshared_ptrを使ってくれなかった場合
クラッシュするってのは置いておいてさ)
そもそも実行時型情報なんて反則が許されるなら
仮想関数付きのオブジェクトは実行時型情報のどこかに参照カウンタを隠し持っている
って仕様でもよかっただろ?
スマポ側が参照カウンタを持っているってのは一見賢そうだけど…
上手くいかないパターンもあるよね
179:デフォルトの名無しさん
19/06/25 21:48:45.68 6yREXBxQ0.net
>仮想関数付きのオブジェクトは実行時型情報のどこかに参照カウンタを隠し持っている
↑これはちょっと不正確だな
vtableと一緒に参照カウンタ~
が正解かな
180:デフォルトの名無しさん
19/06/25 21:52:05.85 zDe7yE4Q0.net
ファクトリでやれ
181:デフォルトの名無しさん
19/06/25 21:54:23.16 jeBecXDk0.net
>>177
create関数でshare作ってから後の構築処理して返すしかないんじゃね
182:デフォルトの名無しさん
19/06/26 00:01:25.34 7raG/MY10.net
有害でしかない美意識は投げ捨ててshared_form_this使えって話になるだろ
183:デフォルトの名無しさん
19/06/26 00:07:57.67 HPTAJdxK0.net
それでもコンストラクタでは使えないから二段階初期化になるな
184:デフォルトの名無しさん
19/06/26 00:27:47.77 3ywCP3+N0.net
ちょっと質問なんですが、どういうときに必要になるんですか?
185:デフォルトの名無しさん
19/06/26 01:38:39.12 kcNPbTTh0.net
Intel、新プログラミング言語「Data Parallel C++」を開発中
2019/06/25 11:08 後藤大地
URLリンク(news.mynavi.jp)
ossbytesは2019年6月24日(米国時間)、「Intel Is Working On A New 'Data Parallel C++’
Programming Language」において、Intelが「Data Parallel C++」と呼ばれるプログラ
ミング言語の開発を進めていると伝えた。
Data Parallel C++に関しては、先日Intelが発表した「Intel’s ‘One API’ Project
Delivers Unified Programming Model Across Diverse Architectures」程度しか情報が
なく、具体的にどのようなプログラミング言語なのか、わからない状況にある。
記事では、これまでに公開されている情報から、Data Parallel C++の特徴として以下を
まとめている。
・Data Parallel C++ (DPC++)はIntelが以前から取り組んでいるOneAPIプロジェクトの
成果物の1つ
・OneAPIプロジェクトはさまざまなコンピューティングアーキテクチャにおいて統合された
プログラミングモデルを提供するための取り組み
・Data Parallel C++はC++をベースに開発されている
・Data Parallel C++はKhronos GroupのSYCLシングルソースC++プログラミングスタン
ダードがベースになっている
・CPU、GPU、FPGAといった異なるアーキテクチャに対して使用できる
・Data Parallel C++の詳細は2019年第4四半期の発表される見通し
GPUの活用はスーパーコンピュータにおいても重要度が増している。Intelは異なるアーキ
テクチャに対して利用できるプログラミングモデルを構築することで、さまざまなコン
ピューティングアーキテクチャに対して同じコードベースで開発を進められる仕組みを
実現することを目指していると見られる。
186:デフォルトの名無しさん
19/06/26 04:17:13.86 0Jy9MjGr0.net
結論
使えない
187:デフォルトの名無しさん
19/06/26 06:38:56.80 LU29nklf0.net
>>177
相互参照自体がクソ汚い設計なんだからツールがいくら綺麗になってもダメ。
諦めてthis渡せや。
188:デフォルトの名無しさん
19/06/26 07:32:00.47 ICIJHbsn0.net
>>184
OpenCLとの違いは何
189:デフォルトの名無しさん
19/06/26 07:40:21.71 0Jy9MjGr0.net
異なるアーキテクチャに対応
高額
インテルサポートあり
190:デフォルトの名無しさん
19/06/26 08:12:04.77 x0x3rSL40.net
OpenCLがずっと停滞気味なのに業を煮やしたんじゃね
191:デフォルトの名無しさん
19/06/26 12:31:58.13 ghoq0O6D0.net
Intelは、CPU内臓のGPUを自前で作ってるから、そのための開発環境は
重要で、実行時のパイプライン関連のさまざまな高速化においても、
共通の技術が使えるので開発するメリットは大きいのだろうと思う。
レジスタ割付、ループ関連の最適化などは、CPUを実行する段階でも
似たことが行われる。
192:デフォルトの名無しさん
19/06/26 12:39:28.47 Lh4/MgoYa.net
そんなくだらんライブラリ作ってる暇あったらCUDA互換のランタイムだせーい
193:デフォルトの名無しさん
19/06/26 12:57:05.45 ghoq0O6D0.net
言語ではなくて、テンプレートライブラリなの?
194:デフォルトの名無しさん
19/06/26 17:24:56.62 hivlE/XW0.net
海外のニュースサイト見ても言語と書いてある
195:デフォルトの名無しさん
19/06/27 22:57:53.41 mSNnCkE50.net
accelerated C++みたいな実際にプログラム組んでいきながら組むときはこういうところを気をつけないといけないみたいなこと解説してる本って他に無い?
細切れの文法はC++プライマーやプログラミング言語C++第4版あるし、テクニック集みたいなのはeffectiveC++でいいだろとは思うんだけど
プログラミング構築を実際にどう進めていくのがいいのかってところが全然分からない
196:デフォルトの名無しさん
19/06/27 23:06:50.63 v/LZDm7Y0.net
他人の設計をパクる
197:デフォルトの名無しさん
19/06/27 23:34:52.50 ozPSmFlM0.net
>>194
同じ著者の再考C++とか?
ただクソ古い時代のC++
あとストラウストラップのC++によるプログラミングの原則と実践
これはモダンだが鈍器なので読むのは覚悟がいる
198:デフォルトの名無しさん
19/06/28 02:18:49.53 ahgrWLetr.net
C++に限らず、プログラムに関連した技術書について議論するスレってある?
他板でも良いが、書き込みが活発な場所が良い
金を持て余してて、「定番中の定番」という技術書をかき集めたいんだ
ランキングなどあったらなお良い
199:蟻人間
19/06/28 02:20:52.05 5qyojIkBd.net
アマゾン
200:デフォルトの名無しさん
19/06/28 08:26:19.94 TdQiUvSj0.net
>>197
本だけ読んでも何もみにつかない
201:デフォルトの名無しさん
19/06/28 10:02:58.07 eXqq+/Cl0.net
>>197
スレじゃなくてリアルで聞け
202:デフォルトの名無しさん
19/06/28 10:46:50.38 keve5VxiM.net
昔は推奨本スレとか無かったっけ
過去ログを漁ってみるとか
203:デフォルトの名無しさん
19/06/28 12:40:55.68 RICIf1Tpr.net
>>199
質問に対する回答にま~~~~ったくなってない
お前死ぬほどアタマ悪いだろ
204:デフォルトの名無しさん
19/06/28 12:54:03.48 eXqq+/Cl0.net
2chでは模範解答なんだが
205:デフォルトの名無しさん
19/06/28 14:42:29.18 OObtmMVO0.net
金持て余してて収集欲のために名著集めたいみたいな話なのに身につく身につかないとか言ってるのは確かにおかしいよ
206:デフォルトの名無しさん
19/06/28 15:07:13.61 6HQoAkrg0.net
全然関係ないけどこのスレワッチョイの表示がワッチョイだけなんだな
初めてみた
207:デフォルトの名無しさん
19/06/28 15:33:25.35 kguIGPYnM.net
>>204
それこそC++に限らないなら他のスレで聞けばよくね?
208:デフォルトの名無しさん
19/06/28 16:02:48.30 U9hxi1vj0.net
各C++コンパイラのシェアってどのくらいなんだろう
Builderとかまだ使ってる人いるのかな
209:デフォルトの名無しさん
19/06/28 16:39:19.43 fGl1mQ6CM.net
cppreference.com眺めてりゃわかる
210:デフォルトの名無しさん
19/06/28 16:48:57.53 mY/mlIwO0.net
>>207
いるんじゃない。
211:デフォルトの名無しさん
19/06/28 16:51:56.00 mY/mlIwO0.net
推定だと、Delphiを含めれば、VC++の10分の一位は、Embarcadero製の
開発環境を使っているらしい。C++とPascalの内訳は分からない。
212:デフォルトの名無しさん
19/06/28 18:34:46.13 mY/mlIwO0.net
C++で、マルチプラットフォームで、コンパイラとライブラリを同じ組織が
作っているものは多分、他にない。Qtはライブラリと簡易IDE程度だし。
やはり同じ組織が全てを管理しているのは信頼性において優位。
なお、MSだと、Windowsシェアを根本的に減らす開発環境は存在し得ない。
213:デフォルトの名無しさん
19/06/28 18:58:18.67 mY/mlIwO0.net
MSの開発環境で、果たしてMSを脅かすような製品を作れるだろうか。
一見便利に見えても、MS社内にはさらに便利なツールやライブラリがあるのでは。
だから、生産性は常にMSには適わないことになる。MS以外の開発環境を
使えば、あるいはMS社内の生産性を超えることが出来るかもしれない。運がよければ。
214:デフォルトの名無しさん
19/06/28 19:16:56.00 j8DkSia+H.net
コマンドライン引数にファイル名を取って、そこに記述されている数値列を vector に格納して、その後その vector に何かするプログラムを作りたいとします。
そのファイルに入ってる数値列が int でも float でも良いとき、 main 関数ってどう書いたら良いのでしょうか。
ただし、数値列の中の全ての数値が同じ型であることは保証します。
int main(int argc, char* argv[]){
vector<ここに何を入れたら良いか分からないです> v;
ifstream fin(argv[1]);
auto tmp;
while(fin >> tmp) v.push_back(tmp);
fin.close();
~ v にしたい処理を書く~
}
215:デフォルトの名無しさん
19/06/28 19:31:18.51 eXqq+/Cl0.net
>auto tmp;
216:デフォルトの名無しさん
19/06/28 19:33:04.89 iRyUn2/nM.net
doubleか何かにしとけば
あるいはvariant
217:デフォルトの名無しさん
19/06/28 19:35:02.98 j8DkSia+H.net
>>214
vector<auto> って意味ですか?
>>215さんの案とどっちが良いんでしょうか。
思想による?
218:デフォルトの名無しさん
19/06/28 19:54:16.23 3z/U2tJH0.net
>>216
auto tmp;なんてありえねーってことだろ
型推論でけへんやん
219:デフォルトの名無しさん
19/06/28 20:01:01.82 j8DkSia+H.net
>>217
じゃあそこもどう書くべきか分からないです
220:デフォルトの名無しさん
19/06/28 20:08:22.32 ZUKGdUen0.net
根本的にはオートマトンで判定する
IP型 192.56.125.0
小数型 1025.62
整数型 100731
分数型 57/1269
+-の記号も含めて状態遷移図を考えてif文のすごい連なりを作る
単純でしょ
221:デフォルトの名無しさん
19/06/28 20:12:43.82 ZUKGdUen0.net
9.7/2.01
ピリオドと/を含むこの文字列を分数と見做して小数にしてしまうかどうかも勝手に決めて言い
2.54/-0.07
これは非常に怪しいけど、負の小数に直してもいい、と決めていい
.565
これはどこからどう見ても小数の0.565に見えるから小数である、としてもいい
00.3
ゼロが重なってるけどだいたい小数だろ、ということにしてもいい
222:デフォルトの名無しさん
19/06/28 20:30:23.52 j8DkSia+H.net
>>219
トライ木みたいなものを作るべきということですか?
それとも、トライ木など言わずにもっとシンプルに実装できるのでしょうか
223:デフォルトの名無しさん
19/06/28 20:38:09.73 OXCJu0Q4a.net
読み込みの時点で処理をするときの型に変換するだけでは?
224:デフォルトの名無しさん
19/06/28 20:41:38.84 j8DkSia+H.net
>>222
>>213のコードで言うと、fin >> tmp の部分が「読み込みの時点」ですよね?
どう変えたら良いですか。
ちなみに、
~ v にしたい処理を書く~
というところには int なら int、float なら float 向けの工程が書かれるというつもりです
225:デフォルトの名無しさん
19/06/28 21:21:06.58 DjhzO0vj0.net
とりあえずvector<string>に収集してから中身がintかdoubleかcomplexかゆっくり解析すればええやん
226:デフォルトの名無しさん
19/06/28 21:23:57.66 j8DkSia+H.net
>>224
皆そんなダサいやり方でやっているのですか?
227:蟻人間
19/06/28 21:25:54.60 WO9nfxiid.net
字句解析の方法を勉強しないといけないよ。簡単に言えば文字列を一文字一文字解釈する訳。
228:蟻人間
19/06/28 21:27:07.49 WO9nfxiid.net
std::atoiとか、std::strtolなどの関数を使えば字句解析は省略できるけど。
229:蟻人間
19/06/28 21:27:59.32 WO9nfxiid.net
std::sscanfっつーのもあるね。
230:デフォルトの名無しさん
19/06/28 21:29:46.80 eXqq+/Cl0.net
ださいと思うならプログラミング向いてない
231:デフォルトの名無しさん
19/06/28 21:36:20.96 4VImPalK0.net
てか面倒だから全部doubleで読むんじゃダメなの?
232:デフォルトの名無しさん
19/06/28 21:41:50.76 j8DkSia+H.net
ハァ~~~ダセェ奴しかいねぇなここは
分かった。自分で勉強するわ
ありがとう
233:蟻人間
19/06/28 23:21:16.52 XG6P9m/X0.net
N⊆Z⊆Q⊆R⊆C
234:デフォルトの名無しさん
19/06/28 23:59:43.49 4xkaC8y70.net
答えでてんのに何が聞きたいんだこいつ
235:デフォルトの名無しさん
19/06/29 00:51:14.21 JdKIde9pa.net
>>233
自分が思うカッコイイやり方があるかと期待してたら、誰も期待に応えてくれなかったということだろう。
周囲の人間が「お前のカッコイイは世間からずれてるぞ(むしろバカっぽいぞ)」と教えてやっても、本人は納得しないのだろう。
236:デフォルトの名無しさん
19/06/29 01:06:46.73 3pgMwDvE0.net
C++をPythonかなんかと勘違いしてるんだろう
237:デフォルトの名無しさん
19/06/29 01:39:33.69 wtFmE/I80.net
>>196
ストラウストラップのは初心者用って聞いてたからスルーしてた。両方ちょっとチェックしてみるわ感謝
238:デフォルトの名無しさん
19/06/29 01:58:15.72 RmkpebDX0.net
typescriptだとint|floatみたいな型指定ができるんだっけ
239:デフォルトの名無しさん
19/06/29 02:25:19.40 WOkj4PNs0.net
質問です。weak_ptr<T>とintの双方向マップがやりたかったので
boost::bimap<weak_ptr<T>,int> bm;
とやったらweak_ptrはハッシュにできないのでエラーになりました。よく考えると当たり前ですね。
仕方ないのでとりあえずunordered_mapと組み合わせて
boost::bimap<T*,int> bm;
unordered_map<T*, weak_ptr<T>> um;
この2つをセットで用いてるんですが、なんか不格好というか・・・
もしかして変なことしてますかね自分?
240:デフォルトの名無しさん
19/06/29 07:07:52.52 TGC7pT1Z0.net
字句解析しても書かれた数が整数型として扱うべきなのか浮動小数点型として扱うべきなのか
書いてあるのが数だけなら、書いた奴の意図まで常にわかるとは限らん
価域だけが問題ならとりあえずdoubleかlong doubleの数値xとして読んでから
std::numeric_limits<T>::lowest()~std::numeric_limits<T>::max()にxが収まるような最少の型Tを決定せよ、
みたいな
241:デフォルトの名無しさん
19/06/29 07:08:51.86 TGC7pT1Z0.net
訂正
誤: 価域
正: 値域
242:デフォルトの名無しさん
19/06/29 07:20:56.68 vBcvr2/W0.net
>>237
文字列から直接ぶち込むのは無理でしょ
243:デフォルトの名無しさん
19/06/29 08:06:13.25 8bAr7lLW0.net
>>231
隙のないクソ野郎コメントだなw
244:デフォルトの名無しさん
19/06/29 08:35:15.39 z4L1A7GC0.net
>>239
Tclが演算するときに整数か浮動小数点か勝手に決めるんだよね。
ファイルからデータ読んできて処理させたら所々不自然な値になると思ったら
整数演算になってたりさ。
型変換関数噛ませばいいだけだけどね。
245:デフォルトの名無しさん
19/06/29 09:14:29.25 1DstyLuX0.net
むしろ、整数と浮動小数点の両方のパターンで値を持っておいて、後で必要なときにどっちかを使えばいいだけなのでは?
246:デフォルトの名無しさん
19/06/29 09:20:12.61 xxikbG460.net
C++でアライメントを指定してクラスをnewしたい
void* operator new[](std::size_t, std::align_val_t)
なる関数が存在するからこれを使う
しかしnew側では一般的にクラスをどのアライメントでnewすればよいのかは知らない
というよりアライメントを指定すべきかどうかも知らない
こういった場合、例えば普通のnewをprivateにしておいて、
その近くにコメントで16でアライメントを使うこととか書くくらいしかできませんかね?
あるいはstatic klass* Generator()みたいな関数を用意すればよいのか
247:デフォルトの名無しさん
19/06/29 09:35:17.38 TGC7pT1Z0.net
>>244
値を保持するだけならdouble(使えるならlong double)の一種類で十分
248:デフォルトの名無しさん
19/06/29 09:36:35.93 TGC7pT1Z0.net
>>245
『プログラミング言語C』のmalloc()の実装例を嫁
ていうかそれすら読んでいないのカヨ、というレヴェル
249:デフォルトの名無しさん
19/06/29 09:56:05.74 XuKJ1prL0.net
>>245
alignasが目的に合うように見えるが使ったことがないから適切かどうか分からん
250:デフォルトの名無しさん
19/06/29 09:59:59.32 YSWfxQRJ0.net
>>245
アライメント指定してるのに、
newがアライメントわからないって意味不明
アライメント指定どこいったんだよ
251:デフォルトの名無しさん
19/06/29 10:02:29.39 xxikbG460.net
アライメント指定してnewしてほしいクラスがある時
newする側にそれをどうやって伝えるべきか?という問題です
252:デフォルトの名無しさん
19/06/29 10:18:23.37 YSWfxQRJ0.net
__attribute__ ((aligned(x)))
253:デフォルトの名無しさん
19/06/29 10:20:28.90 TGC7pT1Z0.net
アライメント指定してnewしてほしいクラスTのoperator new()を
オーバーロードしてaligned_malloc()でも呼ぶようにすれば良い
254:デフォルトの名無しさん
19/06/29 10:35:52.45 vBcvr2/W0.net
class C {
public:
__m512i aa;
void* operator new(std::size_t n) {
std::cout << "new" << std::endl;
return ::operator new(n, std::align_val_t(64));
}
};
こういうことではなく?
255:デフォルトの名無しさん
19/06/29 10:37:05.53 1DstyLuX0.net
>>246
でもそれだと、intとdoubleで別々の処理を書かないといけなくなる。
vector<int>とvector<double>を両方作ってtemplate関数で呼び分ければ処理の記述自体は1つにできるでしょ。
256:デフォルトの名無しさん
19/06/29 10:45:25.08 cHNlfV280.net
>>246
整数値のビット数が長いとdoubleじゃダメ
257:デフォルトの名無しさん
19/06/29 10:55:17.59 TGC7pT1Z0.net
>>255
12 bitぐらいまけてくれYO、
ていうか10バイトのdoubleを使ったらおk
258:デフォルトの名無しさん
19/06/29 10:59:12.33 TGC7pT1Z0.net
>>254
どっちかというとunionベースのクラスの出番かとオモテタ
要素型の方でキャスト演算子を定義するなどして整数型解釈と浮動小数点型解釈に両方対応したら、
コンテナを2種類用意する必要はなくなる
キモス
259:デフォルトの名無しさん
19/06/29 11:35:29.00 sVUKPNaW0.net
V言語が出来るからC++なんて誰も使わなくなる
260:デフォルトの名無しさん
19/06/29 12:00:09.50 V+jAPY2V0.net
>>250
alignas
261:デフォルトの名無しさん
19/06/29 12:03:32.81 vBcvr2/W0.net
>>258
今度こそ本当だろうな?
262:デフォルトの名無しさん
19/06/29 12:40:30.78 LSTTNlMa0.net
>>258
流行る要素がない
263:デフォルトの名無しさん
19/06/29 13:00:13.77 N8jtlPKB0.net
アライメント指定はとっくに言語に組み込まれてるんだけど…
264:デフォルトの名無しさん
19/06/29 13:07:40.29 HkzJkYF9a.net
C++ってハウルの動く城みたいな言語だよね
265:デフォルトの名無しさん
19/06/29 13:12:22.27 xxikbG460.net
>>252-253
そういうことですハイ
まあひねくれて変なnew使わなければそれで良さそうっすね
>>259
ありがとうございます
266:デフォルトの名無しさん
19/06/29 15:10:49.18 TGC7pT1Z0.net
newを呼び出す側がアライメントサイズを過少に設定しても、
コンパイラはnewしようとする構造体に含まれる全メンバのアライメント要請を把握しているはずなので
>>247式に構造体定義を対策しておけば問題無い配置でポインタを返してくれる気もする(そうすべきなのが道理
が(さもないとARMとかで例外で落ちるコードを簡単に量産できてしまう
newの細かい仕様は知らんのでわからん
267:デフォルトの名無しさん
19/06/29 15:31:17.71 vBcvr2/W0.net
そんなに迷うことある?
268:デフォルトの名無しさん
19/06/29 16:11:26.09 N8jtlPKB0.net
どっちかというとmallocしたメモリよりスタックで確保した場合に問題なることがある
環境やコンパイルオプションにもよるけど
269:デフォルトの名無しさん
19/06/29 16:12:26.58 oMQgVAVxM.net
atoiとかで解析する前後でオーバーフローを検出する方法ってあるの?
270:デフォルトの名無しさん
19/06/29 16:15:01.31 gccJajeoM.net
長さでもみとけばいいんじゃないの
271:デフォルトの名無しさん
19/06/29 16:19:54.13 N8jtlPKB0.net
>>268
ない
0返すだけ
std::stoi
とか使った方がいい
272:デフォルトの名無しさん
19/06/29 16:35:00.54 /vAOJE6i0.net
>>263
でも便利なんだな、実は。
273:デフォルトの名無しさん
19/06/29 16:43:49.04 ggIuLAhq0.net
vtableの仕様を標準規格化してれば、もっと便利になっていたのにな。
274:デフォルトの名無しさん
19/06/29 17:08:11.53 /vAOJE6i0.net
clangやLLVMって、coff 形式の object file は作れないのかな?
275:デフォルトの名無しさん
19/06/29 21:36:10.47 TGC7pT1Z0.net
>>271
いろいろやれるからな
テンプレートみたいな難しい仕組みも標準規格としてきちんと仕様化できる連中が
言語仕様の策定を仕切っているというのが大きい
276:デフォルトの名無しさん
19/06/29 22:45:38.89 zjX1HUko0.net
>>238
bimapに比較関数の指定をすればよいだろ
URLリンク(wandbox.org)
277:デフォルトの名無しさん
19/06/30 00:04:22.02 ft0B/0dK0.net
>>274
委員会が入ってきてからは汚くなってる気がする。
むしろ、ずっと昔に入った仕様が使いやすい。
278:デフォルトの名無しさん
19/06/30 00:15:31.74 DqQWlJNh0.net
C言語が一番使いやすいからな
279:デフォルトの名無しさん
19/06/30 00:34:51.63 UuQw9kvG0.net
C++はSTLの既存クラスに、新たなメンバ関数を追加できますか? 継承の新クラス作るのはではなく。
javascriptとかは追加できたとおもいます。
280:デフォルトの名無しさん
19/06/30 00:43:41.85 DqQWlJNh0.net
無理だからフリー関数作りましょう
281:デフォルトの名無しさん
19/06/30 01:56:53.48 exYwiLt20.net
>>277
テンプレートの代替物がプリプロセッサのマクロになってしまうというのが最悪すぐる、
しかしまあそれ以外は同意
ただしスタックに構造体を詰めないK&Rの頃の奴のは除外それは論外
282:デフォルトの名無しさん
19/06/30 03:02:40.95 xrN+8YHV0.net
>>275
ありがとうございます。owner_lessを使えばbimapだけで済むとわかり、こんなふうにしてましたが
boost::bimap<boost::bimaps::set_of<weak_ptr<string>, owner_less<weak_ptr<string>>>, int>
unordered_setを使う方法もあるんですね。
しかしググってみると、参照先が消えたらハッシュ値が変わるから駄目だ、少し遅くてもstd::set<weak_ptr>にしとけって意見もあるようです。
URLリンク(stackoverflow.com)
まぁ自分で分かってやるなら好きにすればいい感じですかね
283:デフォルトの名無しさん
19/06/30 07:01:13.58 V2b2ALnu0.net
昔C++にお世話になってたんだけどその頃はゲームでよく使われる言語だったんだよね
今でもゲーム開発によく使われてるの?
284:デフォルトの名無しさん
19/06/30 07:14:28.67 CneIN5yy0.net
>>282
使われていると思う。アメリカのQuoraによれば、本格的な3Dゲームでは、
C#が使われたことは無く、全てC/C++製らしい。
285:デフォルトの名無しさん
19/06/30 08:26:27.75 VKcFh0qo0.net
ゲームエンジン自体はC++だけど、購入したエンジンを使って作る場合にはエンジンによって使う言語は変わる
286:デフォルトの名無しさん
19/06/30 08:41:33.25 V2b2ALnu0.net
>>283
>>284
3Dゲームとゲームエンジンで使われてるのね
やはり速度とモダンな機能ではまだC++の代替になる言語は無い感じだよね
そういう意味ではRustが最近がんばってるみたいだが
287:デフォルトの名無しさん
19/06/30 10:05:11.67 ft0B/0dK0.net
>>285
Rustは、mozillaが開発したから有名なだけ。
実際には広く使われることは無いらしい。
既存の言語から逸脱しすぎた言語は、よっぽど便利でない限りは普及しないらしいよ。
288:デフォルトの名無しさん
19/06/30 10:59:26.27 xpepSpla0.net
新言語上げでよくやられてるC++叩きって、書いてる方の知識が98/03で止まってて
「そんなん最近のC++でも出来るし…」ってなる事が多い印象が強い
もちろん新言語の本当に優れてるところもあるんだろうけど、比較するなら比較元もちゃんと勉強しろと言いたい
あと「C++はこんなに危険!」ってどうしようもないクソコードを藁人形に出してきたりな
お前らの新言語の新機能も間違った理解でクソみたいな使い方したら危険だっての
289:デフォルトの名無しさん
19/06/30 11:09:37.42 BKgyqS0e0.net
メタではみんなLISPを作りたがるんだけど、表現方法の違いで文法が狂う。
290:デフォルトの名無しさん
19/06/30 11:19:26.11 HRz15QoR0.net
そうはいってもRustは良さげなので
コンパイルがVisual C++クラスに瞬時に終わって
Visual Studioクラスの光速で反応するインテリセンスができたらぜひやりたい
変数がデフォルトでimmutableなのがたいへん痺れる、
291:デフォルトの名無しさん
19/06/30 11:23:39.34 /mKHwNLn0.net
確かに今のC++の用途で置き換えられる可能性がありそうなのはRust位だな
292:デフォルトの名無しさん
19/06/30 11:27:27.66 ft0B/0dK0.net
でもRustは使いたくない。
293:デフォルトの名無しさん
19/06/30 11:30:06.24 BKgyqS0e0.net
Rustは情緒的に言って錆びだからな。蓄積使うんですーって感じの命名なのだろう。
294:デフォルトの名無しさん
19/06/30 11:39:32.70 iTCTHGA20.net
RustってC++11以降の機能を勉強して
難しすぎると感じた人がやったらすんなり入れるんだよね
でも普通の言語から移った人は何じゃこれってなる
C++11以降に挫折した人のための言語
295:デフォルトの名無しさん
19/06/30 13:14:05.13 HRz15QoR0.net
RustでC++ → Rustトランスレータを書いたら勉強になると思うわ
296:デフォルトの名無しさん
19/06/30 13:31:27.33 BKgyqS0e0.net<
297:> >>294 間にLLVM挟むと公共の福祉になりえます。
298:デフォルトの名無しさん
19/06/30 13:54:46.76 HRz15QoR0.net
>>295
ソースコードのコメントやインデントが保持されないのでは…
あと自分自身が使っていない範囲も含めたC++の全機能のトランスレートに対応しようとしたら日が暮れてしまう
299:デフォルトの名無しさん
19/06/30 14:03:37.82 aHps5PsQM.net
>>270
遅レスだけどthx。
面倒そうだけど何とかなりそうね
300:デフォルトの名無しさん
19/06/30 14:31:31.86 BKgyqS0e0.net
>>296
貴様、パイソニアンだな。
ずしゃんずしゃん。
301:デフォルトの名無しさん
19/06/30 15:34:49.82 TD3JD5CyM.net
みんなC++がここまで残ることになるとは予想してた?
このままだとC++30とか40とか普通に来そう
302:デフォルトの名無しさん
19/06/30 16:01:24.12 y+UHg1Q80.net
OSを除けば基礎的なソフトはだいたいC++でしょ
ふつーに重要言語の1つ
303:デフォルトの名無しさん
19/06/30 16:06:12.25 /mKHwNLn0.net
C++11以降標準のフットワークが軽くなってありがたい
その代わり要るんかこれ?みたいのもガンガン入ってくるけど
304:デフォルトの名無しさん
19/06/30 16:09:27.02 9MaqxN1M0.net
>OSを除けば基礎的なソフトはだいたいC++でしょ
docker, kubeはgolangだが?
305:デフォルトの名無しさん
19/06/30 16:09:52.38 9MaqxN1M0.net
ちなみにgitはc
306:デフォルトの名無しさん
19/06/30 16:10:56.10 Eya2a1WdM.net
>>303
開発者があいつだからだろ
307:デフォルトの名無しさん
19/06/30 16:37:46.54 iTCTHGA20.net
golangが増えてきたね
Cを置き換える感じになりそう
言語仕様もCとPython混ぜたような言語だし
308:デフォルトの名無しさん
19/06/30 16:42:10.94 9MaqxN1M0.net
c++が使われるとこってのはゲーム、ブラウザ、windows, MSoffice
とか、GUIでかつ計算資源どっかり使うようなプログラムだわ。
309:デフォルトの名無しさん
19/06/30 16:59:55.50 HRz15QoR0.net
確かにVC++はMFCが使えるからGUI向きだな!
310:デフォルトの名無しさん
19/06/30 18:33:30.39 y+UHg1Q80.net
clang, llvm, jdk, .net core, chrome,ほとんどのゲームエンジン
この辺C++
他の主要ブラウザも大体C++のはず
dockerはgoで書かれたせいで性能が悪いって言ってる記事を読んだ事がある
311:デフォルトの名無しさん
19/06/30 18:34:08.60 y+UHg1Q80.net
goの性能はjavaより悪い
URLリンク(benchmarksgame-team.pages.debian.net)
312:デフォルトの名無しさん
19/06/30 18:40:59.64 y+UHg1Q80.net
要するにC++は「ソースコードが大規模かつ性能がシビアに要求される」場面で使われる。
開発効率はJavaより悪い事が実証されてたはず。
なんかの研究論文もあったし多くの開発者の経験談もある。
だから開発効率を多少悪化させてでも性能を求める場合に使われる。
313:デフォルトの名無しさん
19/06/30 18:45:18.35 /mKHwNLn0.net
使える人揃えるの大変なんだよ
Rustの導入談とか見ると、
性能に問題があって他言語導入を検討したがC++は使える人がいないのでRustにしましたとか書いてあるし
314:デフォルトの名無しさん
19/06/30 19:27:38.00 y5K6zYFc0.net
マジで?
315:デフォルトの名無しさん
19/06/30 19:34:56.51 CneIN5yy0.net
そもそもポインタが理解できる人が、アメリカの大学の理系の学生でもほとんどいないという話がある。
だから、C++が悪い言語というより、C++がある種の数学みたいに難しすぎて理解できない人が多いので
Javaなんかが必要になったらしい。
316:デフォルトの名無しさん
19/06/30 19:49:13.48 +OB1DaoJa.net
Rustはポインタ理解でない人が使える言語ではない気がする
317:デフォルトの名無しさん
19/06/30 19:56:47.32 9MaqxN1M0.net
ポインタが理解できるとかそういう問題じゃねーわ。
むしろ「〜の概念が理解できる」てだけでドヤって
まともなプログラム書けると思い込むバカが問題なんだわ。
318:デフォルトの名無しさん
19/06/30 19:57:51.51 DqQWlJNh0.net
ポインタすら理解できない人にプログラミングは難しすぎないか?
319:デフォルトの名無しさん
19/06/30 20:16:06.58 y+UHg1Q80.net
>>313はただのデマだろう
ポインタが理解できないなんてことはありえない
320:デフォルトの名無しさん
19/06/30 20:16:57.22 y+UHg1Q80.net
C++がある種の数学ってなんだよ
この板最近一人おかしな作り話書き込み続けてるやつがいるよ
321:デフォルトの名無しさん
19/06/30 20:17:37.05 v919s9nK0.net
包丁使えない人に料理は難しすぎないか?みたいな話だな。
包丁使えなくてもハサミ使えば料理できるでしょ。
322:デフォルトの名無しさん
19/06/30 20:19:17.74 vP+txDXc0.net
リファクタリング中毒言語
勉強すればするほど書き直したくなる
323:デフォルトの名無しさん
19/06/30 20:21:38.63 y+UHg1Q80.net
なんだろうな
中学生とかかな
324:デフォルトの名無しさん
19/06/30 20:57:12.06 9MaqxN1M0.net
どんな書き方しても新しい規格は出てくるわけで、
そこで古い書き方だからとかいちいち引っかかる奴はc++は向いてない。
325:デフォルトの名無しさん
19/06/30 21:18:32.10 HRz15QoR0.net
RustスレなのにC++の話で申し訳ないが、この前
template<class T, class U> void tr_pos(const T& src, U& dst) { ... } // メンバ関数T::get()、U::set()がある前提
というテンプレートを1個書いて、メンバ関数get()やset()を有する無数のクラスA、B、C、...について
任意の組み合わせでの相互変換(および同一型のコピー)を可能ならしめたんじゃわ
C++は数学や!とそのときオモタわ
次の日、今度はメンバ関数get()やset()を持たないクラスFooとBarについて
template<class U> void tr_pos(const Foo& src, U& dst) { ... } // メンバ関数U::set()がある前提
template<class T> void tr_pos(const T& src, Foo& dst) { ... } // メンバ関数T::get()がある前提
template<class U> void tr_pos(const Bar& src, U& dst) { ... } // メンバ関数U::set()がある前提
template<class T> void tr_pos(const T& src, Bar& dst) { ... } // メンバ関数T::get()がある前提
というテンプレートを追加して、{ A, B, C, ... }とFoo、および{ A, B, C, ... }とBar、
および(前日実現済みの){ A, B, C, ... }内の任意のクラス間のの相互変換を
tr_pos(src, dst)と書いただけで可能ならしめるという壮大な体系を実現したんじゃわ
C++は数学や!という思いをそのときさらに強くしたわ
326:デフォルトの名無しさん
19/06/30 21:19:31.58 HRz15QoR0.net
さらに次の日、Foo型オブジェクトsrcとBar型オブジェクトdstについてtr_pos(src, dst)と
書いたらビルドエラーになったわ;
仕方ないので関数のオーバーロードを使って
void tr_pos(const Foo& src, Bar& dst) { tr_pos(src, A); tr_pos(A, dst); }
void tr_pos(const Bar& src, Foo& dst) { tr_pos(src, A); tr_pos(A, dst); }
のようにして解決したんじゃわ
C++はちょっとしたテクニックを要する数学や!とそのときオモタわ
さらに次の日、Foo型同士、およびBar型同士でコピーしたくなったので、
一昨日書いたテンプレートを特殊化したら行けるやろ、と思って
template<> void tr_pos<Foo>(const Foo& src, const Foo& dst) { ... }
template<> void tr_pos<Bar>(const Bar& src, const Bar& dst) { ... }
と書いたらコンパイラが一昨日書いたテンプレートではなくて昨日書いた
オーバーロード関数を特殊化しようとしてビルドエラーになるわrz
C++はいろいろ破綻している罠だらけの言語やとそのとき確信したわ;
327:デフォルトの名無しさん
19/06/30 21:42:30.00 quJHbj16a.net
C++スレでC++の話をして何が悪いの
328:デフォルトの名無しさん
19/06/30 21:45:46.60 HRz15QoR0.net
C++の話は悪くないかもしれないが、関数テンプレートの部分特殊化ができないというC++の仕様は悪い
※ 個人の感想です
329:デフォルトの名無しさん
19/06/30 21:47:02.52 quJHbj16a.net
>>324
念のため確認なんだけど
template<> void tr_pos<Foo,Foo>(const Foo& src, const Foo& dst) { ... }
template<> void tr_pos<Bar,Bar>(const Bar& src, const Bar& dst) { ... }
じゃなくて?
330:デフォルトの名無しさん
19/06/30 21:47:07.25 FO3LFjkXM.net
皮肉もわからんか
オーバーロードの解決順を制御するTipsがあった気が
この辺はマジで分かりにくいわ
コンパイルオプションで名前解決の過程が可視化できるとありがたいんだけど
331:デフォルトの名無しさん
19/06/30 21:50:50.85 DqQWlJNh0.net
constexpr ifで解決
332:デフォルトの名無しさん
19/06/30 22:04:25.11 HRz15QoR0.net
>>327
うおホンマやできた!
mjk、、、
333:デフォルトの名無しさん
19/06/30 22:15:40.66 quJHbj16a.net
さらに言えば<Foo,Foo>と<Bar,Bar>の所消しても動かん?
template<>void tr_pos(const Foo...
334:デフォルトの名無しさん
19/06/30 22:49:04.24 HRz15QoR0.net
>>331
それはさすがに駄目で、VC++で次のエラーになる
error C2912: 明示的な特殊化; 'void tr_pos(const Foo&,Foo &)' は関数テンプレートの特殊化ではありません。
原因は1日目に追加したtr_pos<T, U>(const T&, U&)、および2日目に追加したtr_pos<U>(const Foo&, U&)、tr_pos<T>(const T&, Foo&)の
3種類のうちのどれを特殊化すべきなのかわからないかららしい
335:デフォルトの名無しさん
19/07/01 01:21:35.16 BYU8+sPJ0.net
まとめ: >>323-324の状況において、特殊化は次のように手段を使い分けねばならない
(1) 3日目のtr_pos(Foo, Bar)の追加は、関数テンプレートの特殊化ではエラーになるので関数のオーバーロードで特殊化する必要がある。
(理由)
tr_pos(Foo, Bar)は以下の関数テンプレート全てに当てはまってしまい、コンパイラが特殊化対象を特定できない。
tr_pos<T, U>(T, U), tr_pos<U>(Foo, U), tr_pos(U, Bar)
(2) 4日目のtr_pos(Foo, Foo)の追加は、関数テンプレートを>>327のように型パラメータ<T, U>を全て指定して明示的特殊化するなら逝ける
(理由)
関数引数にBarが現れないことから、tr_pos<U>(U, Bar)は特殊化対象から外れる。
型パラメータ<T, U>を両方明示することにより、tr_pos<U>(Foo, U)も特殊化対象から外れる。
==> 残るtr_pos<T, U>(T, U)が特殊化対象の関数テンプレートであるとコンパイラが判断できる。
(3) 一方、4日目のやつを暗黙的特殊化で行おうとするとビルドエラーで失敗する。
(>>332でも述べたが、上記(1)と同じことになる。
T::get()やU::set()を持たないクラスであるFooやBarを無理やりtr_pos()というシグネチャで他と統一的に扱おうとした結果スゲー薄氷を踏むようなプログラミングになっていた、
ことがわかった、、
336:デフォルトの名無しさん
19/07/01 01:26:55.48 VrgMufZ30.net
constexpr if使えって
337:デフォルトの名無しさん
19/07/01 07:07:40.85 BYU8+sPJ0.net
>>333プチ訂正orz
誤: tr_pos(U, Bar)
正: tr_pos<T>(T, Bar)
>>334
手元の環境はC++14なので使えないっぽい
および、>>323-324のガンはtr_pos<U>(Foo, U), tr_pos<T>(T, Bar)の2つのテンプレートの名前が
tr_pos<T, U>(T, U)と同じであることにあるのは確定的に明らかなので、これを治療するのが筋
constexpr ifに逃げるのはいささか筋が悪いかと、
※ tr_pos<U>(Foo, U), tr_pos<T>(T, Bar) を、それぞれtr_pos以外の固有の名前に改名し
(例えばtr_pos_from_Foo,とtr_pos_to_Bar)、
tr_pos<T, U>(T, U)にてそれらを使って共通の名前tr_posで実体化するテンプレートを書くならば、
テンプレート機能の中だけで目的(tr_pos(T, U)式のシグネチャへの統一)を果たせてシンプル&スマートに解決する。
338:デフォルトの名無しさん
19/07/01 09:30:45.05 9r8RZXK30.net
>>317
アメリカのコンピュータ科学系の学生の7割がポインタが理解できないらしい。
339:デフォルトの名無しさん
19/07/01 10:02:33.15 PRpBlBSs0.net
これか
URLリンク(local.joelonsoftware.com)
340:デフォルトの名無しさん
19/07/01 11:10:00.06 O1pDJEnN0.net
Ruby の女神・池澤あやかが言ってる
大学で、C言語を教えるから、ほとんどの人がプログラムを嫌いになる!
だから、Rubyから始めるべきだって!
YouTube に動画を上げてるKENTA も、初心者はRubyから始めるべきだって言ってる!
多言語やってる専門家は、皆、Rubyからって言う
341:デフォルトの名無しさん
19/07/01 11:18:05.93 VrgMufZ30.net
動いているプログラムそのものを記述できるC言語を理解できないとコンピュータサイエンスを修めたとは言えないでしょ
342:デフォルトの名無しさん
19/07/01 11:58:55.18 PRpBlBSs0.net
俺もCから始めるべきだって思ってた
ま、俺自身はHSPやった後にCやったんだけど
最初スクリプト言語みたいなライトウェイトなやつやるべきだってのは正しいのかもね
343:デフォルトの名無しさん
19/07/01 12:02:11.46 9r8RZXK30.net
実は、プログラミングに興味がある人は多くても、適性が余り無い人の方が多い。
だから、誰でも出来る言語の人気が高まる。それがスクリプト言語であり、
VBやC#だろう。多数決の投票では平易な言語が上位に来る。
344:デフォルトの名無しさん
19/07/01 12:20:44.35 egPtqar40.net
個人的にはC++は難しいのではなく面倒くさい言語だと思っている
345:デフォルトの名無しさん
19/07/01 12:24:01.47 1rDt3gobd.net
ポインタが理解できないなら参照も理解できないと思うんだけどな
346:デフォルトの名無しさん
19/07/01 13:20:50.81 s+tlfRKE0.net
日本にはc言語ポインターだけを解説した本が有るじゃないか
自分はあれを読んで初めて
ポインターの何を理解出来ていないのかが解った
c言語は人間の認識的に誤りやすい書き方になっているのが問題
そういうのをシマンテッスク問題とか言うらしい
347:デフォルトの名無しさん
19/07/01 13:42:23.56 8FaRxtrBa.net
アセンブリ言語を先に勉強すべきだんだよな
それだとメモリとそのアドレスを当たり前のように使うし
それこそがコンピュータなのだとわかる
そのあとで変数や参照はどう受け渡しされるのかを理解すればスムーズ
348:デフォルトの名無しさん
19/07/01 15:06:31.19 AV54Usro0.net
問題はアセンブリを始めるには手頃なアセンブラが無いというところか?
手頃さで言ったらGASぐらいだと思うんだが
349:デフォルトの名無しさん
19/07/01 15:17:48.47 a6aZqP3P0.net
>>343
ところが、
1. TYPE[10][10] aaa; は理解しやすくても、
2. TYPE aaa[10][10];
3. TYPE *aaa[10][10];
4. TYPE (*aaa)[10][10];
3, 4 となると意味不明になる人が多いらしい。また、典型的な例として、
2の場合に、aaa[5] の意味を理解できない人が多い。
350:デフォルトの名無しさん
19/07/01 15:21:46.37 9r8RZXK30.net
>>344
多分それは、>>347 みたいな話で、優先順位を「ほどいて」理解できない人
が多いんだと思うが、実は、見た目と離れて、優先順位どおりに、
配列やポインタの記号を「直線化」するとそんなに難しい話ではないんだが、
数学の計算と同じようなことで、それが難しい人がいる。
351:デフォルトの名無しさん
19/07/01 15:24:39.60 9r8RZXK30.net
>>342
実際にそういう人もいるが、自分が難しくて理解できないだけなのに、
言語設計に問題があるという風に捕らえる人もいる。そして多数決だと
圧倒的に後者のように感じる人が多くなってしまう。微分積分や
複素数、ベクトルはどれも美しい理論だが、理解できないために、
不要論が出てくるのと同じ。
352:デフォルトの名無しさん
19/07/01 15:39:49.57 EBI1AAR2M.net
言語設計は誉められたもんじゃないだろ
数学に例えられるレベルじゃない
353:デフォルトの名無しさん
19/07/01 15:47:20.77 VrgMufZ30.net
でもC/C++に変わるものが無いのが現実なんだよね
結局これがベター
354:デフォルトの名無しさん
19/07/01 16:34:31.14 a6aZqP3P0.net
>>350
でも、ポインタの書き方なんかはC設計者によるとても美しい設計とも言える部分。
言語設計が汚いのは、むしろ、C++に後から追加されてきた部分で、特に
最近に付け加えられてきた部分が誰かの言ったように「ハウルの動く城」的
になっている。
ところが、逆のことを言ってしまう人がいて、その人はポインタが理解できる
才能が無い人だと思う。
355:デフォルトの名無しさん
19/07/01 17:17:50.53 P3ZjOgE1M.net
>>351
そりゃ他の言語はC++のクラスを手本にクラスの仕様を決めてるからな
356:デフォルトの名無しさん
19/07/01 17:40:46.64 LBwvGCQOd.net
>>352
いや単にポインターまでの概念しか理解できない人だと思うよ
参照、右辺値参照辺りが理解できないで批判する人多い
357:デフォルトの名無しさん
19/07/01 17:43:47.18 9r8RZXK30.net
>>354
右辺値参照が理解できないのは分かるけど、単なる TYPE &aaa みたいな参照型
は、ポインタが理解しにくい人用に用意されたとも言われてる機能で、
ポインタが理解できたのにそれが理解できないとは考えにくい。
358:デフォルトの名無しさん
19/07/01 18:19:11.58 P3ZjOgE1M.net
右辺値と左辺値で参照レベルが変わるのがややこしい原因だと思うけどね。
変数名aを左辺で使うとaという入れ物、右辺で使うとaの中身。
*bを左辺で使うとbの中身のアドレスが指し示す場所、
右辺で使うとbの中身が指してるアドレスの中に入ってる値。
参照レベルを変える演算子のない言語なら意識しないところだが。
359:デフォルトの名無しさん
19/07/01 19:34:03.65 /QTcp5brM.net
glvalue
rvalue
lvalue
xvalue
prvalue
入門者の皆さんはまず上記の違いを把握することから始めましょう!
360:デフォルトの名無しさん
19/07/01 21:19:13.74 CBwS2tFI0.net
そういうのしょうもないと思わないってのはほんとセンスないわ。
361:デフォルトの名無しさん
19/07/01 21:23:38.44 EBI1AAR2M.net
皮肉だろ
否定3つも使うな
お前は国語のセンスない
362:デフォルトの名無しさん
19/07/01 21:30:29.37 /C7KUVH40.net
韻を踏んでるのかと思った
363:蟻人間
19/07/01 21:40:34.52 4oyko1E1d.net
♪そうゆうの~、しょ~もないって、思わないって、ほんとセンスないないさぁ~
作曲頼む
364:デフォルトの名無しさん
19/07/01 21:54:03.12 DUIe02Rn0.net
槇原敬之かよ
365:デフォルトの名無しさん
19/07/02 08:17:38.82 vQT+qXro0.net
>>357
入門者はCを学んだ後、C++の class、メンバ関数、仮想関数、コンストラクタ、
デストラクタ、演算子のオーバーロード、継承、templateの基本などを学べば
C++の重要な部分は使えるので、xvalue、glvalue、prvalueなどは
すぐには分からなくてもいいと思う。
366:デフォルトの名無しさん
19/07/02 08:29:28.55 vQT+qXro0.net
便利そうに見えても、CやC++の基礎をすっ飛ばしてboostやSTLを学ぶのは
C++の本質が学べないので良くない。それらにも配列やリストなどがあって、
C#などの高級言語風に使えるので初心者は勘違いしてしまいがちだが、
それらは「動的」なものが多く、本来のC++の速度が出ない事がある。
もともとのC++は、静的な配列が基本なので、速度を上げたいなら、
静的な方で済む場合にはなるべく静的なものを使うべき。その基本を知らずに
STLだけを何の配慮も無く使っていたら、昔からのC++のような高速なアプリ
を作るのは困難。
367:デフォルトの名無しさん
19/07/02 09:16:37.23 4nney+pq0.net
>>364
そんな考えだときりがない。
実測して時間かかってるところだけを改良したほうがいい
速度にほとんど影響しないところでも拘る、時間かかるはめになる。
368:デフォルトの名無しさん
19/07/02 09:47:27.28 OxvoR50aM.net
std::arrayとかあるじゃん
369:デフォルトの名無しさん
19/07/02 10:32:43.01 uMGeffjZ0.net
たとえ動的な、vector を使っていても、それよりも速いコードを書けないw