[表示 : 全て 最新50 1-99 101- 201- 2ch.scのread.cgiへ]
Update time : 09/06 00:14 / Filesize : 63 KB / Number-of Response : 223
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part152



1 名前:デフォルトの名無しさん [2020/07/12(日) 13:42:20.13 ID:TX1mpKr6.net]
https://mevius.5ch.net/test/read.cgi/tech/1589424805/

2 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 13:42:53.37 ID:TX1mpKr6.net]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part151
https://mevius.5ch.net/test/read.cgi/tech/1589424805/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
mevius.5ch.net/test/read.cgi/tech/1556142878/

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

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

テンプレここまで

3 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 13:47:57.74 ID:CSJoJ4mx.net]
STLつかうと一気に実行ファイルサイズが10倍に?!

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

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

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

#include <stdafx.h>
後死ね。

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

4 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 14:06:26.23 ID:tkU6cDNN.net]
>>3
void君まだ生きてたの?

5 名前:デフォルトの名無しさん mailto:sage [2020/07/12(日) 19:59:20 ID:7bgQZ4MZ.net]
-Wl,--start-groupって-Wl,--end-groupで閉じなくてもいいの?

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

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

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

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

10 名前:デフォルトの名無しさん mailto:sage [2020/07/13(月) 12:07:41.92 ID:a0LpYw/5.net]
>>8
VS2019だと入らないぞ



11 名前:デフォルトの名無しさん mailto:sage [2020/07/13(月) 12:09:59.97 ID:WBkWHxcT.net]
それ5ちゃんは2ちゃんじゃない5ちゃんだってのと同じ匂いがする

12 名前:デフォルトの名無しさん mailto:sage [2020/07/13(月) 17:47:10 ID:17o/9bhC.net]
>>9
前スレッドで
ttps://mevius.5ch.net/test/read.cgi/tech/1589424805/998
は、そのつもりで書いたんだけど、上手く伝わらなかったみたいね。

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

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

15 名前:デフォルトの名無しさん mailto:sage [2020/07/13(月) 22:49:46.38 ID:vn0aaIQL.net]
>>12
知ってた

