C++相談室 part152at TECH
C++相談室 part152 - 暇つぶし2ch1:デフォルトの名無しさん
20/07/12 13:42:20.13 TX1mpKr6.net
スレリンク(tech板)

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

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

4:デフォルトの名無しさん
20/07/12 14:06:26.23 tkU6cDNN.net
>>3
void君まだ生きてたの?

5:デフォルトの名無しさん
20/07/12 19:59:20 7bgQZ4MZ.net
-Wl,--start-groupって-Wl,--end-groupで閉じなくてもいいの?

6:デフォルトの名無しさん
20/07/12 22:51:08.59 CSJoJ4mx.net
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします!
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします!

7:デフォルトの名無しさん
20/07/13 04:14:20.50 3a05UOb2.net
ある整数nが他の整数の4乗数であることも確かめられない奴らが常駐してるC++スレに何の意味があるのだろうか、、、
素直にsqrtなりpowなり使えば良いのに無意味に二分探索とか言い出す奴まで現れる始末

8:デフォルトの名無しさん
20/07/13 10:33:53 WBkWHxcT.net
#include <stdafx.h> が入ってると消したくなる

9:デフォルトの名無しさん
20/07/13 10:35:47 WBkWHxcT.net
>>7
流れ観てて思ったけど
整数の2乗数じゃないと判った時点で整数の4乗数でないことは明らかで打ち切りっていうレスが無かった気がする

10:デフォルトの名無しさん
20/07/13 12:07:41.92 a0LpYw/5.net
>>8
VS2019だと入らないぞ

11:デフォルトの名無しさん
20/07/13 12:09:59.97 WBkWHxcT.net
それ5ちゃんは2ちゃんじゃない5ちゃんだってのと同じ匂いがする

12:デフォルトの名無しさん
20/07/13 17:47:10 17o/9bhC.net
>>9
前スレッドで
スレリンク(tech板:998番)
は、そのつもりで書いたんだけど、上手く伝わらなかったみたいね。

13:デフォルトの名無しさん
20/07/13 18:28:35.47 fGz9l1yv.net
4乗数は例えばmod5で必ず0か1なので234だったら弾ける
他にもいろんなmod使ってアーリーリジェクトするのが速い
まあそれだけで判定はできないから最後は真面目に確かめるんだけど

14:デフォルトの名無しさん
20/07/13 19:32:08 5XlUrV9a.net
整数の4乗だろ?
どのレンジの値までサポートする必要があるのか
この辺に意識行かないやつは初級者

15:デフォルトの名無しさん
20/07/13 22:49:46.38 vn0aaIQL.net
>>12
知ってた

16:デフォルトの名無しさん
20/07/13 23:35:03 hjMalhfu.net
template <class R>
R hoge(std::function<R(int)> func, int val) {
return func(val);
}

みたいな、std::functionの戻り値の型がテンプレートな関数があったときに、第一引数のfuncに渡す引数を
「std::function<int(int)> f = [](auto a) {return 10 * a; }」
と明示的に「std::function」にすると、Rも型推論が効いて「hoge(f, 10)」と呼べますが
ラムダ式を直接渡すと、Rの型推論が働かず「hoge<int>([](auto a){...}, 10);」と
テンプレートの型を明示しない限り、MSVC2019(std:c++latest)ではコンパイルエラーになります。

こういう場合にラムダ式から型を推論できる関数を作る方法ってないですかね?
ラムダ式がいければ、std::functionは渡せなくなってもいいのですが。

17:デフォルトの名無しさん
20/07/14 00:18:40 zGM7yt58.net
aがintであることはどこから推定するの?

18:デフォルトの名無しさん
20/07/14 01:20:42 BX6Ieja2.net
難しく考えすぎ

template <class F>
auto hoge(F func, int val) { return func(val); }

19:デフォルトの名無しさん
20/07/14 07:41:56.85 XNlphOJb.net
[](auto a) -> int {return 10 * a; }
[](auto a) -> std::common_type_t<int, decltype(a)> {return 10 * a; }

20:デフォルトの名無しさん
20/07/14 19:51:39 XydZfji4.net
>>17-19
ありがとうございます。やりたかったことができました。
ラムダだからって変にstd::functionとか入れずに、関数まるごとテンプレートに委ねればよかったんですね。
どうも関数を特別視してしまっていたようです。

21:デフォルトの名無しさん
20/07/20 23:03:27.73 6gjYUAkG.net
保守

22:デフォルトの名無しさん
20/07/22 21:14:41.10 KUJQPOij.net
std::list<int> l = {0, 1, 2};
auto it = l.begin();
// auto x = move(*it);
l.erase(it);
// この後 x にムーブしてればいいけど it を参照するのは未定義動作?
// pop が削除した要素を返してくれればいいのに

23:デフォルトの名無しさん
20/07/22 21:27:49.98 ZfR2rpjD.net
>>22
まるで正常

24:デフォルトの名無しさん
20/07/22 23:12:53.61 tg3nt/Qu.net
コマンドライン引数でブーリアン渡したいときってどうするん

25:デフォルトの名無しさん
20/07/22 23:46:58.46 xb0kAqoI.net
コマンドライン引数は文字列
boolとかintとか渡せない
「"1000"を1000と解釈してintを渡せる」って言うなら、
同様に"true","false"を解釈すればいい

26:デフォルトの名無しさん
20/07/23 00:41:36 4rdlbzE6.net
getopt

27:デフォルトの名無しさん
20/07/23 06:09:28 fF4wk4d/.net
オプション文字列を渡す作法のような話なら
-f1, -f0 や --flag, --no-flag の形で渡すかな。
簡易的には -f と指定すれば有効、指定しなければ無効、って感じ。

28:デフォルトの名無しさん
20/07/23 08:45:05 SrgI206W.net
結局はORマッパーのような問題に行きつく

29:デフォルトの名無しさん
20/07/25 02:54:53.84 hso1irDO.net
お前らってマゾだよね

30:デフォルトの名無しさん
20/07/27 02:23:48.14 kndJPXCH.net
ある変数に対してプロセスAからは書き込みしかしないで別プロセスBは読み込みしかしない場合
この変数に対してstd::atomic<>する必要ありますか?

31:デフォルトの名無しさん
20/07/27 02:50:40.88 OPuipBq/.net
あります

32:デフォルトの名無しさん
20/07/27 03:16:39.82 iDNWe3mh.net
>>30
プロセスとスレッドの違いは理解している?

33:デフォルトの名無しさん
20/07/27 05:33:26.23 EghVn5lV.net
「プロセス」は「スレッド」と読み替えるとして
自前で排他してもいいし
「ある変数」が例えばintで今のPCのCPUなら元々アトミック
そういう意味では「std::atomic<>する必要」はないよ

34:デフォルトの名無しさん
20/07/27 07:02:13.52 QTF0cexn.net
すstd::atomic<>なら型に応じた特殊化がなされていることが気体できるのでは知らんけど
ていうかTによらずアクセスの度に馬鹿正直にcritical sectionに出入りされる実装だったら嫌すぐる、、、
アーキテクチャーに応じて確実に作動するDouble-Checked LockingとかTripple-Checked Lockingとかになって
最適なパフォーマンスが出るコードにしていただける処理系であってホスイ

35:デフォルトの名無しさん
20/07/27 07:31:29.47 9eU73XOZ.net
>>30
別途排他制御をしていないなら、コンパイル時や実行時に勝手に実行順序並び替えて誤動作する可能性があるから、atomicにしておいたほうがええよ

36:デフォルトの名無しさん
20/07/27 08:17:24.84 7+Lkkq8+.net
読み込む側が壊れた値でも構わないなら要らない

37:デフォルトの名無しさん
20/07/27 08:47:53.90 eo3eOCcP.net
>>36 未定義動作の結果はそれだけでは済まないかもしれない。

38:デフォルトの名無しさん
20/07/27 11:14:28.62 vNtx9fDh.net
DRAMがリフレッシュされなくなるとかか

39:デフォルトの名無しさん
20/07/27 11:45:04.43 HTI8upPJ.net
プロセスならOS提供の共有メモリ使うから、未定義動作の範疇外じゃね

40:デフォルトの名無しさん
20/07/27 12:06:22.37 arCdAL0/.net
>>30
結論は必要がある(もちろん環境依存しないのが前提として)
>>33は間違い
たとえCPUがload/storeのatomic性を保証していたとしても
コンパイラが代入を1 instructionにする保証がない
なのでLinux kernelでは(C言語だけど)WRITE_ONCEみたいな一見意味不明なマクロが用意されていたりする
マルチプロセスでlock-freeを自作するのは勉強になるけど、たぶんミスるから
製品とかでは使わないのをお勧めする

41:デフォルトの名無しさん
20/07/27 20:51:46.94 EghVn5lV.net
>>40
CPUがstoreのatomic性を保証しているのに
コンパイラが代入を2 instructionにできるの??
俺には意味不明だ

42:デフォルトの名無しさん
20/07/27 22:29:41 SfaUTK+M.net
>>41
できるできないならできるだろ
例えば32bit整数を16bit毎に書き込むようにすればいいだけだし
そんな意味のないことをするコンパイラがあるかどうかは知らんけど

43:デフォルトの名無しさん
20/07/27 23:14:45 OPuipBq/.net
コンパイラが独自仕様で明示的に保証してるなら別にいいよ
特に何も書いてないなら保証されてないと思うべき

44:デフォルトの名無しさん
20/07/27 23:30:43.14 arCdAL0/.net
>>42
x86だと即値の場合16bit x2のコードが吐かれる場合があるらしいよ

45:デフォルトの名無しさん
20/07/28 15:19:44.89 XpAjM/1U.net
URLリンク(ja.wikipedia.org)
URLリンク(ja.wikipedia.org)

46:デフォルトの名無しさん
20/07/28 15:58:37 2ZofU2zv.net
forで少しの(255以下)ループ回すときにint i=0;i<10;++iとかするけどなんで
2バイトのintでとって1バイトのunsigned charじゃあまり取らないんだろ?
(typedefで宣言すればタイプ数少なくできるし・・・)

47:デフォルトの名無しさん
20/07/28 16:02:12 0Pr5T/O4.net
unsigned char でループしても良いけど
結局 int にされるでしょ
それより int が 2byte っていつの話よ

48:デフォルトの名無しさん
20/07/28 16:05:58 2ZofU2zv.net
>>47
すいません
>結局 int にされるでしょ
ってとこ解説お願いします

マイコンでc使うときにメモリ節約しようと思って
そもそも組み込み系のスレで質問しろって話ですが・・・

49:デフォルトの名無しさん
20/07/28 16:12:26 JnUAmZD/.net
>>48
charは算術式の中ではintに拡張されるって話だ
char a, b;
printf("%u", sizeof(a)); //1, これは左辺値で算術式ではない
printf("%u", sizeof(a - b)); //2, 減算の算術式
printf("%u", sizeof(+a)); //2, 単項プラスの算術式

50:デフォルトの名無しさん
20/07/28 16:16:35.96 2ZofU2zv.net
>>49
なるほど
ちなみにこれで最後の質問ですが
forループは自分が間違えてましたしint使ったほうがいいと理解しました
それでビット演算でのみ使う場合においては
intにされることはないという認識でいいでしょうか?
(ビット演算で使いたいと思って調べてたらふと>>46みたいな疑問が湧いたので)

51:デフォルトの名無しさん
20/07/28 16:18:26.72 JnUAmZD/.net
>>46
charの拡張はcpu内部のレジスタで行われるだけで
メモリにはその痕跡が残らない
だからintをunsigned charにすればメモリを節約する効果は
期待できる(ただし保証はされない)
俺も実はforの制御変数は[0, 256)の範囲内でもintを使うが
正直に本音を言うと長い長いtypedef unsigned charをタイプせずに
短くintで済むからだ
普段建前ではintは自然なサイズの整数だからとか言い訳してるけどね

52:デフォルトの名無しさん
20/07/28 16:20:24.69 2ZofU2zv.net
>>51
なるほど
丁寧に解説してもらい助かりました
スッキリしました、ありがとうございます
あとメモリの節約には効果ありそうなのは目論見通りなのでよかったです

53:デフォルトの名無しさん
20/07/28 16:23:12.92 tckSAZy5.net
>>52
URLリンク(ideone.com)

54:デフォルトの名無しさん
20/07/28 16:23:36.08 JnUAmZD/.net
>>50
されるよ
たとえば、こういう場合
char c = 0;
c = c | 1;
部分式 c | 1 は ((int)c) | 1 で計算され結果はint
c = (char)結果; という具合にcharに戻して書き込む
c は00000000
c | 1 は0000000000000001
=は00000001にしてからを書き込む
一旦intにされたものをcharに戻して書き込んでいるが
普段はこのことを忘れていても正しいコードが書けてしまう

55:デフォルトの名無しさん
20/07/28 16:27:57.80 JnUAmZD/.net
おっと、ここC++スレやん
Cスレのつもりだったw
C++の場合はここ気をつけて
void func(char); //#1
void func(int); //#2
char c = 0;
func(c | 1); //#2

56:デフォルトの名無しさん
20/07/28 16:28:23.54 2ZofU2zv.net
>>53
>>54
ありがとうございます
されるんですね・・・
う〜ん、やっぱ大人しくint使います(メモリ切り詰めるほどでないなら)

57:デフォルトの名無しさん
20/07/28 16:29:57.66 2ZofU2zv.net
>>55
丁寧にどうもです
いや、自分が悪いっす
そもそもここで聞くなよという話なので
(ここが一番はやく回答してくれるので申し訳無さ半分で質問してます・・・)

58:デフォルトの名無しさん
20/07/28 16:36:03.22 Vr5x1U6Z.net
>>51-52
「メモリを節約する効果は期待できる(ただし保証はされない)」っていうより
「メモリを節約する効果は期待できない(ただし可能性はゼロではない)」でしょ。
ほんとうにメモリ節約のためにやるなら実測のうえ結果をコメントで添えてたのむ。

59:デフォルトの名無しさん
20/07/28 16:41:14.06 JnUAmZD/.net
>>58
sizeof(int) == 2な環境を使ってる質問者だぜ?
おまえさんターゲットをエスパーできるのか?
できたとして同じコンパイラ持ってるか?

60:デフォルトの名無しさん
20/07/28 16:43:35.65 XpAjM/1U.net
(ただし可能性はゼロではない)

61:デフォルトの名無しさん
20/07/28 16:51:19.06 FdPQCZeu.net
>>56
char使ってメモリ節約ってのは基本的にクラス・構造体のメンバとか配列、かつそれらが多用される場合ね
単発の一時変数をcharにしたところでそれがスタックに置かれたとしてもアライメントで何も節約できてないどころか
整数拡張のオーバヘッドで逆に非効率になる
引数にchar使うのも性能上は意味がない
組み込みマイコンなら特に逆アセは読めるようになった方がいいよ

62:デフォルトの名無しさん
20/07/28 17:03:52 2ZofU2zv.net
ちょっと追加で調べて納得したのはcharを扱うメリットとしては
int ポインタ型に +1 した際、何バイト進むのかは処理系に依存するけど
char ポインタ型なら必ず1バイトだけ進むから
その場合においてメリットがあるからchar使えってことですかね?

63:デフォルトの名無しさん
20/07/28 17:08:44.62 XpAjM/1U.net
>>62
それ最初の質問と何か関係あるか?

64:デフォルトの名無しさん
20/07/28 17:15:03.80 JnUAmZD/.net
>>61
別に逆汗しなくても汗吐かせればええやん
けっこう懇切丁寧にコメント入れてくれたりするぞ

65:デフォルトの名無しさん
20/07/29 00:51:49 YVVFldw+.net
デバッガでトレースしながら読むから逆アセだな
アセンブラ吐かせるってそれ用にビルド設定用意するのか?

66:デフォルトの名無しさん
20/07/29 04:47:56.76 8sSsdFab.net
泥縄で設定変えるのイヤだから
端っからアセンブラ経由にしてる

67:デフォルトの名無しさん
20/07/30 06:46:58 82YOHtIh.net
C++でUnicodeを扱いたいんですがライブラリを探したほうが良いですか?
なにか定番のライブラリありませんか?

68:デフォルトの名無しさん
20/07/30 07:59:44 h+N/x6i+.net
ICU一択でしょ

69:デフォルトの名無しさん
20/07/30 21:53:30 82YOHtIh.net
>>68
返信遅くなってすみません
ICU把握しました、ありがとうございます

70:デフォルトの名無しさん
20/07/31 10:43:54.52 N0eufbNj.net
逼迫中

71:デフォルトの名無しさん
20/07/31 13:57:05.58 RNPOl6hd.net
学術の巨大掲示板群 - アルファ・ラボ URLリンク(x0000.net)<)
☆ malloc / free を実装してみた (C#)
URLリンク(up.x0000.net)

72:デフォルトの名無しさん
20/08/08 00:45:58.56 0OMeneB5.net
保守

73:デフォルトの名無しさん
20/08/10 15:43:27 fh5hS3eV.net
UDPで、メッセージをブロードキャストすると該当するコンピューターがユニキャストで応答するんですが、
このとき、シングルスレッドで、ブロッキングでsendでブロードキャストしてすぐにrecvで受信待ちするのは素敵ではないですよね?

74:デフォルトの名無しさん
20/08/10 15:45:49.73 fh5hS3eV.net
UDP でもともとreliableでないですがsendとrecvの間にネットワークスタックが受信したりすると、recvで受信できない?

75:デフォルトの名無しさん
20/08/10 15:48:15.44 fh5hS3eV.net
UDPはじめてなんですが、受信を先に立ち上げてから、sendすべきでしょうか?

76:デフォルトの名無しさん
20/08/10 16:28:51 bhDIRnmP.net
UDPスレで聞け

77:デフォルトの名無しさん
20/08/10 18:44:21.00 94dKV070.net
一文で「で」使いすぎ

78:デフォルトの名無しさん
20/08/10 21:36:29 DdNEnUy+.net
○○で××で△△な□□ってオタクが好む文語でしょww

79:デフォルトの名無しさん
20/08/10 22:39:58 miZfIOtK.net
それオタクていうか、ラノベ勢やん

80:デフォルトの名無しさん
20/08/12 21:03:47 CtzJaQ9q.net
std::unordered_mapのキーをstd::stringにして
findで検索する時にstd::string_viewを使って検索したいんだけど、
error C2664 : 'std::string_view' から 'const _Kty &' へ変換できません。
と出てしまいます。

std::unordered_mapの場合ではどうすればいいでしょうか?(´・ω・`)
以下仮コード
std::unordered_map<std::string, int> a;
a.insert_or_assign("AAA", 10);
std::string_view b = "AAA";
std::unordered_map<std::string, int>::iterator it = a.find(b);

81:デフォルトの名無しさん
20/08/12 21:20:56.14 3e1Z4brU.net
>>80 a.find(std::string(b));

82:デフォルトの名無しさん
20/08/12 21:37:06 CtzJaQ9q.net
>>81
あ・・・・・・(´・ω・`)
できました。ありがとうございます。

ついでに聞きたいのですが、
std::stringに変換することなくfind関数を使用するにはどうすればいいんでしょうか?
std::mapであれば、std::less<>を用いることでfind関数を使用した時std::string_viewでも検索できるようになりますが、
std::unordered_mapの場合はどのようにすればいいんでしょうか?

83:デフォルトの名無しさん
20/08/12 21:43:02 3e1Z4brU.net
>>82
URLリンク(wg21.link)
URLリンク(cpprefjp.github.io)
> 順序付き連想コンテナと同様に、非順序連想コンテナの検索処理で、一時オブジェクトが生成されるコストを抑える拡張を追加。...

84:デフォルトの名無しさん
20/08/12 21:49:15 CtzJaQ9q.net
>>83
これは・・・・・・
C++20から使えるかも?ってことですかね?(´・ω・`)

85:デフォルトの名無しさん
20/08/13 10:37:08.60 m1xh97jB.net
std::unordered_map<const std::string, int> a;

86:デフォルトの名無しさん
20/08/13 11:17:58 hnCcHlo3.net
C++2a
URLリンク(cppinsights.io)

URLリンク(arnemertz.github.io)
URLリンク(riptutorial.com)

URLリンク(wandbox.org)
URLリンク(coliru.stacked-crooked.com)

87:デフォルトの名無しさん
20/08/16 03:35:19.99 Qk/OMLZN.net
今年学生でコロナ下でオンラインばかりなので合間を縫って独学に勤しんでます。
優しいc++を読み終えました
現在atcoderのabcやオライリーから出てるmodern c++ チャレンジ等をやっていますが、何をもってプログラミングが出来ると言うのでしょうか?
テトリス等もサイトを参考に書いたりしてみました。
自分はlinux上で動作する音楽プレイヤーソフトを作成したいと思うのですが、文法等はある程度理解していてもいざ自分で一から作れと言われると出来ません。c/c++で書かれているgithubのソースコード等は読めるんです
読めると言うのは、知らない文法やライブラリ等検索出来るためなんとなく実装内容がわかるって意味です
しかし自分で一からとなると何から始めればいいのか…

皆さんはこの壁をどう超えましたか?それとも壁に出会いませんでしたか?もしそれなりの規模の開発をする際止まった経験があるならばアドバイスを欲しいです
長文すみません

88:デフォルトの名無しさん
20/08/16 03:47:01 Degs0Zl8.net
初心者は、Ruby on Rails で、web アプリのポートフォリオを作る

むしろ、コーディング・テストよりも、
アプリの設計・構築運用など、Linux の勉強の方が多い

文法・コーディングだけだと、ちょっとしたコマンドぐらいしか作れない

Rails みたいなフレームワークを使わないと、
データベースを含んだ、webアプリなどは作れない

89:デフォルトの名無しさん
20/08/16 05:51:14.48 1OSQgfCu.net
>>87
linuxの統合開発環境がどんなのか知らんけど、とりあえず空のプロジェクトから作るのは出来るんでしょ?
そっから必要なものを一つずつ実装してくだけだよ
千里の道もうんたらで

90:デフォルトの名無しさん
20/08/16 06:33:25.81 wVZFHsSL.net
>>87
> 何をもってプログラミングが出来ると言うのでしょうか?
何かを作るぞ! と頑張って、目標を達成できること
「何か」はゲームでもいいしドローンの自動運転でもいいから
自分の好みで勝手に決めればいい
87は音楽プレイヤーだろ?
いきなり市販のプレイヤーに匹敵しなくてもいい
こんなことできないかな~とアイディア先行で実験してみて
うまくいったら見栄えも気にして仕上げにかかる
てなことを小刻みに繰り返すとアジャイルっぽくなる

91:デフォルトの名無しさん
20/08/16 07:20:43.69 5tP8nVqa.net
第二不完全性定理の制約を受けず、
停止性問題を解けること、
って無理ゲーじゃん?!?
なんで人間ってプログラミングできるの?!!?!

92:デフォルトの名無しさん
20/08/16 09:23:07.48 ng3yYkoc.net
ユニバーサル文法があるから
その辺りは余り深く考えても意味が無い
出来るから出来る
出来ない奴は出来ない

93:デフォルトの名無しさん
20/08/16 10:39:09.01 5tP8nVqa.net
ユニバーサル文法を操るメンタルオーガンが実在したとしても
そいつがたんなる機械なら解決にならないんじゃ…

94:デフォルトの名無しさん
20/08/16 12:13:35 INgchOov.net
>>87
まず作りたいものの機能をもった最も簡単なプログラム作ったら?
例えば音楽プレーヤーがお題なら音声ファイル名を与えると再生するだけのコマンド
あとは機能を付け足してく

95:デフォルトの名無しさん
20/08/16 14:54:00.65 43uVw8aV.net
>>87
強いて言えば
「バグ取りを自分で出来ること」

96:デフォルトの名無しさん
20/08/16 15:36:41.55 1Qmt1HH2.net
>>87
アプリ作り上げるのに言語の詳しい知識って実はあんまり要らないんだよね
c++だとtemplateにはまって一日つぶすとかざらにあるんだけど、
これってただの自己満だよな~って思う
愚直なコードでとりあえず解決しておいて、その分
アプリとして作り込むのに時間かけた方がよかったんだろなーと
まぁそれはさておき、音楽プレーヤなら
- GUIフレームワーク
- CODECライブラリ
- linuxシステムコール、libc
あたりの知識がないと進められないでしょう
GUIフレームのお作法の理解とか、
CODECもフォーマット特有の制約が上位まで波及したりするから結構知識いるよね
まず何を使うかの選定からでしょう
あと、たぶんお前さんの作りたいものは既に世の中にごまんとあるはず
それを承知で勉強と割り切って作るのはいいんだけど、
あんまり大きいものは最初の目標にしないように
すぐに情熱失ってやめてしまうのがオチ

97:デフォルトの名無しさん
20/08/16 16:32:23 Qk/OMLZN.net
87のものです 皆さん有難うございます
再生させる機能やタグの取得等の割りかし簡単そうなものから実装していき
あわよくばイコライザーやスペクトラム等の機能も追加していこうと思います

あと、linuxだとuiや機能が優れた音楽プレイヤーって実は少ないんですよね…GitHub等でも探したのですが…foobar2000とかしかなくて正直ダサくて…
ないから自分で勉強がてら書いてみたいなと思った次第でした

98:デフォルトの名無しさん
20/08/16 17:31:00 PN3bHl0Q.net
>>87
〉何をもってプログラミングが出来ると言うのでしょうか?

他の人も似たようなこと言ってるけど、「ソフトを完成させる段取りを知っていること」が一つの目安。
実現機能を明確化して、実装する機能に分解して、必要なリソース・ライブラリを集めて、全部の機能を実装して、誤動作しないようにバグ取りをする。
これができれば言えるんじゃない?

少なくとも「プログラムするためには何が必要か」がわかるようになる。

99:デフォルトの名無しさん
20/08/16 18:12:46 8WlfPd5U.net
C++のGUIライブラリとして、こういうものがあるけどね。
お気に召すかわからんけど。

URLリンク(ja.uncyclopedia.info)

100:デフォルトの名無しさん
20/08/16 18:35:06 wVZFHsSL.net
>>96
ダウト
「こうしたい」と、せっかく閃いたアイディアを
表現力が足りないばかりに諦めたり
誰かさんみたいにtemplateがロクに使えなくて一日つぶすとかってのは
言語の詳しい知識が足りないことに他ならない
それを何やかんやと言い訳考えることこそ自己満以外の何物でもない
言語の基本をしっかり固めるのを軽視するとこうなるという典型だ

101:デフォルトの名無しさん
20/08/16 19:20:29.73 x8ZjthFZ.net
progress_displayいつになったら規格に取り込まれるんだ

102:デフォルトの名無しさん
20/08/17 02:08:49.38 u6ES7f8s.net
>誰かさんみたいにtemplateがロクに使えなくて一日つぶす
そんなこと一言も言ってなかったと思うが(俺96じゃないよ)
いつものアホが沸いたのかな?

103:デフォルトの名無しさん
20/08/17 02:55:30.59 vOFQCRbE.net
というか他人が思ったことに対してダウト~っていうセンスに痺れるわ

104:デフォルトの名無しさん
20/08/17 05:56:47.89 TQifZMS/.net
>>102
strcmp的なやつとは話にならねえ

105:デフォルトの名無しさん
20/08/17 07:50:57.12 p3n8cAbg.net
strcmp的なやつって笑える表現だな
a="templateにはまって一日つぶす";
b="templateがロクに使えなくて一日つぶす";
ここでstrcmp(a,b)が偽になる以上どういう意図のなのか説明が必要だろ
>言語の基本をしっかり固める
とはまったく逆の事をしてることに気づけ

106:デフォルトの名無しさん
20/08/17 08:11:11 TQifZMS/.net
へーえ、おまえさんとこではstrcmp(a, b)がint(0)を返すのか
ユーザーがあまりにも馬鹿過ぎると標準ライブラリまでバグるとは知らんかったわ

107:デフォルトの名無しさん
20/08/17 16:39:05 p3n8cAbg.net
strcmpてのは三値を返すんだから0が真で非0が偽

108:
20/08/17 19:38:46.36 fdEh9bfN.net
>>107
普通は零が偽、非零であればなんでも真、なんですけど

109:デフォルトの名無しさん
20/08/17 19:41:49.25 aDjhg6Zt.net
>>107
無茶苦茶言わないで、そこは「strcmp(a,b)==0が偽」の書き間違いだと認めるぐらいしようぜ。

110:デフォルトの名無しさん
20/08/17 19:49:37.18 I0An2PUB.net
揚げ足とりこそC++erの本懐よ

111:はちみつ餃子
20/08/17 20:13:14.96 Km1hLS23.net
strcmp を定義するのは言語仕様なんやから
あえて言語仕様と異なる用語を使うんなら
その適用範囲 (プロジェクト単位?) と共に定義を明文化するのは最低限の要求やろ。
当事者が合意した範囲内でなら一見して変な用語でも使うのは好きにすりゃええ。
たとえばハードウェアに近い部分なら負論理がソースコード上に露骨に現れることだって無いとは言いきれん。
ただそれは特殊な例を総合的に見てあえて奇妙な用語を使った方が良くなる場合にとる選択肢であって、
「三値を返すんだから」というようわからん理屈では正当化でけへんし、
言語のスレとしては許容でけへんわ。

112:デフォルトの名無しさん
20/08/17 20:18:38 vrG6zXoN.net
急にバリバリの関西弁でどないしたんや

113:デフォルトの名無しさん
20/08/17 20:25:51 ltcLkjuo.net
個人的には整数のサイズにこだわるときは
#include <cstdint>
してint8_tとか使ってるなぁ

114:デフォルトの名無しさん
20/08/17 21:37:15.36 S/xJ/Voo.net
そもそも3値な時点でbooleanの真偽かどうか議論すること自体無意味

115:デフォルトの名無しさん
20/08/17 22:07:28.50 cXN7EgSQ.net
真偽値じゃないものを真偽値扱いしてもエラーとして検出されない、根が深い問題なんだよな。
型が無いB言語に末代まで祟られているとも。

116:はちみつ餃子 ◆8X2XSCHEME
20/08/17 23:56:15 Km1hLS23.net
整数の暗黙の型変換はそれなりに上手くいってると思うけど
bool が整数型扱いってのがいきすぎた一般化だったのかもな。

117:デフォルトの名無しさん
20/08/18 00:15:03 6UORXKST.net
学術の巨大掲示板群 - アルファ・ラボ URLリンク(x0000.net)<)

118:デフォルトの名無しさん
20/08/19 03:53:13 itvjYGVQ.net
45歳こどおじ高卒無職歴約10年
10年以上前にIT系業界にいたが主にPC保守やユーザサポートをトータルしても10年くらい
コード開発の実務は30代の頃VB約3ヶ月でばっくれ
30代の頃エクセルVBA約3ヶ月でばっくれ
両方超ブラックだった
なんか疲れて実家帰ったらいつの間にか10年経ってた

暇なんで趣味で勉強してみた
2年前くらいに3ヶ月ほどjavaとpythonとc++
各言語のpaizaでC問題全部回答B問題10問くらい解けたからもうやってない
ガチで就職探したけど当然無くて諦めて勉強もやめてた

んでまた競プロサイトで練習始めたんだけど結局アルゴリズム意味不明で詰んだ感じ
暇なんで暇つぶしの惰性で練習してる感じ

こんなレベルで就職あるかな?
無職10年は適当にバイトしてたとかでごまかすコミュ力はあると自負してるつもり
こんな新人来られてもやっぱ迷惑だよね
てか俺が採用担当だったら絶対に採用しない

死んだほうが良いかな?
転生してやりなおしたい

119:デフォルトの名無しさん
20/08/19 06:19:51.21 AaZqqXX6.net
マ板でどうぞ

120:デフォルトの名無しさん
20/08/20 05:04:54.05 DqyqYTXG.net
if (!strcmp(a, b)) goto hell;

121:デフォルトの名無しさん
20/08/20 11:16:03 RX/3qqm6.net
hell終わるど

122:デフォルトの名無しさん
20/08/23 16:03:07.43 SVuEjc7r.net
例えば、
x<1 || y>3
と書いた場合、人間なら、この < や > は、大小比較をする比較演算子だと
思うでしょうが、コンパイラにとっては、1 || y を実引数とするところの
template展開だと勘違いする可能性があります。
どうやってこれを区別しているのでしょうか?

123:デフォルトの名無しさん
20/08/23 16:05:12.45 Exm+Pt+Z.net
どちらかというと
< <>, <> >
みたいなときに
<<>, <>>
って書くと期待通りに動かないのが面倒だと思う

124:デフォルトの名無しさん
20/08/23 16:08:14.77 SVuEjc7r.net
x がtemplate名であるかどうかを検査するのでしょうか?

125:デフォルトの名無しさん
20/08/23 16:18:37 SVuEjc7r.net
pure C で、構文ツリーを作りたいとき、出現してきた名前トークンがどう宣言されて
いるかを知らなくても、構文ツリーを作れてしまいます。
ところが、もし、xがtemplateの名前として宣言されているかどうかを知らなければ、
< が、比較演算なのが、template引き数の始まりを示す括弧なのかの区別が
付かないのであれば、そうはいかなくなります。

pure C の場合:
 構文ツリーを作る ---> ツリーの中にある中の名前の宣言を調べ、種類を見る。
で済んだところが、C++の場合、下手すれば、
 構文ツリーを作る際に、出現した名前の宣言も逐次、調べる。
ということになります。

126:デフォルトの名無しさん
20/08/23 16:40:37.67 VT3zweO2.net
その場合、トークンとしての'<'が比較演算子なのかテンプレートの括弧なのかは区別しないで
構文解釈の結果として文脈によって決定するのが常套手段だろうね。
URLリンク(github.com)
>ところが、もし、xがtemplateの名前として宣言されているかどうかを知らなければ、
>< が、比較演算なのが、template引き数の始まりを示す括弧なのかの区別が
>付かないのであれば、そうはいかなくなります。
そうならない仕様にはしているはず。
どうしても区別がつかない部分は前にtemplateキーワードを置く必要があるとか。

127:デフォルトの名無しさん
20/08/23 17:11:53 SVuEjc7r.net
>>126
>その場合、トークンとしての'<'が比較演算子なのかテンプレートの括弧なのかは区別しないで
>構文解釈の結果として文脈によって決定するのが常套手段だろうね。
ここは、x<・・・> の x がtemplate名かどうかを区別できるところの
意味解析の段階ではなく、本当に構文解析の段階ですか?

128:デフォルトの名無しさん
20/08/23 17:21:37.10 PNDTq65a.net
xがtemplate名かどうかは識別子の辞書を見たらワカル
辞書の中身はその時点までのソースコードの内容と
言語規格上の定義(形式言語ではなく、自然言語で書かれた仕様)に依存するから
言語の「意味」に依存するところがあるからこれを意味解析に含めるかどうかは議論の余地があるが、
普通のコンパイラ屋のマインドとしては
識別子の辞書を見てxが(例えば)template名であると判明したら
xがtemplate名xという「字句」であるという前提の下に字句解析した結果を文法パーサに入力するので
構文解析の範疇だと思われ

129:デフォルトの名無しさん
20/08/23 17:23:59.45 SVuEjc7r.net
>>128
昔読んだコンパイラの本には、これまでに行われた宣言の情報を参照するのは、
意味解析だ、とあったと記憶しています。
逆に、それが意味解析でないのなら、何が意味解析になるのでしょうか。
「解析」ですから、コード生成では有りませんし。

130:デフォルトの名無しさん
20/08/23 17:26:01.74 PNDTq65a.net
それよか
std::vector<std::string>> x("Hello");
と書いたら
std::vector<std::string> > x("Hello");
とコンパイラに解釈させるという方がよっぽど凶悪
これこそ構文の意味を知らねば「>>」という単一の字句なのか、「>」という字句2個なのか
定まらないという意味で字句解析→文法解析の流れをぶち壊しにしてくれる

131:デフォルトの名無しさん
20/08/23 17:28:17.74 PNDTq65a.net
>>129
構文解析、でええやん?
>>130みたいな凶悪なケースと違って
辞書の参照、というただ1点のチートだけやれば、
BNFで形式的に完全に表せる世界に持ち込める

132:デフォルトの名無しさん
20/08/23 17:29:06.23 PNDTq65a.net
訂正orz
誤: >>130みたいな凶悪なケース
正: >>129みたいな凶悪なケース

133:デフォルトの名無しさん
20/08/23 17:31:18.68 PNDTq65a.net
訂正2、。n_
>>130 正:
std::vector<std::vector<std::string>> x("Hello");
と書いたら
std::vector<std::vector<std::string> > x("Hello");
とコンパイラに解釈させる方がよっぽど凶悪

134:デフォルトの名無しさん
20/08/23 17:39:05.76 SVuEjc7r.net
>>131
C++の場合、辞書の参照も簡単では有りません。
namespaceや、クラススコープの名前などが複雑に絡み、
スコープ演算子を使った、修飾名などがあり、
Q1::Q2::Q3::name<xxx>
のような場合がありますが、
ややこしいのは、実際に template を展開してみないことには、nameがどういう識別子
なのかも分からない事があることです。例えば、
aaa<xxx>::bbb<yyyy>::name < 5, 5 > y
と有った場合、name が変数名なのか、template 名なのかによって、
< が template 引き数の始まりなのか、比較演算子なのかが決まる可能性があります。
ただ、この場合、> の後に名前トークン y が来ていますが、template展開だと
すると、この並びは恐らく、必ず間違いであるはずで、比較演算子でしか
合法にはならないと思います。

135:デフォルトの名無しさん
20/08/23 17:40:50.98 08jUbd/H.net
いつもの人か

136:デフォルトの名無しさん
20/08/23 17:49:20.95 VT3zweO2.net
>>127
どのテンプレートが使われるかの判断は意味解析だろうけど、テンプレートの使用か
比較式かの区別は構文解析段階で確定するはずだがね。
で、両方に解釈できるケースは基本的に非templateとみなすことになっていて、そこで
テンプレートを使用したいならばtenplateキーワードを追加する。

137:デフォルトの名無しさん
20/08/23 18:14:03.07 PNDTq65a.net
>>136
>両方に解釈できるケースは基本的に非templateとみなすことになっていて、
それだと構文解析時のBNFの当てはめ時点でバックトラックしているように読めてしまうま、
そのような方式は、テンプレート定義が入れ子になったときバックトラック回数が指数関数的になりかねないから近畿
実際はそんなことはせずに、「name」というテンプレートの定義が辞書にあれば、「name」とかかれたソースコードの部分が
<テンプレート名>という字句として文法パーサに入力される、という方式で実現しており、
字句解析→文法解析、の一本道が保たれているはず(つまりは>>128のやり方
>>134
辞書の参照が難しい、と仰せなのですが
識別子のスコープを辞書の階層化で表現するのは常套手段であってコンパイラの教科書にも書いてある
(と思う)のでそんなに難しい話とはみなすことはできない(希ガス

138:デフォルトの名無しさん
20/08/23 18:17:01.07 PNDTq65a.net
※ 個人の感想です

139:デフォルトの名無しさん
20/08/23 19:31:26.00 OrwVzT4b.net
<=>演算子はどうなん

140:デフォルトの名無しさん
20/08/23 20:00:57.91 L0YhmUmF.net
面白そうな議論だけど忙しくて参加できない(泣

141:デフォルトの名無しさん
20/08/23 21:32:54.31 MKE8ZoLo.net
C++の文法は複雑すぎて構文解析と意味解析を分離できないのは有名な話
例によってBoostさんがそれを最大限に悪用してるのも有名な話
URLリンク(dechimal.hatenadiary.com)

142:デフォルトの名無しさん
20/08/24 09:07:54 2j0RwZQH.net
構造体へのファイル読み込みについて、悩んでいます。

今まで#pragma pack(x)を使用して、構造体にパディングが入らないようにしていたのですが、これ以外にパディングが入らないようにする方法はあるのでしょうか?

移植性の面からpragma禁止、かつ暗黙アラインメント禁止(自分でパディングを入れる)という指示がありました。

143:デフォルトの名無しさん
20/08/24 09:12:28 hO98kfNk.net
メンバ1つずつ個別に入出力
C++はそれがしやすい

144:デフォルトの名無しさん
20/08/24 09:14:54 hO98kfNk.net
エンディアン問題は1バイトずつ入出力することで解決できる

145:デフォルトの名無しさん
20/08/24 10:43:50.34 seWRIuQk.net
自分でパディングを入れる方が、明確。
解釈の余地がなくなるから
構造体へのファイル読み込みって、
構造体には、文字列のポインターがあるだけだろ
可変サイズの文字列の実メモリは、構造体内には確保しないだろ

146:デフォルトの名無しさん
20/08/24 10:50:48 3u4r+xiS.net
そもそもの話の流れの趣旨とは無関係
struct hoge {
char mojiretsu[0];
} hage;

で malloc するときに
struct hoge *p = (struct hoge *)malloc(sizeof(struct hoge) + length + 1);

147:デフォルトの名無しさん
20/08/24 11:20:42.08 RW1y5ZfB.net
>>142
バイト単位で読み込んで自分でメンバーに格納
てか移植性云々なら入出力部分を切り出しとけよと思うが…

148:デフォルトの名無しさん
20/08/24 11:25:15.19 hO98kfNk.net
C++的には構造体の中の物理的な配置に依存しない設計をするのが本筋
ostream& operator << (ostream&, your_struct const&);
istream& operator >> (istream&, your_struct&);

149:デフォルトの名無しさん
20/08/24 11:51:04.72 2j0RwZQH.net
ありがとうございます。とても参考になります。
パッと見て理解できないこともありますが、一つ一つ勉強します。
「入出力部分を切り出し」については、知識不足でイメージもできない状態なのですが、入社したらそうなっているのかも?と心構えというか、理解しておきたいと思います。

150:デフォルトの名無しさん
20/08/24 12:08:08.35 5d5vIMqX.net
>>142
自分でパディングいれろ、という指示なんだから自分パディング入れればいいんでしょ?
方法は明確じゃん
まぁお前の質問の仕方が悪いってことね
まずやることはコンパイラのパディングのルールを確認してどういう条件で暗黙パディングが入るか理解すること
理解できたら自分でダミーのメンバ追加して暗黙パディングが入らないようにする
gcc/clangだったら-wpaddedで暗黙パディングが検出できるはず
念のためstatic_assertとoffsetofを使ってすべてのメンバーで期待通りのオフセットであること保証しておくといい
おまけでstatic_assertとsizeofで期待通りの構造体のサイズであることも
こういうのが多数あるんだったら、別途ツール使って構造体のソースは自動生成するようにすべき
あとpragma packは(レイアウトによって)実行時にオーバーヘッドが生じるってことも勉強しとくといい

151:デフォルトの名無しさん
20/08/24 12:32:35 2j0RwZQH.net
すみません。質問を正しく説明できるように気をつけます。

私が質問したかったのは、「パディングの入れ方」ではなく、「そもそもパディングが入らないようにする方法はないだろうか」ということでした。
パディングの入れ方については既に理解しているのですが、入るとやや都合が悪い状況です。
「暗黙アラインメント禁止(自分でパディングを入れる)」と書いてしまったことで質問内容がブレてしまい、良くなかったと反省しております。

また、詳しくアドバイスをしていただきありがとうございます。

152:デフォルトの名無しさん
20/08/24 13:32:36.10 3u4r+xiS.net
#pragma pack(1)
も禁止?

153:デフォルトの名無しさん
20/08/24 14:16:40.36 5d5vIMqX.net
>>151
「そもそもパディングが入らない方法」がpragma packであって、それが禁止されてんでしょ?
言われた通りに明示的にパディング入れな
何か方法があったとしてもチーム開発しているときに、妙な小細工は嫌われる

154:デフォルトの名無しさん
20/08/24 14:23:21.21 2j0RwZQH.net
「#pragmaは禁止」とあったので、そうだと判断しています。
もしこれが必ずしも#pragma pack(1)も禁止というわけではないなら、一度担当者に確認してみようと思います。

155:デフォルトの名無しさん
20/08/24 14:33:52.11 2j0RwZQH.net
>>153
ありがとうございます。
そのようにしようと思います。
様々なアドバイスをいただき、私の考え方や疑問に思う部分が誤っていたと感じました。
これからはもっと広い視野で考えられるように頑張ります。

156:蟻人間
20/08/24 14:38:21.49 lUUB+Gis.net
#include <pshpack1.h>

157:デフォルトの名無しさん
20/08/24 20:32:07.30 0b6x/pxR.net
環境依存しない方法なんてないよ
int, short, longのバイト数すら環境依存なんだから
環境依存が嫌ならC++使うこと自体が間違い

158:デフォルトの名無しさん
20/08/24 20:39:16.80 hO98kfNk.net
#include <cstdint>知らなさそうだね

159:デフォルトの名無しさん
20/08/25 00:20:38.83 GVKOVEUV.net
明示的にパディング入れる方がかえって小細工になったりして…
パディング前:
struct Foo {
 int16_t m_someWord;
 // ここに明示的にパディングを入れる
 int32_t m_someDoubleWord;
 int16_t GetSomeWord() const { return m_someWord; }
};
明示的パディング後(1):
struct Foo {
 int32_t m_someWordInDWord; // 32 bit境界に隙間無くパディング入ったやたー!
 int32_t m_someDoubleWord;
 int16_t GetSomeWord() const { return (m_someWordInDoubleWord >> 16); } // OOPS! 欲しい16 bitの位置がホストのエンディアン次第で変わるorz
};
明示的パディング後(2):
struct Foo {
 uint8_t m_someWordInBytes[4]; // 32 bit境界に隙間無くパディング入ったやたー!今度はしくじらないのですよ
 int32_t m_someDoubleWord;
 int16_t GetSomeWord() const { return ((uint16_t)m_someWordInBytes[1] << 16) | (uint16_t)m_someWordInBytes[0]; } // |||OTL
};

160:デフォルトの名無しさん
20/08/25 07:35:37.57 IvfDNlgu.net
int16_tが欲しいのに他の型使ったらそりゃ。

161:デフォルトの名無しさん
20/08/25 09:32:18 ILy/WoQ4.net
逆だな。
C言語を使うといくらでも環境依存のものを作れそうな気持ちにさせる

162:デフォルトの名無しさん
20/08/25 09:50:55 DOmxfygr.net
環境非依存て聞こえはいいけど色んな機種の機能の積集合でできることだかんな

163:デフォルトの名無しさん
20/08/25 10:21:10.89 z55E+4lG.net
Unix文化とWindows文化の違いがあって、
Unixでは、OSよりもC言語によって、ハードウェアの違いを吸収する思想だった。
この思想では、バイナリ互換ではなく、ソース互換を目指し、
異なるOSやCPUに対しても、Cのソースを再コンパイルして対応しようとした。
一方、Windows文化では、最初から互換性のあるCPUを使うことが前提であり、
OSがCPU以外のハードウェアの違いを吸収することで、バイナリレベルで互換性を
維持する思想であった。
この思想では、異なるOSやCPUをターゲットにすることは想定されていない変わりに、
ハードウェアの違いは、互換性のある(単一の)OSをハードウェアに乗せることに
よって吸収しようとした。
なので、GNUやgccなど、Unix文化からきたプログラムでは、徹底的に#ifなどで
場合分けして互換性を維持しようとしているのに対し、Windowsから来たプログラム
ではそのような場合分けはしていない。
また、Unix文化でも、#if によってソースを場合分けすることで対応していることが
ほとんどで、何の場合分けも無いソースで対応できている訳ではない。

164:デフォルトの名無しさん
20/08/25 11:00:39.10 8PaZBEwq.net
[要出典]

165:デフォルトの名無しさん
20/08/25 11:11:45.82 Zt9gBA2M.net
htons とか ntohl とか最強

166:デフォルトの名無しさん
20/08/25 12:41:01.28 72rzjRbk.net
C++を検索するときの技で上手い方法ありますか?
ググる、アマゾン、図書館での検索など
勉強しようとしても検索できないです

167:デフォルトの名無しさん
20/08/25 12:45:40.95 KRGfI1UY.net
コンパイラーのエラー文で投げたら大抵その言語で釣れると思うけどなぁ

168:デフォルトの名無しさん
20/08/25 12:56:51 qQcORjN3.net
ぐぐるときは
hoge -ruby -java -javascript -php -sejuku -techacademy -teratail

169:デフォルトの名無しさん
20/08/25 13:08:39.95 3B5pz6IO.net
−ヤフーゴミ袋

170:デフォルトの名無しさん
20/08/25 13:10:33.24 V6jdFuMQ.net
>>166
検索して出てきた情報を理解するための基礎的な力が無いんじゃね?
ググれば何でも即解決できるわけではないよ
愚直にC++の入門書を買って順を追って系統立てて、C++の基本的な概念や用語を理解していく必要がありそう
もしかすると、C++より前に他の言語でそれをやってプログラミングの基本的なところから土台を踏み固めておかないとダメかも

171:デフォルトの名無しさん
20/08/25 13:25:38.78 YCpmFLs5.net
「勉強」がどのレベルなのか分からないとなんとも言えない
直感で言うとC++の入門書なんでもいいから一冊買ってやりなさい

172:はちみつ餃子
20/08/25 13:56:10.27 xuORV4zd.net
>>166
俺も >>170 に同意だわ。
基礎的な考え方が身に付いてないと個別の説明を見ても意味わからん。
検索するにしたって検索に適当な語句を選択するだけの知識は要るしな。
用語は大事。
概念を分割して定義を積み重ねるのが体系化だし、
定義は用語の定義として現れることが多い。
用語がわかると色々わかる。

173:デフォルトの名無しさん
20/08/25 14:26:43.50 72rzjRbk.net
「C++」で検索ができないんだが
PCの設定がダメなのかな
これから情報を得るために検索くらいしたいんだけど
本買いたくても出てこない
図書館へは行ったけどC++は貸出中で予約も数件入ってるらしい
+のフォントが変なのか?

174:デフォルトの名無しさん
20/08/25 14:29:17.40 y+wyfPxz.net
>>168
-qiitaが抜けてる

175:はちみつ餃子
20/08/25 14:32:45.54 xuORV4zd.net
>>173
俺の手元だと、グーグルでもアマゾンでも C++ で検索できてるがなぁ……。
ダブルクォートで囲って "C++" にしたらより確実に C++ が含まれるページが検索される。

176:デフォルトの名無しさん
20/08/25 14:43:38.93 z55E+4lG.net
twitter は、C++ や C# を検索できない。"C++" や "C#" としても駄目。
なので、cpp OR cplusplus とすると良いと言われているが、
個人的には、これは、twitter を作った人の C++ や C# を弱まらせるための策略
だと思っている。

177:デフォルトの名無しさん
20/08/25 14:49:20.21 8QbTjnzx.net
なんか流れにしれっとキチガイ混じっとるな

178:デフォルトの名無しさん
20/08/25 14:50:58.98 H1PjAHfj.net
アメリカはそういう国で、
彼らは、自分のためなら何をやっても文句は言わせない的な心持でいる。

179:デフォルトの名無しさん
20/08/25 14:57:06.54 72rzjRbk.net
>>176
ありがと
cplusplusで検索できました

180:デフォルトの名無しさん
20/08/25 15:16:32.29 YCpmFLs5.net
勘違いで御高説垂れてた奴wwww

181:デフォルトの名無しさん
20/08/25 20:28:52.64 Ascep3nh.net
何故かyahooでリアルタイム検索ではC++で検索できる

182:デフォルトの名無しさん
20/08/25 23:48:37 zCjig7ks.net
シープラプラとか
チンチンブラブラみたいな名前付けやがって
たぬき砲でいいよなもう

183:デフォルトの名無しさん
20/08/25 23:56:18 zCjig7ks.net
Cよりもちょっと背伸びした意識高い系狙ってみましたみたいなキモいネーミングセンス

184:デフォルトの名無しさん
20/08/26 00:15:37 DrItK79l.net
>>183
ちょっとどころじゃねーよ馬鹿
お前みたいな低能にはC++は無理

185:デフォルトの名無しさん
20/08/26 00:16:50 1Tu0I/K+.net
あーキモい(゚〇゚)キモい

186:はちみつ餃子
20/08/26 01:00:49.72 Yn/rXsvn.net
キーッ! もういい! (駄洒落)

187:デフォルトの名無しさん
20/08/26 01:32:11 NYX2/iU2.net
CRTP(奇妙に再帰したテンプレートパターン)ってどんなときに使うの?
template <class Derived>
struct Base {
static void interface() {
...
Derived::static_interface();
...
}
};
struct Hoge : Base<Hoge> {
static void static_interface() { ... }
};
通常の継承とは依存関係が逆になってるというのはわかるけど
具体的にどんなケースで便利なのかいまいちピンとこない...

188:デフォルトの名無しさん
20/08/26 02:37:52.45 oEB3gdtA.net
速度重視のときじゃないかな。
ATL/WTLがCRTP使ってると思ったけど。
メリットとデメリットを比べるとデメリットが上回ってるような気がするな。
ぼくは構文解析器の合成にCRTPを使いましたが、合成の頻度が非常に少ないので、使った感じです。

189:デフォルトの名無しさん
20/08/26 02:49:00.89 oEB3gdtA.net
仮想関数の代わりにCRTPを使うと呼び出しコストが無くなる・・・的な使い方で、便利にはならないと思う。
というより、めんどくさくなるだけ。

190:デフォルトの名無しさん
20/08/26 07:05:25.59 NYX2/iU2.net
なるほどどうしてもパフォーマンスが気になるときに使うものって感じですかね

191:デフォルトの名無しさん
20/08/26 10:20:21.13 2Yv7E1bU.net
というより、動的な多態は不要だが静的な多態が必要で、
かつ派生クラスの型情報がどうしても必要なときに使うもんだと思う
クラステンプレートであれこれやってるうちに必要な場面が出てくるかと

192:デフォルトの名無しさん
20/08/26 11:43:55.11 KrF5vX4s.net
学術の巨大掲示板群 - アルファ・ラボ URLリンク(x0000.net)<)

193:デフォルトの名無しさん
20/08/26 13:51:37.26 CU/Sbvp9.net
派生クラスの型情報を静的に使うというのはstatic_castでのダウンキャストだな

194:デフォルトの名無しさん
20/08/26 18:43:05.84 UQhlb7Hi.net
Derivedを引数にとる比較演算子を生成するみたいなことは継承だと無理そう。

195:デフォルトの名無しさん
20/08/26 19:52:17.80 IvFDW58Y.net
基底と言いつつテンプレートでガッツリ派生型の名前が入ってるわけで
他の派生型を持つ基底を一括してコンテナに入れるとかできないしあまり意味を感じないな

196:デフォルトの名無しさん
20/08/26 23:36:52.30 BTqRZu5v.net
そもそもポリモ目的でやるもんじゃないでしょ
基底クラスは結局全部別モンになるわけだし
ボイラープレートコードをまとめたクラスをミックスインするときに使うもの

197:デフォルトの名無しさん
20/08/27 06:37:57.11 7Sruawh3.net
>>195
basic_iosとios_baseみたいにテンプレート化する必要のある部分と不要な部分に分けるとか

198:デフォルトの名無しさん
20/08/28 17:02:52.88 BFWbiW8H.net
関数へのポインタが、メンバ変数に有る場合、例えば、
class CXxx {
public:
  void (*pfn)(int a);
  void (*pfn)(float b);
};
の様な場合、
pXxx->pfn(5);
pXxx->pfn(10.0f);
とした場合に、関数呼び出しに使われる関数ポインタが自動的に選択されるでしょうか?
つまり、関数ポインタについても、関数と同様な「オーバーロード解決」が行われますか?
そもそも、上の様なクラスは、定義時にエラーになるでしょうか?

199:デフォルトの名無しさん
20/08/28 17:09:28.47 47MLab1u.net
自分で動かしてから質問しろよ

200:デフォルトの名無しさん
20/08/28 17:09:34.31 namGYget.net
同じ名前のデータメンバーをふたつ定義してるからアウト

201:デフォルトの名無しさん
20/08/28 17:26:26.84 bCpDWR5V.net
>>198
それコンパイル通るかやってみ

202:デフォルトの名無しさん
20/08/28 17:41:13 AJ/VhFe8.net
ここに質問するより少ない手数で試せるだろうに何やってんだろうね

203:デフォルトの名無しさん
20/08/28 17:44:35 TvC7lNeF.net
>>198
関数は多重定義できるが
関数へのポインタは多重定義できない

204:デフォルトの名無しさん
20/08/28 17:48:03 TvC7lNeF.net
ちかっとエスパーすると
class CXxx_base {
public:
  virtual void fn(int) = 0;
 virtual void fn(float) = 0;
};
class CXxx : public CXxx_base {
public:
  void fn(int) override { }
 void fn(float) override { }
};
pXxx->fn(5);
pXxx->fn(1.0.f);
これでおまえさんの考えてることはできるんじゃないか?

205:デフォルトの名無しさん
20/08/28 19:11:25.34 KPVk+Ml/.net
>>198
机上の空論持ってくるな
きちんと検証してから持ってこい

206:デフォルトの名無しさん
20/08/29 11:57:26.58 HmjSn9P9.net
関数へのポインタって関数じゃなくてただのメンバ変数だからな

207:デフォルトの名無しさん
20/08/29 14:38:37.69 EjjA84a9.net
>>196
>ボイラープレートコードをまとめたクラスをミックスインするときに使うもの
ちょっとかっこいい(型情報ある)マクロみたいな感じか

208:デフォルトの名無しさん
20/08/30 13:47:11.43 6dVOYYO/.net
構造体を使った配列の記憶にて
配列に順に入力しても出力が上手くいきません助けて偉い人

209:デフォルトの名無しさん
20/08/30 13:49:26.97 KF/F+MKa.net
スルーで

210:デフォルトの名無しさん
20/08/30 13:51:20.52 GgAZZaQa.net
100歩譲っておま環

211:デフォルトの名無しさん
20/08/30 14:21:16.52 6dVOYYO/.net
void dataInput(Student& st){
string ans;
for(int i=1, i<=n;i++){
cin>>st.id;
pN[i]=st.id;
cin>>st.ans;
pA[i]=st.ans;
}
};
void showData(Student& st);
int main(){
cin>>n;
pN = new int[n];
pA = new int[n];
Student st;
dataInput(st);
showData(st);
return 0;
}
void showData(Student& st){
for(int j=0; j<=n; j++){
cout << pN[j] << pA[j] << "\n";
}
}
定義はファイル別にしてある
正直すまんかった

212:デフォルトの名無しさん
20/08/30 14:23:30.40 KF/F+MKa.net
デバッガで自分でトレースしろ

213:デフォルトの名無しさん
20/08/30 14:28:47.09 GgAZZaQa.net
死ね

214:デフォルトの名無しさん
20/08/30 14:54:19.28 6dVOYYO/.net
hファイルの方
struct Student{
int id;
char ans;
};
int n;
int* pN;
char* pA;
cppファイル冒頭
#include <iostream>
#include <string>
#include "funk.h"
using namespace std;

215:デフォルトの名無しさん
20/08/30 15:13:34 6dVOYYO/.net
デバッグしたけど問題は見つかりませんでしたと出た。出力に問題があるっぽい

216:デフォルトの名無しさん
20/08/30 15:22:13 6dVOYYO/.net
自己解決しました!iとjの初期値を1から0にしたら解決できました。

217:デフォルトの名無しさん
20/08/30 15:22:13 6dVOYYO/.net
自己解決しました!iとjの初期値を1から0にしたら解決できました。

218:デフォルトの名無しさん
20/08/30 15:57:12.85 HKGZh04b.net
きちんと検証しろ
ソレができないなら初心者スレか日記帳にでも書いとけ

219:デフォルトの名無しさん
20/08/30 17:44:09 oWP9MzfY.net
これはひどい

220:デフォルトの名無しさん
20/09/04 17:01:57.31 8b49PodW.net
hage

221:デフォルトの名無しさん
20/09/04 17:03:42 LCYaN/vD.net
どっちのだよ

222:デフォルトの名無しさん
20/09/04 17:11:42.93 ML6iv+hM.net
URLリンク(dotup.org)


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