!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること
次スレは>>980が立てること
無理なら細かく安価指定
※前スレ
C++相談室 part162
https://mevius.5ch.net/test/read.cgi/tech/1667194175/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
C++相談室 part163
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ bbda-Axul)
2022/12/30(金) 23:16:31.37ID:DPUEZfMS0657デフォルトの名無しさん (ワッチョイ 5328-zbnh)
2023/03/07(火) 19:14:40.99ID:OIq1O0Ib0 Unixの構造上ならどう筋合いがあるんじゃ……
親プロセスから子プロセスになんか引き継ぎたいとき便利(そういうのが多いときコピーオンライトで高速化も可能)だというのはわかるが
そもそも親プロセスから子プロセスに引き継がれるべき情報ってそんなに重大で大容量なのがなんかあるっけ、、、
親プロセスから子プロセスになんか引き継ぎたいとき便利(そういうのが多いときコピーオンライトで高速化も可能)だというのはわかるが
そもそも親プロセスから子プロセスに引き継がれるべき情報ってそんなに重大で大容量なのがなんかあるっけ、、、
658デフォルトの名無しさん (ワッチョイ 8bf2-4fLd)
2023/03/07(火) 19:35:58.81ID:nDfu8VY70 代わりにspawnがあるからでしょ
659デフォルトの名無しさん (ワッチョイ 117c-u9cX)
2023/03/07(火) 20:12:06.52ID:yBXOBLOe0 そもそもプロセスって並列処理のためのもので、並列処理って同じ仕事する奴をたくさん用意するものなんだからforkは自然な設計
現代のPCやデバイスと噛み合ってないのはその通り
現代のPCやデバイスと噛み合ってないのはその通り
660デフォルトの名無しさん (スップ Sd73-Wv9y)
2023/03/07(火) 20:19:21.43ID:hnN7reTEd 俺の使い方だとshellのビルトインコマンドをパイプで繋げるときと、PS1に色々仕込むぐらいしか恩恵ないかな
Windows(cygwin)でパイプ使いまくるとクソ重い
他はネットワークサーバーでaccept→forkのサンプルコードをよく見る
Windows(cygwin)でパイプ使いまくるとクソ重い
他はネットワークサーバーでaccept→forkのサンプルコードをよく見る
661デフォルトの名無しさん (ワッチョイ d163-PMd1)
2023/03/08(水) 06:43:43.40ID:D4+z1pfo0662デフォルトの名無しさん (アウアウウー Sa1d-KHHX)
2023/03/08(水) 07:31:55.78ID:I9WABGt0a 何を言ってるんだお前は
663デフォルトの名無しさん (ワッチョイ d163-PMd1)
2023/03/08(水) 07:38:01.65ID:D4+z1pfo0 何か間違ったこと言ったか?
664デフォルトの名無しさん (ラクッペペ MMeb-UQad)
2023/03/08(水) 07:49:03.77ID:H+IAPgT9M 天然か
665デフォルトの名無しさん (ワッチョイ d163-PMd1)
2023/03/08(水) 07:52:01.79ID:D4+z1pfo0 何も言えんヘタレか
つまらんぞ
つまらんぞ
666デフォルトの名無しさん (ワッチョイ 13ad-Qpn1)
2023/03/08(水) 10:54:15.94ID:/Tvc5S700 forkはそのままではメモリ共有できないので並列処理の定石とは言い難い
667デフォルトの名無しさん (テテンテンテン MMeb-rgVR)
2023/03/08(水) 15:41:08.30ID:hz03AXgUM if (auto result = Hoge())
{
}
else
{
}
て書いたときelseブロックでもresult参照できるのめっちゃ違和感あるんですけど、こうなってる理由ってどこかに書いてありますか?
{
}
else
{
}
て書いたときelseブロックでもresult参照できるのめっちゃ違和感あるんですけど、こうなってる理由ってどこかに書いてありますか?
668デフォルトの名無しさん (ワッチョイ d163-PMd1)
2023/03/08(水) 16:00:38.16ID:D4+z1pfo0 違和感? 何で?
ブレースは必須じゃねえだろ
if (auto result = Hoge()) ; else /* ここでresultが使えるのおかしいか? */ ;
{
else /* これはできないわけで、elseはifの続きだぞ */
}
ブレースは必須じゃねえだろ
if (auto result = Hoge()) ; else /* ここでresultが使えるのおかしいか? */ ;
{
else /* これはできないわけで、elseはifの続きだぞ */
}
669デフォルトの名無しさん (ワッチョイ 119c-8Eq5)
2023/03/08(水) 16:22:00.73ID:ytiNTw1F0 try で宣言した変数を catch や finally で参照できるようにして欲しいと思ったことが 5億回はある
670はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 013e-zdzo)
2023/03/08(水) 16:26:12.41ID:sNgBrAzK0 >>669
出来たとしても catch したときには解体済み (または構築していない) なはずなのでだめぽ。
出来たとしても catch したときには解体済み (または構築していない) なはずなのでだめぽ。
671デフォルトの名無しさん (ワッチョイ 119c-8Eq5)
2023/03/08(水) 16:36:24.71ID:ytiNTw1F0 うん、ダメな理由は分かる
でもみんな try に書いてた変数を catch や finally で必要になってから外出しした経験あるよね
でもみんな try に書いてた変数を catch や finally で必要になってから外出しした経験あるよね
672はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 013e-zdzo)
2023/03/08(水) 16:38:09.65ID:sNgBrAzK0 >>667
C with Classes が C++ になる頃にそこに宣言を書けることにした話はD&E に言及がある。
Algol68 の真似をしたつもりだったが
実は設計者の勘違いで Algol68 にそんな仕様はなかったということも書かれている。
スコープのことまでは書かれていなかったが、
たぶんそれも当時の設計者の脳内 Algol68 ではそうだったってだけなんだろう。
まあ else も if 文の一部なので自然に考えれば全体がスコープになるほうが
理屈に合うように思えるし、私は疑問に感じたことは無かったな。
C with Classes が C++ になる頃にそこに宣言を書けることにした話はD&E に言及がある。
Algol68 の真似をしたつもりだったが
実は設計者の勘違いで Algol68 にそんな仕様はなかったということも書かれている。
スコープのことまでは書かれていなかったが、
たぶんそれも当時の設計者の脳内 Algol68 ではそうだったってだけなんだろう。
まあ else も if 文の一部なので自然に考えれば全体がスコープになるほうが
理屈に合うように思えるし、私は疑問に感じたことは無かったな。
673デフォルトの名無しさん (テテンテンテン MMeb-rgVR)
2023/03/08(水) 18:30:22.29ID:lmBqNRkPM >>672
ありがとうございます。
ifでの宣言は初期化とテストが一緒にされるわけで、テストに失敗した結果実行されるelseブロックでそれが使えることがちょっと納得できませんでした。
言われてみれば、中身がnullptrとは限らないし、エラーハンドリングとかで使ってるんですかね
ありがとうございます。
ifでの宣言は初期化とテストが一緒にされるわけで、テストに失敗した結果実行されるelseブロックでそれが使えることがちょっと納得できませんでした。
言われてみれば、中身がnullptrとは限らないし、エラーハンドリングとかで使ってるんですかね
674デフォルトの名無しさん (ワッチョイ 5328-zbnh)
2023/03/08(水) 22:20:58.55ID:tb9BYlUU0 それよか
int outlierCnt; // ←これのスコープのが問題
do {
outlierCnt = 0;
for (int j = 0; j < n; j++) {
if (...) {
outlierCnt++;
}
}
} while (outlierCnt > 0);
// ループを出たらoutlierCntは用済み
int outlierCnt; // ←これのスコープのが問題
do {
outlierCnt = 0;
for (int j = 0; j < n; j++) {
if (...) {
outlierCnt++;
}
}
} while (outlierCnt > 0);
// ループを出たらoutlierCntは用済み
675デフォルトの名無しさん (ワッチョイ 8bcf-W5Lg)
2023/03/08(水) 22:35:27.94ID:vNfcyURF0 見えてほしい範囲とか見えてほしくない範囲があんならブロック使って任意にスコープ作ればいいんでは
676デフォルトの名無しさん (ワッチョイ 5328-zbnh)
2023/03/08(水) 23:51:23.50ID:tb9BYlUU0 >>675
bool bUniqueList; // ← constにできない
{
bUniqueList = true;
std::set<T> dupChk;
foreach (auto it = vec.begin(); it != vec.end(); it++) {
auto result = dupChk.insert(*it);
if (!result.second) {
bUniqueList = false;
break;
}
}
}
if (bUniqueList) { ... }
bool bUniqueList; // ← constにできない
{
bUniqueList = true;
std::set<T> dupChk;
foreach (auto it = vec.begin(); it != vec.end(); it++) {
auto result = dupChk.insert(*it);
if (!result.second) {
bUniqueList = false;
break;
}
}
}
if (bUniqueList) { ... }
677デフォルトの名無しさん (ワッチョイ 0901-nyng)
2023/03/09(木) 00:39:11.87ID:3j1Ekj6a0 >>676
const bool bUniqueList
{
[&]
{
bool bUniqueList = true;
std::set<T> dupChk;
for (auto it = vec.begin(); it != vec.end(); it++) {
auto result = dupChk.insert(*it);
if (!result.second) {
bUniqueList = false;
break;
}
}
return bUniqueList;
} ()
};
if (bUniqueList) { /* ... */ }
const bool bUniqueList
{
[&]
{
bool bUniqueList = true;
std::set<T> dupChk;
for (auto it = vec.begin(); it != vec.end(); it++) {
auto result = dupChk.insert(*it);
if (!result.second) {
bUniqueList = false;
break;
}
}
return bUniqueList;
} ()
};
if (bUniqueList) { /* ... */ }
678デフォルトの名無しさん (ワッチョイ 59f0-G4VO)
2023/03/09(木) 06:47:29.67ID:Kr9kVNlI0 do while が一番パフォーマンス的に有利なんだから
もう少し使いやすくしてほしかったなあ
もう少し使いやすくしてほしかったなあ
679デフォルトの名無しさん (ワッチョイ 59f0-G4VO)
2023/03/09(木) 06:51:51.75ID:Kr9kVNlI0 >>677
行数増えてんじゃん
行数増えてんじゃん
680デフォルトの名無しさん (アウアウエー Sae3-4fLd)
2023/03/09(木) 14:14:05.11ID:lc0skjdva // みんなこうやってんの
{
int outlierCnt; // ←これのスコープのが問題
do {
outlierCnt = 0;
for (int j = 0; j < n; j++) {
if (...) {
outlierCnt++;
}
}
} while (outlierCnt > 0);
}
{
int outlierCnt; // ←これのスコープのが問題
do {
outlierCnt = 0;
for (int j = 0; j < n; j++) {
if (...) {
outlierCnt++;
}
}
} while (outlierCnt > 0);
}
681デフォルトの名無しさん (スップ Sd33-G4VO)
2023/03/09(木) 15:04:30.56ID:80vOWs2Ed for (A;B;C){
} while (D);
こんなのがあれば万能
} while (D);
こんなのがあれば万能
682デフォルトの名無しさん (ワッチョイ 13ad-5bTy)
2023/03/09(木) 15:15:47.17ID:AnxNC5rK0 for (A;B;C){
if(!D) break;
}
解決した
if(!D) break;
}
解決した
683デフォルトの名無しさん (スップ Sd33-G4VO)
2023/03/09(木) 15:41:20.30ID:80vOWs2Ed >>682
論理逆だし行も増えるし
論理逆だし行も増えるし
684デフォルトの名無しさん (ワッチョイ 13ad-5bTy)
2023/03/09(木) 15:46:07.32ID:AnxNC5rK0 >>683
Dの横の一文字が見えない?
Dの横の一文字が見えない?
685デフォルトの名無しさん (ワッチョイ d163-PMd1)
2023/03/09(木) 17:40:38.10ID:zXViYC6t0 ループの条件が2箇所になってるのは
構造化プログラミングのパラダイムからは外れる形だね
俺は教条主義者ではないが、あんまり気が乗らない
構造化プログラミングのパラダイムからは外れる形だね
俺は教条主義者ではないが、あんまり気が乗らない
686デフォルトの名無しさん (スップ Sd33-G4VO)
2023/03/09(木) 17:45:05.69ID:80vOWs2Ed >>684
見やすさの観点から論理は非常に重要
見やすさの観点から論理は非常に重要
687デフォルトの名無しさん (スップ Sd33-G4VO)
2023/03/09(木) 17:47:03.73ID:80vOWs2Ed 見やすさや行数を無視するなら
for、while、do while なんかいらない
gotoで良い
for、while、do while なんかいらない
gotoで良い
688デフォルトの名無しさん (ワッチョイ d163-PMd1)
2023/03/09(木) 17:51:18.91ID:zXViYC6t0 えー<algorithm>だろ、C++的には
689デフォルトの名無しさん (ワッチョイ 117c-u9cX)
2023/03/09(木) 18:07:24.33ID:Uk52+MzN0 doとかいう貴重な2文字キーワードをこんなとこで無駄遣いしてるのは正直ダサい
690デフォルトの名無しさん (スップ Sd33-G4VO)
2023/03/09(木) 18:41:24.17ID:80vOWs2Ed {
A
if(!B)goto L0002;
{
}
C
if (D) goto L0001;
L0002:;
}
A
if(!B)goto L0002;
{
}
C
if (D) goto L0001;
L0002:;
}
691デフォルトの名無しさん (ワッチョイ 715f-Tvj1)
2023/03/09(木) 19:54:06.46ID:maTPLFSP0 >>681
do {} while (!D) は,ループの事後条件として,Dが条件として成立することを保証している。
(until D として欲しかったが)
for (a;b;c) {} while (D) じゃ,ループの事後条件として何が成立してるのかわからないので
こんなコードは却下だな
do {} while (!D) は,ループの事後条件として,Dが条件として成立することを保証している。
(until D として欲しかったが)
for (a;b;c) {} while (D) じゃ,ループの事後条件として何が成立してるのかわからないので
こんなコードは却下だな
692デフォルトの名無しさん (ワッチョイ 715f-Tvj1)
2023/03/09(木) 20:02:25.15ID:maTPLFSP0 逆に, B | D が成立してほしいなら
A; do { C } while (!(B|D)) と書くべき
A; do { C } while (!(B|D)) と書くべき
693デフォルトの名無しさん (ワッチョイ 4110-6803)
2023/03/09(木) 20:06:14.82ID:pAfi+zPk0 こんなので
dowhile(int cnt; cnt > 0)
{
cnt=0
cnt++;
}
dowhile(int cnt; cnt > 0)
{
cnt=0
cnt++;
}
694デフォルトの名無しさん (ワッチョイ 715f-Tvj1)
2023/03/09(木) 20:11:30.40ID:maTPLFSP0 for (int cnt=0; cnt>0;) {
cnt++
}
でいいんじゃないの?
cnt++
}
でいいんじゃないの?
695デフォルトの名無しさん (ワッチョイ fbda-TnyN)
2023/03/09(木) 20:22:51.74ID:kUujduR60 do{}while(){}
セミコロン最後に付けるならスコープでいいよな
セミコロン最後に付けるならスコープでいいよな
696デフォルトの名無しさん (ワッチョイ fbda-TnyN)
2023/03/09(木) 20:24:42.25ID:kUujduR60 do{}for(){}
とかなぜないのか
とかなぜないのか
697デフォルトの名無しさん (ワッチョイ 715f-Tvj1)
2023/03/09(木) 20:27:29.69ID:maTPLFSP0 ループ終了条件を,ループ制御変数以外で書きたいということ?
別に書いてもいいけど,わかりにくと思うんだ
for (int i=0; i<0 || D ; ++i) { … }
で良いんでは?
別に書いてもいいけど,わかりにくと思うんだ
for (int i=0; i<0 || D ; ++i) { … }
で良いんでは?
698デフォルトの名無しさん (ワッチョイ fbda-TnyN)
2023/03/09(木) 20:28:43.40ID:kUujduR60 do(int i=0){}for(i<n;i++);
こんな感じか
こんな感じか
699デフォルトの名無しさん (ワッチョイ 715f-Tvj1)
2023/03/09(木) 20:32:17.74ID:maTPLFSP0 for を前に書こうが、後ろに書こうが,for ループを抜けた時は,
for ループの終了条件が成立しているので,前に書いたら良い
for ループの終了条件が成立しているので,前に書いたら良い
700デフォルトの名無しさん (ワッチョイ 715f-Tvj1)
2023/03/09(木) 20:35:31.74ID:maTPLFSP0 for (A; B||D; C,D) { … } じゃダメなの?
701デフォルトの名無しさん (ワッチョイ 59f0-G4VO)
2023/03/09(木) 21:57:49.10ID:Kr9kVNlI0 >>691
頭悪いって言われない?
頭悪いって言われない?
702デフォルトの名無しさん (ワッチョイ 295f-3zFX)
2023/03/09(木) 22:20:20.74ID:fJ6NWa1S0 アスペのこだわり大会かよ
703デフォルトの名無しさん (ワッチョイ 5328-zbnh)
2023/03/10(金) 23:18:44.72ID:hCUBJoIo0704デフォルトの名無しさん (ブーイモ MM4d-fQ2h)
2023/03/11(土) 03:20:25.02ID:gMabCRDUM inline 指定子って前方宣言と定義の少なくとも一方に付ければ良いんですかね?
普通は inline 関数を宣言と定義分けて書くことはあまりしないと思いますが
普通は inline 関数を宣言と定義分けて書くことはあまりしないと思いますが
705デフォルトの名無しさん (ワッチョイ dd01-a+nz)
2023/03/11(土) 20:44:27.01ID:+PZMhSrI0 宣言にはつけなくね?
706デフォルトの名無しさん (スップ Sd9a-67MV)
2023/03/12(日) 12:26:00.35ID:/+cwNiL3d メンバ関数の定義にinlineは普通にやる
707デフォルトの名無しさん (ワッチョイ a163-DvKe)
2023/03/15(水) 13:16:39.32ID:T1RUme5O0 inlineの元々の意味はもう存在感なくなってきてるな
今はODRに違反するものを通して貰ったり
namespaceのアレとかで使う
今はODRに違反するものを通して貰ったり
namespaceのアレとかで使う
708デフォルトの名無しさん (ワッチョイ f94e-mIEw)
2023/03/15(水) 13:44:43.53ID:yzqSYUc10 本来の意味では、コンパイラ依存になっちゃうけどalways_inlineとか__forceinlineっていうのがあったりするな
これもちゃんと規格化した方が良いよね
これもちゃんと規格化した方が良いよね
709デフォルトの名無しさん (ワッチョイ a163-DvKe)
2023/03/15(水) 15:22:25.13ID:T1RUme5O0 [[force_inline]]か
710デフォルトの名無しさん (ワッチョイ 4d10-2f2l)
2023/03/15(水) 20:13:46.16ID:3bZGOkgE0 モジュールだとinlineは元の意味になる、forceではないけど
711デフォルトの名無しさん (ワッチョイ 5328-53XG)
2023/03/18(土) 00:24:08.81ID:AshFX+nM0 enum class Fooの項目数を取得するにはどうすれば良いですの?
昔ながらに
enum class Foo { A = 0, B, C, D, E, NELEMS };
みたいに要素数NELEMSを定義しないと駄目?
昔ながらに
enum class Foo { A = 0, B, C, D, E, NELEMS };
みたいに要素数NELEMSを定義しないと駄目?
712デフォルトの名無しさん (ワッチョイ a1ba-kL5v)
2023/03/18(土) 00:34:08.94ID:4yjyip5Y0 はい
713デフォルトの名無しさん (ブーイモ MM8b-xxKT)
2023/03/18(土) 08:22:34.90ID:X2nJJgpEM714デフォルトの名無しさん (ワッチョイ 5328-53XG)
2023/03/18(土) 09:34:19.12ID:AshFX+nM0 ファッ?!
715はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 993e-7LVk)
2023/03/18(土) 09:37:45.79ID:XgD5JQEe0 >>711
現在の言語仕様の範囲内でやるならそれがたぶん一番に簡単な方法。
magic_enum を活用するのもいいけど処理系の拡張を利用しているのでもしもメンテが
滞ることがあったら処理系の変化について行けなくて破綻するかも? (余計な心配かも?)
要素数を数えるためだけに導入するならちょっと大げさという感じがする。
将来の C++ にリフレクション系の機能を追加しようとする提案はある。
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/n4818.pdf
試験的に GCC に追加したブランチもあって、
オンラインコンパイラで試せるところがあったはずなんだがどこだったか思い出せない。 すまぬ……。
現在の言語仕様の範囲内でやるならそれがたぶん一番に簡単な方法。
magic_enum を活用するのもいいけど処理系の拡張を利用しているのでもしもメンテが
滞ることがあったら処理系の変化について行けなくて破綻するかも? (余計な心配かも?)
要素数を数えるためだけに導入するならちょっと大げさという感じがする。
将来の C++ にリフレクション系の機能を追加しようとする提案はある。
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/n4818.pdf
試験的に GCC に追加したブランチもあって、
オンラインコンパイラで試せるところがあったはずなんだがどこだったか思い出せない。 すまぬ……。
716デフォルトの名無しさん (ワッチョイ e97c-+SA5)
2023/03/18(土) 10:54:33.77ID:bCJ0RWMx0 どうやってんのかと思ったらゴリ押しで草
717デフォルトの名無しさん (ワッチョイ 91f0-BQ3C)
2023/03/19(日) 02:53:52.21ID:aov6FzNY0 std::vectorを初期化せず要素数を変更する方法が存在しないそうですが、どうにかなりませんか?
718デフォルトの名無しさん (ワッチョイ 13ad-F0re)
2023/03/19(日) 07:02:58.28ID:/XQ3/AVL0 >>717
初期化しないことを指定するフラグをメンバ変数に追加し、resize(n,c)の二番目の引数でそのフラグを立てたインスタンスcを渡す。
コピーコンストラクタが呼び出されるので、渡されてきたインスタンスcの該当フラグを見て、初期化するかどうか判定して分岐させる。
初期化しないことを指定するフラグをメンバ変数に追加し、resize(n,c)の二番目の引数でそのフラグを立てたインスタンスcを渡す。
コピーコンストラクタが呼び出されるので、渡されてきたインスタンスcの該当フラグを見て、初期化するかどうか判定して分岐させる。
719はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 993e-7LVk)
2023/03/19(日) 09:21:23.84ID:6gmOWdI+0 >>717
vector が要素のデフォルトコンストラクタを呼ぶことは保証されるが
デフォルトコンストラクタが初期化しないようにしておけば初期化されない。
https://wandbox.org/permlink/8SepeggcI18hio7W
vector が要素のデフォルトコンストラクタを呼ぶことは保証されるが
デフォルトコンストラクタが初期化しないようにしておけば初期化されない。
https://wandbox.org/permlink/8SepeggcI18hio7W
720はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 993e-7LVk)
2023/03/19(日) 10:57:57.35ID:6gmOWdI+0 >>711
列挙型を定義するときには要素の数は分かっているのだから要素数を書いた定義も書いておけば十分かもしれない。
#include <type_traits>
// プライマリテンプレート (実際にはこれが使われたらエラー)
template <class T>
class enum_count {
template <class U>
class helper : public std::integral_constant<bool, false> {};
static_assert(helper<T>::value, "expected known enum.");
};
// 列挙型を定義
enum class Foo {A, B, C, D, E};
// 列挙型 Foo の要素数が 5 であることは分かっているので 5 で定義しておく
template <> class enum_count<Foo> : public std::integral_constant<std::size_t, 5> {};
int main(void) {
// 列挙型の要素数をカウントしたかのように見える
static_assert(enum_count<Foo>::value == 5);
}
列挙型の定義と要素数の定義を同時にするようなマクロでも作っておけばなおよいと思う。
Boost にそんな感じのライブラリがあった気がするが使ったことが無いのでよく知らない。
列挙型を定義するときには要素の数は分かっているのだから要素数を書いた定義も書いておけば十分かもしれない。
#include <type_traits>
// プライマリテンプレート (実際にはこれが使われたらエラー)
template <class T>
class enum_count {
template <class U>
class helper : public std::integral_constant<bool, false> {};
static_assert(helper<T>::value, "expected known enum.");
};
// 列挙型を定義
enum class Foo {A, B, C, D, E};
// 列挙型 Foo の要素数が 5 であることは分かっているので 5 で定義しておく
template <> class enum_count<Foo> : public std::integral_constant<std::size_t, 5> {};
int main(void) {
// 列挙型の要素数をカウントしたかのように見える
static_assert(enum_count<Foo>::value == 5);
}
列挙型の定義と要素数の定義を同時にするようなマクロでも作っておけばなおよいと思う。
Boost にそんな感じのライブラリがあった気がするが使ったことが無いのでよく知らない。
721デフォルトの名無しさん (テテンテンテン MM8b-LjWS)
2023/03/19(日) 12:15:12.56ID:+MpLv2UeM >>717
vectorが連続した領域を確保するので仕方ないかと。
vector のreserveで十分な領域を予約する
vectorにインスタンスじゃなくてsmart pointerを格納する
vectorじゃなくてlistかdequeを使う
クラスを弄くれるなら、move constructorでどうにかならんかね?
vectorが連続した領域を確保するので仕方ないかと。
vector のreserveで十分な領域を予約する
vectorにインスタンスじゃなくてsmart pointerを格納する
vectorじゃなくてlistかdequeを使う
クラスを弄くれるなら、move constructorでどうにかならんかね?
722デフォルトの名無しさん (ワッチョイ e15f-XP14)
2023/03/19(日) 14:31:05.87ID:qEtAe03H0 >>717
どんな要素?クラス?
どんな要素?クラス?
723デフォルトの名無しさん (ワッチョイ 5328-53XG)
2023/03/19(日) 15:04:28.20ID:5NoJOqaP0 >>720
レス㌧クスしかし……
enum class FooはFoo::AとかFoo::Bとかいう形でしか使われないのだから個数を返す専用のテンプレートの特ちゅ化を行うよりは
Fooという名前のを何らかの手段でwrapしてやってcountメンバを持たせる方が自然なような、
enum class Foo0 { A = 0, B, C, D, E };
だとして現状class Foo : public Foo0 { ... }みたいなことは書けないから、手段としては次の2つ……
(1) クラスれwrap
struct Foo {
enum { A, B, C, D, E }; // 古き良きenum、
static size_t count() { return 5; }
};
(2) namespaceでwrap
namespace Foo {
enum { A, B, C, D, E }; // 古き良きenum、
inline size_t count() { return 5; }
};
規格委員会が斜め上の行動に出なければこういう方向性が自然に感じる……
レス㌧クスしかし……
enum class FooはFoo::AとかFoo::Bとかいう形でしか使われないのだから個数を返す専用のテンプレートの特ちゅ化を行うよりは
Fooという名前のを何らかの手段でwrapしてやってcountメンバを持たせる方が自然なような、
enum class Foo0 { A = 0, B, C, D, E };
だとして現状class Foo : public Foo0 { ... }みたいなことは書けないから、手段としては次の2つ……
(1) クラスれwrap
struct Foo {
enum { A, B, C, D, E }; // 古き良きenum、
static size_t count() { return 5; }
};
(2) namespaceでwrap
namespace Foo {
enum { A, B, C, D, E }; // 古き良きenum、
inline size_t count() { return 5; }
};
規格委員会が斜め上の行動に出なければこういう方向性が自然に感じる……
724デフォルトの名無しさん (ワッチョイ 5328-53XG)
2023/03/19(日) 15:13:02.52ID:5NoJOqaP0 >>717
std::vector<T>をとったら初期化が来る ほんとに早いわ
初期化さえ無かったなら チューリングマシンは楽しいとこ
初期化はきらいだった 私
夢ばかりみていたのよ 私
でもデフォルトコンストラクタとコピコンと代入演算しだけでも
まじめにしておけば
今頃私はかっこいいC++er
初期化はしないよりも しておいたほうがいいわ
std::vector<T>をとったら初期化が来る ほんとに早いわ
初期化さえ無かったなら チューリングマシンは楽しいとこ
初期化はきらいだった 私
夢ばかりみていたのよ 私
でもデフォルトコンストラクタとコピコンと代入演算しだけでも
まじめにしておけば
今頃私はかっこいいC++er
初期化はしないよりも しておいたほうがいいわ
725デフォルトの名無しさん (ワッチョイ 5328-53XG)
2023/03/19(日) 15:17:35.62ID:5NoJOqaP0 初期化はしないよりも しておいたほうがいいわ
726デフォルトの名無しさん (ワッチョイ a963-4ZMk)
2023/03/19(日) 15:18:07.23ID:bKnYO/UZ0 必要があれば初期化するし
必要なければ余計なことはしない
判断できましぇ~んなアホにはなりたくない
必要なければ余計なことはしない
判断できましぇ~んなアホにはなりたくない
727デフォルトの名無しさん (ワッチョイ 5328-53XG)
2023/03/19(日) 15:25:40.86ID:5NoJOqaP0728デフォルトの名無しさん (ワッチョイ 5328-53XG)
2023/03/19(日) 16:19:34.73ID:5NoJOqaP0729デフォルトの名無しさん (ワッチョイ a963-4ZMk)
2023/03/19(日) 16:35:25.46ID:bKnYO/UZ0730デフォルトの名無しさん (ワッチョイ 5328-53XG)
2023/03/19(日) 16:37:36.01ID:5NoJOqaP0731デフォルトの名無しさん (ワッチョイ 5328-53XG)
2023/03/19(日) 16:41:22.65ID:5NoJOqaP0 なんにせよ未初期化(メモリ内容不定)というのはチューリングマシンのプログラミングモデルでは絶対悪
であることは街行く人100人に聞いたら100人全員がそう答えるので
マウントをとろうとして無駄にあがいているかさもなくば無知なのは>>729の方ででケテーイ……
であることは街行く人100人に聞いたら100人全員がそう答えるので
マウントをとろうとして無駄にあがいているかさもなくば無知なのは>>729の方ででケテーイ……
732デフォルトの名無しさん (ワッチョイ a963-4ZMk)
2023/03/19(日) 16:47:15.92ID:bKnYO/UZ0 捏造データ使うやつの相手はしとれん
俺はどっかの大臣みたいに寛大ではない
俺はどっかの大臣みたいに寛大ではない
733デフォルトの名無しさん (ワッチョイ 5328-53XG)
2023/03/19(日) 16:51:34.77ID:5NoJOqaP0 どこが捏造データなのかkwsk、
街行く人を引き合いに出したのは統計の結果という誤解を与えたのかもしれんが
チューリングマシンのプログラミングモデルにおいて、初期化を行わないまま次のステップに進めない(やったら動作が不定になる)のは
覆りようが無い真実、、、
街行く人を引き合いに出したのは統計の結果という誤解を与えたのかもしれんが
チューリングマシンのプログラミングモデルにおいて、初期化を行わないまま次のステップに進めない(やったら動作が不定になる)のは
覆りようが無い真実、、、
734デフォルトの名無しさん (ワッチョイ a963-4ZMk)
2023/03/19(日) 16:55:07.81ID:bKnYO/UZ0 循環バッファ作るときの配列なんかいちいちゼロクリアせんだろ
学校で習いたての未消化の知識で思い込んでんなよ
アホくせ
俺は夕飯の買い物に行くぜ
学校で習いたての未消化の知識で思い込んでんなよ
アホくせ
俺は夕飯の買い物に行くぜ
735デフォルトの名無しさん (ワッチョイ 5328-53XG)
2023/03/19(日) 17:00:25.55ID:5NoJOqaP0736デフォルトの名無しさん (ワッチョイ 5328-53XG)
2023/03/19(日) 17:05:21.48ID:5NoJOqaP0 ちと訂正orz、
循環バッファに入れるのが、STLのクラスをメンバに持つような高級なクラスだったとしよう、
すると循環バッファ作るときの配列を未初期化のままとすると、最初のencueueでいきなり代入から始まるから
(代入演算子が呼ばれる)から、未初期化オブジェクトに対する代入演算子が機能したとしてもそれはたまたまという話になる……
よって
>循環バッファ作るときの配列なんかいちいちゼロクリアせんだろ
これの主張は偽。ハイ論破、
循環バッファに入れるのが、STLのクラスをメンバに持つような高級なクラスだったとしよう、
すると循環バッファ作るときの配列を未初期化のままとすると、最初のencueueでいきなり代入から始まるから
(代入演算子が呼ばれる)から、未初期化オブジェクトに対する代入演算子が機能したとしてもそれはたまたまという話になる……
よって
>循環バッファ作るときの配列なんかいちいちゼロクリアせんだろ
これの主張は偽。ハイ論破、
737はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 993e-7LVk)
2023/03/19(日) 17:48:11.34ID:6gmOWdI+0 >>723
メンバを持てない型にメンバっぽいものを結び付けたい場合 (たとえば char_traits や numeric_limits) だとか、
既存の型をいじらずに拡張できる余地を用意したい場合 (allocator_traits) 、
メタプログラミング用のメタ関数 (type_traits) といったものはトレイトの形にすることもそんなに珍しくはない。
ところで Godbolt でリフレクション (N4818) 実装版の clang が使えた。
列挙子の数を数えるメタ関数を簡易的に書いたらこんな感じ。
https://godbolt.org/z/G4jf65j8f
将来的にはこういう機能が C++ に入るかもしれない。
メンバを持てない型にメンバっぽいものを結び付けたい場合 (たとえば char_traits や numeric_limits) だとか、
既存の型をいじらずに拡張できる余地を用意したい場合 (allocator_traits) 、
メタプログラミング用のメタ関数 (type_traits) といったものはトレイトの形にすることもそんなに珍しくはない。
ところで Godbolt でリフレクション (N4818) 実装版の clang が使えた。
列挙子の数を数えるメタ関数を簡易的に書いたらこんな感じ。
https://godbolt.org/z/G4jf65j8f
将来的にはこういう機能が C++ に入るかもしれない。
738デフォルトの名無しさん (ワッチョイ e15f-7LVk)
2023/03/19(日) 18:51:39.67ID:xw5DwAwo0 >>737
get_size_v<get_enumerators_t<reflexpr(Enum)>> でよい。
標準で enum_count みたいなの用意しといて欲しいよね。誰が書いても同じになるんだから。
get_size_v<get_enumerators_t<reflexpr(Enum)>> でよい。
標準で enum_count みたいなの用意しといて欲しいよね。誰が書いても同じになるんだから。
739はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 993e-7LVk)
2023/03/19(日) 20:19:21.80ID:6gmOWdI+0 >>738
おっ、そんな便利なのを見落としておったわ……。
将来的には enum_count みたいなのは入ると思う。
現時点では基礎になるスコープの広い部分を検討中だから
おそらくその上に実装されるであろう部分をどうこういうのは時期尚早ってことなんだろう。
おっ、そんな便利なのを見落としておったわ……。
将来的には enum_count みたいなのは入ると思う。
現時点では基礎になるスコープの広い部分を検討中だから
おそらくその上に実装されるであろう部分をどうこういうのは時期尚早ってことなんだろう。
740デフォルトの名無しさん (ワッチョイ a963-4ZMk)
2023/03/19(日) 20:47:43.45ID:bKnYO/UZ0 >>735
覆したかどうかジャッジは衆目に任せようや
覆したかどうかジャッジは衆目に任せようや
741デフォルトの名無しさん (ワッチョイ e15f-XP14)
2023/03/19(日) 23:30:56.76ID:qEtAe03H0 初期化の必要はないけど、しても負荷はないに等しいという状況もよくあるからなんとも
742はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 993e-7LVk)
2023/03/19(日) 23:39:18.94ID:6gmOWdI+0 形式的には初期化をしてても最適化を通ると消えてるってこともあるし……。
743デフォルトの名無しさん (ワッチョイ a963-4ZMk)
2023/03/20(月) 15:45:00.03ID:ORIjxPLV0 必要ないことはしないってだけなのに何か悪いのかよ
見も知らん馬の骨のご機嫌取るのも必要ないかんな
見も知らん馬の骨のご機嫌取るのも必要ないかんな
744デフォルトの名無しさん (ワッチョイ a963-4ZMk)
2023/03/20(月) 15:53:20.87ID:ORIjxPLV0 まるでマスク警察だな
初期化警察
初期化警察
745デフォルトの名無しさん (スプッッ Sd73-nGUn)
2023/03/20(月) 17:50:53.62ID:xiC6G7QOd >>742
例えばどんな場合?
例えばどんな場合?
746デフォルトの名無しさん (テテンテンテン MM8b-LjWS)
2023/03/20(月) 18:48:41.76ID:UaylDbEEM747デフォルトの名無しさん (ワッチョイ e15f-XP14)
2023/03/20(月) 20:03:19.49ID:KynYd7/p0 例えばプログラムでアドレスを計算してる場合に、そのアドレスのメモリが
初期化されてるかどうかをコンパイラが判断するのは難しいだろうね
他にもライブラリとか別のプログラムで初期化されてもわからない
初期化されてるかどうかをコンパイラが判断するのは難しいだろうね
他にもライブラリとか別のプログラムで初期化されてもわからない
748デフォルトの名無しさん (アウアウウー Sa95-8mIh)
2023/03/20(月) 20:14:42.31ID:GZpDpxkna749デフォルトの名無しさん (ワッチョイ 91f0-BQ3C)
2023/03/20(月) 20:22:11.60ID:hNMIxENu0 vectorに対してcopyとかtransform使うとき、あらかじめコピー元とコピー先のサイズを揃えますけど
この時ほぼほぼ初期化省かれてるなっての分かるじゃないですか
それなら最初から初期化を省くメソッド用意してくれてもいいんじゃないか?と思うわけです
この時ほぼほぼ初期化省かれてるなっての分かるじゃないですか
それなら最初から初期化を省くメソッド用意してくれてもいいんじゃないか?と思うわけです
750デフォルトの名無しさん (ワッチョイ e15f-XP14)
2023/03/20(月) 20:58:12.86ID:KynYd7/p0 まあ、要素がPODの場合にvector::resizeで初期化しないでほしいと思うことはあるけど、
それで仕方なく不要な初期化をして遅くなった試しがないからなぁ・・・
それで仕方なく不要な初期化をして遅くなった試しがないからなぁ・・・
751はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 993e-7LVk)
2023/03/20(月) 21:35:36.48ID:c1bWUyRU0 >>749
そのためにサイズとは別にキャパシティの概念があるんじゃないの。
書き込む順序が変な場合だったりすると上手くいかんかもしれんが
copy や transform を使う分には事前にキャパシティを調整した上で
値の書き込みは back_inserter を使えば無駄な初期化も再配置も起こらない。
そのためにサイズとは別にキャパシティの概念があるんじゃないの。
書き込む順序が変な場合だったりすると上手くいかんかもしれんが
copy や transform を使う分には事前にキャパシティを調整した上で
値の書き込みは back_inserter を使えば無駄な初期化も再配置も起こらない。
752デフォルトの名無しさん (ワッチョイ e15f-7LVk)
2023/03/20(月) 21:40:04.28ID:hzdgbGAw0 >>749
insert_iterator は嫌なの?
insert_iterator は嫌なの?
753デフォルトの名無しさん (ワッチョイ e15f-7LVk)
2023/03/20(月) 21:40:53.83ID:hzdgbGAw0 あ、被った。ごめん。
754デフォルトの名無しさん (ワッチョイ d1f0-nGUn)
2023/03/20(月) 22:56:55.34ID:4g6dG7Pp0 初期化が重いならコンストラクタと初期化を分ければ良いし
微妙なコピーによるパフォーマンスを気にするなら自作すれば良い
無い物ねだりは時間の無駄
微妙なコピーによるパフォーマンスを気にするなら自作すれば良い
無い物ねだりは時間の無駄
755蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd33-byLE)
2023/03/20(月) 23:03:48.48ID:W64rVTKed アロケータ自作もアリ。
756はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 993e-7LVk)
2023/03/20(月) 23:17:51.49ID:c1bWUyRU0757デフォルトの名無しさん (ワッチョイ a963-4ZMk)
2023/03/21(火) 06:23:01.76ID:UyD8IPHr0 int a = 0; //こうしないとエラーな環境なんてイラネーヨ
if(cin >> a) cout << a;
if(cin >> a) cout << a;
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★11 [ぐれ★]
- 日本損失1.7兆円に修正 中国渡航自粛の影響試算 [蚤の市★]
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★3 [蚤の市★]
- 「どうしようもない」 ため息つくアジアの玄関口 中国の訪日自粛で−福岡市 [蚤の市★]
- 「アベノミクス」で投資対象と化したマンション ローンの低金利続き「年収の12倍」借りる20代出現 [蚤の市★]
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【実況】博衣こよりのえちえち朝こよ🧪 ★2
- 【!?】高市早苗「靖国神社電撃参拝プラン」浮上!これもう戦争だろ… [481941988]
- 【実況】博衣こよりのえちえち朝こよ🧪
- カカロット、腰痛い
- 【超悲報】中国への武力行使、世論調査で「賛成」「どちらかといえば賛成」48.8% 「反対」「どちらかといえば反対」の44.2%を上回る [314039747]
- 中国「高市が頭を下げて謝罪しない限り、絶対に許さない」 [329329848]