16 名前:デフォルトの名無しさん mailto:sage [2020/07/13(月) 23:35:03 ID: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 名前:デフォルトの名無しさん mailto:sage [2020/07/14(火) 00:18:40 ID:zGM7yt58.net]
aがintであることはどこから推定するの?

18 名前:デフォルトの名無しさん mailto:sage [2020/07/14(火) 01:20:42 ID:BX6Ieja2.net]
難しく考えすぎ

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

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

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



21 名前:デフォルトの名無しさん mailto:sage [2020/07/20(月) 23:03:27.73 ID:6gjYUAkG.net]
保守

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

23 名前:デフォルトの名無しさん mailto:sage [2020/07/22(水) 21:27:49.98 ID:ZfR2rpjD.net]
>>22
まるで正常

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

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

26 名前:デフォルトの名無しさん [2020/07/23(木) 00:41:36 ID:4rdlbzE6.net]
getopt

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

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

29 名前:デフォルトの名無しさん mailto:sage [2020/07/25(土) 02:54:53.84 ID:hso1irDO.net]
お前らってマゾだよね

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



31 名前:デフォルトの名無しさん mailto:sage [2020/07/27(月) 02:50:40.88 ID:OPuipBq/.net]
あります

32 名前:デフォルトの名無しさん mailto:sage [2020/07/27(月) 03:16:39.82 ID:iDNWe3mh.net]
>>30
プロセスとスレッドの違いは理解している?

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

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

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

36 名前:デフォルトの名無しさん mailto:sage [2020/07/27(月) 08:17:24.84 ID:7+Lkkq8+.net]
読み込む側が壊れた値でも構わないなら要らない

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

38 名前:デフォルトの名無しさん mailto:sage [2020/07/27(月) 11:14:28.62 ID:vNtx9fDh.net]
DRAMがリフレッシュされなくなるとかか

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

40 名前:デフォルトの名無しさん mailto:sage [2020/07/27(月) 12:06:22.37 ID:arCdAL0/.net]
>>30
結論は必要がある(もちろん環境依存しないのが前提として)
>>33は間違い
たとえCPUがload/storeのatomic性を保証していたとしても
コンパイラが代入を1 instructionにする保証がない
なのでLinux kernelでは(C言語だけど)WRITE_ONCEみたいな一見意味不明なマクロが用意されていたりする

マルチプロセスでlock-freeを自作するのは勉強になるけど、たぶんミスるから
製品とかでは使わないのをお勧めする



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

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

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

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

45 名前:デフォルトの名無しさん [2020/07/28(火) 15:19:44.89 ID:XpAjM/1U.net]
https://ja.wikipedia.org/wiki/Intel_8088
https://ja.wikipedia.org/wiki/Intel_8085

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

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

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

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

49 名前:デフォルトの名無しさん mailto:sage [2020/07/28(火) 16:12:26 ID: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 名前:デフォルトの名無しさん [2020/07/28(火) 16:16:35.96 ID:2ZofU2zv.net]
>>49
なるほど

ちなみにこれで最後の質問ですが
forループは自分が間違えてましたしint使ったほうがいいと理解しました
それでビット演算でのみ使う場合においては
intにされることはないという認識でいいでしょうか?

(ビット演算で使いたいと思って調べてたらふと>>46みたいな疑問が湧いたので)



51 名前:デフォルトの名無しさん mailto:sage [2020/07/28(火) 16:18:26.72 ID:JnUAmZD/.net]
>>46
charの拡張はcpu内部のレジスタで行われるだけで
メモリにはその痕跡が残らない
だからintをunsigned charにすればメモリを節約する効果は
期待できる(ただし保証はされない)

俺も実はforの制御変数は[0, 256)の範囲内でもintを使うが
正直に本音を言うと長い長いtypedef unsigned charをタイプせずに
短くintで済むからだ
普段建前ではintは自然なサイズの整数だからとか言い訳してるけどね

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

53 名前:デフォルトの名無しさん [2020/07/28(火) 16:23:12.92 ID:tckSAZy5.net]
>>52
https://ideone.com/OcVOVt

54 名前:デフォルトの名無しさん mailto:sage [2020/07/28(火) 16:23:36.08 ID: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 名前:デフォルトの名無しさん mailto:sage [2020/07/28(火) 16:27:57.80 ID:JnUAmZD/.net]
おっと、ここC++スレやん
Cスレのつもりだったw

C++の場合はここ気をつけて
void func(char); //#1
void func(int); //#2
char c = 0;
func(c | 1); //#2

56 名前:デフォルトの名無しさん [2020/07/28(火) 16:28:23.54 ID:2ZofU2zv.net]
>>53
>>54
ありがとうございます

されるんですね・・・
う〜ん、やっぱ大人しくint使います(メモリ切り詰めるほどでないなら)

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

58 名前:デフォルトの名無しさん mailto:sage [2020/07/28(火) 16:36:03.22 ID:Vr5x1U6Z.net]
>>51-52
「メモリを節約する効果は期待できる(ただし保証はされない)」っていうより
「メモリを節約する効果は期待できない(ただし可能性はゼロではない)」でしょ。

ほんとうにメモリ節約のためにやるなら実測のうえ結果をコメントで添えてたのむ。

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

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



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

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

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

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

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

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

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

68 名前:デフォルトの名無しさん mailto:sage [2020/07/30(木) 07:59:44 ID:h+N/x6i+.net]
ICU一択でしょ

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

70 名前:デフォルトの名無しさん [2020/07/31(金) 10:43:54.52 ID:N0eufbNj.net]
逼迫中



71 名前:デフォルトの名無しさん [2020/07/31(金) 13:57:05.58 ID:RNPOl6hd.net]
学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ

☆ VM + ASM を書いた (C#, DX) * x86 ではない!
ttp://up.x0000.net/files/TSimulang.zip
☆ malloc / free を実装してみた (C#)
ttp://up.x0000.net/files/TMallocTest.zip

72 名前:デフォルトの名無しさん mailto:sage [2020/08/08(土) 00:45:58.56 ID:0OMeneB5.net]
保守

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

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

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

76 名前:デフォルトの名無しさん mailto:sage [2020/08/10(月) 16:28:51 ID:bhDIRnmP.net]
UDPスレで聞け

77 名前:デフォルトの名無しさん mailto:sage [2020/08/10(月) 18:44:21.00 ID:94dKV070.net]
一文で「で」使いすぎ

78 名前:デフォルトの名無しさん mailto:sage [2020/08/10(月) 21:36:29 ID:DdNEnUy+.net]
○○で××で△△な□□ってオタクが好む文語でしょww

79 名前:デフォルトの名無しさん mailto:sage [2020/08/10(月) 22:39:58 ID:miZfIOtK.net]
それオタクていうか、ラノベ勢やん

80 名前:デフォルトの名無しさん [2020/08/12(水) 21:03:47 ID: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 名前:デフォルトの名無しさん mailto:sage [2020/08/12(水) 21:20:56.14 ID:3e1Z4brU.net]
>>80 a.find(std::string(b));

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

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

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

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

85 名前:デフォルトの名無しさん [2020/08/13(木) 10:37:08.60 ID:m1xh97jB.net]
std::unordered_map<const std::string, int> a;

86 名前:デフォルトの名無しさん [2020/08/13(木) 11:17:58 ID:hnCcHlo3.net]
C++2a
https://cppinsights.io/

https://arnemertz.github.io/online-compilers/
https://riptutorial.com/ja/cplusplus/example/17403/%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9

https://wandbox.org/
coliru.stacked-crooked.com/

87 名前:デフォルトの名無しさん [2020/08/16(日) 03:35:19.99 ID:Qk/OMLZN.net]
今年学生でコロナ下でオンラインばかりなので合間を縫って独学に勤しんでます。

優しいc++を読み終えました
現在atcoderのabcやオライリーから出てるmodern c++ チャレンジ等をやっていますが、何をもってプログラミングが出来ると言うのでしょうか?
テトリス等もサイトを参考に書いたりしてみました。

自分はlinux上で動作する音楽プレイヤーソフトを作成したいと思うのですが、文法等はある程度理解していてもいざ自分で一から作れと言われると出来ません。c/c++で書かれているgithubのソースコード等は読めるんです
読めると言うのは、知らない文法やライブラリ等検索出来るためなんとなく実装内容がわかるって意味です
しかし自分で一からとなると何から始めればいいのか…


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

88 名前:デフォルトの名無しさん mailto:sage [2020/08/16(日) 03:47:01 ID:Degs0Zl8.net]
初心者は、Ruby on Rails で、web アプリのポートフォリオを作る

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

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

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

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

90 名前:デフォルトの名無しさん mailto:sage [2020/08/16(日) 06:33:25.81 ID:wVZFHsSL.net]
>>87
> 何をもってプログラミングが出来ると言うのでしょうか?

何かを作るぞ! と頑張って、目標を達成できること

「何か」はゲームでもいいしドローンの自動運転でもいいから
自分の好みで勝手に決めればいい

87は音楽プレイヤーだろ?
いきなり市販のプレイヤーに匹敵しなくてもいい
こんなことできないかな〜とアイディア先行で実験してみて
うまくいったら見栄えも気にして仕上げにかかる
てなことを小刻みに繰り返すとアジャイルっぽくなる



91 名前:デフォルトの名無しさん mailto:sage [2020/08/16(日) 07:20:43.69 ID:5tP8nVqa.net]
第二不完全性定理の制約を受けず、
停止性問題を解けること、

って無理ゲーじゃん?!?
なんで人間ってプログラミングできるの?!!?!

92 名前:デフォルトの名無しさん [2020/08/16(日) 09:23:07.48 ID:ng3yYkoc.net]
ユニバーサル文法があるから

その辺りは余り深く考えても意味が無い
出来るから出来る
出来ない奴は出来ない

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

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

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

96 名前:デフォルトの名無しさん mailto:sage [2020/08/16(日) 15:36:41.55 ID:1Qmt1HH2.net]
>>87
アプリ作り上げるのに言語の詳しい知識って実はあんまり要らないんだよね
c++だとtemplateにはまって一日つぶすとかざらにあるんだけど、
これってただの自己満だよな〜って思う
愚直なコードでとりあえず解決しておいて、その分
アプリとして作り込むのに時間かけた方がよかったんだろなーと

まぁそれはさておき、音楽プレーヤなら
- GUIフレームワーク
- CODECライブラリ
- linuxシステムコール、libc
あたりの知識がないと進められないでしょう
GUIフレームのお作法の理解とか、
CODECもフォーマット特有の制約が上位まで波及したりするから結構知識いるよね
まず何を使うかの選定からでしょう

あと、たぶんお前さんの作りたいものは既に世の中にごまんとあるはず
それを承知で勉強と割り切って作るのはいいんだけど、
あんまり大きいものは最初の目標にしないように
すぐに情熱失ってやめてしまうのがオチ

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

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

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

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

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

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

https://ja.uncyclopedia.info/wiki/Progress_display

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



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

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

103 名前:デフォルトの名無しさん mailto:sage [2020/08/17(月) 02:55:30.59 ID:vOFQCRbE.net]
というか他人が思ったことに対してダウト〜っていうセンスに痺れるわ

104 名前:デフォルトの名無しさん mailto:sage [2020/08/17(月) 05:56:47.89 ID:TQifZMS/.net]
>>102
strcmp的なやつとは話にならねえ

105 名前:デフォルトの名無しさん mailto:sage [2020/08/17(月) 07:50:57.12 ID:p3n8cAbg.net]
strcmp的なやつって笑える表現だな

a="templateにはまって一日つぶす";
b="templateがロクに使えなくて一日つぶす";
ここでstrcmp(a,b)が偽になる以上どういう意図のなのか説明が必要だろ

>言語の基本をしっかり固める
とはまったく逆の事をしてることに気づけ

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

107 名前:デフォルトの名無しさん mailto:sage [2020/08/17(月) 16:39:05 ID:p3n8cAbg.net]
strcmpてのは三値を返すんだから0が真で非0が偽

108 名前: mailto:sage [2020/08/17(月) 19:38:46.36 ID:fdEh9bfN.net]
>>107
普通は零が偽、非零であればなんでも真、なんですけど

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

110 名前:デフォルトの名無しさん mailto:sage [2020/08/17(月) 19:49:37.18 ID:I0An2PUB.net]
揚げ足とりこそC++erの本懐よ



111 名前:はちみつ餃子 mailto:sage [2020/08/17(月) 20:13:14.96 ID:Km1hLS23.net]
strcmp を定義するのは言語仕様なんやから
あえて言語仕様と異なる用語を使うんなら
その適用範囲 (プロジェクト単位?) と共に定義を明文化するのは最低限の要求やろ。
当事者が合意した範囲内でなら一見して変な用語でも使うのは好きにすりゃええ。
たとえばハードウェアに近い部分なら負論理がソースコード上に露骨に現れることだって無いとは言いきれん。

ただそれは特殊な例を総合的に見てあえて奇妙な用語を使った方が良くなる場合にとる選択肢であって、
「三値を返すんだから」というようわからん理屈では正当化でけへんし、
言語のスレとしては許容でけへんわ。

112 名前:デフォルトの名無しさん mailto:sage [2020/08/17(月) 20:18:38 ID:vrG6zXoN.net]
急にバリバリの関西弁でどないしたんや

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

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

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

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

117 名前:デフォルトの名無しさん [2020/08/18(火) 00:15:03 ID:6UORXKST.net]
学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

VM + ASM を書いた (C#, DX) * x86 ではない!
simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ

VM + ASM のダウンロード
ttp://up.x0000.net/files/TSimulang.zip

118 名前:デフォルトの名無しさん mailto:sage [2020/08/19(水) 03:53:13 ID: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 名前:デフォルトの名無しさん mailto:sage [2020/08/19(水) 06:19:51.21 ID:AaZqqXX6.net]
マ板でどうぞ

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



121 名前:デフォルトの名無しさん [2020/08/20(木) 11:16:03 ID:RX/3qqm6.net]
hell終わるど

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

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

124 名前:デフォルトの名無しさん mailto:sage [2020/08/23(日) 16:08:14.77 ID:SVuEjc7r.net]
x がtemplate名であるかどうかを検査するのでしょうか?

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

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

126 名前:デフォルトの名無しさん mailto:sage [2020/08/23(日) 16:40:37.67 ID:VT3zweO2.net]
その場合、トークンとしての'<'が比較演算子なのかテンプレートの括弧なのかは区別しないで
構文解釈の結果として文脈によって決定するのが常套手段だろうね。
https://github.com/antlr/grammars-v4/blob/master/cpp/CPP14.g4

>ところが、もし、xがtemplateの名前として宣言されているかどうかを知らなければ、
>< が、比較演算なのが、template引き数の始まりを示す括弧なのかの区別が
>付かないのであれば、そうはいかなくなります。

そうならない仕様にはしているはず。
どうしても区別がつかない部分は前にtemplateキーワードを置く必要があるとか。

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

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

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

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



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

132 名前:デフォルトの名無しさん mailto:sage [2020/08/23(日) 17:29:06.23 ID:PNDTq65a.net]
訂正orz
誤: >>130みたいな凶悪なケース
正: >>129みたいな凶悪なケース

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

134 名前:デフォルトの名無しさん mailto:sage [2020/08/23(日) 17:39:05.76 ID: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 名前:デフォルトの名無しさん mailto:sage [2020/08/23(日) 17:40:50.98 ID:08jUbd/H.net]
いつもの人か

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

137 名前:デフォルトの名無しさん mailto:sage [2020/08/23(日) 18:14:03.07 ID:PNDTq65a.net]
>>136
>両方に解釈できるケースは基本的に非templateとみなすことになっていて、
それだと構文解析時のBNFの当てはめ時点でバックトラックしているように読めてしまうま、
そのような方式は、テンプレート定義が入れ子になったときバックトラック回数が指数関数的になりかねないから近畿

実際はそんなことはせずに、「name」というテンプレートの定義が辞書にあれば、「name」とかかれたソースコードの部分が
<テンプレート名>という字句として文法パーサに入力される、という方式で実現しており、
字句解析→文法解析、の一本道が保たれているはず(つまりは>>128のやり方

>>134
辞書の参照が難しい、と仰せなのですが
識別子のスコープを辞書の階層化で表現するのは常套手段であってコンパイラの教科書にも書いてある
(と思う)のでそんなに難しい話とはみなすことはできない(希ガス

138 名前:デフォルトの名無しさん mailto:sage [2020/08/23(日) 18:17:01.07 ID:PNDTq65a.net]
※ 個人の感想です

139 名前:デフォルトの名無しさん mailto:sage [2020/08/23(日) 19:31:26.00 ID:OrwVzT4b.net]
<=>演算子はどうなん

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



141 名前:デフォルトの名無しさん mailto:sage [2020/08/23(日) 21:32:54.31 ID:MKE8ZoLo.net]
C++の文法は複雑すぎて構文解析と意味解析を分離できないのは有名な話
例によってBoostさんがそれを最大限に悪用してるのも有名な話
https://dechimal.hatenadiary.com/entry/20090216/1234793122

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

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

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

143 名前:デフォルトの名無しさん mailto:sage [2020/08/24(月) 09:12:28 ID:hO98kfNk.net]
メンバ1つずつ個別に入出力
C++はそれがしやすい

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

145 名前:デフォルトの名無しさん mailto:sage [2020/08/24(月) 10:43:50.34 ID:seWRIuQk.net]
自分でパディングを入れる方が、明確。
解釈の余地がなくなるから

構造体へのファイル読み込みって、
構造体には、文字列のポインターがあるだけだろ

可変サイズの文字列の実メモリは、構造体内には確保しないだろ

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

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

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

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

149 名前:デフォルトの名無しさん [2020/08/24(月) 11:51:04.72 ID:2j0RwZQH.net]
ありがとうございます。とても参考になります。
パッと見て理解できないこともありますが、一つ一つ勉強します。

「入出力部分を切り出し」については、知識不足でイメージもできない状態なのですが、入社したらそうなっているのかも?と心構えというか、理解しておきたいと思います。

150 名前:デフォルトの名無しさん mailto:sage [2020/08/24(月) 12:08:08.35 ID:5d5vIMqX.net]
>>142
自分でパディングいれろ、という指示なんだから自分パディング入れればいいんでしょ?
方法は明確じゃん
まぁお前の質問の仕方が悪いってことね

まずやることはコンパイラのパディングのルールを確認してどういう条件で暗黙パディングが入るか理解すること
理解できたら自分でダミーのメンバ追加して暗黙パディングが入らないようにする
gcc/clangだったら-wpaddedで暗黙パディングが検出できるはず
念のためstatic_assertとoffsetofを使ってすべてのメンバーで期待通りのオフセットであること保証しておくといい
おまけでstatic_assertとsizeofで期待通りの構造体のサイズであることも

こういうのが多数あるんだったら、別途ツール使って構造体のソースは自動生成するようにすべき
あとpragma packは(レイアウトによって)実行時にオーバーヘッドが生じるってことも勉強しとくといい



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

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

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

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

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

154 名前:デフォルトの名無しさん [2020/08/24(月) 14:23:21.21 ID:2j0RwZQH.net]
「#pragmaは禁止」とあったので、そうだと判断しています。

もしこれが必ずしも#pragma pack(1)も禁止というわけではないなら、一度担当者に確認してみようと思います。

155 名前:デフォルトの名無しさん [2020/08/24(月) 14:33:52.11 ID:2j0RwZQH.net]
>>153
ありがとうございます。
そのようにしようと思います。

様々なアドバイスをいただき、私の考え方や疑問に思う部分が誤っていたと感じました。
これからはもっと広い視野で考えられるように頑張ります。

156 名前:蟻人間 mailto:sage [2020/08/24(月) 14:38:21.49 ID:lUUB+Gis.net]
#include <pshpack1.h>

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

158 名前:デフォルトの名無しさん mailto:sage [2020/08/24(月) 20:39:16.80 ID:hO98kfNk.net]
#include <cstdint>知らなさそうだね

159 名前:デフォルトの名無しさん mailto:sage [2020/08/25(火) 00:20:38.83 ID: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 名前:デフォルトの名無しさん mailto:sage [2020/08/25(火) 07:35:37.57 ID:IvfDNlgu.net]
int16_tが欲しいのに他の型使ったらそりゃ。



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

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

163 名前:デフォルトの名無しさん mailto:sage [2020/08/25(火) 10:21:10.89 ID: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 名前:デフォルトの名無しさん mailto:sage [2020/08/25(火) 11:00:39.10 ID:8PaZBEwq.net]
[要出典]

165 名前:デフォルトの名無しさん [2020/08/25(火) 11:11:45.82 ID:Zt9gBA2M.net]
htons とか ntohl とか最強

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

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

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

169 名前:デフォルトの名無しさん mailto:sage [2020/08/25(火) 13:08:39.95 ID:3B5pz6IO.net]
−ヤフーゴミ袋

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



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

172 名前:はちみつ餃子 mailto:sage [2020/08/25(火) 13:56:10.27 ID:xuORV4zd.net]
>>166
俺も >>170 に同意だわ。
基礎的な考え方が身に付いてないと個別の説明を見ても意味わからん。
検索するにしたって検索に適当な語句を選択するだけの知識は要るしな。

用語は大事。
概念を分割して定義を積み重ねるのが体系化だし、
定義は用語の定義として現れることが多い。
用語がわかると色々わかる。

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

174 名前:デフォルトの名無しさん mailto:sage [2020/08/25(火) 14:29:17.40 ID:y+wyfPxz.net]
>>168
-qiitaが抜けてる

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

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

177 名前:デフォルトの名無しさん mailto:sage [2020/08/25(火) 14:49:20.21 ID:8QbTjnzx.net]
なんか流れにしれっとキチガイ混じっとるな

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

179 名前:デフォルトの名無しさん mailto:sage [2020/08/25(火) 14:57:06.54 ID:72rzjRbk.net]
>>176
ありがと
cplusplusで検索できました

180 名前:デフォルトの名無しさん mailto:sage [2020/08/25(火) 15:16:32.29 ID:YCpmFLs5.net]
勘違いで御高説垂れてた奴wwww



181 名前:デフォルトの名無しさん mailto:sage [2020/08/25(火) 20:28:52.64 ID:Ascep3nh.net]
何故かyahooでリアルタイム検索ではC++で検索できる

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

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

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

185 名前:デフォルトの名無しさん mailto:sage [2020/08/26(水) 00:16:50 ID:1Tu0I/K+.net]
あーキモい(゚〇゚)キモい

186 名前:はちみつ餃子 mailto:sage [2020/08/26(水) 01:00:49.72 ID:Yn/rXsvn.net]
キーッ! もういい! (駄洒落)

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

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

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

というより、めんどくさくなるだけ。

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



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

192 名前:デフォルトの名無しさん [2020/08/26(水) 11:43:55.11 ID:KrF5vX4s.net]
学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

VM + ASM を書いた (C#, DX) * x86 ではない!
simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ

VM + ASM のダウンロード
ttp://up.x0000.net/files/TSimulang.zip

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

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

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

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

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

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

199 名前:デフォルトの名無しさん mailto:sage [2020/08/28(金) 17:09:28.47 ID:47MLab1u.net]
自分で動かしてから質問しろよ

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



201 名前:デフォルトの名無しさん mailto:sage [2020/08/28(金) 17:26:26.84 ID:bCpDWR5V.net]
>>198
それコンパイル通るかやってみ

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

203 名前:デフォルトの名無しさん mailto:sage [2020/08/28(金) 17:44:35 ID:TvC7lNeF.net]
>>198
関数は多重定義できるが
関数へのポインタは多重定義できない

204 名前:デフォルトの名無しさん mailto:sage [2020/08/28(金) 17:48:03 ID: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 名前:デフォルトの名無しさん mailto:sage [2020/08/28(金) 19:11:25.34 ID:KPVk+Ml/.net]
>>198
机上の空論持ってくるな
きちんと検証してから持ってこい

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

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

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

209 名前:デフォルトの名無しさん mailto:sage [2020/08/30(日) 13:49:26.97 ID:KF/F+MKa.net]
スルーで

210 名前:デフォルトの名無しさん [2020/08/30(日) 13:51:20.52 ID:GgAZZaQa.net]
100歩譲っておま環



211 名前:デフォルトの名無しさん [2020/08/30(日) 14:21:16.52 ID: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 名前:デフォルトの名無しさん mailto:sage [2020/08/30(日) 14:23:30.40 ID:KF/F+MKa.net]
デバッガで自分でトレースしろ

213 名前:デフォルトの名無しさん [2020/08/30(日) 14:28:47.09 ID:GgAZZaQa.net]
死ね

214 名前:デフォルトの名無しさん [2020/08/30(日) 14:54:19.28 ID: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 名前:デフォルトの名無しさん [2020/08/30(日) 15:13:34 ID:6dVOYYO/.net]
デバッグしたけど問題は見つかりませんでしたと出た。出力に問題があるっぽい

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

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

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

219 名前:デフォルトの名無しさん mailto:sage [2020/08/30(日) 17:44:09 ID:oWP9MzfY.net]
これはひどい

220 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 17:01:57.31 ID:8b49PodW.net]
hage



221 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 17:03:42 ID:LCYaN/vD.net]
どっちのだよ

222 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 17:11:42.93 ID:ML6iv+hM.net]
https://dotup.org/uploda/dotup.org2246504.jpg






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<63KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef