前スレ
C++相談室 part158
https://mevius.5ch.net/test/read.cgi/tech/1636969758/
探検
C++相談室 part159
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん
2022/02/19(土) 11:56:42.14ID:kSnJ/KwP2022/02/19(土) 12:05:32.96ID:b+8HD1Ua
C(チンチン)+(プラ)+(プラ)
2022/02/19(土) 13:32:43.00ID:rSu4VNCf
アセンブリとかC言語だと「この操作はするな」ってのを簡単には禁止できないからね
許可されてる(コンパイラから怒られない)操作が増えるとその分だけ不正解のコードを書くリスクが高くなる
structのこのフィールドは排他制御してから変更してねってのをC言語じゃ簡単には強制できんだろ
C++ならgetter作ればいいだけなのに
許可されてる(コンパイラから怒られない)操作が増えるとその分だけ不正解のコードを書くリスクが高くなる
structのこのフィールドは排他制御してから変更してねってのをC言語じゃ簡単には強制できんだろ
C++ならgetter作ればいいだけなのに
2022/02/19(土) 13:38:43.35ID:2h4SA+VW
2022/02/19(土) 13:52:37.43ID:2h4SA+VW
カプセル化が簡単にできるというのと、
オブジェクトC := オブジェクトA + オブジェクトB
オブジェクトE = オブジェクトC * オブジェクトD
...
ここで:=は生成、+や*はなんらかのメッセージ(メソッド)
このようにオブジェクトからオブジェクトを作る、的な、
基本単位がオブジェクトなプログラミング環境が維持されないのは
オブジェクト指向プログラミングしているうちに入らないと
思うんですよねー(棒
オブジェクトC := オブジェクトA + オブジェクトB
オブジェクトE = オブジェクトC * オブジェクトD
...
ここで:=は生成、+や*はなんらかのメッセージ(メソッド)
このようにオブジェクトからオブジェクトを作る、的な、
基本単位がオブジェクトなプログラミング環境が維持されないのは
オブジェクト指向プログラミングしているうちに入らないと
思うんですよねー(棒
2022/02/19(土) 15:57:04.56ID:ymxofDah
format.hを待ってますた
2022/02/19(土) 15:59:32.57ID:lVeS0ElI
>>3
でもそのC++からCを見て不正解のコードを書くリスクが高くなるという話がそのまま
RustからC++を見た場合も当てはまってしまうよな
Rustコンパイラならメモリ安全やデータ競合に問題がある操作をエラーで拒否するのにC++はなぜ許して致命的バグを生み出してしまうのだろう、と
でもそのC++からCを見て不正解のコードを書くリスクが高くなるという話がそのまま
RustからC++を見た場合も当てはまってしまうよな
Rustコンパイラならメモリ安全やデータ競合に問題がある操作をエラーで拒否するのにC++はなぜ許して致命的バグを生み出してしまうのだろう、と
2022/02/19(土) 17:53:08.72ID:kSnJ/KwP
無関係過ぎる
元はアセンブラ必須という人が書き込みがあったので、C++のコンパイラ(gcc)がSIMDを吐く条件についての話をしたんだが・・・
それについては正解できる人や惜しい人すら皆無で、馬鹿がC++全然関係ないOOの話を引っ張ってきて、今じゃC++と無縁な宇宙の話になっている
元はアセンブラ必須という人が書き込みがあったので、C++のコンパイラ(gcc)がSIMDを吐く条件についての話をしたんだが・・・
それについては正解できる人や惜しい人すら皆無で、馬鹿がC++全然関係ないOOの話を引っ張ってきて、今じゃC++と無縁な宇宙の話になっている
2022/02/19(土) 18:09:20.91ID:x/upE6G9
自分でこんなレスしといて今更何言ってるんだかw
> 組み込み機器用のCPUって特殊なんで、コンパイラが安定しないなんてよくある話
> オブジェクト指向のメリットの本質についての話なので、可能/不可能が実装言語に依存しないというのもよくある話(楽かどうかは別)
> 別に昭和でも平成でも令和でも変わってないけど、>> 991に伝わってないのは確か
> 組み込み機器用のCPUって特殊なんで、コンパイラが安定しないなんてよくある話
> オブジェクト指向のメリットの本質についての話なので、可能/不可能が実装言語に依存しないというのもよくある話(楽かどうかは別)
> 別に昭和でも平成でも令和でも変わってないけど、>> 991に伝わってないのは確か
2022/02/19(土) 18:26:04.31ID:kSnJ/KwP
馬鹿がID変えてまた登場
2022/02/19(土) 18:50:37.51ID:mDQ0X8WX
明示的にはSSEコンパイラ組み込み関数を使えば実現できるけど、多くのコンパイラはシングルレーンのループの一部を自動的にベクトル化してくれるのね
コンパイラが暗黙的なベクトル化をしてくれる条件ってシングルレーン以外に何があるんだろ
コンパイラが暗黙的なベクトル化をしてくれる条件ってシングルレーン以外に何があるんだろ
2022/02/19(土) 19:09:18.39ID:x/upE6G9
>>10
顔真っ赤じゃんw
顔真っ赤じゃんw
2022/02/19(土) 19:43:50.83ID:kSnJ/KwP
その問題はもう答え書いた
2022/02/19(土) 20:38:46.85ID:x/upE6G9
恥の上塗りかよw
答えを書いたとか関係ないだろ
> 馬鹿がC++全然関係ないOOの話を引っ張ってきて
に乗っといて何言ってるんだよ
答えを書いたとか関係ないだろ
> 馬鹿がC++全然関係ないOOの話を引っ張ってきて
に乗っといて何言ってるんだよ
2022/02/19(土) 21:13:10.67ID:kSnJ/KwP
2022/02/19(土) 21:45:03.99ID:x/upE6G9
人をバカにしても恥ずかしいレスは消えないよw
2022/02/20(日) 02:19:28.36ID:c79emsKu
2022/02/20(日) 05:27:00.10ID:aLhaBLLn
けんかをやめて ふたりを止めて
わたしのために 争わないで
わたしのために 争わないで
2022/02/20(日) 09:25:04.73ID:JXXbW9ML
きみC#さんだよね
2022/02/20(日) 10:18:23.47ID:c+ifp9sQ
2022/02/20(日) 10:23:29.96ID:mD/m0vxj
ゲームはハード性能をゴリゴリに引き出すのが正義だからスマポ程度のオーバーヘッドでも許容できないんよ
2022/02/20(日) 10:30:30.73ID:c+ifp9sQ
>>21
いや俺もゲーム開発しとるけどスマポどころかGC任せにするのがもうここ10年くらいは主流だぞ?(最終的にはネイティブ化されるけどそれでもゼロオーバーヘッドになる訳では全くない)
いや俺もゲーム開発しとるけどスマポどころかGC任せにするのがもうここ10年くらいは主流だぞ?(最終的にはネイティブ化されるけどそれでもゼロオーバーヘッドになる訳では全くない)
2022/02/20(日) 10:31:03.74ID:hF9eBvbm
え?
ゲームでもスマートポインタは普通に使うよ
ゲームでもスマートポインタは普通に使うよ
2022/02/20(日) 10:36:14.20ID:mD/m0vxj
ああ、ゲームって最新の3Dグリグリのやつな(欧米の大手って言うからそっち想像しちゃった)
スマホゲーやブラウザゲーはまた別よ
スマホゲーやブラウザゲーはまた別よ
2022/02/20(日) 10:37:11.73ID:c+ifp9sQ
>>24
タルコフ見て同じ事言える?
タルコフ見て同じ事言える?
2022/02/20(日) 10:40:48.26ID:hF9eBvbm
ID:mD/m0vxj は知ったかぶりだね
なんのためにC++相談室スレにデタラメを書き込んでるの?
なんのためにC++相談室スレにデタラメを書き込んでるの?
27デフォルトの名無しさん
2022/02/20(日) 10:43:58.31ID:h6G+3sJT 共用体が良くわからないのですが、同じメモリーアドレスを複数のメンバで共用するとは
どういうことなのでしょうか?
メモリの節約と書いてあるのですが、よくわかりません。
同じ型の共用体が複数あったときに使ってないメンバ変数が勝手に消されるなんてわけないですよね
どなたか共用体と構造体の違いを教えていただければ幸いです。
(まだクラスについての知識はほとんどないです。)
どういうことなのでしょうか?
メモリの節約と書いてあるのですが、よくわかりません。
同じ型の共用体が複数あったときに使ってないメンバ変数が勝手に消されるなんてわけないですよね
どなたか共用体と構造体の違いを教えていただければ幸いです。
(まだクラスについての知識はほとんどないです。)
2022/02/20(日) 10:51:16.26ID:lvHr33WL
PODで型変換するくらいしか使わんのでは
2022/02/20(日) 10:53:23.74ID:c+ifp9sQ
>>27
とあるデータの見方を複数用意するのが共用体
union { intptr_t integer; void* pointer; } value;
↑が構造体であればvalueはポインタ*2分のメモリを使うところ、共用体だとsizeof(value)は4(32bit)or8(64bit)って感じで変数1個でしかない
integerとpointerは実体は全く同じデータを見ていて、その見方を二つ用意しただけ
value.integer = 8;ってするとpointerも8になる
とあるデータの見方を複数用意するのが共用体
union { intptr_t integer; void* pointer; } value;
↑が構造体であればvalueはポインタ*2分のメモリを使うところ、共用体だとsizeof(value)は4(32bit)or8(64bit)って感じで変数1個でしかない
integerとpointerは実体は全く同じデータを見ていて、その見方を二つ用意しただけ
value.integer = 8;ってするとpointerも8になる
30デフォルトの名無しさん
2022/02/20(日) 10:55:47.01ID:h6G+3sJT え!?メモリの節約ができるの!?
でも・・・制限があるんでしょ?
って感じで気になるのです。
ただ、基底クラスとか継承っていうのがわからないんだけど、
クラスについての記述がもう少し先にあるから、まだクラスの部分について読みたくない
、クラスを学んでから共用体について学んだほうが良いのでしょうか?
でも・・・制限があるんでしょ?
って感じで気になるのです。
ただ、基底クラスとか継承っていうのがわからないんだけど、
クラスについての記述がもう少し先にあるから、まだクラスの部分について読みたくない
、クラスを学んでから共用体について学んだほうが良いのでしょうか?
31デフォルトの名無しさん
2022/02/20(日) 10:56:42.82ID:h6G+3sJT >>29
ありがとうございます今すぐ読みます
ありがとうございます今すぐ読みます
2022/02/20(日) 11:01:01.36ID:mD/m0vxj
そのレベルなら共用体なんて使わないし使うべきじゃないから読み飛ばしていいよ
一通り学習してから戻ってきな
一通り学習してから戻ってきな
2022/02/20(日) 11:02:54.57ID:c+ifp9sQ
2022/02/20(日) 11:15:09.90ID:5KrZlkth
variantとかは中身は共用体だった気がする
2022/02/20(日) 11:16:50.11ID:uUEkIMOM
>>27
例えばスクリプト言語みたいに色んな型が入る変数を定義したい時に
struct {
char c;
int i;
double d;
};
みたいにするとdを使ってる時はc, iの領域が無駄だよね、そういう時に
union {
char c;
int i;
double d;
};
のようにすると領域が無駄にならない
例えばスクリプト言語みたいに色んな型が入る変数を定義したい時に
struct {
char c;
int i;
double d;
};
みたいにするとdを使ってる時はc, iの領域が無駄だよね、そういう時に
union {
char c;
int i;
double d;
};
のようにすると領域が無駄にならない
36デフォルトの名無しさん
2022/02/20(日) 11:24:25.42ID:h6G+3sJT なんか気になっちゃうのです。
union value { int test1; double test2; } ;
int main()
{
value test;
test.test1= 2147483647;
test.test2 = 1.4;
cout << sizeof test<<endl;
cout << test.test1 << endl << test.test2<<endl;
}
これなんですけど、共用体のサイズは8byteで構造体にすると16バイトになります。
でも、doubleって8byteですよね?
共用体valueの中には4byteのtest1と8byteのtest2があるはずなのですが、
なんで共用体valueは8byteなのでしょうか?
そもそも共用体の中に変数があると言う考え方が間違ているのでしょうか?
union value { int test1; double test2; } ;
int main()
{
value test;
test.test1= 2147483647;
test.test2 = 1.4;
cout << sizeof test<<endl;
cout << test.test1 << endl << test.test2<<endl;
}
これなんですけど、共用体のサイズは8byteで構造体にすると16バイトになります。
でも、doubleって8byteですよね?
共用体valueの中には4byteのtest1と8byteのtest2があるはずなのですが、
なんで共用体valueは8byteなのでしょうか?
そもそも共用体の中に変数があると言う考え方が間違ているのでしょうか?
37デフォルトの名無しさん
2022/02/20(日) 11:25:50.54ID:h6G+3sJT >>35
ありがとうございます。ちなみにその仕組みとかって・・・聞けたりとか・・・
ありがとうございます。ちなみにその仕組みとかって・・・聞けたりとか・・・
38デフォルトの名無しさん
2022/02/20(日) 11:26:58.89ID:h6G+3sJT structだと4byte無駄になるのですね。
39デフォルトの名無しさん
2022/02/20(日) 11:28:36.50ID:h6G+3sJT 何となくなのですが、構造体だと
メンバの中で一番大きな変数のサイズ*メンバの数
分の領域が確保されるのかな?って思ってみたりしています。
メンバの中で一番大きな変数のサイズ*メンバの数
分の領域が確保されるのかな?って思ってみたりしています。
2022/02/20(日) 11:35:01.82ID:c+ifp9sQ
>>36
だから正に"共用"体という名の通り、test1とtest2はメモリの場所を共用してる
君が言う通り、intは4byte、doubleは8byte
この場合はunion全体としてのサイズは大きい方に合わさるが、メモリの場所を共用してる事には変わりないためtest2(double)の下位4バイトとtest1(int)が重なってる事になる
intとdoubleだと出力分かりづらいからunion value { int test1; long long test2; } ;でやってみ
test1 = 0x5;
test2 = 0x2410000000000007;
こうするとtest1は7(0x00000007)、test2(0x2410000000000007)はとなる(下位4byteは共用されてる)
だから正に"共用"体という名の通り、test1とtest2はメモリの場所を共用してる
君が言う通り、intは4byte、doubleは8byte
この場合はunion全体としてのサイズは大きい方に合わさるが、メモリの場所を共用してる事には変わりないためtest2(double)の下位4バイトとtest1(int)が重なってる事になる
intとdoubleだと出力分かりづらいからunion value { int test1; long long test2; } ;でやってみ
test1 = 0x5;
test2 = 0x2410000000000007;
こうするとtest1は7(0x00000007)、test2(0x2410000000000007)はとなる(下位4byteは共用されてる)
2022/02/20(日) 11:39:14.94ID:c+ifp9sQ
>>40
これがstructだとちゃんと4+8で12byteの構造体となる(アラインメントって概念によりそうでない事もあるけどそれはまた別で勉強したほうがいい)
test1 = 0x5;
test2 = 0x2410000000000007;
structだとさっきと同じ事をしてもtest1とtest2でメモリは共用されておらずそれぞれ独立しているため、test1は0x5、test2は0x2410000000000007となる
これがstructだとちゃんと4+8で12byteの構造体となる(アラインメントって概念によりそうでない事もあるけどそれはまた別で勉強したほうがいい)
test1 = 0x5;
test2 = 0x2410000000000007;
structだとさっきと同じ事をしてもtest1とtest2でメモリは共用されておらずそれぞれ独立しているため、test1は0x5、test2は0x2410000000000007となる
42デフォルトの名無しさん
2022/02/20(日) 11:41:34.03ID:h6G+3sJT >>40
ありがとうございます。
すごいっす、メチャすごいっす。
あまりの喜びに敬語忘れてすみません。
"共用”なのですね。
ってことは共用体はいくつかメンバ変数を用意しておいて、一個だけ使なら使ってもいいよ。
しかも、いちばん最後に代入された値が採用されるよと言うことで大丈夫でしょうか?
ありがとうございます。
すごいっす、メチャすごいっす。
あまりの喜びに敬語忘れてすみません。
"共用”なのですね。
ってことは共用体はいくつかメンバ変数を用意しておいて、一個だけ使なら使ってもいいよ。
しかも、いちばん最後に代入された値が採用されるよと言うことで大丈夫でしょうか?
2022/02/20(日) 11:42:49.02ID:5KrZlkth
ポイントだけ聞くようにして全部聞こうとすんなアホ
2022/02/20(日) 11:50:02.29ID:hF9eBvbm
そもそもC++スレ
45デフォルトの名無しさん
2022/02/20(日) 11:52:56.02ID:h6G+3sJT2022/02/20(日) 11:53:19.65ID:lvHr33WL
共用体とビットフィールドでウハウハよ
2022/02/20(日) 12:26:21.52ID:8UrVWzFH
2022/02/20(日) 12:30:45.48ID:8UrVWzFH
共用体はデータ量をケチる目的では使わんでしょ
(マイコンとかバイナリデータとかの)データの配置順に意味があるやつとの相互運用にしか使ったことないぞ
union A{
struct{ char low; char high;};
short data;
};
union B{
struct { int head; double body;};
char data[12];
};
(マイコンとかバイナリデータとかの)データの配置順に意味があるやつとの相互運用にしか使ったことないぞ
union A{
struct{ char low; char high;};
short data;
};
union B{
struct { int head; double body;};
char data[12];
};
2022/02/20(日) 12:31:01.23ID:VFmEI3Uz
スマポは使えば楽できるときと
そうでないときがあるからな
見境のないスマポ厨はただのマゾ
そうでないときがあるからな
見境のないスマポ厨はただのマゾ
2022/02/20(日) 12:38:44.84ID:BLiyeQro
>>48
大量に確保するデータの場合1バイト2バイトが大きく影響することもあるから、データ量目的でも使うよ
大量に確保するデータの場合1バイト2バイトが大きく影響することもあるから、データ量目的でも使うよ
2022/02/20(日) 12:38:51.77ID:5nwqcAs1
参照オブジェクトを処理するのに
何故か内部でスマポ使いだしたとしたら
予めそいつの代わりに謝っておいてやろう。スマポ。
何故か内部でスマポ使いだしたとしたら
予めそいつの代わりに謝っておいてやろう。スマポ。
2022/02/20(日) 12:40:31.26ID:5KrZlkth
共用体は特定のアーキテクチャで上位下位とか分けるのに使うのが多かったけど、上に書いたようにstd::variantで使うので主にメモリ節約だと思う
ところで↓でコメントにしてるエラーはなんか悔しくない?どうしてこういう仕様なんだろう?
#include <iostream>
using namespace std;
struct s {
int a;
};
int main() {
s o;
cout << sizeof(o.a) << endl;
cout << typeid(o.a).name() << endl;
cout << sizeof(int) << endl;
cout << typeid(int).name() << endl;
cout << sizeof(s::a) << endl;
//cout << typeid(s::a).name() << endl; // error
return 0;
}
ところで↓でコメントにしてるエラーはなんか悔しくない?どうしてこういう仕様なんだろう?
#include <iostream>
using namespace std;
struct s {
int a;
};
int main() {
s o;
cout << sizeof(o.a) << endl;
cout << typeid(o.a).name() << endl;
cout << sizeof(int) << endl;
cout << typeid(int).name() << endl;
cout << sizeof(s::a) << endl;
//cout << typeid(s::a).name() << endl; // error
return 0;
}
2022/02/20(日) 12:44:49.03ID:BLiyeQro
sjis/utf8、utf16、utf32を一緒くたに扱う文字列クラスを作った時にそれぞれの型のポインタを共用体で持たせたな
キャストするより楽だったからw
キャストするより楽だったからw
2022/02/20(日) 12:49:58.81ID:EDNjM2Vr
2022/02/20(日) 13:44:10.67ID:MjuaBSm2
>>51
これ何であかんの?
これ何であかんの?
2022/02/20(日) 13:59:07.64ID:uAn4231w
>>36
アセンブラでアライン覚えて来い青二才
アセンブラでアライン覚えて来い青二才
2022/02/20(日) 15:04:19.29ID:aLhaBLLn
共用体使うとシフト演算しなくていいし、
最近のCPU(っても20年まえぐらい)から1ビット操作命令もあるし、パフォーマンスがいいと思うぜ
最近のCPU(っても20年まえぐらい)から1ビット操作命令もあるし、パフォーマンスがいいと思うぜ
2022/02/20(日) 18:12:12.24ID:8IAIbIwN
2022/02/20(日) 19:01:05.55ID:uUEkIMOM
2022/02/20(日) 21:42:58.02ID:8IAIbIwN
ただのunionラッパーをunionの活用例かのような言い方をした >>54 に対する不満だ
2022/02/20(日) 21:47:59.16ID:uAn4231w
米大統領と密談した「IQ1200の金星人」ヴァリアント・ソーとは ...
2022/02/20(日) 22:02:46.59ID:uUEkIMOM
2022/02/20(日) 22:37:27.22ID:V67/tnWS
スマポの記述量が長い問題って皆どうしてんの?
2022/02/20(日) 22:52:41.23ID:uSEnVnLU
C++のstd::variantとほぼ近い、
Rustのenum(=格納付きenum=タグ付きunion)を比べると
圧倒的にRustのenumが使いやすくてRust言語の核心部分となっていることからもわかるように
C++ではその分野の言語サポートが弱いんだよな
Rustのenum(=格納付きenum=タグ付きunion)を比べると
圧倒的にRustのenumが使いやすくてRust言語の核心部分となっていることからもわかるように
C++ではその分野の言語サポートが弱いんだよな
2022/02/20(日) 22:54:00.38ID:uSEnVnLU
>>63
その件もRustが上手いことやってるよな
その件もRustが上手いことやってるよな
2022/02/20(日) 23:01:58.00ID:V67/tnWS
2022/02/20(日) 23:24:26.58ID:5KrZlkth
Rustのことはスレ違いだけど、言語機能としてどこまでサポートするかは、分かりやすさと直結してると思う
C++のstd::variantの方が分かりやすいと思う人もいれば
Rustのenumの方が分かりやすいと思う人もいると思う
C++のstd::variantの方が分かりやすいと思う人もいれば
Rustのenumの方が分かりやすいと思う人もいると思う
2022/02/20(日) 23:44:12.87ID:Y4d5gioW
>>67
C++には十分なパターンマッチング機構がないからタグ付き共用体(Rustではenum)を便利に生かせないのが大きい
C++よりRustは記述がしやすいと言われている原因の大きな一つとなっている
C++には十分なパターンマッチング機構がないからタグ付き共用体(Rustではenum)を便利に生かせないのが大きい
C++よりRustは記述がしやすいと言われている原因の大きな一つとなっている
2022/02/20(日) 23:47:42.47ID:5KrZlkth
2022/02/20(日) 23:59:35.38ID:uSEnVnLU
>>52で主にメモリ節約が目的と言っているようだが
それはC++の言語によるサポートが貧弱すぎるための特殊な悲惨な状況であって
他の言語ではむしろvariantこそがプログラミングの中心、という話ではないか
それはC++の言語によるサポートが貧弱すぎるための特殊な悲惨な状況であって
他の言語ではむしろvariantこそがプログラミングの中心、という話ではないか
2022/02/21(月) 00:04:14.70ID:NpsKB2au
馬鹿には分からないかもしれないけど、嫌なら自分で作ればいいという世界なんだよ
2022/02/21(月) 00:06:46.53ID:Jx3FjySw
昔は全部ゼロから作ってたな
2022/02/21(月) 00:10:21.16ID:lBTJyZA6
>>71
それは無理
様々な言語がなぜ言語レベルでパターンマッチングなどをサポートとしているかというと
言語レベルでサポートしないと無理なことが多数あるため
C++しか書いたことがない特殊な人でなければこれを理解することができる
それは無理
様々な言語がなぜ言語レベルでパターンマッチングなどをサポートとしているかというと
言語レベルでサポートしないと無理なことが多数あるため
C++しか書いたことがない特殊な人でなければこれを理解することができる
2022/02/21(月) 00:12:34.69ID:NpsKB2au
2022/02/21(月) 00:19:21.75ID:NpsKB2au
2022/02/21(月) 01:59:03.04ID:dmBIFY6O
&s::aの型がint s::*な以上s::aの型はintにはならんからじゃない?
sizeofだけ許されてるのがわからん
sizeofだけ許されてるのがわからん
2022/02/21(月) 02:21:18.10ID:NpsKB2au
ありがとう。全く同じ感想だわ。わからんよね。
#include <memory>
#include <cxxabi.h> // for gcc
#include <iostream>
using namespace std;
const char* demangle(const char* name) {
return abi::__cxa_demangle(name, NULL, NULL, NULL); // leaks
}
struct s {
int a;
};
int main() {
cout << sizeof(&s::a) << endl;
cout << demangle(typeid(&s::a).name()) << endl;
cout << sizeof(s::a) << endl;
//cout << demangle(typeid(s::a).name()) << endl; // error
return 0;
}
#include <memory>
#include <cxxabi.h> // for gcc
#include <iostream>
using namespace std;
const char* demangle(const char* name) {
return abi::__cxa_demangle(name, NULL, NULL, NULL); // leaks
}
struct s {
int a;
};
int main() {
cout << sizeof(&s::a) << endl;
cout << demangle(typeid(&s::a).name()) << endl;
cout << sizeof(s::a) << endl;
//cout << demangle(typeid(s::a).name()) << endl; // error
return 0;
}
2022/02/21(月) 08:22:55.36ID:QJQOoC8g
PPoEのことピッポエって読んでたらめっちゃバカにされてくやしいです。
どうしたらいいですか?
どうしたらいいですか?
2022/02/21(月) 08:24:57.39ID:wtPLXwv8
ボコしたら?
2022/02/21(月) 19:45:02.12ID:K+YQY1en
複数のプロセスから同時に同じファイルに書き込むにはどうすればいいですか?
ofstreamで実験(a.exeとb.exeを同時に起動して、同じtxtに10行ずつ書き込み)してみましたが、
a.exeで書き込んだ内容が10行並んだ後に、b.exeで書き込んだ内容が10行並ぶような結果になりました。
書き込んだ順に並ぶようにするにはどうすればいいですか?
ofstreamで実験(a.exeとb.exeを同時に起動して、同じtxtに10行ずつ書き込み)してみましたが、
a.exeで書き込んだ内容が10行並んだ後に、b.exeで書き込んだ内容が10行並ぶような結果になりました。
書き込んだ順に並ぶようにするにはどうすればいいですか?
2022/02/21(月) 19:50:32.28ID:NpsKB2au
OS固有の方法を使え
2022/02/21(月) 19:56:04.55ID:gBEocJIs
fprintf()とかの標準ライブラリだとcloseかflushするまで書き込みは反映されない
書き込みのタイムスタンプ順を保証するとなるとかなり面倒くさい
毎回flushするとかcloseするとかしないといけない
書き込んだ内容がもう一方のプロセスに上書きされて消えたりとかの問題も出てくる
書き込みのタイムスタンプ順を保証するとなるとかなり面倒くさい
毎回flushするとかcloseするとかしないといけない
書き込んだ内容がもう一方のプロセスに上書きされて消えたりとかの問題も出てくる
2022/02/21(月) 20:03:35.84ID:K+YQY1en
ありがとうございます。
保証とまでは求めてなくて、だいたい秒オーダー程度の順でぱっと見の違和感なければいいかなと思っていますのでひとまずflushを入れて実験してみます。
(多少の順番ずれは問題ないですが、上書き消滅だけは絶対問題なので)
保証とまでは求めてなくて、だいたい秒オーダー程度の順でぱっと見の違和感なければいいかなと思っていますのでひとまずflushを入れて実験してみます。
(多少の順番ずれは問題ないですが、上書き消滅だけは絶対問題なので)
2022/02/21(月) 20:06:09.78ID:9Efuu0ky
ロックしろ
2022/02/21(月) 20:08:56.82ID:Hi57Ra7S
・別々のファイルに吐き出しておいて後からマージ(リアルタイム性不要なら一番楽)
・書き込みの時に毎回排他ロックする(くそ遅い、書き込みが稀ならあり)
・書き込み専門のプロセスを設けてプロセス間通信(正しいけどめんどくさい)
・書き込みの時に毎回排他ロックする(くそ遅い、書き込みが稀ならあり)
・書き込み専門のプロセスを設けてプロセス間通信(正しいけどめんどくさい)
2022/02/21(月) 20:22:59.51ID:M/x1eSML
>>80
書き込みプロセスを集約した方が制御はしやすいわ
書き込みプロセスを集約した方が制御はしやすいわ
2022/02/21(月) 21:24:26.76ID:NpsKB2au
こんなC++erばかりではもうダメだな・・・・
質問は最悪だけど、確認も回答もやばい
混ざった行が出来たり上書き消滅する日がいつか来る
質問は最悪だけど、確認も回答もやばい
混ざった行が出来たり上書き消滅する日がいつか来る
2022/02/21(月) 21:47:29.24ID:2lTMmgDc
>>87
ロックを使っても行が混ざるのかーすごいなー
ロックを使っても行が混ざるのかーすごいなー
2022/02/21(月) 21:55:16.21ID:Gf4lGfIx
ロックの仕方によるから
極論文字単位にロックしたら混ざるし
極論文字単位にロックしたら混ざるし
2022/02/21(月) 22:05:20.94ID:NpsKB2au
真面目に相手をするなら、質問の前提を明確にしないといけないから。
聞きたいことだけ書いてきて、状況が全く分からない質問に対して、あれこれ書いても意味はなく、最初にしないといけないのはまず確認。
環境やら現象やら具体的なコード、最終的なゴールがどこか、当たり前のモノが全て抜けていて、未だに8割方見えていない。
聞きたいことだけ書いてきて、状況が全く分からない質問に対して、あれこれ書いても意味はなく、最初にしないといけないのはまず確認。
環境やら現象やら具体的なコード、最終的なゴールがどこか、当たり前のモノが全て抜けていて、未だに8割方見えていない。
2022/02/21(月) 22:27:52.22ID:2lTMmgDc
質問に対して状況を確認せず真っ先に>>81で抜けてる回答してる君がいうと説得力があるね
2022/02/21(月) 22:40:17.44ID:NpsKB2au
あれはいつものWIN32APIスレへの誘導しか意味してないw
.exeが出て来た時点で萎える
.exeが出て来た時点で萎える
2022/02/21(月) 23:11:26.10ID:Vo68A3hI
同時には無理やろ〜
2022/02/21(月) 23:17:32.27ID:NpsKB2au
// std::endlでflush()。時間測定と1行/秒機能付きバッファ懸念OS順序懸念あり。
// 混ざった行が出来たり上書き消滅してもいい人向け。
#include <iostream>
#include <fstream>
#include <chrono>
#include <thread>
using namespace std::chrono;
template<typename T, typename CallbackFunc, typename TargetFunc, typename... Args>
void measure(CallbackFunc callback, TargetFunc f, Args... args) {
auto start = high_resolution_clock::now();
auto result = f(args...);
auto end = high_resolution_clock::now();
callback(result, duration_cast<T>(end - start).count());
}
int write_to_file(const char* path, const char* sts) {
std::ofstream f(path, std::ios_base::app);
for (int i = 0; i < 10; ++i) {
f << sts << std::endl;
//std::this_thread::sleep_for(1s);
}
return 0;
}
int main(int argc, char* argv[]) {
int ret = -1;
measure<microseconds>(
[&](auto result, auto time) {ret = result; std::cout << time << std::endl; },
&write_to_file, "hoge.txt", (argc > 1 ? argv[1] : "hoge"));
return ret;
}
// 混ざった行が出来たり上書き消滅してもいい人向け。
#include <iostream>
#include <fstream>
#include <chrono>
#include <thread>
using namespace std::chrono;
template<typename T, typename CallbackFunc, typename TargetFunc, typename... Args>
void measure(CallbackFunc callback, TargetFunc f, Args... args) {
auto start = high_resolution_clock::now();
auto result = f(args...);
auto end = high_resolution_clock::now();
callback(result, duration_cast<T>(end - start).count());
}
int write_to_file(const char* path, const char* sts) {
std::ofstream f(path, std::ios_base::app);
for (int i = 0; i < 10; ++i) {
f << sts << std::endl;
//std::this_thread::sleep_for(1s);
}
return 0;
}
int main(int argc, char* argv[]) {
int ret = -1;
measure<microseconds>(
[&](auto result, auto time) {ret = result; std::cout << time << std::endl; },
&write_to_file, "hoge.txt", (argc > 1 ? argv[1] : "hoge"));
return ret;
}
2022/02/21(月) 23:19:40.75ID:NpsKB2au
書き忘れた。異常系なし。
2022/02/22(火) 08:35:20.17ID:4AnTGrM3
セマフォかミューテックス使えばいいだけやん
2022/02/22(火) 08:52:30.71ID:uvLrfhT4
偉そうなこと言っといて>>83の上書き禁要件ガン無視してるのは草
2022/02/22(火) 08:56:43.07ID:vnxKrxaR
消滅って実際あるもんかね?
unix系はなさそうな気がする
unix系はなさそうな気がする
2022/02/22(火) 10:16:04.97ID:fFHtSmjB
標準ライブラリの仕様で上書き消滅しないって保証されてれば問題ない
保証されてなければ20プロセスぐらいからchrono::system_clockのタイムスタンプとloopcountを出力させる負荷テストしてみて判断するしかない
保証されてなければ20プロセスぐらいからchrono::system_clockのタイムスタンプとloopcountを出力させる負荷テストしてみて判断するしかない
100デフォルトの名無しさん
2022/02/22(火) 10:38:46.92ID:3Vwbzil/ >>99
> 保証されてなければ20プロセスぐらいからchrono::system_clockのタイムスタンプとloopcountを出力させる負荷テストしてみて判断するしかない
バカなの?
普通に排他制御すればいいだけだろ
> 保証されてなければ20プロセスぐらいからchrono::system_clockのタイムスタンプとloopcountを出力させる負荷テストしてみて判断するしかない
バカなの?
普通に排他制御すればいいだけだろ
101デフォルトの名無しさん
2022/02/22(火) 12:32:42.83ID:G6nBeheJ 俺は最初にWIN32APIスレへの誘導の意味で、OS固有の方法と書いてるよw ソースコードは回答ではなく、本来質問時に提示されるべき叩き台を俺がわざわざ書いただけw
ソースコードが分からないアホ向けに説明しておくと、OSに書き込みが発生するのは実際にファイルに書き込むAPIを叩いたとき(/システムコールかそれに準ずるものを呼んだ時(以下略))なので、それはバッファをフラッシュするタイミングになる。
それが発生するのは普通fに文字列を書き込むときバッファが溢れるかendlの呼び出し中(ライブラリの実装に依存する)。
文字列の長さがバッファから溢れない限り、endl中のAPI呼出が重なるかどうかが問題になる。
各プロセスでAPI呼出が運悪く重なった場合、ここからは一度に書き込まれる量と、OSのファイルシステム実装に依存するが、 混ざった行が出来たり上書き消滅する可能性が生まれる。
それが問題な場合は、主にOS固有の方法でIPCかファイルロックを行う必要がある。
なお要件が明確でない状態で何かを言う必要は全くないw
ソースコードが分からないアホ向けに説明しておくと、OSに書き込みが発生するのは実際にファイルに書き込むAPIを叩いたとき(/システムコールかそれに準ずるものを呼んだ時(以下略))なので、それはバッファをフラッシュするタイミングになる。
それが発生するのは普通fに文字列を書き込むときバッファが溢れるかendlの呼び出し中(ライブラリの実装に依存する)。
文字列の長さがバッファから溢れない限り、endl中のAPI呼出が重なるかどうかが問題になる。
各プロセスでAPI呼出が運悪く重なった場合、ここからは一度に書き込まれる量と、OSのファイルシステム実装に依存するが、 混ざった行が出来たり上書き消滅する可能性が生まれる。
それが問題な場合は、主にOS固有の方法でIPCかファイルロックを行う必要がある。
なお要件が明確でない状態で何かを言う必要は全くないw
102デフォルトの名無しさん
2022/02/22(火) 13:18:13.18ID:/94dJWyd グダグタと意味不明な長文書いておいて
> なお要件が明確でない状態で何かを言う必要は全くないw
って笑いでも取ろうとしてるのか?
> なお要件が明確でない状態で何かを言う必要は全くないw
って笑いでも取ろうとしてるのか?
103デフォルトの名無しさん
2022/02/22(火) 13:22:26.14ID:uHuVwSWm > 複数のプロセスから同時に同じファイルに書き込む
> 書き込んだ順に並ぶようにするには
同時に書き込んでるのに書き込んだ順が決まるわけないやろ〜
> 書き込んだ順に並ぶようにするには
同時に書き込んでるのに書き込んだ順が決まるわけないやろ〜
104デフォルトの名無しさん
2022/02/22(火) 13:30:20.16ID:Xp3JBKU/ 何したいのか知らないけど>>85で出てるようにタイムスタンプ付けて別のファイルとして書き出した後、
メモリ上でマージするなり第三のプロセスでマージしたファイルを書き出すなりするのが一番楽だな
メモリ上でマージするなり第三のプロセスでマージしたファイルを書き出すなりするのが一番楽だな
105デフォルトの名無しさん
2022/02/22(火) 13:33:11.97ID:/94dJWyd >>103
秒オーダーで揃ってりゃいいって話だから多少の前後は気にすんな
秒オーダーで揃ってりゃいいって話だから多少の前後は気にすんな
106デフォルトの名無しさん
2022/02/22(火) 13:39:15.40ID:uHuVwSWm ファイルOpenして書き込んですぐCloseするだけやん。
107デフォルトの名無しさん
2022/02/22(火) 13:46:45.07ID:G6nBeheJ ほら何もかも要件の問題だろ?w 馬鹿なんだよ質問者がw
108デフォルトの名無しさん
2022/02/22(火) 16:11:10.10ID:BY2+Ruab 馬鹿が馬鹿を笑う地獄絵図
109デフォルトの名無しさん
2022/02/22(火) 21:29:07.28ID:3uW2JHvs 質問のレベルが低くて恐縮ですが、クラスにおいてメンバ変数は各インスタンスに対してメモリが確保されますが、メンバ関数も各インスタンス毎にメモリ確保されるんでしたっけ?
メンバ関数はクラスで共有されるんでしたっけ?
メンバ関数はクラスで共有されるんでしたっけ?
110デフォルトの名無しさん
2022/02/22(火) 21:44:13.67ID:G9HkpoRr 共有されてて、呼び出すときにインスタンスのポインタが渡ります。
111デフォルトの名無しさん
2022/02/22(火) 21:53:10.29ID:aBkA6PYf112デフォルトの名無しさん
2022/02/22(火) 22:27:23.48ID:Ui5AoFrq113デフォルトの名無しさん
2022/02/22(火) 22:27:30.88ID:Ui5AoFrq114デフォルトの名無しさん
2022/02/22(火) 22:31:03.90ID:Ee0G2C5Q main(exe)とlib(dll)の両方から参照されるクラスHoge(非dll・シングルトン)のインスタンスをmainとlibで共用する方法はないですか。
軽く調べてみたらHogeをdll化するかHogeのラッパーdllを作れと出てきたのですが
作らなくても実現出来る方法があれば教えてください
軽く調べてみたらHogeをdll化するかHogeのラッパーdllを作れと出てきたのですが
作らなくても実現出来る方法があれば教えてください
115デフォルトの名無しさん
2022/02/22(火) 22:31:52.69ID:Ee0G2C5Q main(exe)とlib(dll)の両方から参照されるクラスHoge(非dll・シングルトン)のインスタンスをmainとlibで共用する方法はないですか。
軽く調べてみたらHogeをdll化するかHogeのラッパーdllを作れと出てきたのですが
作らなくても実現出来る方法があれば教えてください
軽く調べてみたらHogeをdll化するかHogeのラッパーdllを作れと出てきたのですが
作らなくても実現出来る方法があれば教えてください
116デフォルトの名無しさん
2022/02/22(火) 22:32:39.84ID:SYhqe6to virtualも継承されたクラスごとにポインタサイズの隠しフィールドができるだけで
virtual関数が増えてもクラスサイズは変わらないんじゃ?
virtual関数が増えてもクラスサイズは変わらないんじゃ?
117デフォルトの名無しさん
2022/02/22(火) 22:38:55.24ID:SYhqe6to118デフォルトの名無しさん
2022/02/22(火) 22:39:30.53ID:G6nBeheJ ポインタサイズじゃないよ
119デフォルトの名無しさん
2022/02/22(火) 22:39:57.82ID:SYhqe6to static変数じゃねーわ inline変数
120デフォルトの名無しさん
2022/02/23(水) 01:56:47.51ID:vCUIsgzX https://godbolt.org/z/P497GqYc7
struct s {
virtual void* func(){return this;}
virtual void* func2(){return this;}
};
struct s2: public s {
void* func(){return this;}
void* func2(){return this;}
};
s obj;
s2 obj2;
int main() {
s& o = obj2;
o.func();
o.func2();
return 0;
}
gcc/clang/msvcどれもポインタサイズだった模様w
>>114についてはまた同じ馬鹿の質問だろうけど論外w コードで示せアホw
「main(exe)とlib(dll)の両方から参照される参照されるクラスHoge(非dll・シングルトン)」????
クラスHogeはシングルトンなのかそうでないのか?
lib(dll)から参照されるクラスHoge(非dll)とは?
どうして毎日こんな馬鹿な質問が出来るのか分からない。
仮にDLLが遅延ロードされず、シングルトンで、インスタンスの定義だけEXE側に入れたいというアホな要件を思いついた馬鹿がいるのだとしたら、dllexportを使わず、モジュール定義でやれ。
なお、inlineメンバ変数を使ってもdllexpportsならDLL側にインスタンスの定義が入る。
struct s {
virtual void* func(){return this;}
virtual void* func2(){return this;}
};
struct s2: public s {
void* func(){return this;}
void* func2(){return this;}
};
s obj;
s2 obj2;
int main() {
s& o = obj2;
o.func();
o.func2();
return 0;
}
gcc/clang/msvcどれもポインタサイズだった模様w
>>114についてはまた同じ馬鹿の質問だろうけど論外w コードで示せアホw
「main(exe)とlib(dll)の両方から参照される参照されるクラスHoge(非dll・シングルトン)」????
クラスHogeはシングルトンなのかそうでないのか?
lib(dll)から参照されるクラスHoge(非dll)とは?
どうして毎日こんな馬鹿な質問が出来るのか分からない。
仮にDLLが遅延ロードされず、シングルトンで、インスタンスの定義だけEXE側に入れたいというアホな要件を思いついた馬鹿がいるのだとしたら、dllexportを使わず、モジュール定義でやれ。
なお、inlineメンバ変数を使ってもdllexpportsならDLL側にインスタンスの定義が入る。
121デフォルトの名無しさん
2022/02/23(水) 09:00:40.51ID:stefKGxD ヒント: 仮想継承
122デフォルトの名無しさん
2022/02/23(水) 13:46:51.78ID:UVDZkpPA >>96
そうだねミューテックス使うね
そうだねミューテックス使うね
123デフォルトの名無しさん
2022/02/23(水) 13:49:09.36ID:UVDZkpPA Windowsなら名前付きミューテックスでファイルのオープンからクローズまでを排他するところやが
C++の標準規格でどうなっているのかわ知らん、
C++の標準規格でどうなっているのかわ知らん、
124デフォルトの名無しさん
2022/02/23(水) 14:13:27.06ID:UVDZkpPA 複数のプロセスから同一ファイルに書き込んで書き込み内容の順序(位置)を制御する方法は
1. プロセス間の同期側で順序を担保する(イベント等による通信を併用
2. ファイルのアクセス権を握ったプロセスがファイルの中身を読んで書き込み位置を決める
3. ファイルのアクセス権を握ったプロセスがファイルを追記オープンして単純に追記していく
の大きく分けて3つの方法が取れる
普通は3が多いという印象 ※ 個人の感想です
辞書化とかが必要なら専用のプロセスが適宜ファイルのアクセス権を獲得してやったらええ、
1. プロセス間の同期側で順序を担保する(イベント等による通信を併用
2. ファイルのアクセス権を握ったプロセスがファイルの中身を読んで書き込み位置を決める
3. ファイルのアクセス権を握ったプロセスがファイルを追記オープンして単純に追記していく
の大きく分けて3つの方法が取れる
普通は3が多いという印象 ※ 個人の感想です
辞書化とかが必要なら専用のプロセスが適宜ファイルのアクセス権を獲得してやったらええ、
125デフォルトの名無しさん
2022/02/23(水) 14:58:09.38ID:lSALbkfN ちょっと処理が重なったくらいでデータが消えるようなコンピュータはまともに動かんと思うよ
126デフォルトの名無しさん
2022/02/23(水) 15:17:24.74ID:A1VwjaQk そんなアホなことせんでもOSが同期取ってくれるやろ…
127デフォルトの名無しさん
2022/02/23(水) 15:43:04.84ID:vCUIsgzX >>122-126
2日前からアホ質問者不在のまま要件不明案件でお蔵入りした質問を今更ほじくり返して質問者本人ですか?w
2日前からアホ質問者不在のまま要件不明案件でお蔵入りした質問を今更ほじくり返して質問者本人ですか?w
128デフォルトの名無しさん
2022/02/23(水) 15:53:59.19ID:A1VwjaQk 頓珍漢な回答して相手にされないからっておれに当たるなよ。
129デフォルトの名無しさん
2022/02/23(水) 16:03:22.40ID:vCUIsgzX 回答してないけどw >>122-126は全て本人確定かなw
130デフォルトの名無しさん
2022/02/23(水) 16:04:56.99ID:A1VwjaQk >>129 >120
131デフォルトの名無しさん
2022/02/23(水) 16:14:02.97ID:vCUIsgzX132デフォルトの名無しさん
2022/02/23(水) 16:42:08.43ID:lSALbkfN 126と86は俺だけど…
133デフォルトの名無しさん
2022/02/23(水) 16:45:52.89ID:UVDZkpPA >>126
kwsk
複数プロセスから同一ファイルに対する同時書き込みオープンは当然できなず、後から開こうとしたプロセスはオープンに失敗する
その場合失敗したプロセスは(エラー要因を調べた上で)一定時間(例えばT秒後)後にオープンを再トライする必要がある
んまーそう作っても良いが(ファイルアクセス権獲得待ちをいつでも簡単にやめられるメリットがある)が、
失敗の度にT秒消費するというのをミューテックスを使えば短縮できる
kwsk
複数プロセスから同一ファイルに対する同時書き込みオープンは当然できなず、後から開こうとしたプロセスはオープンに失敗する
その場合失敗したプロセスは(エラー要因を調べた上で)一定時間(例えばT秒後)後にオープンを再トライする必要がある
んまーそう作っても良いが(ファイルアクセス権獲得待ちをいつでも簡単にやめられるメリットがある)が、
失敗の度にT秒消費するというのをミューテックスを使えば短縮できる
134デフォルトの名無しさん
2022/02/23(水) 16:51:07.27ID:A1VwjaQk オープン失敗したら100ms開けてリトライで十分だろう。待機が嫌なら非同期で実装するだけ。
T秒消費するというが同期オブジェクト使っても変わらん。
T秒消費するというが同期オブジェクト使っても変わらん。
135デフォルトの名無しさん
2022/02/23(水) 16:54:41.39ID:UVDZkpPA >>134
>T秒消費するというが同期オブジェクト使っても変わらん。
間違い。
同期オブジェクトを使えばプロセスAがファイルへのアクセス権を行使中、
プロセスBがアクセス権が回ってくるのを待っている状態で
プロセスAがアクセス権を放棄した瞬間にプロセスBにディスパッチされる
ことが気体できる
無駄というものが最小限で済む
>T秒消費するというが同期オブジェクト使っても変わらん。
間違い。
同期オブジェクトを使えばプロセスAがファイルへのアクセス権を行使中、
プロセスBがアクセス権が回ってくるのを待っている状態で
プロセスAがアクセス権を放棄した瞬間にプロセスBにディスパッチされる
ことが気体できる
無駄というものが最小限で済む
136デフォルトの名無しさん
2022/02/23(水) 16:58:57.65ID:lSALbkfN 同期オブジェクトってそんな低レベルで存在しとる概念なのかね
137はちみつ餃子 ◆8X2XSCHEME
2022/02/23(水) 17:06:44.05ID:o4j3GXmb 同期オブジェクトを機能させるためにスケジューラに負担をかけるので
待機時間が特に短いことがわかってるならスピンロックのほうが性能は出る可能性はある。
でもスピンロックを正しく実装できる気がしない。
同期のための仕組みを用意してくれてるんだからそれを使っておくのが基本的には楽だよ。
待機時間 100ms のところを 10ms とかに短縮できたところでなんだというんだ。
それが必要な場合もあるといえばあるけど、どちらがより良いかは状況による。
待機時間が特に短いことがわかってるならスピンロックのほうが性能は出る可能性はある。
でもスピンロックを正しく実装できる気がしない。
同期のための仕組みを用意してくれてるんだからそれを使っておくのが基本的には楽だよ。
待機時間 100ms のところを 10ms とかに短縮できたところでなんだというんだ。
それが必要な場合もあるといえばあるけど、どちらがより良いかは状況による。
138デフォルトの名無しさん
2022/02/23(水) 17:12:13.15ID:UVDZkpPA >待機時間 100ms のところを 10ms とかに短縮できたところで
プロセスAがファイルのアクセス権を握り続けている間、
プロセスBがファイルシステムを10 ms周期でcallすることになるな!
プロセスAがファイルのアクセス権を握り続けている間、
プロセスBがファイルシステムを10 ms周期でcallすることになるな!
139デフォルトの名無しさん
2022/02/23(水) 17:17:22.47ID:A1VwjaQk 消費ってCPUリソースの話じゃないのか。
書き込みに100msの待機が問題となるようなリアルタイムな要件があるならともかく
ファイルの書き込みなんていう遅いものは非同期の実装に頭使うほうが効率的だろう。
書き込みに100msの待機が問題となるようなリアルタイムな要件があるならともかく
ファイルの書き込みなんていう遅いものは非同期の実装に頭使うほうが効率的だろう。
140デフォルトの名無しさん
2022/02/23(水) 17:21:14.59ID:UVDZkpPA 非同期の実装を最小の時間ロスで安全に行うものにするにはミューテックスによる同期が必要なわけで(以下無限ループ
141はちみつ餃子 ◆8X2XSCHEME
2022/02/23(水) 17:24:49.92ID:o4j3GXmb スピンロックは沼なんで、
OS が用意してくれとる仕組みを使えってことで FA 。
OS が用意してくれとる仕組みを使えってことで FA 。
142デフォルトの名無しさん
2022/02/23(水) 17:26:48.01ID:A1VwjaQk143デフォルトの名無しさん
2022/02/23(水) 17:30:05.39ID:lSALbkfN タイミング合わせるために工夫をこらしたプログラムってのは見ていて嫌な気分になるのう
8bit機なら全部ビジーウェイトでいいんだけど
8bit機なら全部ビジーウェイトでいいんだけど
144デフォルトの名無しさん
2022/02/23(水) 18:04:03.45ID:vCUIsgzX145デフォルトの名無しさん
2022/02/23(水) 18:13:52.21ID:A1VwjaQk 8bitのCPUなんて命令の消費clockでタイミング取るとか普通やん
146デフォルトの名無しさん
2022/02/23(水) 19:32:25.60ID:+QDyyf8g ウェイト気にするんだったらI/O周りでガチャガチャするより書き込み要求をキューで受け付ける専門プロセス用意しろよ
147デフォルトの名無しさん
2022/02/23(水) 19:34:41.10ID:lREuCbZK >>117
ありがとうございます、inline変数を試してみます
ありがとうございます、inline変数を試してみます
148デフォルトの名無しさん
2022/02/23(水) 19:41:23.72ID:lREuCbZK >>120
コードは手元(スマホ)にはないので貼れないです、すみませんが日本語で理解してもらえると助かります。
クラスHogeは書いている通りシングルトンです。
よく分かっていませんがHogeは静的ライブラリ?というのでしょうか。
visual studioでいうと、
Hogeが入っているプロジェクトと
mainのプロジェクト、
dllのプロジェクトの3つがあって
mainとdllのプロジェクトの両方が「参照」でHogeが入ってるプロジェクトを依存関係?構築してます。
コードは手元(スマホ)にはないので貼れないです、すみませんが日本語で理解してもらえると助かります。
クラスHogeは書いている通りシングルトンです。
よく分かっていませんがHogeは静的ライブラリ?というのでしょうか。
visual studioでいうと、
Hogeが入っているプロジェクトと
mainのプロジェクト、
dllのプロジェクトの3つがあって
mainとdllのプロジェクトの両方が「参照」でHogeが入ってるプロジェクトを依存関係?構築してます。
149デフォルトの名無しさん
2022/02/23(水) 20:42:20.48ID:vCUIsgzX150デフォルトの名無しさん
2022/02/23(水) 20:50:56.75ID:vCUIsgzX >>146
結局ここまで全部要件の問題ということで・・・
結局ここまで全部要件の問題ということで・・・
151デフォルトの名無しさん
2022/02/23(水) 21:10:52.14ID:A1VwjaQk Hogeのヘッダとlibファイルをmainとdllのプロジェクトに追加するだけの話じゃないのか。
152デフォルトの名無しさん
2022/02/23(水) 21:37:03.52ID:vCUIsgzX >>151
こんな感じになってるんだと思う
https://wandbox.org/permlink/ME0HLrM3vXDeMvoR
main.cpp(exeプロジェクト)
api.h(dllプロジェクト)
api.cpp(dllプロジェクト)
Sample.h(libプロジェクト)
Sample.cpp(libプロジェクト)
vc++で実行すれば分かるけど、dllとexeでインスタンスが2個出来る
IDEが作るファイルは使ってない(プリコンパイル済ヘッダ未使用vs2019で確認)
こんな感じになってるんだと思う
https://wandbox.org/permlink/ME0HLrM3vXDeMvoR
main.cpp(exeプロジェクト)
api.h(dllプロジェクト)
api.cpp(dllプロジェクト)
Sample.h(libプロジェクト)
Sample.cpp(libプロジェクト)
vc++で実行すれば分かるけど、dllとexeでインスタンスが2個出来る
IDEが作るファイルは使ってない(プリコンパイル済ヘッダ未使用vs2019で確認)
153デフォルトの名無しさん
2022/02/23(水) 21:55:19.66ID:PssNo99E154デフォルトの名無しさん
2022/02/23(水) 22:10:26.11ID:vCUIsgzX155デフォルトの名無しさん
2022/02/23(水) 22:31:49.11ID:PssNo99E 質問者ではないけど俺は.hで完結させたい人種なので「dll側かexe側に変数の実体を作らなきゃいけない」という縛りを極端に嫌ってる
dllとも変数実体を共有したいなら.h完結を諦めて
・実体生成用の1つのcppでだけ#defineでなんか定義して実体を定義させる
ぐらいしかまともな回答は思いつかん
どうせ複数dllから1つの変数を共有したいって話にもなるから
実体生成用のcppはexe側が受け持つか管理用のdll(質問者はやりたくないようだが)を作ることになるだろうな
dllとも変数実体を共有したいなら.h完結を諦めて
・実体生成用の1つのcppでだけ#defineでなんか定義して実体を定義させる
ぐらいしかまともな回答は思いつかん
どうせ複数dllから1つの変数を共有したいって話にもなるから
実体生成用のcppはexe側が受け持つか管理用のdll(質問者はやりたくないようだが)を作ることになるだろうな
156デフォルトの名無しさん
2022/02/23(水) 22:49:56.05ID:A1VwjaQk hogeの実装がどこにあるべきか決めてないとな。COMにするという手もあるな。
157デフォルトの名無しさん
2022/02/23(水) 23:10:37.89ID:vCUIsgzX 質問者本人の匂いがプンプンするけど、全部ヘッダならそもそもlibやdll要らないでしょ
昔からstaticメンバ変数にその手のマクロが付いてるヘッダオンリーなライブラリもどきはある
管理用のdllなるものを作るにしたって、exportされるAPIとしてインスタンス生成用メンバ関数を直に紐付ける方法がないと、公開された生成方法が必要になり、シングルトンとして十分制限できない。
COMにするならもうC#で作ればいいのにと思ってしまう。
昔からstaticメンバ変数にその手のマクロが付いてるヘッダオンリーなライブラリもどきはある
管理用のdllなるものを作るにしたって、exportされるAPIとしてインスタンス生成用メンバ関数を直に紐付ける方法がないと、公開された生成方法が必要になり、シングルトンとして十分制限できない。
COMにするならもうC#で作ればいいのにと思ってしまう。
158デフォルトの名無しさん
2022/02/23(水) 23:14:23.43ID:bb+gp0i+ Linuxには名前付きミューテックスないだっけ?
プロセス間の排他制御にflock使った思い出
プロセス間の排他制御にflock使った思い出
159デフォルトの名無しさん
2022/02/23(水) 23:19:02.33ID:kWD6+CX1 pthreadにあるやつが使えるからあるんでしょう
160デフォルトの名無しさん
2022/02/23(水) 23:19:54.09ID:kWD6+CX1 mutexっていうかセマフォ使ってるかも
161デフォルトの名無しさん
2022/02/23(水) 23:33:12.25ID:vCUIsgzX linuxのプロセス間同期にはセマフォを使うよ
https://man7.org/linux/man-pages/man7/sem_overview.7.html
boostでやりたければこんな感じらしい
https://www.boost.org/doc/libs/1_58_0/doc/html/interprocess/synchronization_mechanisms.html#interprocess.synchronization_mechanisms.mutexes.mutexes_named_example
※最近boost使ってないのでよく知らない
https://man7.org/linux/man-pages/man7/sem_overview.7.html
boostでやりたければこんな感じらしい
https://www.boost.org/doc/libs/1_58_0/doc/html/interprocess/synchronization_mechanisms.html#interprocess.synchronization_mechanisms.mutexes.mutexes_named_example
※最近boost使ってないのでよく知らない
162デフォルトの名無しさん
2022/02/23(水) 23:43:27.24ID:bb+gp0i+ なるほどLinuxもセマフォは名前付きがあるのね
ありがとう!
ありがとう!
163デフォルトの名無しさん
2022/02/23(水) 23:44:52.39ID:kWD6+CX1 条件変数が一番好きです
164デフォルトの名無しさん
2022/02/24(木) 02:08:55.88ID:9O+r6lMK そのへんが全て最初から言語の型として標準で装備されていて
さらにコンパイルが通ればマルチスレッド時のデータ競合すら起きないことが保証されるRustが強いよな
さらにコンパイルが通ればマルチスレッド時のデータ競合すら起きないことが保証されるRustが強いよな
165デフォルトの名無しさん
2022/02/24(木) 02:43:58.81ID:tiwBzbY0 openMPを使いたいけど使うと言えない
166デフォルトの名無しさん
2022/02/24(木) 03:32:22.22ID:+hdCiApF どうやってスレ立てるの??
167デフォルトの名無しさん
2022/02/24(木) 03:59:43.03ID:D634csZp168デフォルトの名無しさん
2022/02/24(木) 15:54:24.18ID:ZFLA2QwP メモリ上で連続した多次元配列を動的に確保したいんですけど、どうするのがスマートなやり方ですか?
169デフォルトの名無しさん
2022/02/24(木) 16:09:23.68ID:tiwBzbY0 多次元配列を宣言する
170デフォルトの名無しさん
2022/02/24(木) 16:12:31.94ID:MBzpszCI171デフォルトの名無しさん
2022/02/24(木) 16:25:32.45ID:xAP0ZjRZ スマートが何処にかかるのか
172デフォルトの名無しさん
2022/02/24(木) 16:32:30.77ID:cGpWV2sd またスマートとか自分の希望要件すら言語化できないアホな質問来てるな・・・
いっぺん真で頭ガチャするのがスマート
いっぺん真で頭ガチャするのがスマート
173はちみつ餃子 ◆8X2XSCHEME
2022/02/24(木) 16:42:22.24ID:KIw+63Ii 「動的に確保」というのも、コンストラクトの時点で大きさが確定するというのと
後から伸長する可能性も含むというのでは事情が違う。
後から伸長する可能性も含むというのでは事情が違う。
174デフォルトの名無しさん
2022/02/24(木) 17:02:25.64ID:ZFLA2QwP >>173
VLAのように実行時に全体の大きさを指定したいです
VLAのように実行時に全体の大きさを指定したいです
175デフォルトの名無しさん
2022/02/24(木) 17:05:32.25ID:M4s9COHd mallocや
176デフォルトの名無しさん
2022/02/24(木) 17:34:08.45ID:cGpWV2sd 小出しにしてんじゃねーよw
質問者のお前が聞かれたことに答えるんじゃなくて、せめて満たすべき最低限の要件くらい自分で明確にしろと言ってるんだよw
そんなこともできなければ真でくれと言われてるのw
質問者のお前が聞かれたことに答えるんじゃなくて、せめて満たすべき最低限の要件くらい自分で明確にしろと言ってるんだよw
そんなこともできなければ真でくれと言われてるのw
177デフォルトの名無しさん
2022/02/24(木) 17:38:54.01ID:MBzpszCI178デフォルトの名無しさん
2022/02/24(木) 17:40:07.73ID:MBzpszCI あるいは、CのVLAをC++で操作できるようにしたいのか?
179デフォルトの名無しさん
2022/02/24(木) 18:26:58.76ID:qnUKy4cC 初心者ですまんがVLAってvectorで代用できないの?
180デフォルトの名無しさん
2022/02/24(木) 18:34:10.20ID:xAP0ZjRZ つvalarray
181デフォルトの名無しさん
2022/02/24(木) 19:04:00.53ID:7WoYZRJz 3次元配列なら
template<class T>
class V{
T*const ptr;
size_t s1,s2,s3;
public:
V(size_t s1,size_t s2,size_t s3):
s1(s1),s2(s2),s3(s3),
ptr(new T[s1*s2*s3]){}
T&operator()(size_t i1,size_t i2,size_t i3){
return ptr[i1*s2*s3+i2*s3*i3];
}
~V(){delete[]ptr;}
};
V<int> v(4,5,6);
v(1,2,3)=42;
みたいのでええんか?
大体こういうの自分で作るとバグらせるからあんまやりたくないけど
template<class T>
class V{
T*const ptr;
size_t s1,s2,s3;
public:
V(size_t s1,size_t s2,size_t s3):
s1(s1),s2(s2),s3(s3),
ptr(new T[s1*s2*s3]){}
T&operator()(size_t i1,size_t i2,size_t i3){
return ptr[i1*s2*s3+i2*s3*i3];
}
~V(){delete[]ptr;}
};
V<int> v(4,5,6);
v(1,2,3)=42;
みたいのでええんか?
大体こういうの自分で作るとバグらせるからあんまやりたくないけど
182デフォルトの名無しさん
2022/02/24(木) 19:07:44.67ID:cGpWV2sd すでにバグってる気がする
183デフォルトの名無しさん
2022/02/24(木) 20:00:57.06ID:1pzXIXf6 boostにあるけどオーバーエンジニアリングっぽいんだよな
184デフォルトの名無しさん
2022/02/24(木) 20:30:12.93ID:cGpWV2sd 馬鹿にされたい馬鹿が小出しにしてる以上何とも言えないw
僕ちゃんboost使いたかったけど馬鹿だからよく分からないし、条件小出しなまま複数IDで汎用な答えが欲しいのぉって言ってるだけなのが透けて見えるw
僕ちゃんboost使いたかったけど馬鹿だからよく分からないし、条件小出しなまま複数IDで汎用な答えが欲しいのぉって言ってるだけなのが透けて見えるw
185デフォルトの名無しさん
2022/02/24(木) 20:38:21.09ID:I6df84hq 何の情報が必要かすら分かってない初心者かもしれないんだから聞き出してやればいいのに
煽って出てくると思ってるなら考え甘いぞ、要件引き出せないようじゃ半人前
煽って出てくると思ってるなら考え甘いぞ、要件引き出せないようじゃ半人前
186デフォルトの名無しさん
2022/02/24(木) 20:59:04.53ID:cGpWV2sd ちゃんとID変えて出てきてるし煽ってないし、僕ちゃん答えは欲しいのに分不相応なプライドだけ高くて素直になれないのぉって言われてもね
187デフォルトの名無しさん
2022/02/24(木) 21:02:22.10ID:j0njw0Fu 一方すぐ質問者にマウンティングしたがるおまえはすぐわかるなw
188デフォルトの名無しさん
2022/02/24(木) 21:03:10.18ID:MBzpszCI > ID:cGpWV2sd
おまえイラネ
無駄にうるせえ
おまえイラネ
無駄にうるせえ
189デフォルトの名無しさん
2022/02/24(木) 21:29:39.55ID:cGpWV2sd こんなスレにいちいち相談する初心者なんてそうそういねーよ
もし初心者なら回答欲しいんだから何言われても何某か返事する
そういうのがなく単発IDなどが煽ってくるということはつまり・・・図星ってことw
もし初心者なら回答欲しいんだから何言われても何某か返事する
そういうのがなく単発IDなどが煽ってくるということはつまり・・・図星ってことw
190デフォルトの名無しさん
2022/02/24(木) 21:36:30.68ID:j0njw0Fu ここ覗いてるのって技術系の雑談ネタとしか思ってないだろうが、
毎回、単発IDで質問して逃げてるとしたらクソ野郎だな。
学生の課題か何かだろう。おれたちは利用されてるんだ!!!
毎回、単発IDで質問して逃げてるとしたらクソ野郎だな。
学生の課題か何かだろう。おれたちは利用されてるんだ!!!
191デフォルトの名無しさん
2022/02/24(木) 21:50:54.34ID:p3uXF2gK 利用されるのが嫌ってこと?よくわからんが。
まぁ、学校の課題でズルしても本人のためにはならないんだから勝手にしとけって感じだな。
まぁ、学校の課題でズルしても本人のためにはならないんだから勝手にしとけって感じだな。
192デフォルトの名無しさん
2022/02/24(木) 21:59:42.81ID:cGpWV2sd193デフォルトの名無しさん
2022/02/24(木) 23:03:53.08ID:I6df84hq 妄想えっぐ、糖質っぽいな
194デフォルトの名無しさん
2022/02/25(金) 00:16:50.60ID:5F5cVQmS 在日君なんだろうな
195デフォルトの名無しさん
2022/02/25(金) 01:06:42.45ID:xX3MCg4u >>192
おれみたいなじーさんがおまえのような小便垂れの小僧に質問するわけないだろ…
おれみたいなじーさんがおまえのような小便垂れの小僧に質問するわけないだろ…
196デフォルトの名無しさん
2022/02/25(金) 11:25:19.29ID:xlKD2LUb なんで const なオブジェクトは const なメンバ関数しか呼べないの?
197デフォルトの名無しさん
2022/02/25(金) 11:29:01.84ID:uD2ZWt4n メンバ関数でメンバ変数が書き変わるとconstオブジェクトとして困るから
198デフォルトの名無しさん
2022/02/25(金) 11:29:09.22ID:KX/JNmq+ 中が書き換わるかもしれないから
199デフォルトの名無しさん
2022/02/25(金) 11:59:24.66ID:169sj97j でもポインタで簡単に書き換えられるじゃん
200デフォルトの名無しさん
2022/02/25(金) 12:14:57.98ID:mK/IikxE 意図的にconst外さなきゃconstのままだよ
何も考えずconst外すバカのことなんて知らん
何も考えずconst外すバカのことなんて知らん
201デフォルトの名無しさん
2022/02/25(金) 18:43:59.10ID:xX3MCg4u constが役にたった場面にあったことがない。
自分で書き換えといて「書き換わるかもしれない!!」とかどんだけ適当にコード書いてんだか。
自分で書き換えといて「書き換わるかもしれない!!」とかどんだけ適当にコード書いてんだか。
202デフォルトの名無しさん
2022/02/25(金) 19:05:22.20ID:kxjR7eze constは積極的に使うことでI/Fを分かりやすくしたりできるね
書き換えない想定を明示的にして最適化しやすくする効果もある
意味的に正しいことが保証できないときにconstを使うと泣くこともあるけどw
書き換えない想定を明示的にして最適化しやすくする効果もある
意味的に正しいことが保証できないときにconstを使うと泣くこともあるけどw
203デフォルトの名無しさん
2022/02/25(金) 19:11:03.22ID:xX3MCg4u >>202
const使ったらコンパイラはどういった最適化するんだ?
const使ったらコンパイラはどういった最適化するんだ?
204デフォルトの名無しさん
2022/02/25(金) 19:12:37.70ID:pF12AA3R constとprivateはテストの邪魔でしかない
使ってる奴は例外なく低脳
使ってる奴は例外なく低脳
205デフォルトの名無しさん
2022/02/25(金) 19:27:49.01ID:RMWkUPMB privateはインテリセンスがすっきりしていいじゃん
206デフォルトの名無しさん
2022/02/25(金) 19:38:04.25ID:kxjR7eze207デフォルトの名無しさん
2022/02/25(金) 19:43:16.35ID:xX3MCg4u 自分で言い出しといて急にキレられてもな。
208デフォルトの名無しさん
2022/02/25(金) 19:48:21.44ID:kxjR7eze >>207
キレる?お前が調べもせずに聞いてくるから当たり前のことを言っただけだが
キレる?お前が調べもせずに聞いてくるから当たり前のことを言っただけだが
209デフォルトの名無しさん
2022/02/25(金) 19:52:14.27ID:pF12AA3R >>206
エアプは君だよ
製品レベルの緻密なテストセットをきちんと書き上げるためにはconstなしのオールpublicしかあり得ん
テストケースで様々な状態を作りだして動作確認するためには、全てを必要に応じて自由に書き換えられることが不可欠というもの
書き換え不可だのクラス専用だのの決め事は命名規則で担保するんだぞ
エアプは君だよ
製品レベルの緻密なテストセットをきちんと書き上げるためにはconstなしのオールpublicしかあり得ん
テストケースで様々な状態を作りだして動作確認するためには、全てを必要に応じて自由に書き換えられることが不可欠というもの
書き換え不可だのクラス専用だのの決め事は命名規則で担保するんだぞ
210デフォルトの名無しさん
2022/02/25(金) 19:58:35.87ID:46L8HXzx IFのシグネチャにconstついてないといちいち仕様書読まなきゃいけないから面倒くね?
char* token(char* str)とかあったら破壊的かどうか判別できん
char* token(char* str)とかあったら破壊的かどうか判別できん
211デフォルトの名無しさん
2022/02/25(金) 20:00:20.50ID:gDL/lDyA >>209
struct最強伝説キタコレ
struct最強伝説キタコレ
212デフォルトの名無しさん
2022/02/25(金) 20:04:09.41ID:Ttq2k6xT >>211
staticおじさんの生まれ変わりだろw
staticおじさんの生まれ変わりだろw
213デフォルトの名無しさん
2022/02/25(金) 20:04:09.42ID:kxjR7eze214デフォルトの名無しさん
2022/02/25(金) 20:07:48.92ID:xX3MCg4u const使ったらどんな最適化するんだろう? 言った本人はキレて答えてくれないし。
215デフォルトの名無しさん
2022/02/25(金) 20:12:00.77ID:kxjR7eze216デフォルトの名無しさん
2022/02/25(金) 20:14:10.16ID:aDhOSI3t Rustは何も指定しないとimmutable(不変)にしちゃったから、そういう点でもわかりやすく、かつ、テストやデバッグも少数のmutableなものだけ対象にすればよくなってるね
217デフォルトの名無しさん
2022/02/25(金) 20:15:39.58ID:xX3MCg4u218デフォルトの名無しさん
2022/02/25(金) 20:16:05.93ID:kxjR7eze >>216
Rustは無関係なので巣に帰れ
Rustは無関係なので巣に帰れ
219デフォルトの名無しさん
2022/02/25(金) 20:32:18.12ID:6k09Uwld constを使うのがいいことがよく分かった
220デフォルトの名無しさん
2022/02/25(金) 20:39:24.80ID:xX3MCg4u constウイルスと言わざるをえないアホ仕様
221デフォルトの名無しさん
2022/02/25(金) 20:57:38.37ID:QBj91W6D だからさ、釣り針が太すぎるんだよな
222デフォルトの名無しさん
2022/02/25(金) 21:25:13.93ID:4EL5U7Bc constついてないコードは九分九厘ごみ
絶対に自分一人で書き上げて絶対に一生涯外に出さない保証があるなら付けなくても良い
絶対に自分一人で書き上げて絶対に一生涯外に出さない保証があるなら付けなくても良い
223デフォルトの名無しさん
2022/02/25(金) 21:34:50.33ID:6k09Uwld 本に載るほどの支持を覆すほどの権威と実例があるわけもなく
224デフォルトの名無しさん
2022/02/25(金) 22:44:59.40ID:RMWkUPMB メンバ関数のconst修飾とか関数の引数のconstとかはわかるけど関数内部のローカル変数にconst付けるのはよくわからんな
225デフォルトの名無しさん
2022/02/25(金) 22:51:54.69ID:a/ksSb5+ const お会いしたらお茶しませんか?
226デフォルトの名無しさん
2022/02/25(金) 23:04:47.69ID:aDhOSI3t227デフォルトの名無しさん
2022/02/25(金) 23:07:46.96ID:vOr560R7 ここ数年constをつけて再代入しないのが当然になってますってjavascriptの専門家に言われて殴りたくなりました
228デフォルトの名無しさん
2022/02/25(金) 23:13:07.22ID:aDhOSI3t JavaScript程度はブラウザのカスタマイズしたり含めて誰でも使える言語だろ
まさかC++しか使えない新人かね
まさかC++しか使えない新人かね
229デフォルトの名無しさん
2022/02/26(土) 00:15:34.77ID:VmHIkvc0 Pythonにはconstもprivateもない
大文字だけの名前はconst、アンダースコア始まりの名前はprivateという規約があるだけ
でもそれでみんな勝手に書き換えるべきでないと了解されてて完全に成立してる
とはいえ言語機能ではないのでテストとかでの必要に応じて規約を無視して値を変えることもできる
こういう実例を見るとわざわざコンパイラ機能として書き換え禁を強要してるconstやprivateは偏執的過ぎると思う
大文字だけの名前はconst、アンダースコア始まりの名前はprivateという規約があるだけ
でもそれでみんな勝手に書き換えるべきでないと了解されてて完全に成立してる
とはいえ言語機能ではないのでテストとかでの必要に応じて規約を無視して値を変えることもできる
こういう実例を見るとわざわざコンパイラ機能として書き換え禁を強要してるconstやprivateは偏執的過ぎると思う
230デフォルトの名無しさん
2022/02/26(土) 00:23:17.69ID:xDf2Ellb 小さいオブジェクトにconst付けるとアドレスが割り振られて最適化が阻害されるみたいな話は聞いたな
231デフォルトの名無しさん
2022/02/26(土) 01:13:30.79ID:fRC8OZTs232デフォルトの名無しさん
2022/02/26(土) 01:14:41.41ID:TNmFLFGs ここまでconstつけると最適化されるという例はなし。
233デフォルトの名無しさん
2022/02/26(土) 01:39:20.96ID:fRC8OZTs ここまで何を調べたかの記述なしw
234デフォルトの名無しさん
2022/02/26(土) 04:01:53.50ID:L9ZaKHY5 move、右辺値参照、各種オペレータなどフルセットで対応するライブラリ的なクラスならconst対応した方が良いけど、
末端のアプリケーションにまで全部律儀にconst付けるのは面倒くさいだけだわな
末端のアプリケーションにまで全部律儀にconst付けるのは面倒くさいだけだわな
235デフォルトの名無しさん
2022/02/26(土) 04:13:27.79ID:fRC8OZTs そんなしょうもないものならわざわざC++で組むなよw 発想がアホの極みw
236デフォルトの名無しさん
2022/02/26(土) 06:30:02.19ID:BX4iLvdt Rustなどは無指定デフォルト時がC++でのconst状態になってるよな
楽でいいよな
楽でいいよな
237デフォルトの名無しさん
2022/02/26(土) 07:05:16.24ID:fRC8OZTs >>236
Rustの話はRustスレで
Rustの話はRustスレで
238デフォルトの名無しさん
2022/02/26(土) 08:03:06.09ID:w5NWCXyu 話題に沿ってるんだし少しくらいなら良いと思うけどね。アレルギーかよ
239デフォルトの名無しさん
2022/02/26(土) 08:11:23.88ID:fRC8OZTs Goスレ見てると対岸の火事とは思えないw
Rustスレは静かなのに、そこで議論できない馬鹿がずっと他言語スレでRustのヘイトを稼いでるからなw
Rustくらいみんな知ってると言うのにw
ってわけで、特に今は各言語固有スレではその言語の話だけってことw
Rustスレは静かなのに、そこで議論できない馬鹿がずっと他言語スレでRustのヘイトを稼いでるからなw
Rustくらいみんな知ってると言うのにw
ってわけで、特に今は各言語固有スレではその言語の話だけってことw
240デフォルトの名無しさん
2022/02/26(土) 10:47:22.97ID:w5NWCXyu 他所のスレのことは知らんけどこれをヘイト稼ぎと受け取るのは捻くれな気がするけどね
Rustのことも自分が知ってるからってみんな知ってるとかイキるのも良くない
知らない人だって当然いるだろうに
Rustのことも自分が知ってるからってみんな知ってるとかイキるのも良くない
知らない人だって当然いるだろうに
241デフォルトの名無しさん
2022/02/26(土) 11:00:37.71ID:fRC8OZTs ヘイト稼ぎと解釈しない方が捻くれてるだろw
今どきC++やっててRust(やそれ以外の言語)知らん方がレアだし、その程度のやつは何を言われても仕方ない
今どきC++やっててRust(やそれ以外の言語)知らん方がレアだし、その程度のやつは何を言われても仕方ない
242デフォルトの名無しさん
2022/02/26(土) 11:24:01.42ID:Cjy1TnYX その程度とか言い出した
パソコンの大先生かな?w
パソコンの大先生かな?w
243デフォルトの名無しさん
2022/02/26(土) 11:56:13.77ID:w5NWCXyu 誰でも最初は初心者なんだけどね
ここオンラインの匿名掲示板なの忘れてない?
勝手に自分基準のレベルを周りに押し付けられてもね
そういうのは自分の納得できる閉じたコミュニティでやればいいと思う
ここオンラインの匿名掲示板なの忘れてない?
勝手に自分基準のレベルを周りに押し付けられてもね
そういうのは自分の納得できる閉じたコミュニティでやればいいと思う
244デフォルトの名無しさん
2022/02/26(土) 13:03:43.12ID:d8NXRVNx いや、悪いけど>>241はレベル低いと思うよ・・・w
245デフォルトの名無しさん
2022/02/26(土) 13:14:24.08ID:qsPBexON 自動販売機のタバコじゃないんだけどね
もっと高級なのね
もっと高級なのね
246デフォルトの名無しさん
2022/02/26(土) 15:44:44.33ID:xDf2Ellb Rustってまだ言語マニアくらいしか使ってなくね
そもそも案件が少なすぎるしRsutでしか提供されていないライブラリやフレームワークやSDKなんて聞いたことないし
俺が知らないだけで実はコッソリ出現してるのか???
そもそも案件が少なすぎるしRsutでしか提供されていないライブラリやフレームワークやSDKなんて聞いたことないし
俺が知らないだけで実はコッソリ出現してるのか???
247デフォルトの名無しさん
2022/02/26(土) 22:06:22.23ID:aW9KNPN/ 実際こうやってアレルギー反応(スレが荒れる)起こすからよその話はよそでやれってことだな
248デフォルトの名無しさん
2022/02/26(土) 22:11:54.75ID:fRC8OZTs 荒れてねーよw
249デフォルトの名無しさん
2022/02/26(土) 22:19:40.75ID:4mZJSMD8 >>246
色んな分野でRustがC++の立ち位置を侵食していってるよ
例えばブラウザ内だけでなく今は色んな所で使われるようになったWebAssembly(WASM)
WASMでプログラミングするための記述言語は当初C++が先行していたけど今はRustが逆転してトップになっているね
色んな分野でRustがC++の立ち位置を侵食していってるよ
例えばブラウザ内だけでなく今は色んな所で使われるようになったWebAssembly(WASM)
WASMでプログラミングするための記述言語は当初C++が先行していたけど今はRustが逆転してトップになっているね
250デフォルトの名無しさん
2022/02/26(土) 22:27:10.15ID:I1qWxMaG constさいこー
固定文字列リテラルとか
const char* const s = "Hello World!\n";
やし
関数の仮引数は関数内で絶対変えないことにして
void foo(const char* const p); // 宣言
void foo(const char* const p_) { // 定義
const char* p = p_; // 関数内で値を変える場合
}
と書いてしまうま
固定文字列リテラルとか
const char* const s = "Hello World!\n";
やし
関数の仮引数は関数内で絶対変えないことにして
void foo(const char* const p); // 宣言
void foo(const char* const p_) { // 定義
const char* p = p_; // 関数内で値を変える場合
}
と書いてしまうま
251デフォルトの名無しさん
2022/02/26(土) 22:27:29.83ID:I1qWxMaG252デフォルトの名無しさん
2022/02/26(土) 22:46:27.37ID:I1qWxMaG テストのときにprivateメンバを弄りたいケースは確かにあって
そういう場合は次のどれかかが多いう気がする印象だが知らん ※個人の感想です
1. 長ったらしい接頭辞がついた名前のテスト用メソッドを設けてその中にテストコードを書く
リリースコードでもそのままだが呼ばれないからリンクはされない
2. 長ったらしい接頭辞がついた名前の構造体として実装して細かいテストしてclassでwrapしてリリース
3. 長ったらしい接頭辞がついた名前の普通の関数として書いて細かいテストしてそれをclassから呼ぶ
そういう場合は次のどれかかが多いう気がする印象だが知らん ※個人の感想です
1. 長ったらしい接頭辞がついた名前のテスト用メソッドを設けてその中にテストコードを書く
リリースコードでもそのままだが呼ばれないからリンクはされない
2. 長ったらしい接頭辞がついた名前の構造体として実装して細かいテストしてclassでwrapしてリリース
3. 長ったらしい接頭辞がついた名前の普通の関数として書いて細かいテストしてそれをclassから呼ぶ
253デフォルトの名無しさん
2022/02/26(土) 22:47:36.31ID:fRC8OZTs >>249-251 こういうのが荒れてる状態
254デフォルトの名無しさん
2022/02/26(土) 22:48:11.64ID:fRC8OZTs >>252 これもな
255デフォルトの名無しさん
2022/02/26(土) 23:14:01.86ID:I1qWxMaG だいたいインターフェースにもconstつけちゃう
class IFoo {
int bar(const int x, const double y, const RECT z) const = 0;
double baz(std::string& buf) const = 0;
/*...*/
};
とか
class IFoo {
int bar(const int x, const double y, const RECT z) const = 0;
double baz(std::string& buf) const = 0;
/*...*/
};
とか
256デフォルトの名無しさん
2022/02/26(土) 23:14:57.75ID:I1qWxMaG virtuarl ~IFoo() { }
を忘れたorz (死
を忘れたorz (死
257デフォルトの名無しさん
2022/02/26(土) 23:17:36.73ID:TNmFLFGs 値渡しをconstにして何がしたいん?
258デフォルトの名無しさん
2022/02/26(土) 23:27:30.26ID:w5NWCXyu 固定ならconstexpr使おうや
259デフォルトの名無しさん
2022/02/26(土) 23:36:20.44ID:I1qWxMaG260デフォルトの名無しさん
2022/02/26(土) 23:43:30.97ID:w5NWCXyu まあ非参照型でconstついてなかったらとりあえず
ひょっとして関数内で書き換えられるんかと疑ってかかるよね
ひょっとして関数内で書き換えられるんかと疑ってかかるよね
261デフォルトの名無しさん
2022/02/26(土) 23:44:54.89ID:I1qWxMaG >>232
IPAコーディング左方ガイド[C++言語編] (p.120)
https://www.ipa.go.jp/files/000055043.pdf
>M1.11.1 参照しかしない領域は、const 型であることを示
>す宣言を行う。
(中略)
>参照するだけで変更しない変数を const 型で宣言することで、その変数を変更しないことを明
>示できる。また、処理系の最適化処理でオブジェクトサイズが小さくなる可能性もある。この
>ため、参照しかしない変数は const 型にする。
やそうや;;;
具体的には知らん
IPAコーディング左方ガイド[C++言語編] (p.120)
https://www.ipa.go.jp/files/000055043.pdf
>M1.11.1 参照しかしない領域は、const 型であることを示
>す宣言を行う。
(中略)
>参照するだけで変更しない変数を const 型で宣言することで、その変数を変更しないことを明
>示できる。また、処理系の最適化処理でオブジェクトサイズが小さくなる可能性もある。この
>ため、参照しかしない変数は const 型にする。
やそうや;;;
具体的には知らん
262デフォルトの名無しさん
2022/02/26(土) 23:45:14.56ID:nPeFYJEF 引数に再代入するかどうかは呼び出し側の与り知らぬところなんで
それを公開インターフェースに乗せるのはどうかなぁ。
それを公開インターフェースに乗せるのはどうかなぁ。
263デフォルトの名無しさん
2022/02/26(土) 23:45:57.76ID:BX4iLvdt Rustだと値渡しだけでなく参照渡しも無指定デフォルト時は書き換え不能だよな
書き換えが起こる関数へは指定して可変参照を渡す
書き換えが起こる関数へは指定して可変参照を渡す
264デフォルトの名無しさん
2022/02/26(土) 23:48:32.78ID:UUNvHcAJ どこぞの馬の骨とも知れないIT後進国ジャップが言う事よりも天下のGoogle様のコーディング規約を真似るほうが無難だぞ
そしてGoogleのコーディング規約によると「可能な限りconst付けまくれ」との事
実際にGoogleが公開してるライブラリはCにしろC++にしろ関数の引数から大体const付いてる、ポインタは勿論constバーガーで
そしてGoogleのコーディング規約によると「可能な限りconst付けまくれ」との事
実際にGoogleが公開してるライブラリはCにしろC++にしろ関数の引数から大体const付いてる、ポインタは勿論constバーガーで
265デフォルトの名無しさん
2022/02/26(土) 23:50:44.52ID:I1qWxMaG >>262
あずかり知らぬことならどうでもいいんじゃ……
コピペした後手作業でconstを消すとかアフォらしい漏れクラスの天才の単金は高いからな
やっぱ作る方の作業性優先で、
記憶モードだがVC++のインテリセンスは値渡しのconstは除去して提示してくれるはず……
あずかり知らぬことならどうでもいいんじゃ……
コピペした後手作業でconstを消すとかアフォらしい漏れクラスの天才の単金は高いからな
やっぱ作る方の作業性優先で、
記憶モードだがVC++のインテリセンスは値渡しのconstは除去して提示してくれるはず……
266デフォルトの名無しさん
2022/02/26(土) 23:58:24.50ID:nPeFYJEF でもconst書く方の手間は惜しまないんだ
267デフォルトの名無しさん
2022/02/26(土) 23:58:37.20ID:Cf/OFvAp > 処理系の最適化処理でオブジェクトサイズが小さくなる可能性もある。
> int bar(const int x,
これをどうやって小さくするんだ? そもそもconstの値渡しの話だよな。
> int bar(const int x,
これをどうやって小さくするんだ? そもそもconstの値渡しの話だよな。
268デフォルトの名無しさん
2022/02/27(日) 00:02:08.66ID:/TAxLK2K269デフォルトの名無しさん
2022/02/27(日) 00:02:10.22ID:o7kRBzLD 引数で明示的に書き換え禁止にしたいということはポインタ渡しか参照渡しだよな。
アドレスしか渡してないのに最適化でオブジェクトサイズが小さくなるというのはどういう意味だろう?
アドレスしか渡してないのに最適化でオブジェクトサイズが小さくなるというのはどういう意味だろう?
270デフォルトの名無しさん
2022/02/27(日) 00:05:12.18ID:o7kRBzLD > 「可能な限りconst付けまくれ」
自分で設計、コーディングができなくてオープンソースをパクる側の意見だろう。
あくまでパクりすぎて訴えられて負けるググルくんの意見。
自分で設計、コーディングができなくてオープンソースをパクる側の意見だろう。
あくまでパクりすぎて訴えられて負けるググルくんの意見。
271デフォルトの名無しさん
2022/02/27(日) 00:07:37.55ID:KWP91+7v char*ならアドレス渡すより実値渡す方がサイズ小さくて済むとかじゃない?知らんけどね
272デフォルトの名無しさん
2022/02/27(日) 00:14:47.59ID:/TAxLK2K273デフォルトの名無しさん
2022/02/27(日) 00:39:11.54ID:GNkMbU6V 実質in宣言だよね
274デフォルトの名無しさん
2022/02/27(日) 05:41:24.49ID:+yReYAPt まだ馬鹿がconst不要とかアホなこと言って荒らしてるのか・・・
275デフォルトの名無しさん
2022/02/27(日) 07:45:11.01ID:hjaMvOv0 もういっそのこと、constをメンバ関数宣言のデフォルトにして、volatileキーワードをメンバ関数宣言にそえないとメンバ変数の値を変更できないような仕様変更をしたほうがいいくらいだよ
276デフォルトの名無しさん
2022/02/27(日) 07:54:46.50ID:XiobTp3y ラムダ式の値キャプチャはデフォでconstだね
constつけたくないときはmutable
constつけたくないときはmutable
277デフォルトの名無しさん
2022/02/27(日) 13:50:59.05ID:i/FBvdzu 勝手な憶測だけどconst付けると即値埋め込み以外にもどの変数をレジスタに入れるかって辺りの最適化が効きやすくなりそうな気はする
278デフォルトの名無しさん
2022/02/27(日) 14:21:10.71ID:ai7feBss class ClassA {
public:
int x, y;
ClassA(int n1, int n2) { x = n1, y = n2; }
virtual void VirFunc() = 0;
};
class ClassB :public ClassA {
public:
ClassB(int n1 = 0, int n2 = 0) :ClassA(n1, n2) { ; }
void VirFunc() { cout << "Disp1:x+y=" << x + y << std::endl; }
void Dummy() { ; }
};
void check(ClassA* obj)
{
if (typeid(*obj) == typeid(ClassB)) {
static_cast<ClassB*>(obj)->VirFunc();
}
}
int main()
{
ClassB objB(10, 20);
check(&objB);
}
public:
int x, y;
ClassA(int n1, int n2) { x = n1, y = n2; }
virtual void VirFunc() = 0;
};
class ClassB :public ClassA {
public:
ClassB(int n1 = 0, int n2 = 0) :ClassA(n1, n2) { ; }
void VirFunc() { cout << "Disp1:x+y=" << x + y << std::endl; }
void Dummy() { ; }
};
void check(ClassA* obj)
{
if (typeid(*obj) == typeid(ClassB)) {
static_cast<ClassB*>(obj)->VirFunc();
}
}
int main()
{
ClassB objB(10, 20);
check(&objB);
}
279デフォルトの名無しさん
2022/02/27(日) 14:21:28.24ID:ai7feBss クラスの継承やtyoeidで今躓いています。
objにclassBがなんで代入出来てなんでキャストできるのかわかりません。
check関数の中の引数、ClassAのポインタにClassBで実体化したオブジェクトのアドレスを入れると言うことは
継承した部分だけを見ることで同じ型として見ているのですか?
だとしたら派生先のクラスでできたメンバ?がどうなるんだろうと言うのもわからなかったりはします。
objにclassBがなんで代入出来てなんでキャストできるのかわかりません。
check関数の中の引数、ClassAのポインタにClassBで実体化したオブジェクトのアドレスを入れると言うことは
継承した部分だけを見ることで同じ型として見ているのですか?
だとしたら派生先のクラスでできたメンバ?がどうなるんだろうと言うのもわからなかったりはします。
280デフォルトの名無しさん
2022/02/27(日) 14:22:00.29ID:ai7feBss すみませんコードってどう上げれば良いんでしたっけ?
281デフォルトの名無しさん
2022/02/27(日) 14:34:30.92ID:57HjD/n9 const の必要性ってこういうときにあると思ってる
struct T { int x; int y; T(int _x,int _y):x(_x),y(_y){}};
int test1(T &a){ return a.x*a.y;}
int test2(const T &a){ return a.x*a.y;}
int main() {
T a(10,5);
printf("%d",test1(a));//OK
printf("%d",test1(T(5,4)));//エラー
printf("%d",test2(a)); //OK
printf("%d",test2(T(4,6)));//OK
}
struct T { int x; int y; T(int _x,int _y):x(_x),y(_y){}};
int test1(T &a){ return a.x*a.y;}
int test2(const T &a){ return a.x*a.y;}
int main() {
T a(10,5);
printf("%d",test1(a));//OK
printf("%d",test1(T(5,4)));//エラー
printf("%d",test2(a)); //OK
printf("%d",test2(T(4,6)));//OK
}
282デフォルトの名無しさん
2022/02/27(日) 14:38:16.26ID:gvx2nAxT283デフォルトの名無しさん
2022/02/27(日) 14:51:04.74ID:ai7feBss >>282
ありがとうございます。
アップキャストダウンキャストも関わっていたのですね
すぐにはわかりませんでした。
たとえばなんですけど派生クラスBは基本クラスAに別の名前を付けてかつBで新たに
加えられたメンバはBから紐づけられていて、これらをセットにして見やすくしたものが
派生クラスBになると言う感じなのです?
ありがとうございます。
アップキャストダウンキャストも関わっていたのですね
すぐにはわかりませんでした。
たとえばなんですけど派生クラスBは基本クラスAに別の名前を付けてかつBで新たに
加えられたメンバはBから紐づけられていて、これらをセットにして見やすくしたものが
派生クラスBになると言う感じなのです?
284はちみつ餃子 ◆8X2XSCHEME
2022/02/27(日) 15:01:31.40ID:ftSqTRxL 派生クラスのオブジェクトには基底クラスのオブジェクトが含まれる。
派生クラスの一部であるようなオブジェクト (基底やデータメンバ) をサブオブジェクトという。
派生クラスの一部であるようなオブジェクト (基底やデータメンバ) をサブオブジェクトという。
285デフォルトの名無しさん
2022/02/27(日) 16:18:03.61ID:ai7feBss286デフォルトの名無しさん
2022/02/27(日) 16:44:15.33ID:+yReYAPt ダウンキャストは危険で、本来無条件にやっていいものではない
なので実行時型チェックをして使っている今回は問題ないだけ
なお、static_cast<ClassB*>(obj)->VirFunc()は最近のコンパイラ(gcc11.2)だと
最適化なし時はClassA*として仮想関数呼び出しと同じ方法で呼び出す
最適化あり時はvtableがClassB::VirtFunc()かどうか確認してインライン展開したものが実行される
(万一確認失敗したら仮想関数呼び出しと同じ方法で呼び出す)
なので実行時型チェックをして使っている今回は問題ないだけ
なお、static_cast<ClassB*>(obj)->VirFunc()は最近のコンパイラ(gcc11.2)だと
最適化なし時はClassA*として仮想関数呼び出しと同じ方法で呼び出す
最適化あり時はvtableがClassB::VirtFunc()かどうか確認してインライン展開したものが実行される
(万一確認失敗したら仮想関数呼び出しと同じ方法で呼び出す)
287デフォルトの名無しさん
2022/02/27(日) 17:38:03.37ID:HuUTW9GQ ダウンキャストをするならstatic_castではなくdynamic_castを使うべき。
見ているobjの実体がclassBじゃないなら失敗してnullptrを返してくれる。
そもそもダウンキャストが必要になること自体良い設計ではないが
auto* pb=dynamic_cast<classB*>(pobj);
if(pb){
pb->...;
}
見ているobjの実体がclassBじゃないなら失敗してnullptrを返してくれる。
そもそもダウンキャストが必要になること自体良い設計ではないが
auto* pb=dynamic_cast<classB*>(pobj);
if(pb){
pb->...;
}
288デフォルトの名無しさん
2022/02/27(日) 17:46:47.65ID:NpJPdMJB 「キャストはなるべくするな、特にdynamicはコストが高い」と古文書にもあった
289デフォルトの名無しさん
2022/02/27(日) 17:54:22.89ID:+yReYAPt 今回はそれをtypeidでやりたかったんでしょ
290デフォルトの名無しさん
2022/02/27(日) 18:02:07.86ID:HfpUvsK0 ダイナミックダイクマ
291デフォルトの名無しさん
2022/02/27(日) 20:42:58.79ID:ai7feBss なんかC++が気になるので実践的な情報でもなんでもありがたいです。
C++で食べてる人と話したこともないし・・・
C++で食べてる人と話したこともないし・・・
292デフォルトの名無しさん
2022/02/27(日) 20:45:27.70ID:NpJPdMJB 古文書には「#defineではなくconst,enum,inlineを使うといい」ってあるよ
293デフォルトの名無しさん
2022/02/27(日) 20:47:31.05ID:nGlHhzSe 死海文書では「constexpr, enum struct, enum class」を使うことで難を逃れたと書いてある
294デフォルトの名無しさん
2022/02/27(日) 20:56:43.39ID:o7kRBzLD const使えば分かる。#defineのほうがやっぱり便利だわ。
295デフォルトの名無しさん
2022/02/27(日) 21:21:58.39ID:Xl3wWN+O C++のenumは機能が弱いからなあ
Rustのenumみたいに任意の型の変数値を格納できるようにしてほしい
Rustのenumみたいに任意の型の変数値を格納できるようにしてほしい
296デフォルトの名無しさん
2022/02/27(日) 21:31:32.92ID:nXG/aSfD297デフォルトの名無しさん
2022/02/27(日) 21:36:52.29ID:o7kRBzLD char*やシンプルな構造体ならconst使うのはメリットあると思うが、
あれこれ機能が詰め込まれるクラスになると不便さ、面倒さのほうが際立つ。
多重継承並にハゲる原因になる。
あれこれ機能が詰め込まれるクラスになると不便さ、面倒さのほうが際立つ。
多重継承並にハゲる原因になる。
298デフォルトの名無しさん
2022/02/27(日) 22:28:50.95ID:hjaMvOv0 まーたしかにconst_castだらけになるかもしれないね
299はちみつ餃子 ◆8X2XSCHEME
2022/02/27(日) 23:37:06.31ID:ftSqTRxL const_cast を正しく使うのは難しい。
const なオブジェクトから const を剥がして書き換えるのは未定義。
数年前に LLVM が const 指定の情報を最適化に活用する方向に舵を切ったというニュースもあった。
const ではないオブジェクトに対して const なポインタや参照を経由している場合には
const を外して書き換えるのは許されるはずだが、
それが必要になるようだと設計を見直したほうがいい。
現在のコンパイラは賢くて、 const 指定をしてなくても書き換えられる可能性がないことを見抜いて最適化することも多いんで、
const の指定自体は最適化にはそれほど寄与しないよ。
ただ、 const を前提とした設計はコンパイラにとって最適化しやすい構造である可能性はある。
@ const を前提にした設計にできるもんならしたほうがいい
A そうできないなら無理に const を付けないほうがいい (後で場当たり的に const_cast で const をはがすとどこかで間違う)
const なオブジェクトから const を剥がして書き換えるのは未定義。
数年前に LLVM が const 指定の情報を最適化に活用する方向に舵を切ったというニュースもあった。
const ではないオブジェクトに対して const なポインタや参照を経由している場合には
const を外して書き換えるのは許されるはずだが、
それが必要になるようだと設計を見直したほうがいい。
現在のコンパイラは賢くて、 const 指定をしてなくても書き換えられる可能性がないことを見抜いて最適化することも多いんで、
const の指定自体は最適化にはそれほど寄与しないよ。
ただ、 const を前提とした設計はコンパイラにとって最適化しやすい構造である可能性はある。
@ const を前提にした設計にできるもんならしたほうがいい
A そうできないなら無理に const を付けないほうがいい (後で場当たり的に const_cast で const をはがすとどこかで間違う)
300デフォルトの名無しさん
2022/02/27(日) 23:43:44.46ID:o7kRBzLD 書き換えないコードの場合はどういう最適化がされるのかを知りたいのだが。
301デフォルトの名無しさん
2022/02/27(日) 23:51:40.12ID:HuUTW9GQ getterにlockを仕込む場合にgetterをconstにするべきかどうか悩む
const扱いにしてmutexに関してだけconstをはがすべきなのか
class C{
std::mutex _mtx;
int _a;
public:
int get_a(){
std::lock_guard lk(_mtx);
return _a;
}
void set_a(int a);
};
const扱いにしてmutexに関してだけconstをはがすべきなのか
class C{
std::mutex _mtx;
int _a;
public:
int get_a(){
std::lock_guard lk(_mtx);
return _a;
}
void set_a(int a);
};
302デフォルトの名無しさん
2022/02/28(月) 00:43:20.93ID:7GK6w4Z4 >>301
俺ならgetterにはconst付けてmutexメンバ変数にはmutable付けるね。
俺ならgetterにはconst付けてmutexメンバ変数にはmutable付けるね。
303はちみつ餃子 ◆8X2XSCHEME
2022/02/28(月) 00:54:54.67ID:R6BwoFXD304デフォルトの名無しさん
2022/02/28(月) 01:18:45.25ID:EeqSDih1 >>300
だからお前は何を調べたとずっと聞いてるんだがw
だからお前は何を調べたとずっと聞いてるんだがw
305デフォルトの名無しさん
2022/02/28(月) 01:22:01.28ID:LWo9z6at 言い出した本人が逃げ出して答えないし、誰もはっきりと答えないんだからウソなんじゃね?
306デフォルトの名無しさん
2022/02/28(月) 01:25:22.84ID:EeqSDih1 状況に依るけどmutableにするなら俺はunique_ptrとかにするかもしれない
307デフォルトの名無しさん
2022/02/28(月) 01:42:21.31ID:EeqSDih1 >>305
言い出した本人はいるし、「お前は何を調べたとずっと聞いてる」のにしかも何度も聞いてるのに答えない=お前が逃げ続けてるからだろ?w
言い出した本人はいるし、「お前は何を調べたとずっと聞いてる」のにしかも何度も聞いてるのに答えない=お前が逃げ続けてるからだろ?w
308デフォルトの名無しさん
2022/02/28(月) 01:47:08.01ID:LWo9z6at 本人いたのか。自分で言い出したはいいが実はさっぱり分からないって感じか。
それはそれで仕方ない。発狂してたら余計にやっぱりウソなんだ〜ってなるだけだぞ。
それはそれで仕方ない。発狂してたら余計にやっぱりウソなんだ〜ってなるだけだぞ。
309デフォルトの名無しさん
2022/02/28(月) 01:50:37.25ID:EeqSDih1 もう寝るけど、お前がただただ煽りながら発狂しちゃってる間も、毎日何某か書いてるんだがw
いつになったらお前がどこまで何を調べたのか詳細に説明してくれるのか心待ちにしてるよw
いつになったらお前がどこまで何を調べたのか詳細に説明してくれるのか心待ちにしてるよw
310デフォルトの名無しさん
2022/02/28(月) 01:50:44.99ID:h02lB8BP311デフォルトの名無しさん
2022/02/28(月) 01:54:51.97ID:LWo9z6at >>309
やっぱりウソなのか。散々暴れといてしょうもない奴だな、おまえ。
やっぱりウソなのか。散々暴れといてしょうもない奴だな、おまえ。
312デフォルトの名無しさん
2022/02/28(月) 01:56:18.18ID:h02lB8BP void f(const std::vector<int>&v){
for(size_t i=0; i!=v.size(); ++i)...
}
とかで
本来v.size()を毎回呼ばなきゃいけないけどconstだから1回呼ぶだけで十分って話とかじゃないの?
まあ俺も-O2コンパイル結果を読む気力はないからエアプ扱いしてもらって構わんが
for(size_t i=0; i!=v.size(); ++i)...
}
とかで
本来v.size()を毎回呼ばなきゃいけないけどconstだから1回呼ぶだけで十分って話とかじゃないの?
まあ俺も-O2コンパイル結果を読む気力はないからエアプ扱いしてもらって構わんが
313デフォルトの名無しさん
2022/02/28(月) 02:03:13.46ID:/gADsoXI constなんていつでもconst_castで引っぺがせるんだから、勝手に定数畳み込みとかは出来ないし
じゃあそういうのが無いのを検知すれば出来るだろというと、そんなに賢いならconst無しの変数でも同じ事が出来るはず
結論から言うとconstは最適化に何の影響も及ぼさない
畳み込ませたい定数はconstじゃなくenumか#defineで定義するのが正解
じゃあそういうのが無いのを検知すれば出来るだろというと、そんなに賢いならconst無しの変数でも同じ事が出来るはず
結論から言うとconstは最適化に何の影響も及ぼさない
畳み込ませたい定数はconstじゃなくenumか#defineで定義するのが正解
314デフォルトの名無しさん
2022/02/28(月) 02:14:26.59ID:EeqSDih1 複数IDで暴れとるwwwww 朝までに具体的な事例を書いてねw
環境も明記されてないコンパイルも通ってないモノでは想像で言ってるだけってことになるよw
環境も明記されてないコンパイルも通ってないモノでは想像で言ってるだけってことになるよw
315デフォルトの名無しさん
2022/02/28(月) 06:31:25.23ID:Zh+6zBsp >>312
この例は毎回v.size()呼んで遅くなりうる
それは最初に1回一時変数に受ければ解決するがそれがconstかどうかはまずパフォーマンスに影響しないだろう
もっというとこれは生のfor文の欠陥でこれからはstd::views::iotaを使っていくべき理由の1つだと思う
この例は毎回v.size()呼んで遅くなりうる
それは最初に1回一時変数に受ければ解決するがそれがconstかどうかはまずパフォーマンスに影響しないだろう
もっというとこれは生のfor文の欠陥でこれからはstd::views::iotaを使っていくべき理由の1つだと思う
316デフォルトの名無しさん
2022/02/28(月) 06:47:54.89ID:EeqSDih1 >>315
その例はconstにしようがしなかろうがインライン展開されるので最適化結果に違いはないよ
そもそも最適化しやすくなると言ってるだけで、違いがあるとまでは言ってなかったんだけどw
>>314に書いたとおり、煽るだけ君は結局「想像で言ってるだけ」なんだなw
妄想はほどほどにしてくれw
最適化コードに違いがある例が以下。マクロの定義を空にすればconstなしのコードになる。
https://godbolt.org/z/YavYzrE3z
#define CONST const
template<typename T>
struct s {
T value;
operator T() CONST {return value;}
};
CONST s<int> a[] = {1,2,3,4,5};
template<typename T> T func() {
T r = 1;
for (int i = 0; i < sizeof(a)/sizeof(a[0]); ++i) {
r *= a[i];
}
return r;
}
int main() {
return func<double>();
}
その例はconstにしようがしなかろうがインライン展開されるので最適化結果に違いはないよ
そもそも最適化しやすくなると言ってるだけで、違いがあるとまでは言ってなかったんだけどw
>>314に書いたとおり、煽るだけ君は結局「想像で言ってるだけ」なんだなw
妄想はほどほどにしてくれw
最適化コードに違いがある例が以下。マクロの定義を空にすればconstなしのコードになる。
https://godbolt.org/z/YavYzrE3z
#define CONST const
template<typename T>
struct s {
T value;
operator T() CONST {return value;}
};
CONST s<int> a[] = {1,2,3,4,5};
template<typename T> T func() {
T r = 1;
for (int i = 0; i < sizeof(a)/sizeof(a[0]); ++i) {
r *= a[i];
}
return r;
}
int main() {
return func<double>();
}
317デフォルトの名無しさん
2022/02/28(月) 07:29:26.73ID:Zh+6zBsp >>316
俺はこの話題に関して初めて書き込んだ者だが
俺はこの話題に関して初めて書き込んだ者だが
318デフォルトの名無しさん
2022/02/28(月) 07:34:24.42ID:Od0J2fCm >>316
都合の良い例にしすぎだろ
都合の良い例にしすぎだろ
319デフォルトの名無しさん
2022/02/28(月) 07:43:08.18ID:EeqSDih1 反証は1つで十分w 具体例の1つも書けない人は黙ってようねw
320デフォルトの名無しさん
2022/02/28(月) 08:14:09.88ID:Od0J2fCm ああすまん、変化しない例を出してるつもりだと思ってた
そんなコードでも変化したりするのね
そんなコードでも変化したりするのね
321デフォルトの名無しさん
2022/02/28(月) 10:21:52.93ID:ftLJb++c 古文書には#defineは良くないってあったけど今のC++ってその辺り改善されたんですか?
323デフォルトの名無しさん
2022/02/28(月) 10:56:01.32ID:xzjNndYE324デフォルトの名無しさん
2022/02/28(月) 11:04:38.67ID:ftLJb++c >>323
他所からパクってきたコードですが、#defineはそのまま書き換えるだけだから以下や
#define SIX 1 + 5
#define NINE 8 + 1
int main(void)
{
printf( "What you get if you multiply six by nine: %d\n", SIX * NINE );
return 0;
}
以下の関数の呼び出しなどで意図しない挙動になったりとかです
#define SquareMulti(x, y) x * x * y
SquareMulti(++a, b)
他所からパクってきたコードですが、#defineはそのまま書き換えるだけだから以下や
#define SIX 1 + 5
#define NINE 8 + 1
int main(void)
{
printf( "What you get if you multiply six by nine: %d\n", SIX * NINE );
return 0;
}
以下の関数の呼び出しなどで意図しない挙動になったりとかです
#define SquareMulti(x, y) x * x * y
SquareMulti(++a, b)
325はちみつ餃子 ◆8X2XSCHEME
2022/02/28(月) 11:14:22.32ID:R6BwoFXD >>324
その程度なら inline や constexpr を活用するのが今は良い作法
その程度なら inline や constexpr を活用するのが今は良い作法
326デフォルトの名無しさん
2022/02/28(月) 11:19:01.97ID:xzjNndYE327デフォルトの名無しさん
2022/02/28(月) 11:20:49.97ID:+7QZaSxQ >>321
#defineじゃないとできない/面倒なパターンが減ったという意味ならある程度はマシになってる
<numeric>とか<source_location>とかconstexpr/constevalとか
#defineじゃないとできない/面倒なパターンが減ったという意味ならある程度はマシになってる
<numeric>とか<source_location>とかconstexpr/constevalとか
328デフォルトの名無しさん
2022/02/28(月) 11:24:50.52ID:s9ebK7Me >>321
#付いてるから、基本プリプロセッサ文だかんな
#付いてるから、基本プリプロセッサ文だかんな
329デフォルトの名無しさん
2022/02/28(月) 11:39:25.77ID:42wjdHim スコープ付きの#defineが欲しい時ってあるよね…w
330デフォルトの名無しさん
2022/02/28(月) 12:09:06.26ID:EeqSDih1 ねーよw
331デフォルトの名無しさん
2022/02/28(月) 12:16:38.60ID:WvOgTxGl #define NAMESPACE namespase
#define NS ns
NAMESPACE NS{
void f();
}
void g(){
NS::f();
}
このへんのコードをプリプロセスの段階で正しく解釈するのは無理なのがね
#pragma defines(push)
みたいのが言語標準になればいけるか?
#define NS ns
NAMESPACE NS{
void f();
}
void g(){
NS::f();
}
このへんのコードをプリプロセスの段階で正しく解釈するのは無理なのがね
#pragma defines(push)
みたいのが言語標準になればいけるか?
332デフォルトの名無しさん
2022/02/28(月) 12:32:49.89ID:EeqSDih1 馬鹿の妄想は放置して、マクロでないと困る例
#include <iostream>
#define PRINT_LOCATION() (::std::cout << __FILE__ ":" << __LINE__ << ":" << __PRETTY_FUNCTION__ << "\n")
namespace hoge {
void func() {
PRINT_LOCATION();
}
}
using namespace std;
using namespace hoge;
int main() {
PRINT_LOCATION();
func();
return 0;
}
#include <iostream>
#define PRINT_LOCATION() (::std::cout << __FILE__ ":" << __LINE__ << ":" << __PRETTY_FUNCTION__ << "\n")
namespace hoge {
void func() {
PRINT_LOCATION();
}
}
using namespace std;
using namespace hoge;
int main() {
PRINT_LOCATION();
func();
return 0;
}
333デフォルトの名無しさん
2022/02/28(月) 12:41:59.91ID:xzjNndYE 友達いなさそうだな
334デフォルトの名無しさん
2022/02/28(月) 12:49:02.69ID:EeqSDih1 そんなこと気になっちゃう程度の馬鹿よりは多そうだけど、多けりゃいいってもんでもないと思うぞw
335デフォルトの名無しさん
2022/02/28(月) 13:48:09.49ID:ftLJb++c 多くの回答ありがとうございます
やはり可能な限り#defineは避けた方が良さそうですね
ただ#defineでもできないことや、#defineにしかできないこともあるので変に毛嫌いせず勉強を進めてこうと思います
やはり可能な限り#defineは避けた方が良さそうですね
ただ#defineでもできないことや、#defineにしかできないこともあるので変に毛嫌いせず勉強を進めてこうと思います
336デフォルトの名無しさん
2022/02/28(月) 14:03:01.00ID:EeqSDih1 例外中の例外なので、毛嫌いして全く問題なく、勉強する必要も全くないw
337デフォルトの名無しさん
2022/02/28(月) 15:55:04.33ID:Yx2Q2Rjy Include Guard Macro以外の#defineは忘れてもいいと思う。
338デフォルトの名無しさん
2022/02/28(月) 17:13:33.60ID:HhKI/yF6 ほんそれ
一生ソロプレイかつCにしがみつくつもりなら構わないけど
そうじゃないなら基本的に使わないべき遺物
一生ソロプレイかつCにしがみつくつもりなら構わないけど
そうじゃないなら基本的に使わないべき遺物
339デフォルトの名無しさん
2022/02/28(月) 20:11:29.53ID:Zh+6zBsp ほぼ同じ演算子オーバーロードを延々と書く場合とかマクロでまとめていいと思うけどね
テンプレートではどうしようもないレベルのメタプログラミングの手段として未だに有効
テンプレートではどうしようもないレベルのメタプログラミングの手段として未だに有効
340デフォルトの名無しさん
2022/02/28(月) 20:17:53.65ID:xrBOKM6i むしろ、他言語にマクロ展開機能がないことが不満
341デフォルトの名無しさん
2022/02/28(月) 20:19:01.14ID:EeqSDih1 そうなる仕組みもどうかと思うけど、必要悪として採用するケースが「あってもいい」という程度だよ
342デフォルトの名無しさん
2022/02/28(月) 20:39:17.05ID:xzjNndYE343デフォルトの名無しさん
2022/02/28(月) 21:11:31.61ID:EeqSDih1 だよなじゃねーよw
本当にマクロでないとできないケースなのかすら怪しいw
本当にマクロでないとできないケースなのかすら怪しいw
344デフォルトの名無しさん
2022/02/28(月) 21:21:08.91ID:TawWBZkT345デフォルトの名無しさん
2022/02/28(月) 23:32:29.49ID:7SSxP2tw346デフォルトの名無しさん
2022/02/28(月) 23:58:07.07ID:EeqSDih1 ゴミのような文化を踏襲してしまった残念言語のRustさんのヘイトを上げるのはやめましょうw
347デフォルトの名無しさん
2022/03/01(火) 00:33:34.91ID:Sj28peWv C++使ってるおれすげーみたいな
348デフォルトの名無しさん
2022/03/01(火) 01:06:15.88ID:PkY5rkFL C++を使いこなせないから皆下流行語の修得を目指す
349デフォルトの名無しさん
2022/03/01(火) 06:11:28.76ID:qblu1Z+O350デフォルトの名無しさん
2022/03/01(火) 06:34:48.00ID:MT73K7Vw351デフォルトの名無しさん
2022/03/01(火) 06:35:21.34ID:MT73K7Vw352デフォルトの名無しさん
2022/03/01(火) 07:02:46.96ID:qblu1Z+O354デフォルトの名無しさん
2022/03/01(火) 09:06:42.29ID:cUOzOJ3p355デフォルトの名無しさん
2022/03/01(火) 10:19:23.90ID:Hv9eImco struct B{...}*bP;
struct D1 : public B{...} d1;
struct D2 : public B{...} d2;
bP = (...)? &d1 : &d2;
これって駄目なんですね
struct D1 : public B{...} d1;
struct D2 : public B{...} d2;
bP = (...)? &d1 : &d2;
これって駄目なんですね
356デフォルトの名無しさん
2022/03/01(火) 10:40:29.97ID:MQDieCXt357デフォルトの名無しさん
2022/03/01(火) 11:01:53.10ID:Hv9eImco なるほど
素直にif文にしておきます
素直にif文にしておきます
358デフォルトの名無しさん
2022/03/01(火) 11:08:34.73ID:cMGuQY9h つ static_cast<bP>(&d#)
359デフォルトの名無しさん
2022/03/01(火) 11:13:51.24ID:qblu1Z+O360デフォルトの名無しさん
2022/03/01(火) 11:14:23.15ID:qblu1Z+O rnd() & 1
は無視してくれw
は無視してくれw
361デフォルトの名無しさん
2022/03/01(火) 11:14:50.30ID:Hv9eImco ああ、それでいいんですね
ありがとうございます
ありがとうございます
362デフォルトの名無しさん
2022/03/01(火) 11:54:42.57ID:MT73K7Vw 今度はCに毒されていくC++スレw
プリプロセッサはincludeパス的に言語や標準ライブラリを結構意識したりしますw
プリプロセッサはincludeパス的に言語や標準ライブラリを結構意識したりしますw
363デフォルトの名無しさん
2022/03/01(火) 23:30:51.45ID:cUOzOJ3p >>355
そういうのはRustがすっきり実現していていい感じ
静的モノモーフィングでコンパイル時に解決させる方法と
動的ディスパッチで実行時に解決させる方法の2種類を選びつつ簡単かつ安全に記述できる
そういうのはRustがすっきり実現していていい感じ
静的モノモーフィングでコンパイル時に解決させる方法と
動的ディスパッチで実行時に解決させる方法の2種類を選びつつ簡単かつ安全に記述できる
364デフォルトの名無しさん
2022/03/02(水) 01:32:22.77ID:/wwlA8Tq なんでこんなとこにrust信者が湧いてるん?
365デフォルトの名無しさん
2022/03/02(水) 03:41:00.25ID:re9dUtRi C++のstatic_castで十分すっきりしてるし安全なんだがw
366デフォルトの名無しさん
2022/03/02(水) 03:51:26.38ID:S8+3WyDZ うむ
まあRustはトレイトを導入しているためもっとフレキシブルに機能毎に事実上のキャストができる点で先に進んでる感じ
まあRustはトレイトを導入しているためもっとフレキシブルに機能毎に事実上のキャストができる点で先に進んでる感じ
367デフォルトの名無しさん
2022/03/02(水) 04:16:03.37ID:re9dUtRi std::visitで十分じゃないの?
368デフォルトの名無しさん
2022/03/02(水) 06:05:07.28ID:+cCq037X >>364
メンタルはルビ基地と同じだから相手すんな
メンタルはルビ基地と同じだから相手すんな
369デフォルトの名無しさん
2022/03/02(水) 08:02:10.51ID:UQPkqsb3 >>364
スレ違い野郎はNG推奨
スレ違い野郎はNG推奨
370デフォルトの名無しさん
2022/03/02(水) 10:15:53.71ID:KGds3ROy RustはUnityで作られてるんだからC#スレ行けよ
371デフォルトの名無しさん
2022/03/03(木) 11:52:56.52ID:YmcISO0J 有名なライブラリのコード覗いて見るとC++でもマクロ結構使ってるよね
372デフォルトの名無しさん
2022/03/03(木) 12:21:01.59ID:aVzPtAzs まあそこは女性のウェストが50cmだと思ってるスペック厨のオタクと現実に生きて実用的なものを開発してる人の違いだね
373デフォルトの名無しさん
2022/03/03(木) 12:24:43.91ID:adLRB/+A 有名ライブラリこそマクロに頼らないとやってられんとこあるからな
コンパイル環境(gcc/clang/MSVC)のスイッチとか
C++バージョンのスイッチとか(#define CONSTEVAL20 consteval/constexpr)
ボイラープレートの簡略化はどれぐらいやってるかは知らんが
コンパイル環境(gcc/clang/MSVC)のスイッチとか
C++バージョンのスイッチとか(#define CONSTEVAL20 consteval/constexpr)
ボイラープレートの簡略化はどれぐらいやってるかは知らんが
374デフォルトの名無しさん
2022/03/03(木) 15:14:53.11ID:dDnSjvDO 条件コンパイルには#ifdefがいるね
375デフォルトの名無しさん
2022/03/03(木) 16:48:19.79ID:PsZF8bq4 文法ばかり勉強してコード書かないからマクロの必要性が見えないんだよ。
376デフォルトの名無しさん
2022/03/03(木) 18:39:02.62ID:c7Jb1Y/C ああ、マクロ不要論者は自分でライブラリ書いたことないというオチか
腑に落ちたわ
腑に落ちたわ
377デフォルトの名無しさん
2022/03/03(木) 19:24:38.63ID:hTxF5AaQ まともにコード書く量も質も足りない人にはマクロの弊害を認識できてないんだろうなw
インクルードガードなどの条件コンパイルはプリプロセスではあるものの、一般的なマクロ置換処理ではないw
インクルードガードなどの条件コンパイルはプリプロセスではあるものの、一般的なマクロ置換処理ではないw
378デフォルトの名無しさん
2022/03/03(木) 19:49:49.09ID:l1hFvrU8 本気でいってんの?このバカ
379デフォルトの名無しさん
2022/03/03(木) 20:05:07.59ID:hTxF5AaQ 単発IDで中身のない煽りだけの人が早速出現w
臆病すぎwwww
臆病すぎwwww
380デフォルトの名無しさん
2022/03/04(金) 05:56:44.52ID:1RB3fRbG > マクロ不要論者
誰? いたっけ、そんなやつ
誰? いたっけ、そんなやつ
381デフォルトの名無しさん
2022/03/04(金) 06:37:36.91ID:DqQFNqIa382デフォルトの名無しさん
2022/03/04(金) 06:43:28.40ID:1RB3fRbG ああ、あのキチか
相手すると馬鹿が伝染るからやめようぜ
相手すると馬鹿が伝染るからやめようぜ
383デフォルトの名無しさん
2022/03/04(金) 11:43:03.93ID:4zB49VIz まだいたのか臆病者w 答え教えてもらってもなお理解しない人に付ける薬はないよw
構ってちゃんやるなら別の板でやれ
構ってちゃんやるなら別の板でやれ
384デフォルトの名無しさん
2022/03/04(金) 20:47:43.90ID:TVZZL9aI コンパイル時にansiをunicodeに変換する簡単な方法あってある?
具体的にはmagic_enum::enum_namesで返ってくるstring_view配列をwchar_tとして貰いたいのだけど
具体的にはmagic_enum::enum_namesで返ってくるstring_view配列をwchar_tとして貰いたいのだけど
385デフォルトの名無しさん
2022/03/04(金) 20:55:24.70ID:4zB49VIz exe野郎は口を開く権利なしw
ソースコードのエンコーディングを指定するか、エスケープした文字列まで正しく変換したソースを使った上で、必要なキャストをするか、プロジェクト設定を使えw
ソースコードのエンコーディングを指定するか、エスケープした文字列まで正しく変換したソースを使った上で、必要なキャストをするか、プロジェクト設定を使えw
386デフォルトの名無しさん
2022/03/04(金) 20:58:03.36ID:nHKPE6Wj MSの教えどおりにマクロ使ってれば簡単なのにな。
387デフォルトの名無しさん
2022/03/04(金) 21:17:57.65ID:4zB49VIz そもそも言ってる内容が怪しいw ワイド文字の話とエンコーディングの話がごっちゃになってるw
388デフォルトの名無しさん
2022/03/04(金) 21:40:05.34ID:TVZZL9aI ansiをunicodeにエンコードしたいって意味なんだけど自分でテーブルでもつくらないとconstevalには無理?
それ以外に方法がないならライブラリいじることにするけど
それ以外に方法がないならライブラリいじることにするけど
389デフォルトの名無しさん
2022/03/04(金) 21:47:53.46ID:4zB49VIz 動くサンプルを載せてみろw
390デフォルトの名無しさん
2022/03/04(金) 21:55:46.03ID:cJZvpdpU ansiってなにを指すん?
391デフォルトの名無しさん
2022/03/04(金) 21:56:54.08ID:1RB3fRbG アメリカの国内規格
392デフォルトの名無しさん
2022/03/04(金) 22:00:02.02ID:4zB49VIz MS様のお庭ではローカルコードページくらいの意味だw
393デフォルトの名無しさん
2022/03/04(金) 22:05:54.66ID:TVZZL9aI >>390
日本語WindowsMSVCだと"あ"はansi(shift-jis)として{ 0x82, 0xA0 }になる
これをunicodeの0x3042にエンコードするって感じでconstexprに生成されたansiを変換していきたい
ライブラリ内部では__FUNCSIG__等を利用して静的にenumから文字を生成してるからL#でもして端からunicodeを生成すれば良いんだけどその場合は他にも色々と変えないとダメだからそれは最終手段にしたい
日本語WindowsMSVCだと"あ"はansi(shift-jis)として{ 0x82, 0xA0 }になる
これをunicodeの0x3042にエンコードするって感じでconstexprに生成されたansiを変換していきたい
ライブラリ内部では__FUNCSIG__等を利用して静的にenumから文字を生成してるからL#でもして端からunicodeを生成すれば良いんだけどその場合は他にも色々と変えないとダメだからそれは最終手段にしたい
394デフォルトの名無しさん
2022/03/04(金) 22:07:55.03ID:4zB49VIz >>393
ごたくはいいから動くサンプルを載せてみろw
ごたくはいいから動くサンプルを載せてみろw
395デフォルトの名無しさん
2022/03/04(金) 22:12:15.56ID:TVZZL9aI >>394
動くサンプルって何?
動く見通しついてないからこうして質問してるんだけどとりあえずansi版でもいいからサンプル見たいってことか?
enum class AIUEO { あ, い, う, え, お };
void print(){
constexpr auto texts = constexpr auto texts = magic_enum::enum_nameptrs<AIUEO>();
for (auto& str : texts) puts(str.data()); //ほんとはここを_putws的なunicodeを受け取るものに投げたい
}
動くサンプルって何?
動く見通しついてないからこうして質問してるんだけどとりあえずansi版でもいいからサンプル見たいってことか?
enum class AIUEO { あ, い, う, え, お };
void print(){
constexpr auto texts = constexpr auto texts = magic_enum::enum_nameptrs<AIUEO>();
for (auto& str : texts) puts(str.data()); //ほんとはここを_putws的なunicodeを受け取るものに投げたい
}
396デフォルトの名無しさん
2022/03/04(金) 22:14:02.23ID:TVZZL9aI 今即席でスマホのブラウザで書いたからconstexpr auto texts = constexpr auto texts = のところミスってるけどスルーしといて
397デフォルトの名無しさん
2022/03/04(金) 22:14:34.14ID:4zB49VIz main関数がないので動かんな
magic_enumもないので動かんな
これがお前の「動く」サンプルなのか???w
magic_enumもないので動かんな
これがお前の「動く」サンプルなのか???w
398デフォルトの名無しさん
2022/03/04(金) 22:16:37.08ID:aciaBeWI 出たよサンプルないと何もできないおじさん
399蟻人間 ◆T6xkBnTXz7B0
2022/03/04(金) 22:33:11.96ID:08B25WN2400デフォルトの名無しさん
2022/03/04(金) 22:42:39.88ID:rsYyHWe+ constexpr std::string s="test";
constexpr std::wstring ws=L"test";
こいつらが通らない時点で俺は諦めた
最終的にほしい型はstd::wstring_viewだろうけど
std::array<wchar_t, size>ならなんとかなるかもしれん
constexpr std::wstring ws=L"test";
こいつらが通らない時点で俺は諦めた
最終的にほしい型はstd::wstring_viewだろうけど
std::array<wchar_t, size>ならなんとかなるかもしれん
401デフォルトの名無しさん
2022/03/04(金) 22:52:27.11ID:nHKPE6Wj そもそもウクライナに寄付しろとか言う前に他民族、多言語に対応しろとmagic_enum作者にメールすべき。
402デフォルトの名無しさん
2022/03/04(金) 22:57:11.67ID:4zB49VIz 違うだろw こいつが動かせてないだけだろwwww
403デフォルトの名無しさん
2022/03/04(金) 23:05:31.04ID:TVZZL9aI >>399
まさにnameofと同じ作者のものだけど、やっぱ__FUNCSIG__の部分からLつけていくしかなさそうだな
まさにnameofと同じ作者のものだけど、やっぱ__FUNCSIG__の部分からLつけていくしかなさそうだな
404デフォルトの名無しさん
2022/03/05(土) 00:24:50.51ID:AqnMHu7I まだ動かせないんかいw
405蟻人間 ◆T6xkBnTXz7B0
2022/03/05(土) 00:27:03.13ID:z+1i+qt8 L##
406デフォルトの名無しさん
2022/03/05(土) 00:45:32.11ID:E2o+9AFP C##
407デフォルトの名無しさん
2022/03/05(土) 01:02:31.13ID:AqnMHu7I 一応言っておくと__FUNCSIG__はリテラルじゃなくてシンボルだぞw
>type hoge.cpp
hoge(__FUNCSIG__);
>cl /P /std:c++17 hoge.cpp
Microsoft(R) C/C++ Optimizing Compiler Version 19.28.29912 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
hoge.cpp
>type hoge.i
#line 1 "hoge.cpp"
hoge(__FUNCSIG__);
>
なんというか...ロクに動かせもしないアホが一足飛びに余計なことして普通なら瞬間に出来ることを他人様に何度も何度も聞いて回るというねw
>type hoge.cpp
hoge(__FUNCSIG__);
>cl /P /std:c++17 hoge.cpp
Microsoft(R) C/C++ Optimizing Compiler Version 19.28.29912 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
hoge.cpp
>type hoge.i
#line 1 "hoge.cpp"
hoge(__FUNCSIG__);
>
なんというか...ロクに動かせもしないアホが一足飛びに余計なことして普通なら瞬間に出来ることを他人様に何度も何度も聞いて回るというねw
408デフォルトの名無しさん
2022/03/05(土) 01:13:20.54ID:rFZZ/Cia >>407
>__FUNCSIG__ 外側の関数のシグネチャを含む文字列リテラルとして定義されます。
直接Lは付けられないが#define L(x) L##xを使えばちゃんとワイド文字リテラルとなる
ついでに言っておくとVSのこの手のマクロはANSIではなくUTF8だったと思うぞ(固定ではなくソースコードの文字コード依存の可能性あり)
>__FUNCSIG__ 外側の関数のシグネチャを含む文字列リテラルとして定義されます。
直接Lは付けられないが#define L(x) L##xを使えばちゃんとワイド文字リテラルとなる
ついでに言っておくとVSのこの手のマクロはANSIではなくUTF8だったと思うぞ(固定ではなくソースコードの文字コード依存の可能性あり)
409デフォルトの名無しさん
2022/03/05(土) 01:23:21.22ID:AqnMHu7I utf8は正解なんだが、リテラルは不正解w
https://godbolt.org/z/4G1vvhrEc
コンパイラがリテラルに置き換えるわけだけど、プリプロセッサではシンボルのままなので置換されると分からなくなるw
https://godbolt.org/z/4G1vvhrEc
コンパイラがリテラルに置き換えるわけだけど、プリプロセッサではシンボルのままなので置換されると分からなくなるw
410デフォルトの名無しさん
2022/03/05(土) 01:25:23.87ID:AZBfqXsc MSVCの場合 /execution-charset で指定した文字コード(デフォルトはsjis=cp932)になるんじゃなかったかな
411デフォルトの名無しさん
2022/03/05(土) 01:37:21.06ID:AqnMHu7I 未指定時はソースと同じらしい
https://docs.microsoft.com/ja-jp/cpp/build/reference/execution-charset-set-execution-character-set?view=msvc-170
でutf-8になってたようだな
https://docs.microsoft.com/ja-jp/cpp/build/reference/execution-charset-set-execution-character-set?view=msvc-170
でutf-8になってたようだな
412デフォルトの名無しさん
2022/03/05(土) 01:47:40.22ID:AqnMHu7I ただし、__FUNCSIG__はそういうのに影響されずutf-8っぽい
普通のリテラルはちゃんとシフトJISで出るけど、__FUNCSIG__はutf8だな
普通のリテラルはちゃんとシフトJISで出るけど、__FUNCSIG__はutf8だな
413デフォルトの名無しさん
2022/03/05(土) 01:49:42.38ID:AZBfqXsc ややこしいな、そういうのが一番困るんだよねw
414デフォルトの名無しさん
2022/03/05(土) 01:52:53.77ID:AqnMHu7I MSにありがちw ただシンボルに日本語とかキチガイしかしないからw
415デフォルトの名無しさん
2022/03/07(月) 06:57:02.25ID:RhJCMKRm >>414
だって規格で認めてるじゃん
ISO/IEC 14882:2020(E)
12.8 User-defined literals [over.literal]
8 [Example 1:
template <char...> double operator "" _\u03C0(); // OK: UCN for lowercase pi
だって規格で認めてるじゃん
ISO/IEC 14882:2020(E)
12.8 User-defined literals [over.literal]
8 [Example 1:
template <char...> double operator "" _\u03C0(); // OK: UCN for lowercase pi
416デフォルトの名無しさん
2022/03/07(月) 07:14:15.82ID:2Lq6XwwP 引用が仕様ですらないし、引用元もないし、、、挙げ句内容的に__FUNCSIG__はシグニチャ付きの関数名がリテラルとして入るだけだぞw
その関数名に日本語使うのキチガイだけだろw
リテラル調べてどうするんだよw
その関数名に日本語使うのキチガイだけだろw
リテラル調べてどうするんだよw
417デフォルトの名無しさん
2022/03/07(月) 07:41:36.14ID:RhJCMKRm 関数名の一部ってことわかんない?
418デフォルトの名無しさん
2022/03/07(月) 12:31:32.96ID:2Lq6XwwP 君に何かを理解してもらうのは諦めるよ
俺の力では無理
俺の力では無理
419デフォルトの名無しさん
2022/03/07(月) 12:38:21.73ID:RhJCMKRm 捨て台詞にしてももうちっとくらいマシなこと言えねえの?
420デフォルトの名無しさん
2022/03/07(月) 20:42:37.07ID:padO6mVy421デフォルトの名無しさん
2022/03/07(月) 21:21:28.85ID:yDdB4j8G 規格上はもうUnicodeの文字はだいたい使えるぞ
移植性やコーディングスタイルや常識の観点での良し悪しは別にして
移植性やコーディングスタイルや常識の観点での良し悪しは別にして
422デフォルトの名無しさん
2022/03/07(月) 21:29:08.28ID:ivurCOzA >>420
俺抜きでレスバしてて恐縮だが
enum class AIUEO { あ, い, う, え, お };
const wchar_t* aiueo[] = { L"あ", L"い", L"う", L"え", L"お" };
enumに合わせてこんな感じで文字列も欲しいってこと
utf8からutf16へのエンコードは割と簡単に実装出来るという事が判明して、200行くらいかかったけどconstevalなu8_to_u16関数作ってmagic_enum::detail::n部分からwide版作っていくことで解決できた
俺抜きでレスバしてて恐縮だが
enum class AIUEO { あ, い, う, え, お };
const wchar_t* aiueo[] = { L"あ", L"い", L"う", L"え", L"お" };
enumに合わせてこんな感じで文字列も欲しいってこと
utf8からutf16へのエンコードは割と簡単に実装出来るという事が判明して、200行くらいかかったけどconstevalなu8_to_u16関数作ってmagic_enum::detail::n部分からwide版作っていくことで解決できた
423デフォルトの名無しさん
2022/03/07(月) 21:34:05.04ID:yDdB4j8G ええやんプルリクしといてよ
424デフォルトの名無しさん
2022/03/07(月) 21:39:53.01ID:ivurCOzA いいけど既に同じようなissue出してる人いて「constexprに文字列返されるので別の形にしたいならそっちで自由にやって」みたいな感じだったからな
425デフォルトの名無しさん
2022/03/07(月) 21:55:07.26ID:uQvWeikk これだから白人は嫌なんだよね。
426デフォルトの名無しさん
2022/03/07(月) 21:58:54.49ID:2Lq6XwwP 昔からキチガイがシンボルに日本語使ってたりしたし、規格仕様の該当項目も挙げてないのに可能というのはおかしく
またソースコードや出力設定が何かに依るのが正しい可能性だって普通にある
またutf8というかunicodeとそのエンコーディング形式は簡単な計算式で可換
200行あればvc++固有ならmagic_enumの使用機能全て載せられるし、そもそも不要
そもそも情報小出しな時点、puts使ったりしてる時点、vc++を好き好んで使ってる時点でもうね・・・
挙げ句説明なくても5分もあれば気づくことに何日かかってるのかって人のプルリクが通るわけないだろw
またソースコードや出力設定が何かに依るのが正しい可能性だって普通にある
またutf8というかunicodeとそのエンコーディング形式は簡単な計算式で可換
200行あればvc++固有ならmagic_enumの使用機能全て載せられるし、そもそも不要
そもそも情報小出しな時点、puts使ったりしてる時点、vc++を好き好んで使ってる時点でもうね・・・
挙げ句説明なくても5分もあれば気づくことに何日かかってるのかって人のプルリクが通るわけないだろw
427デフォルトの名無しさん
2022/03/07(月) 23:18:01.19ID:ivurCOzA >>425
まぁ面倒だからってよりこのスレにもちらほらいるようにASCII文字だけを想定してて
それだけなら1文字づつキャストするだけで簡単に出来るだろうしusing string_view = std::string_viewの所を上書きできるようにしておくから自前でやってって感じだな
まぁ面倒だからってよりこのスレにもちらほらいるようにASCII文字だけを想定してて
それだけなら1文字づつキャストするだけで簡単に出来るだろうしusing string_view = std::string_viewの所を上書きできるようにしておくから自前でやってって感じだな
428デフォルトの名無しさん
2022/03/07(月) 23:23:59.38ID:2Lq6XwwP 「ASCII文字だけを想定してて」wwwww
429デフォルトの名無しさん
2022/03/07(月) 23:29:43.95ID:m7T5bZFc マクロ騒動で脳が破壊されてしまった子がいるね
430デフォルトの名無しさん
2022/03/07(月) 23:46:00.91ID:47rZ/1iq SEXの時は動かずにマグロになってしまったようですね
やっぱりロボトミー手術してよかったですね
やっぱりロボトミー手術してよかったですね
431デフォルトの名無しさん
2022/03/08(火) 21:56:42.93ID:A5UfccGR432デフォルトの名無しさん
2022/03/08(火) 22:58:13.81ID:2Ie6O3y5 はいはい、一人何役するのかねw
433デフォルトの名無しさん
2022/03/08(火) 23:19:40.19ID:lL5N1LvC >>432
我々ギフハブがいつも見ているぞ
我々ギフハブがいつも見ているぞ
434デフォルトの名無しさん
2022/03/10(木) 18:10:06.68ID:USdHjBxA テンプレートの可変長引数って一般的な実装だとスタックに積まれるの?
てことはあんまり大きいデータは渡せない?
てことはあんまり大きいデータは渡せない?
435デフォルトの名無しさん
2022/03/10(木) 18:17:21.80ID:6o5PvaaD template-parameter-packは実行環境では普通の引数と全く同じだ
翻訳中の解釈でどんな「普通の引数」にするか判断してるだけ
翻訳中の解釈でどんな「普通の引数」にするか判断してるだけ
436デフォルトの名無しさん
2022/03/10(木) 21:39:59.02ID:xy5Q90JZ template<class...T>void f(T...t){}
f(1,2,3,4); で実体化されるf<int,int,int,int>は、
void f(int,int,int,int){}
と同じ扱いをされる。
普通の関数と変わらんよ。
たぶん気にしてるのはこんな感じの再帰実装だろう
template<class First>auto sum(First first){return first;}
template<class First, class Second, class...Rest>
auto sum(First first, Second second, Rest...rest){
return first+sum(second, rest...);
}
sum(1,2,3,4,5,6,7,8,9);
最適化なしコンパイルだとクソ真面目に45*sizeof(int)と9段分のリターンアドレスとか諸々をスタックに積む
最適化ありコンパイルなら大体インライン展開されるからさほど大事にはならない
f(1,2,3,4); で実体化されるf<int,int,int,int>は、
void f(int,int,int,int){}
と同じ扱いをされる。
普通の関数と変わらんよ。
たぶん気にしてるのはこんな感じの再帰実装だろう
template<class First>auto sum(First first){return first;}
template<class First, class Second, class...Rest>
auto sum(First first, Second second, Rest...rest){
return first+sum(second, rest...);
}
sum(1,2,3,4,5,6,7,8,9);
最適化なしコンパイルだとクソ真面目に45*sizeof(int)と9段分のリターンアドレスとか諸々をスタックに積む
最適化ありコンパイルなら大体インライン展開されるからさほど大事にはならない
437デフォルトの名無しさん
2022/03/11(金) 07:47:35.25ID:GmBPyzdt #include <utility>
template<class First>auto sum(First first){return first;}
template<class First, class... Rest>
auto sum(First first, Rest... rest){
return first+sum(rest...);
}
template <class T, T... Seq>
auto sum_seq(std::integer_sequence<T, Seq...>) {
return sum(Seq...);
}
int main() {
return sum_seq(std::make_index_sequence<100>());
}
こんな感じになるよ
https://godbolt.org/z/obj4ra671
途中経過のテンプレートも全て関数実体として展開される
最適化すると、この例だと全部定数で計算されるけど
template<class First>auto sum(First first){return first;}
template<class First, class... Rest>
auto sum(First first, Rest... rest){
return first+sum(rest...);
}
template <class T, T... Seq>
auto sum_seq(std::integer_sequence<T, Seq...>) {
return sum(Seq...);
}
int main() {
return sum_seq(std::make_index_sequence<100>());
}
こんな感じになるよ
https://godbolt.org/z/obj4ra671
途中経過のテンプレートも全て関数実体として展開される
最適化すると、この例だと全部定数で計算されるけど
438デフォルトの名無しさん
2022/03/11(金) 08:12:59.76ID:GmBPyzdt 流石にちょっと説明追加しておきます。
sum_seq(std::make_index_sequence<100>())の部分は
sum(0,1,2,3,...,97,98,99)と同じです。
sum(0,1,2,3,...,97,98,99)は
sum(0) + sum(1,2,3,...,97,98,99)で計算されます。第2項の
sum(1,2,3,...,97,98,99)は
sum(1) + sum(2,3,...,97,98,99)で計算されます。第2項の
sum(2,3,...,97,98,99)は
...
sum(98,99)は
sum(98) + sum(99)で計算されます。
つまりすごい再起的に呼び出してバカ正直に壮絶な計算をするため、スタック消費も大きいということ。
sum_seq(std::make_index_sequence<100>())の部分は
sum(0,1,2,3,...,97,98,99)と同じです。
sum(0,1,2,3,...,97,98,99)は
sum(0) + sum(1,2,3,...,97,98,99)で計算されます。第2項の
sum(1,2,3,...,97,98,99)は
sum(1) + sum(2,3,...,97,98,99)で計算されます。第2項の
sum(2,3,...,97,98,99)は
...
sum(98,99)は
sum(98) + sum(99)で計算されます。
つまりすごい再起的に呼び出してバカ正直に壮絶な計算をするため、スタック消費も大きいということ。
439デフォルトの名無しさん
2022/03/11(金) 08:30:00.26ID:bj9xq9MP おれおれtemplateの例ですね。
440デフォルトの名無しさん
2022/03/11(金) 11:44:15.06ID:yxfxX1kD 普通はテンプレつかった可変引数でも、イニシャライザでforで回して足して終わりっしょ。
なぜ自分で再帰にして書くのやら。
なぜ自分で再帰にして書くのやら。
441デフォルトの名無しさん
2022/03/11(金) 12:14:25.50ID:GmBPyzdt >>440
一般には可変長テンプレート引数の型が一律とは限らないので
一般には可変長テンプレート引数の型が一律とは限らないので
442デフォルトの名無しさん
2022/03/11(金) 12:45:09.09ID:FGXUCKCr443デフォルトの名無しさん
2022/03/11(金) 19:55:16.89ID:XC1WHC10 constexprでやればいいじゃん
444デフォルトの名無しさん
2022/03/11(金) 19:58:15.85ID:bj9xq9MP なんでもtemplateにしたい病なんですよ。プロジェクトで一番迷惑なタイプです。
おれおれtemplateは可読性、保守性が一気に落ちるので勘弁してください。
おれおれtemplateは可読性、保守性が一気に落ちるので勘弁してください。
445デフォルトの名無しさん
2022/03/11(金) 20:09:30.59ID:rOwnBpGX 読む方は溜まったもんじゃないが書くのも実行速度もなんだかんだテンプレートが一番早いんで…
446デフォルトの名無しさん
2022/03/11(金) 21:26:30.13ID:FGXUCKCr >>444
純コンパイラ方式の言語を使ってるのに
中間コードを使わにゃならんところが出てくると
残念な気持ちにならん?
もっと極端に言うとアセンブラからBASICやBATを呼び出すようなこと
人それぞれで何も感じない人っているのかね
純コンパイラ方式の言語を使ってるのに
中間コードを使わにゃならんところが出てくると
残念な気持ちにならん?
もっと極端に言うとアセンブラからBASICやBATを呼び出すようなこと
人それぞれで何も感じない人っているのかね
447デフォルトの名無しさん
2022/03/11(金) 22:03:21.13ID:GmBPyzdt 例えばさっきのシーケンスをランダムな数字をその場で生成みたいな感じにすると、
#include <random>
#include <iostream>
#include <utility>
using namespace std;
template<class First>auto sum(First first){return first;}
template<class First, class... Rest> auto sum(First first, Rest... rest){return first+sum(rest...);}
template<class... Args> auto print_and_sum(Args... args) {
for (auto e: {args...}) cout << e << endl; // ココ
return sum(args...);
}
template <typename F, size_t... Seq> auto gen_and_print_and_sum_impl(F func, index_sequence<Seq...> ) {
return print_and_sum(func(Seq)...);
}
int main() {
random_device seed_gen;
mt19937 engine(seed_gen());
const size_t n = 3;
cout << gen_and_print_and_sum_impl(
[&](size_t i){ return engine();},
std::make_index_sequence<n>{}) << endl;
return 0;
}
こんな感じになるけど、genとprintとsumを分けたいとなるとtupleにしたくなって、templateでparameter packとtupleを行き来することになり、結構煩雑になる気はする
今は分けずに初期化リストにぶち込んで誤魔化してるけど…
こういうのも分けてtemplateにする?
#include <random>
#include <iostream>
#include <utility>
using namespace std;
template<class First>auto sum(First first){return first;}
template<class First, class... Rest> auto sum(First first, Rest... rest){return first+sum(rest...);}
template<class... Args> auto print_and_sum(Args... args) {
for (auto e: {args...}) cout << e << endl; // ココ
return sum(args...);
}
template <typename F, size_t... Seq> auto gen_and_print_and_sum_impl(F func, index_sequence<Seq...> ) {
return print_and_sum(func(Seq)...);
}
int main() {
random_device seed_gen;
mt19937 engine(seed_gen());
const size_t n = 3;
cout << gen_and_print_and_sum_impl(
[&](size_t i){ return engine();},
std::make_index_sequence<n>{}) << endl;
return 0;
}
こんな感じになるけど、genとprintとsumを分けたいとなるとtupleにしたくなって、templateでparameter packとtupleを行き来することになり、結構煩雑になる気はする
今は分けずに初期化リストにぶち込んで誤魔化してるけど…
こういうのも分けてtemplateにする?
448デフォルトの名無しさん
2022/03/11(金) 22:03:23.71ID:bj9xq9MP449デフォルトの名無しさん
2022/03/11(金) 22:52:13.11ID:GmBPyzdt ちなみに分けてテンプレートにしてみた。もう1レスに収まらないので消えたらごめんw
https://godbolt.org/z/YoxG7b4ro
https://godbolt.org/z/YoxG7b4ro
450デフォルトの名無しさん
2022/03/11(金) 23:14:03.97ID:GmBPyzdt #include <random>
#include <iostream>
#include <tuple>
using namespace std; // 余計なコード消したらギリギリ入ったw
template<class First>auto sum(First first){return first;}
template<class First, class... Rest> auto sum(First first, Rest... rest){return first+sum(rest...);}
template<typename T, size_t... Seq>
auto sum_tpl_impl(const T& tpl, index_sequence<Seq...>) {return sum(get<Seq>(tpl)...);}
template<typename... Types> auto sum_tpl(const tuple<Types...>& tpl) {
return sum_tpl_impl(tpl, make_index_sequence<tuple_size<tuple<Types...>>{}>{});
}
template <typename T, typename F, T... Seq> auto gen_impl(F func, index_sequence<Seq...>) {
return make_tuple(func(Seq)...);
}
template <size_t N, typename F> auto gen(F func) {
return gen_impl<decltype((func)(0))>(func, make_index_sequence<N>{});
}
template <typename T, size_t... Seq> void print_impl(const T& tpl, index_sequence<Seq...>) {
for (auto e: {get<Seq>(tpl)...}) cout << e << endl;
}
template <typename T> void print(const T& tpl) {
print_impl(tpl, make_index_sequence<tuple_size<T>{}>{});
}
int main() {
random_device seed_gen;
mt19937 engine(seed_gen());
const size_t n = 3;
const auto tpl = gen<n>([&](size_t i){ return engine();});
print(tpl);
cout << sum_tpl(tpl) << endl;
return 0;
}
#include <iostream>
#include <tuple>
using namespace std; // 余計なコード消したらギリギリ入ったw
template<class First>auto sum(First first){return first;}
template<class First, class... Rest> auto sum(First first, Rest... rest){return first+sum(rest...);}
template<typename T, size_t... Seq>
auto sum_tpl_impl(const T& tpl, index_sequence<Seq...>) {return sum(get<Seq>(tpl)...);}
template<typename... Types> auto sum_tpl(const tuple<Types...>& tpl) {
return sum_tpl_impl(tpl, make_index_sequence<tuple_size<tuple<Types...>>{}>{});
}
template <typename T, typename F, T... Seq> auto gen_impl(F func, index_sequence<Seq...>) {
return make_tuple(func(Seq)...);
}
template <size_t N, typename F> auto gen(F func) {
return gen_impl<decltype((func)(0))>(func, make_index_sequence<N>{});
}
template <typename T, size_t... Seq> void print_impl(const T& tpl, index_sequence<Seq...>) {
for (auto e: {get<Seq>(tpl)...}) cout << e << endl;
}
template <typename T> void print(const T& tpl) {
print_impl(tpl, make_index_sequence<tuple_size<T>{}>{});
}
int main() {
random_device seed_gen;
mt19937 engine(seed_gen());
const size_t n = 3;
const auto tpl = gen<n>([&](size_t i){ return engine();});
print(tpl);
cout << sum_tpl(tpl) << endl;
return 0;
}
451デフォルトの名無しさん
2022/03/12(土) 13:11:11.84ID:uDPm4ane 大学で下記のようなSTLアルゴリズムの課題が出たのですが、全然わからないです
Hogeというstructがあったときに、
class HogeCollection {
public:
void display(ostream& os) const;
friend ostream& operator << (ostream& os, const Hoge& hoge);
private:
vector<Hoge> m_hoges;
};
display関数でm_hogesのすべてのHogeに対して os <<を呼び出し出力させなさい。
ただしforやwhileなどの手動ループを使用しないこと。
Hogeというstructがあったときに、
class HogeCollection {
public:
void display(ostream& os) const;
friend ostream& operator << (ostream& os, const Hoge& hoge);
private:
vector<Hoge> m_hoges;
};
display関数でm_hogesのすべてのHogeに対して os <<を呼び出し出力させなさい。
ただしforやwhileなどの手動ループを使用しないこと。
452デフォルトの名無しさん
2022/03/12(土) 13:12:32.40ID:aEfI8PjB >>450
ちょっとバグってたので修正
template <typename F, size_t... Seq> auto gen_impl(F func, index_sequence<Seq...>) {
return make_tuple(func(Seq)...);
}
template <size_t N, typename F> auto gen(F func) {
return gen_impl(func, make_index_sequence<N>{});
}
ちょっとバグってたので修正
template <typename F, size_t... Seq> auto gen_impl(F func, index_sequence<Seq...>) {
return make_tuple(func(Seq)...);
}
template <size_t N, typename F> auto gen(F func) {
return gen_impl(func, make_index_sequence<N>{});
}
453デフォルトの名無しさん
2022/03/12(土) 13:14:20.70ID:aEfI8PjB >>451
言われた通りにやればいいやん
言われた通りにやればいいやん
455デフォルトの名無しさん
2022/03/12(土) 13:21:05.85ID:45uBSPYW 「STLアルゴリズム」の課題だからSTL使えばいいんだもんな…
自分でアルゴリズム実装しろって課題だったらちょっと面倒だが
自分でアルゴリズム実装しろって課題だったらちょっと面倒だが
456デフォルトの名無しさん
2022/03/12(土) 13:21:47.65ID:uDPm4ane457デフォルトの名無しさん
2022/03/12(土) 13:55:39.46ID:uDPm4ane 度々すみません。
display関数を書いたのですが、VS2019でコンパイルエラーになります。
void HogeCollection::display(ostream& out) const
{
std::for_each(m_hoges.begin(), m_hoges.end(), [](const Hoge& hoge){ out << hoge; });
}
error C3493: 既定のキャプチャ モードが指定されていないため、'out' を暗黙的にキャプチャできません
display関数を書いたのですが、VS2019でコンパイルエラーになります。
void HogeCollection::display(ostream& out) const
{
std::for_each(m_hoges.begin(), m_hoges.end(), [](const Hoge& hoge){ out << hoge; });
}
error C3493: 既定のキャプチャ モードが指定されていないため、'out' を暗黙的にキャプチャできません
458デフォルトの名無しさん
2022/03/12(土) 14:02:30.95ID:9rXKBdgd キャプチャモードを指定してあげれば…
459デフォルトの名無しさん
2022/03/12(土) 14:09:52.70ID:uDPm4ane460デフォルトの名無しさん
2022/03/12(土) 21:02:47.42ID:uDPm4ane もう1つ、STLの問題がわからないので、質問させてください。
>>451のHogeCollectionに以下のようなメンバ関数があるとします。
void sort_by_key(const string& key)
{
if (key == "a") (Hogeのメンバ変数 m_aでソート);
else if (key == "b") (Hogeのメンバ変数 m_bでソート);
}
keyの値が"a" か "b"以外のときはエラーにしたい場合に、
実行時エラーでなくコンパイルエラーにするには、
この関数をどのように再設計すればよいでしょうか。
>>451のHogeCollectionに以下のようなメンバ関数があるとします。
void sort_by_key(const string& key)
{
if (key == "a") (Hogeのメンバ変数 m_aでソート);
else if (key == "b") (Hogeのメンバ変数 m_bでソート);
}
keyの値が"a" か "b"以外のときはエラーにしたい場合に、
実行時エラーでなくコンパイルエラーにするには、
この関数をどのように再設計すればよいでしょうか。
461デフォルトの名無しさん
2022/03/12(土) 21:08:31.31ID:yBTVs/aF keyの値はコンパイル時に決まるん?
462デフォルトの名無しさん
2022/03/12(土) 21:49:16.97ID:uDPm4ane463デフォルトの名無しさん
2022/03/12(土) 22:30:59.53ID:olrB42jq >>462
コンパイル時にkeyを見てチェックするという縛りなら、実行時になるまでkeyがわからない状態にはできない。
雑にやってしまうならこうなる。
真面目にやるならフィールドへのポインタをテンプレート引数にすることになると思う
template<char key>
void sort_by_key()
{
if constexpr (key == 'a') (Hogeのメンバ変数 m_aでソート);
else if constexpr (key == 'b') (Hogeのメンバ変数 m_bでソート);
else throw std::invalid_argument();
}
コンパイル時にkeyを見てチェックするという縛りなら、実行時になるまでkeyがわからない状態にはできない。
雑にやってしまうならこうなる。
真面目にやるならフィールドへのポインタをテンプレート引数にすることになると思う
template<char key>
void sort_by_key()
{
if constexpr (key == 'a') (Hogeのメンバ変数 m_aでソート);
else if constexpr (key == 'b') (Hogeのメンバ変数 m_bでソート);
else throw std::invalid_argument();
}
464デフォルトの名無しさん
2022/03/12(土) 22:46:39.28ID:uDPm4ane465デフォルトの名無しさん
2022/03/13(日) 18:52:37.38ID:mTtq0Uph ポインタとか文字列の勉強をしていてよくわからなくなってしまいました
char* test(char* &s){
char* ans=“B”;
s[0]=‘C’;
s=ans;
return ans;
}
int main(int argc,char *argv[]){
char s1[]=“A”;
char* s2=s1;
#if 1
cout<<s2;
cout<<test(s2);
cout<<s2;
#else
cout<<s2<<test(s2)<<s2;
#endif
return 0;
}
上のようなものを動かす時、#if 1のときはABBと表示されて、#elseにするとBBCと表示されます
#elseのように一行にまとめた時に何が起こっているのかよくわからないので教えていただけると嬉しいです
よろしくお願いします
char* test(char* &s){
char* ans=“B”;
s[0]=‘C’;
s=ans;
return ans;
}
int main(int argc,char *argv[]){
char s1[]=“A”;
char* s2=s1;
#if 1
cout<<s2;
cout<<test(s2);
cout<<s2;
#else
cout<<s2<<test(s2)<<s2;
#endif
return 0;
}
上のようなものを動かす時、#if 1のときはABBと表示されて、#elseにするとBBCと表示されます
#elseのように一行にまとめた時に何が起こっているのかよくわからないので教えていただけると嬉しいです
よろしくお願いします
466デフォルトの名無しさん
2022/03/13(日) 18:56:08.61ID:wqc4hozV ポインタじゃなくて評価順の問題なのはわかるが
何が起きてるのかは俺もようわからん
何が起きてるのかは俺もようわからん
467デフォルトの名無しさん
2022/03/13(日) 19:00:28.93ID:wF3w3WV7 char*&なんて20年C++プログラマやってて一度も使ったことないわ…
どういうときに必要になるん?
どういうときに必要になるん?
468デフォルトの名無しさん
2022/03/13(日) 19:02:39.85ID:mTtq0Uph 必要ないとは思うんですけど、理解を確かめるために色々試していたって感じです
469デフォルトの名無しさん
2022/03/13(日) 19:02:42.19ID:uIbezUFD >>467
おっちゃんやん
おっちゃんやん
470デフォルトの名無しさん
2022/03/13(日) 19:05:39.12ID:wqc4hozV あーわかったけど説明めんどくさいな
とりあえず、if 1では1行ずつ評価(今の場合表示と読み替えても良い)が行われてるが
2行目の場合、評価(表示)の前に途中で関数が実行されて、値が書き換えられている、とだけ
とりあえず、if 1では1行ずつ評価(今の場合表示と読み替えても良い)が行われてるが
2行目の場合、評価(表示)の前に途中で関数が実行されて、値が書き換えられている、とだけ
471デフォルトの名無しさん
2022/03/13(日) 19:06:08.61ID:e39Fa4ck コレ質問してるのもおっちゃん臭いんだよな
いつもVC++だし、MFCみたいな書き方するし
いつもVC++だし、MFCみたいな書き方するし
472デフォルトの名無しさん
2022/03/13(日) 19:06:22.60ID:wqc4hozV 誤 2行目の場合→正 elseの場合
473デフォルトの名無しさん
2022/03/13(日) 19:12:14.63ID:wF3w3WV7 >>469
おう、最近白髪が気になってきた
おう、最近白髪が気になってきた
474デフォルトの名無しさん
2022/03/13(日) 19:20:55.04ID:e39Fa4ck そして答えてるのも同じおっちゃんw
475デフォルトの名無しさん
2022/03/13(日) 19:22:15.18ID:e39Fa4ck そもそもそんな怪しいコーディングは普通のC++プログラマはしないから
warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
476はちみつ餃子 ◆8X2XSCHEME
2022/03/13(日) 19:38:16.17ID:lhgOY5DD 文字列リテラルの型は const char[] だが、 C++03 時代は const をはがして char* に (暗黙に) 型変換することが許されていた。
文字列リテラル限定の特別な型変換規則。
C++11 以降ではその規則は削除された。
C++03 時代でも非推奨なんだけど昔の本だとちょくちょくやってるんだよなぁ。
俺は持ってないから知らんけどロベール本とか有名な本でもそういう記述があるらしい。
文字列リテラル限定の特別な型変換規則。
C++11 以降ではその規則は削除された。
C++03 時代でも非推奨なんだけど昔の本だとちょくちょくやってるんだよなぁ。
俺は持ってないから知らんけどロベール本とか有名な本でもそういう記述があるらしい。
477デフォルトの名無しさん
2022/03/13(日) 19:51:18.33ID:hJwK9XXb ロベール本は<iostream.h>とか書いてあったしC++03ですらないんじゃない?
478デフォルトの名無しさん
2022/03/13(日) 19:54:43.65ID:mTtq0Uph >>470
すみませんやっぱりよくわからなかったです
アドレスとか調べてみてみました
元の初期化されたばかりのs2を@、ansをAとします
•#if1において
最初の(1行目の)s2は@を指している
最後の(3行目の)s2はAを指している
•#elseにおいて
最初の(左の)s2はAを指している
最後の(右の)s2は@を指している
どうやらこうなっているようなのですが、なぜ逆になるのでしょうか?
すみませんやっぱりよくわからなかったです
アドレスとか調べてみてみました
元の初期化されたばかりのs2を@、ansをAとします
•#if1において
最初の(1行目の)s2は@を指している
最後の(3行目の)s2はAを指している
•#elseにおいて
最初の(左の)s2はAを指している
最後の(右の)s2は@を指している
どうやらこうなっているようなのですが、なぜ逆になるのでしょうか?
479デフォルトの名無しさん
2022/03/13(日) 20:06:11.90ID:GnTJD4Pm480デフォルトの名無しさん
2022/03/13(日) 20:12:18.98ID:e39Fa4ck そんな調べれば一瞬で分かるようなこと自分で調べろよおっさんw
481デフォルトの名無しさん
2022/03/13(日) 20:13:33.25ID:e39Fa4ck お前の間違いをいちいち指摘するのは最近もう面倒w ヒントはあげたしw
482デフォルトの名無しさん
2022/03/13(日) 20:14:46.38ID:mTtq0Uph あなたには聞いたつもりはないのですけど…
483蟻人間 ◆T6xkBnTXz7B0
2022/03/13(日) 20:18:18.08ID:+6IhxTlU どいつもこいつもおっさん
484デフォルトの名無しさん
2022/03/13(日) 20:28:56.19ID:GnTJD4Pm おっさんって大体C++17以降アレルギーもってるよな
言語の進化に付いていくのをやめると新機能への愚痴ばかり言う老害になっちゃうんだよな
ああはなりたくないからC++40くらいまでは初心を忘れず学習し続けると心に誓うわ
言語の進化に付いていくのをやめると新機能への愚痴ばかり言う老害になっちゃうんだよな
ああはなりたくないからC++40くらいまでは初心を忘れず学習し続けると心に誓うわ
485蟻人間 ◆T6xkBnTXz7B0
2022/03/13(日) 20:35:15.04ID:+6IhxTlU WinXPをサポートしている最新のC++規格となると選択肢が少なくなるのが嫌になる。
486デフォルトの名無しさん
2022/03/13(日) 20:35:18.33ID:R0s3zSYd Rustに変わるのでは?
487デフォルトの名無しさん
2022/03/13(日) 20:56:20.40ID:e39Fa4ck linuxだとgcc 9か10がデフォルトだし、9,10のデフォルトのc++標準は14だから
現状17,20は断らないと使えないので、自分で使う分以外は可能なら11、無理でも14までにしたいというだけ
VC++2022を除き20はデフォルトだと使えないので、自分で使う分でも20は滅多に使わない
twitterとかで記事を見かけたら23までは内容見たりするけど、自分で追っかけるのは17まで、興味があれば20までかな
23だとrangeがすごいことになってるみたいね
現状17,20は断らないと使えないので、自分で使う分以外は可能なら11、無理でも14までにしたいというだけ
VC++2022を除き20はデフォルトだと使えないので、自分で使う分でも20は滅多に使わない
twitterとかで記事を見かけたら23までは内容見たりするけど、自分で追っかけるのは17まで、興味があれば20までかな
23だとrangeがすごいことになってるみたいね
488デフォルトの名無しさん
2022/03/13(日) 20:57:02.88ID:BWiYjhGb >>478
評価の順と関数の実行が同じとは限らない。
だったかな
要するに cout<<s2@<<test(s2)A<<s2B;
君の考えでは@の評価、関数test(s2)Aが実行されtest(s2)Aの評価、最後にs2Bが評価される、だろうけど
実際には先ににtest(s2)Aが実行され、その後s2@の評価、test(s2)Aの評価、s2Bの評価と続く
って感じと思う
評価の順と関数の実行が同じとは限らない。
だったかな
要するに cout<<s2@<<test(s2)A<<s2B;
君の考えでは@の評価、関数test(s2)Aが実行されtest(s2)Aの評価、最後にs2Bが評価される、だろうけど
実際には先ににtest(s2)Aが実行され、その後s2@の評価、test(s2)Aの評価、s2Bの評価と続く
って感じと思う
489デフォルトの名無しさん
2022/03/13(日) 20:57:21.78ID:GnTJD4Pm490蟻人間 ◆T6xkBnTXz7B0
2022/03/13(日) 20:59:06.58ID:+6IhxTlU LinuxでDirty Pipeの脆弱性が出たからバージョンアップしとけよ。
491デフォルトの名無しさん
2022/03/13(日) 21:22:04.20ID:mTtq0Uph >>488
>>489
ありがとうございます
https://cpprefjp.github.io/lang/cpp17/expression_evaluation_order.html
それっぽいのを見つけたので詳しく読んでみたと思います
言語のバージョンは多分C++11てやつです
GCC4.4.0のコンパイラーでした
本の付録についてきたものですが、結構古いやつだったみたいです
コンパイラー新しくすればもしかしたら動くのかもしれないですけど、あんまりこういうことはしないほうが安全なんでしょうかね
>>489
ありがとうございます
https://cpprefjp.github.io/lang/cpp17/expression_evaluation_order.html
それっぽいのを見つけたので詳しく読んでみたと思います
言語のバージョンは多分C++11てやつです
GCC4.4.0のコンパイラーでした
本の付録についてきたものですが、結構古いやつだったみたいです
コンパイラー新しくすればもしかしたら動くのかもしれないですけど、あんまりこういうことはしないほうが安全なんでしょうかね
492デフォルトの名無しさん
2022/03/13(日) 21:30:44.52ID:5qwn5s+6 >>478
この手の副作用が2つ以上現れるような動作は未規定か環境依存か未定義動作だったりを疑わなきゃいけない
cout<<s2<<test(s2)<<s2; の評価順序は規格で決まってる?
Noならコンパイラの気分次第で変わったりする。
何が起きてるかを知るにはコンパイル結果の逆アセンブリを見るのが一番手っ取り早い
この手の副作用が2つ以上現れるような動作は未規定か環境依存か未定義動作だったりを疑わなきゃいけない
cout<<s2<<test(s2)<<s2; の評価順序は規格で決まってる?
Noならコンパイラの気分次第で変わったりする。
何が起きてるかを知るにはコンパイル結果の逆アセンブリを見るのが一番手っ取り早い
493デフォルトの名無しさん
2022/03/13(日) 21:33:21.26ID:e39Fa4ck ちなみにVC++だと2019のオプション指定なし(C++17)で再現するんだけどねw
494デフォルトの名無しさん
2022/03/13(日) 21:35:03.87ID:e39Fa4ck あ、14だったw
https://godbolt.org/z/fcPT6jjhf
https://godbolt.org/z/fcPT6jjhf
495デフォルトの名無しさん
2022/03/13(日) 21:37:39.20ID:e39Fa4ck gccは9でデフォルト(c++14)指定でも再現しない
496デフォルトの名無しさん
2022/03/13(日) 23:06:02.21ID:1ZaIS7m7 おまえもうハゲ始めてるのに何若者のフリしてんだよw
497デフォルトの名無しさん
2022/03/13(日) 23:19:39.35ID:bI6DiOQ5 なんやおっさんが書きこんだらあかんのか
おっさんがC++やったらあかんのか、ええおい!
おっさんがC++やったらあかんのか、ええおい!
498デフォルトの名無しさん
2022/03/13(日) 23:47:54.26ID:e39Fa4ck 今どきこんなスレ見てるのおっさんしかいねーよw
499デフォルトの名無しさん
2022/03/14(月) 00:10:40.47ID:ci4mynDi もう5ch自体がオッサンのすくつやしのう
500デフォルトの名無しさん
2022/03/14(月) 02:20:02.12ID:rjFiO5pI >>499
YouTubeで動画投降して、視聴者の年齢層を見てみたら、100人以上ユニークユーザー
数がいるのに、なぜか、45〜54歳が 100% になっていた。
日本にはこの年齢しか存在せず、後は幻影であることが明らかと成った。
YouTubeで動画投降して、視聴者の年齢層を見てみたら、100人以上ユニークユーザー
数がいるのに、なぜか、45〜54歳が 100% になっていた。
日本にはこの年齢しか存在せず、後は幻影であることが明らかと成った。
501デフォルトの名無しさん
2022/03/14(月) 02:28:09.93ID:U570WKgz URLを提示しないと何とも・・・内容次第では?
502デフォルトの名無しさん
2022/03/14(月) 09:03:41.97ID:HoF8kO8q503デフォルトの名無しさん
2022/03/14(月) 11:38:57.54ID:ndyVaXT0 昭和ってことは戦争体験したんですね
504デフォルトの名無しさん
2022/03/14(月) 12:26:33.29ID:GQP59fXj 生家のすぐ隣が根岸の米軍住宅だったのが俺の最も古い記憶だな
505デフォルトの名無しさん
2022/03/14(月) 12:27:46.01ID:alz+gcb+ カトラーも昨日で80歳なんやで
506デフォルトの名無しさん
2022/03/14(月) 12:28:28.21ID:7hHUAGdp507デフォルトの名無しさん
2022/03/14(月) 12:32:31.77ID:VKZDzId0 c++17までカバーしてる良書教えてちょ
508デフォルトの名無しさん
2022/03/14(月) 13:39:35.57ID:9629WIm4 俺の周りだと本物の老害は数が少なくて、脳が老害化してるアラサー前の若者が大多数だな
509デフォルトの名無しさん
2022/03/14(月) 14:53:18.27ID:2N61p2oq ニュース ・ トレンド
世界供給の約半分カバー
トレンドトピック: マック最終日、半導体不足
ツイッターのトレンドだけ見てたらAppleのマックのほうに見えるよな
世界供給の約半分カバー
トレンドトピック: マック最終日、半導体不足
ツイッターのトレンドだけ見てたらAppleのマックのほうに見えるよな
510デフォルトの名無しさん
2022/03/14(月) 16:35:39.58ID:GQP59fXj >>506
美濃屋の工場らへん
美濃屋の工場らへん
511デフォルトの名無しさん
2022/03/14(月) 18:24:00.75ID:7hHUAGdp >>510
もしかして本牧あたり?
もしかして本牧あたり?
512デフォルトの名無しさん
2022/03/14(月) 20:13:17.28ID:GQP59fXj513デフォルトの名無しさん
2022/03/15(火) 22:33:04.75ID:x6RxSJEa 追ってたらオッサンの会話にしか見えないやんけw
514デフォルトの名無しさん
2022/03/15(火) 23:43:47.86ID:IA+izEeV >>508
いや実際今の若人のほうが老害化(頭がカチカチ)になってるパターン多いよ
なんつかーSNSとかの弊害だろうな、方法論にはつねに正解があってそこからはずれるのは全部ダメ!
みたいな、自分で試さずに「誰某というカリスマが言うてるのが正しい」みたいな発想のやつが多い
いや実際今の若人のほうが老害化(頭がカチカチ)になってるパターン多いよ
なんつかーSNSとかの弊害だろうな、方法論にはつねに正解があってそこからはずれるのは全部ダメ!
みたいな、自分で試さずに「誰某というカリスマが言うてるのが正しい」みたいな発想のやつが多い
515デフォルトの名無しさん
2022/03/16(水) 00:07:07.20ID:kR1ttM2X 常にググって解法らしきものを見つけることを研鑽してきた弊害やろな。
誰かの踏襲しか出来ん、本人一人しかやってない、
どこにも参考資料なしとなったら思考停止か
もしくはあきらめちまう層。
誰かの踏襲しか出来ん、本人一人しかやってない、
どこにも参考資料なしとなったら思考停止か
もしくはあきらめちまう層。
516デフォルトの名無しさん
2022/03/16(水) 00:36:18.16ID:892EcJv9 分野の蓄積が多くなるとそうなのかもね
517デフォルトの名無しさん
2022/03/16(水) 01:22:56.72ID:dDBzFjnz ム板でC++の規格以外の話をすることは板違い
518デフォルトの名無しさん
2022/03/16(水) 08:57:09.69ID:eFhooB6a519デフォルトの名無しさん
2022/03/16(水) 09:28:03.54ID:9b9buJuo >>518
朝鮮人は板違い
朝鮮人は板違い
520デフォルトの名無しさん
2022/03/16(水) 09:47:16.21ID:sZ1wd+Ly 和製言語つーとRubyとか?
521デフォルトの名無しさん
2022/03/16(水) 10:01:22.67ID:qWEoTKGw >>519
ジャッッッッッップwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
ジャッッッッッップwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
522デフォルトの名無しさん
2022/03/16(水) 10:50:04.72ID:sZ1wd+Ly523デフォルトの名無しさん
2022/03/16(水) 11:00:56.73ID:UOk2lOR/524デフォルトの名無しさん
2022/03/16(水) 11:26:21.48ID:NlrnkDXA >>521
火病w
火病w
525デフォルトの名無しさん
2022/03/16(水) 11:33:19.05ID:FLjIdsXf さすがに極東板かマ板行け。
526デフォルトの名無しさん
2022/03/16(水) 11:41:44.02ID:w0SS0fac ネタにマジレスするのもあれだが、国民的アプリすらも実質韓国産という惨状なのに韓国をバカに出来る神経が本当に分からない
まぁそれこそアメリカ人とかであれば分かるが
まぁそれこそアメリカ人とかであれば分かるが
527デフォルトの名無しさん
2022/03/16(水) 11:52:37.30ID:sCgw3/BF528デフォルトの名無しさん
2022/03/16(水) 11:58:06.63ID:ken1LPi5529デフォルトの名無しさん
2022/03/16(水) 12:29:23.19ID:eFhooB6a530デフォルトの名無しさん
2022/03/16(水) 12:29:53.35ID:fL7hhvH/ >>529
祖国にお帰り
祖国にお帰り
531デフォルトの名無しさん
2022/03/16(水) 15:21:21.65ID:OMEE91WJ EclipseでGNU Autotoolsでビルドしたいんだけど、ワンクリックでファイル構成をパースしてMakefile.amを作ってくれるプラグインてないんかな?
532デフォルトの名無しさん
2022/03/16(水) 16:43:46.25ID:IF2KaGKL533デフォルトの名無しさん
2022/03/16(水) 17:21:01.73ID:dC1HWmI+ defaultって単語が熱いなぁ
534デフォルトの名無しさん
2022/03/16(水) 17:26:44.65ID:sZ1wd+Ly ロシア国債?
535デフォルトの名無しさん
2022/03/16(水) 17:43:54.03ID:AUMfJKJU ルーブルをreturnするから問題ない
536デフォルトの名無しさん
2022/03/16(水) 17:44:36.81ID:dC1HWmI+ C++11で正式採用されて11年経つというのに関数のdefault宣言を一度も使ったことがないわ
537デフォルトの名無しさん
2022/03/16(水) 17:47:40.89ID:lLYtmIck ええ…
538デフォルトの名無しさん
2022/03/16(水) 17:49:13.58ID:dC1HWmI+ >>535
迷惑度でいうとreturnというより例外クラスをthrowする感じに近いですね
迷惑度でいうとreturnというより例外クラスをthrowする感じに近いですね
539デフォルトの名無しさん
2022/03/16(水) 17:51:06.34ID:sZ1wd+Ly540デフォルトの名無しさん
2022/03/16(水) 17:54:01.36ID:dC1HWmI+ 短いとは?
541デフォルトの名無しさん
2022/03/16(水) 17:56:55.95ID:sZ1wd+Ly ソースコードの文字数
542デフォルトの名無しさん
2022/03/16(水) 19:05:34.58ID:gvdy2Zu4 bool oprator==(const ThisClass&)const = default;
は便利だぞ
は便利だぞ
543デフォルトの名無しさん
2022/03/16(水) 19:32:49.28ID:YdzJshEX {}の定義はtrivial判定にならないからなあ
544デフォルトの名無しさん
2022/03/16(水) 20:15:30.86ID:dC1HWmI+ 関数のdefault宣言を今まで一度も使ったこと人、正直に手を挙げなさい
545デフォルトの名無しさん
2022/03/16(水) 20:54:55.18ID:J1wyaesr ノ
546デフォルトの名無しさん
2022/03/16(水) 22:03:43.15ID:LiWeOEyq そもそもdefault宣言がわからない
何?
何?
547デフォルトの名無しさん
2022/03/16(水) 22:17:44.96ID:jNwWVkZm struct C{
C();
C(const C&);
C(C&&);
C& operator=(const C&);
C& operator=(C&&);
~C();
// fields
int i;
std::string s;
};
class/structのうちコンストラクタとかの特殊関数を「何も考えずに実装したらこうなるよね」ってのを明示的に宣言する。
上のstructに初期化用の C(int, std::string); も追加するけど元のコンストラクタもそのまま使いたいときとか C()=default; を書いておく。
C();
C(const C&);
C(C&&);
C& operator=(const C&);
C& operator=(C&&);
~C();
// fields
int i;
std::string s;
};
class/structのうちコンストラクタとかの特殊関数を「何も考えずに実装したらこうなるよね」ってのを明示的に宣言する。
上のstructに初期化用の C(int, std::string); も追加するけど元のコンストラクタもそのまま使いたいときとか C()=default; を書いておく。
548デフォルトの名無しさん
2022/03/16(水) 22:32:26.86ID:aL91bHGW549デフォルトの名無しさん
2022/03/16(水) 22:40:15.82ID:J1wyaesr550デフォルトの名無しさん
2022/03/16(水) 23:08:39.16ID:jNwWVkZm >>548
T&&は右辺値参照
C++11で導入された「もう使わない値」を使いわますための仕組み
わかりやすい例だと
std::vector<int> mk10000(){
// 10000要素のvectorを適当に作って返す
}
struct C{
using ivec=std::vector<int>;
ivec _v;
C(const ivec&v): _v(v){}
C(ivec&&v): _v(std::move(v)){}
};
int main(){
C c(mk10000());
}
const T&のやつしかないと、vectorが持ってる10000要素を全部コピーするしかないが、
(その直後にもう使わないコピー元を破棄しなきゃいけない)
T&&のやつがあるとvectorが内部で持ってるポインタを差し替えるだけで済む。
T&&は右辺値参照
C++11で導入された「もう使わない値」を使いわますための仕組み
わかりやすい例だと
std::vector<int> mk10000(){
// 10000要素のvectorを適当に作って返す
}
struct C{
using ivec=std::vector<int>;
ivec _v;
C(const ivec&v): _v(v){}
C(ivec&&v): _v(std::move(v)){}
};
int main(){
C c(mk10000());
}
const T&のやつしかないと、vectorが持ってる10000要素を全部コピーするしかないが、
(その直後にもう使わないコピー元を破棄しなきゃいけない)
T&&のやつがあるとvectorが内部で持ってるポインタを差し替えるだけで済む。
551デフォルトの名無しさん
2022/03/16(水) 23:19:48.63ID:0TydPa2f552デフォルトの名無しさん
2022/03/16(水) 23:26:37.67ID:Jym8C6W+ 昔はswap咬ましてたヤツだな
553デフォルトの名無しさん
2022/03/17(木) 00:06:29.74ID:duMzaOgi shared_ptr使えばいいじゃない
554デフォルトの名無しさん
2022/03/17(木) 00:35:48.54ID:Oo+Bui2i メモリポインタの差し替えか
555デフォルトの名無しさん
2022/03/17(木) 00:43:42.18ID:DrTp92yO556デフォルトの名無しさん
2022/03/17(木) 01:50:00.57ID:jsnVHM5N >>544
(´・ω・`)の
(´・ω・`)の
557デフォルトの名無しさん
2022/03/17(木) 01:50:25.35ID:faeKJv0z そんなことくらいで頭が痛くなるなら、むしろやめとけw
558デフォルトの名無しさん
2022/03/17(木) 03:32:17.05ID:kCjHZQsl 昨今のコード書かない言語オタクのオナニー拡張はスルーしてよい。
559デフォルトの名無しさん
2022/03/17(木) 13:38:21.60ID:faeKJv0z そのまま動かない部分コードだけ書くバカを除いたら、大抵のスレは多分俺しかコード書いてないけどねw
560デフォルトの名無しさん
2022/03/17(木) 13:52:55.92ID:86Z8hvJ4 ム板で「俺はコード書いてるぞ、どうだ偉いだろうエッヘン」
これ寒すぎるんだけど・・・
これ寒すぎるんだけど・・・
561デフォルトの名無しさん
2022/03/17(木) 14:50:03.04ID:zTqRydhk ム板だからこそコード書く奴は偉いと思うぞ
ただ実際に書いてる奴はいちいちそんなことを自慢気に書いたりしないけどなw
ただ実際に書いてる奴はいちいちそんなことを自慢気に書いたりしないけどなw
562デフォルトの名無しさん
2022/03/17(木) 14:53:55.54ID:86Z8hvJ4 偉いのか? やっと一人前の板民というだけだろ
コード書かないやつがム板ではアウェーなだけで
そこから相対的に見て偉いと言うことにどんな意味があるんだ
コード書かないやつがム板ではアウェーなだけで
そこから相対的に見て偉いと言うことにどんな意味があるんだ
563デフォルトの名無しさん
2022/03/17(木) 15:07:05.49ID:zTqRydhk564デフォルトの名無しさん
2022/03/17(木) 15:22:32.44ID:86Z8hvJ4565デフォルトの名無しさん
2022/03/17(木) 15:33:03.66ID:faeKJv0z566デフォルトの名無しさん
2022/03/17(木) 15:37:19.10ID:kCjHZQsl なにケンカしてるん? おまえら仲良くしろよな^^
567デフォルトの名無しさん
2022/03/17(木) 15:39:26.58ID:86Z8hvJ4568デフォルトの名無しさん
2022/03/17(木) 16:00:27.96ID:kKKT9czh >>562みたいなことを書く奴に喧嘩腰とか言われてもなぁw
ちょっと頭冷やした方が良くね?
ちょっと頭冷やした方が良くね?
569デフォルトの名無しさん
2022/03/17(木) 16:03:43.13ID:86Z8hvJ4570デフォルトの名無しさん
2022/03/17(木) 16:15:46.57ID:0FIEYVVj 何を否定してほしいんだろ…
相当頭に血が上ってそうw
相当頭に血が上ってそうw
571デフォルトの名無しさん
2022/03/17(木) 16:58:36.33ID:7ByY4YCs そんなことよりC++の話しようよ
572デフォルトの名無しさん
2022/03/17(木) 21:12:52.60ID:duMzaOgi 日本のトレンド
ちんこ勝負
トレンドトピック: 正式決定
ツイッターの形態素解析エンジンやばくないですか
ちんこ勝負
トレンドトピック: 正式決定
ツイッターの形態素解析エンジンやばくないですか
573デフォルトの名無しさん
2022/03/17(木) 21:16:07.60ID:VOoj+XQs OSSの拾いもん回してるだけだろ
574デフォルトの名無しさん
2022/03/19(土) 19:36:28.58ID:0pH7TqjX std::vector::atの定義がこうなってるんですけど
reference at(size_type n);
const_reference at(size_type n) const;
これはエラーにならないんですか?
戻り値の型だけが違う場合オーバーロードはできないと勉強したんですけど
reference at(size_type n);
const_reference at(size_type n) const;
これはエラーにならないんですか?
戻り値の型だけが違う場合オーバーロードはできないと勉強したんですけど
575デフォルトの名無しさん
2022/03/19(土) 19:45:40.38ID:jBXtN76z 戻り型だけの違いやないやん
thisの違いは仮引数の違いやで
thisの違いは仮引数の違いやで
576デフォルトの名無しさん
2022/03/19(土) 19:48:56.32ID:0pH7TqjX あ、なるほど
ありがとうございます!
あと2つが呼ばれるときの違いもわからないのでそちらも教えていただきたいです
ありがとうございます!
あと2つが呼ばれるときの違いもわからないのでそちらも教えていただきたいです
577デフォルトの名無しさん
2022/03/19(土) 20:15:27.83ID:Cc07y5v9 少なくともconstオブジェクトからはconstメンバ関数しか呼べないね
578デフォルトの名無しさん
2022/03/19(土) 20:28:47.85ID:Cc07y5v9 http://www7b.biglobe.ne.jp/~robe/cpphtml/html02/cpp02024.html
と思ったら非constオブジェクトはキチンとconstじゃない方を呼ぶんだね
と思ったら非constオブジェクトはキチンとconstじゃない方を呼ぶんだね
579デフォルトの名無しさん
2022/03/19(土) 20:29:14.00ID:hj0ig94x const Tからはconstメンバ関数しか呼べない
Tからはconstじゃない方を優先的に呼ぶ
constメンバ関数しかなかったらconstメンバ関数を呼ぶ
Tからはconstじゃない方を優先的に呼ぶ
constメンバ関数しかなかったらconstメンバ関数を呼ぶ
580デフォルトの名無しさん
2022/03/19(土) 20:30:44.79ID:hj0ig94x わかりやすいのはvector::size()const;
constから使えるし、constじゃなくても普通に使える
constから使えるし、constじゃなくても普通に使える
581デフォルトの名無しさん
2022/03/19(土) 20:31:32.90ID:HgLoiHN9 constあるなしでオーバーロードできるんですか?
582デフォルトの名無しさん
2022/03/19(土) 20:36:43.47ID:hj0ig94x >>581
できる
件のvector::at(size_t) もそうだし、operator[](size_t)もそう
vector<int>{0};
const vector<int>cv{0};
v[0]=1; // int& operator[](size_t);
cv[0]=1; // const int& operator[](size_t)const; こっちがコンパイル通ったらまずいよね
できる
件のvector::at(size_t) もそうだし、operator[](size_t)もそう
vector<int>{0};
const vector<int>cv{0};
v[0]=1; // int& operator[](size_t);
cv[0]=1; // const int& operator[](size_t)const; こっちがコンパイル通ったらまずいよね
583デフォルトの名無しさん
2022/03/19(土) 21:07:20.86ID:0pH7TqjX 皆さんありがとうございます
ちょっと自分で整理してみたんですけどこれで合ってますか?
☆普通の関数の場合
•引数のconstの有無だけのオーバーロード→コンパイルエラー
int A(int x);
double A(const int x);//エラー
•constなし引数への代入→const有無どちらも可
int A(int x);
int i=0;
const int c=0;
A(i);A(c);
•const引数への代入 → const有無どちらも可
int A(const int x);
A(i);A(c);
ちょっと自分で整理してみたんですけどこれで合ってますか?
☆普通の関数の場合
•引数のconstの有無だけのオーバーロード→コンパイルエラー
int A(int x);
double A(const int x);//エラー
•constなし引数への代入→const有無どちらも可
int A(int x);
int i=0;
const int c=0;
A(i);A(c);
•const引数への代入 → const有無どちらも可
int A(const int x);
A(i);A(c);
584デフォルトの名無しさん
2022/03/19(土) 21:08:09.65ID:0pH7TqjX ☆メンバー関数の場合
•thisに対するconstの有無だけのオーバーロード → OK
class B{
public:
int C(){return 0;}
int C() const{return 1;}
};
•const無メソッドだけあるとき→const変数からは呼べない
class B{
public:
int C(){return 0;}
};
B b1;
const b2=b1;
b1.C();
b2.C();//エラー
•thisに対するconstの有無だけのオーバーロード → OK
class B{
public:
int C(){return 0;}
int C() const{return 1;}
};
•const無メソッドだけあるとき→const変数からは呼べない
class B{
public:
int C(){return 0;}
};
B b1;
const b2=b1;
b1.C();
b2.C();//エラー
585デフォルトの名無しさん
2022/03/19(土) 21:08:27.42ID:0pH7TqjX •const有メソッドだけあるとき →const有無変数どちらからも呼べる
class B{
public:
int C()const {return 1;}
};
b1.C();
b2.C();
•両方あるとき→変数のconstの有無に対応したものが呼ばれる
class B{
public:
int C(){return 0;}
int C()const {return 1;}
};
b1.C();//0
b2.C();//1
class B{
public:
int C()const {return 1;}
};
b1.C();
b2.C();
•両方あるとき→変数のconstの有無に対応したものが呼ばれる
class B{
public:
int C(){return 0;}
int C()const {return 1;}
};
b1.C();//0
b2.C();//1
586デフォルトの名無しさん
2022/03/19(土) 21:41:36.92ID:DslNhsx1 最近静かだったので見てなかったら、めっさ自演されてるw
587デフォルトの名無しさん
2022/03/19(土) 21:43:30.89ID:DslNhsx1588デフォルトの名無しさん
2022/03/19(土) 21:50:03.17ID:0pH7TqjX 😢
ありがとうございます
スレ汚し失礼しました
ありがとうございます
スレ汚し失礼しました
589デフォルトの名無しさん
2022/03/19(土) 21:51:54.61ID:JACgrnJr volatileメンバ関数の話もしないと片手落ちだぞ
590デフォルトの名無しさん
2022/03/19(土) 22:02:55.92ID:hj0ig94x >>588
その認識で合ってる
volatileもconstも伝染する性質が同じだけだからconstだけ覚えておけば問題ない
586はプログラム板で意味もなくマウント取るだけおじさんなので無視していい
その認識で合ってる
volatileもconstも伝染する性質が同じだけだからconstだけ覚えておけば問題ない
586はプログラム板で意味もなくマウント取るだけおじさんなので無視していい
591デフォルトの名無しさん
2022/03/19(土) 22:17:28.58ID:DslNhsx1 マウント取りたいだけ、認められたいだけなのはお前w
自作自演のconst劇再演して面白い?w
自作自演のconst劇再演して面白い?w
592デフォルトの名無しさん
2022/03/20(日) 01:21:01.58ID:lIF6fzsd >>558を見てオモタが、
規格委員会が新しい言語要素を仕様化する際に、必ずコンパイラに実装してみて
実現可能性やよからぬ弊害が無いことや仕様に意図せぬあいまいさが無いことを実証するフェーズが入ると思うんだけど
その手の実装ってどこがやってるの?コンパイラメーカーに規格書のプレプリントを渡して丸投げ??
規格委員会が新しい言語要素を仕様化する際に、必ずコンパイラに実装してみて
実現可能性やよからぬ弊害が無いことや仕様に意図せぬあいまいさが無いことを実証するフェーズが入ると思うんだけど
その手の実装ってどこがやってるの?コンパイラメーカーに規格書のプレプリントを渡して丸投げ??
593デフォルトの名無しさん
2022/03/20(日) 01:23:47.24ID:lIF6fzsd もし規格委員会自身がやっているんなら神の実装技術を持った集団が規格委員会に居るはずで、>>558の言い様は正しくないかもしんないが、
万が一プロプラエタリーなコンパイラメーカーに丸投げなら参入障壁を高めるために複雑怪奇な仕様をあえて無理矢理引き受けるケースもあるかもしんない
かもしんない運転、
万が一プロプラエタリーなコンパイラメーカーに丸投げなら参入障壁を高めるために複雑怪奇な仕様をあえて無理矢理引き受けるケースもあるかもしんない
かもしんない運転、
594デフォルトの名無しさん
2022/03/20(日) 01:35:55.70ID:1+CNf8az お前がそんな風に何も調べもせずに妄想だけで他人に聞いちゃう読んで字のごとくの「丸投げ」と一緒にしちゃダメだろwwww
595デフォルトの名無しさん
2022/03/20(日) 01:37:12.20ID:1+CNf8az596デフォルトの名無しさん
2022/03/20(日) 01:45:20.01ID:lIF6fzsd いやすまん確かに
>(規格委員会が)実現可能性やよからぬ弊害が無いことや仕様に意図せぬあいまいさが無いことを実証する
というのは妄想やったわ;;;
>(規格委員会が)実現可能性やよからぬ弊害が無いことや仕様に意図せぬあいまいさが無いことを実証する
というのは妄想やったわ;;;
597デフォルトの名無しさん
2022/03/20(日) 01:48:15.78ID:1+CNf8az 何か裏を取れる事実がないなら全て妄想なんだよw お馬鹿さんw
598デフォルトの名無しさん
2022/03/20(日) 16:56:04.20ID:XASZAdc/ すいません教えていただけないでしょうか
棒読みちゃんっていうフリーソフトが一向に更新されないので
真似て作りたいのですがどのようなプログラム言語を学んだらよろしいですか?
棒読みちゃんっていうフリーソフトが一向に更新されないので
真似て作りたいのですがどのようなプログラム言語を学んだらよろしいですか?
599デフォルトの名無しさん
2022/03/20(日) 17:07:50.89ID:XF1vAqW3 参考書を一冊読み終わった程度のガチガチの初心者です。
初めて何か簡単なものを作ろうと思ったのですが、ウィンドウのサイズの指定の仕方が良くわかりませんでした。
VisualStudio2022でテンプレートはユニバーサルWindows-C++/Cxです。
そもそも質問する場所はここであってますでしょうか?
初めて何か簡単なものを作ろうと思ったのですが、ウィンドウのサイズの指定の仕方が良くわかりませんでした。
VisualStudio2022でテンプレートはユニバーサルWindows-C++/Cxです。
そもそも質問する場所はここであってますでしょうか?
600デフォルトの名無しさん
2022/03/20(日) 17:14:15.90ID:n/9ce90/601デフォルトの名無しさん
2022/03/20(日) 18:05:54.67ID:XF1vAqW3 >>600
すみませんありがとうございます。
すみませんありがとうございます。
602デフォルトの名無しさん
2022/03/20(日) 19:52:39.86ID:kJ/tleYc なぜガチガチの初心者がなぜC++/CXいってまうんや。
昔はまだしも、C++17とCX両方襲いかかってくるから
理解するの大変な上、理解しても先が難しいと思うが。
普通にc#+やむなしなトコだけC寄りのC++でいいと思うが。
昔はまだしも、C++17とCX両方襲いかかってくるから
理解するの大変な上、理解しても先が難しいと思うが。
普通にc#+やむなしなトコだけC寄りのC++でいいと思うが。
603デフォルトの名無しさん
2022/03/20(日) 20:32:45.31ID:EuUP+kdP >>598
テキスト文字列を合成音声で読ませるってことならスピーキングライブラリに頼りきることになるだろうしPythonとかでお手軽にできるんじゃない
ライブラリに頼る場合はPythonとかJavaとかC#らへんが適正だと思う
自分も少し前にC#でそういうの作った事あるけどWindowsならSystem.Speech.dll参照して簡単に喋らせられたな
テキスト文字列を合成音声で読ませるってことならスピーキングライブラリに頼りきることになるだろうしPythonとかでお手軽にできるんじゃない
ライブラリに頼る場合はPythonとかJavaとかC#らへんが適正だと思う
自分も少し前にC#でそういうの作った事あるけどWindowsならSystem.Speech.dll参照して簡単に喋らせられたな
604デフォルトの名無しさん
2022/03/20(日) 23:15:40.56ID:1+CNf8az 別に喋らせるんならC++でもpythonでもC#でも出来るけど、Javaは難しい(面倒)だろうねwwwww
605デフォルトの名無しさん
2022/03/20(日) 23:38:16.04ID:UJahVNmy パピコンでも喋るのに
606デフォルトの名無しさん
2022/03/20(日) 23:46:10.52ID:1+CNf8az 流石にそのレベルの音声合成と一緒にしたら可哀想w
PCM音源がなかったので、FM音源でしゃべらせたり、beep音で音楽(単音・音量調整なし)鳴らしたり効果音出したりが当時の流儀w
PCM音源がなかったので、FM音源でしゃべらせたり、beep音で音楽(単音・音量調整なし)鳴らしたり効果音出したりが当時の流儀w
607デフォルトの名無しさん
2022/03/21(月) 01:56:07.23ID:TlR/Mg8q ゲームアーツのソフトがFM音源でよく喋ってたわ
608デフォルトの名無しさん
2022/03/21(月) 13:45:57.08ID:sqIPbQd/ C# - C++/CX - ネイティブC++
というふうに間に挟めば時としてマーシャリング規則がメドイP/Invokeからおさらばできる……!
ような気がする……!!
というふうに間に挟めば時としてマーシャリング規則がメドイP/Invokeからおさらばできる……!
ような気がする……!!
609デフォルトの名無しさん
2022/03/21(月) 13:48:08.86ID:ROKj/vns どうも599です。
買った参考書の終わりの方にUWPでなんか作ろうって書いてあったのと、スマートポインタってなんかいいなって思って、そんでC++/CXかなって思いました。
そもそも言語の選び方もなんか間違ってたっぽいんですけど、なんか、
最速っていう響きに寄せられてなんか、c++すごそう・・・、っておもって続けてます。簡単なものでもなんでもいいからなんか作りなと知人に言われたので、とりあえず簡単なタイマー作ることにしました。
買った参考書の終わりの方にUWPでなんか作ろうって書いてあったのと、スマートポインタってなんかいいなって思って、そんでC++/CXかなって思いました。
そもそも言語の選び方もなんか間違ってたっぽいんですけど、なんか、
最速っていう響きに寄せられてなんか、c++すごそう・・・、っておもって続けてます。簡単なものでもなんでもいいからなんか作りなと知人に言われたので、とりあえず簡単なタイマー作ることにしました。
610デフォルトの名無しさん
2022/03/21(月) 13:55:13.39ID:2Z4azz5I >>608
そこはC++/CXじゃなくてC++/CLI。というかまさにそのために作られたのがC++/CLI
そこはC++/CXじゃなくてC++/CLI。というかまさにそのために作られたのがC++/CLI
611デフォルトの名無しさん
2022/03/21(月) 14:01:07.93ID:ROKj/vns 今やっと昨日の質問の答えを見てきたんですけど、UWPやるのはやめといたほうがいいらしいですね。
VisualStudioでタイマー作ろうと思ったんですけどおすすめのテンプレートありますか?
VisualStudioでタイマー作ろうと思ったんですけどおすすめのテンプレートありますか?
612デフォルトの名無しさん
2022/03/21(月) 14:05:11.38ID:sqIPbQd/ >>610
えっ
えっ
613デフォルトの名無しさん
2022/03/21(月) 14:21:34.68ID:j56ex+kV C++/CLIでコンパイルされたDLLはC#で書いたDLLと同じように利用できる
C++/CXは知らん
public ref class C{
public:
property System::String^ S1{
System::String^ get(){return _S1;}
void set(System::String^value){_S1=value;}
private:
System::String^ _S1;
}
};
↓
class C{
string S1{get;set;}
}
C++/CXは知らん
public ref class C{
public:
property System::String^ S1{
System::String^ get(){return _S1;}
void set(System::String^value){_S1=value;}
private:
System::String^ _S1;
}
};
↓
class C{
string S1{get;set;}
}
614デフォルトの名無しさん
2022/03/21(月) 14:23:46.00ID:TlR/Mg8q cliはc#と変わらんからなあ
間に挟む意味はないよ
間に挟む意味はないよ
615デフォルトの名無しさん
2022/03/21(月) 14:57:53.89ID:HCPaDxP+ delphiとc++が合体したような言語よの
616デフォルトの名無しさん
2022/03/21(月) 18:13:19.47ID:BAdp3agq 嘘つくな・・・あとUWPならその名のついたスレに行け
C++/CLIはマネージドコードを混ぜられるネイティブコードってだけで、C++の大規模な「MS独自拡張」
これを更に拡張してUWP要素を載せたのがCX
C++じゃないんで、独自スレでも立てて一人で盛り上げてくださいw
個人的にはUWP自体がオワコンなので、せめてC#でやればいいのにとしか思えないがやるのは君の自由だw
C++/CLIはマネージドコードを混ぜられるネイティブコードってだけで、C++の大規模な「MS独自拡張」
これを更に拡張してUWP要素を載せたのがCX
C++じゃないんで、独自スレでも立てて一人で盛り上げてくださいw
個人的にはUWP自体がオワコンなので、せめてC#でやればいいのにとしか思えないがやるのは君の自由だw
617デフォルトの名無しさん
2022/03/21(月) 18:22:20.19ID:OLHk6lmK >>616
マネージド拡張と勘違いしてるんでは?
マネージド拡張と勘違いしてるんでは?
618デフォルトの名無しさん
2022/03/21(月) 18:28:56.05ID:BAdp3agq619デフォルトの名無しさん
2022/03/21(月) 18:32:58.53ID:Prmlj1K5 今はC++もクロスプラットフォームに対応する時代ですよ
いきなりWindowsべったりの書き方を覚えるより簡単なコンソールアプリとかQtから始めるのをお勧めしておきます
いきなりWindowsべったりの書き方を覚えるより簡単なコンソールアプリとかQtから始めるのをお勧めしておきます
620デフォルトの名無しさん
2022/03/21(月) 18:37:45.51ID:BAdp3agq どうせいつものVC++使うconstの話ばかりするおじさんの自演w
621デフォルトの名無しさん
2022/03/21(月) 18:46:38.57ID:2xjgwrAK MSの独自拡張ガーとか言われてもC++を世界に普及させたのはMSですからね。
622デフォルトの名無しさん
2022/03/21(月) 18:55:58.33ID:TEVzcoXo MFCのことかね?
623デフォルトの名無しさん
2022/03/21(月) 19:30:28.04ID:RS8xXzlz ユニコードのことか〜
624デフォルトの名無しさん
2022/03/21(月) 19:33:36.97ID:zSyDDKWU utf16 なんか消えて、utf32 と uft8 だけになればいいのに…
625デフォルトの名無しさん
2022/03/21(月) 20:04:10.64ID:HCPaDxP+ J#が一番ワケワカランかった
626デフォルトの名無しさん
2022/03/21(月) 22:37:44.93ID:dYQgVp3+ ちんちんシュッ!シュッ!シュッ!
627デフォルトの名無しさん
2022/03/22(火) 08:04:59.19ID:jyd+b1no なんでqmlって機能があるQtよりelectronが普及したのか
628デフォルトの名無しさん
2022/03/22(火) 08:19:14.63ID:4wXemx3i629デフォルトの名無しさん
2022/03/22(火) 10:17:12.52ID:e045zQYf630デフォルトの名無しさん
2022/03/22(火) 10:31:07.58ID:OaCGWLhd 泥舟に乗り換えろと言われてもな。
631デフォルトの名無しさん
2022/03/22(火) 10:46:04.30ID:mouTiTR6 共通プラットフォーム使うのは全然マシだと思いますよ
632デフォルトの名無しさん
2022/03/22(火) 10:51:02.79ID:OaCGWLhd Javaの失敗から何も学ばないのは馬鹿というものだ。
633デフォルトの名無しさん
2022/03/22(火) 10:53:19.42ID:mouTiTR6 C++の失敗とかここで言われても
634デフォルトの名無しさん
2022/03/22(火) 12:08:25.57ID:7HP7s9m4 じゃ鉄舟にのりかえるわ
635デフォルトの名無しさん
2022/03/22(火) 12:48:01.28ID:BLG0uiz2 Win32で書いたソースコードそのままでスマホで動かせるんか?
637デフォルトの名無しさん
2022/03/22(火) 13:03:45.42ID:e045zQYf こういう質問、Windowsとスマホの用途の違いという根本を蒸ししているパターン多いよな
前提になっているパーツや環境だって違うのに「自分は移植作業したくない」
じゃあPGやめたらって話
前提になっているパーツや環境だって違うのに「自分は移植作業したくない」
じゃあPGやめたらって話
638デフォルトの名無しさん
2022/03/22(火) 13:04:16.00ID:e045zQYf s/蒸し/無視/g
639デフォルトの名無しさん
2022/03/22(火) 13:04:33.14ID:njeYgDdQ >>636
MS も Windows phone から撤退したじゃん
MS も Windows phone から撤退したじゃん
640デフォルトの名無しさん
2022/03/22(火) 13:31:47.44ID:1zUmccnl Win32は「Windows」という環境依存定期
641デフォルトの名無しさん
2022/03/22(火) 13:37:00.07ID:OaCGWLhd 処理系依存していいのかC/C++の最大のメリットだし。
642デフォルトの名無しさん
2022/03/23(水) 11:56:26.96ID:I3LWr1Un643デフォルトの名無しさん
2022/03/23(水) 13:08:39.58ID:AtA1Snji >>642
構造体を入れ子にしてGUIノードツリーを表現するの面白いね
最近はXAML/FXML/HTMLなどXML派生言語でGUI構造を表現するものが多いけど、言語固有の構造体で表現するほうがパース・オーバーヘッドがなくていいのかな
まだ、ボタン押下時のコールバック(ハンドラー)など不明点が多い
構造体を入れ子にしてGUIノードツリーを表現するの面白いね
最近はXAML/FXML/HTMLなどXML派生言語でGUI構造を表現するものが多いけど、言語固有の構造体で表現するほうがパース・オーバーヘッドがなくていいのかな
まだ、ボタン押下時のコールバック(ハンドラー)など不明点が多い
644デフォルトの名無しさん
2022/03/23(水) 14:11:26.99ID:MxMb2yoX ```
void fuga() {}
auto hoge = fuga;
int main() {
std::cout << GetFuncName(hoge) << std::endl;
}
```
こんな感じのコードを書いたときに文字列で"fuga"を返してくれるようなGetFuncNameの実装方法ってありますか?
はじめは
#define GetFuncName(var) #var
とマクロを定義すれば良いかと思ったのですがこの定義でGetFuncName(hoge)とすると"hoge"が返ってきてしまいます...
void fuga() {}
auto hoge = fuga;
int main() {
std::cout << GetFuncName(hoge) << std::endl;
}
```
こんな感じのコードを書いたときに文字列で"fuga"を返してくれるようなGetFuncNameの実装方法ってありますか?
はじめは
#define GetFuncName(var) #var
とマクロを定義すれば良いかと思ったのですがこの定義でGetFuncName(hoge)とすると"hoge"が返ってきてしまいます...
645デフォルトの名無しさん
2022/03/23(水) 14:25:09.91ID:KVWBweE9 実行時に動的に取るためにはどっかで入れてあげないと駄目ですなー
646デフォルトの名無しさん
2022/03/23(水) 16:45:23.47ID:U3MPlBH2 ある比較関数
f = [](int l, int r){return l > r;};
があったとして、priority_queue<int> に f を渡したときと vector<int> を f で sort したときに両者の順番が異なるの非自明過ぎるのだが
なんで priority_queue の方はこれで昇順になるの?
f = [](int l, int r){return l > r;};
があったとして、priority_queue<int> に f を渡したときと vector<int> を f で sort したときに両者の順番が異なるの非自明過ぎるのだが
なんで priority_queue の方はこれで昇順になるの?
647デフォルトの名無しさん
2022/03/23(水) 16:49:02.84ID:nUwfSeaH extern C declspec dlldxport 付けて、
実行時に自分自身をサーチすれば、付けた関数については
文字が残るから可能だけど、やるかと言われたら
まあ最悪一歩手前の方法やな...
実行時に自分自身をサーチすれば、付けた関数については
文字が残るから可能だけど、やるかと言われたら
まあ最悪一歩手前の方法やな...
648デフォルトの名無しさん
2022/03/23(水) 17:47:41.73ID:Rq928qXu enumの名前ほしがったり関数名ほしがったり
最初からC#使えばいいんですよ。
最初からC#使えばいいんですよ。
649デフォルトの名無しさん
2022/03/23(水) 18:52:01.34ID:wWGNqGIP C++erは速度厨なので名前を実行時解決するC#のリフレクションはあり得ない
C++23に入るかもしれない静的リフレクションを待ちましょう
https://cppmap.github.io/standardization/cppx/#_3
C++23に入るかもしれない静的リフレクションを待ちましょう
https://cppmap.github.io/standardization/cppx/#_3
650デフォルトの名無しさん
2022/03/23(水) 18:58:48.40ID:nUwfSeaH 静的リフレクションとか意味うっすw
リフレクション欲しいのは大抵自分自身が定義するものではないのに。
リフレクション欲しいのは大抵自分自身が定義するものではないのに。
651デフォルトの名無しさん
2022/03/23(水) 19:02:11.91ID:4wwS6ZaC 用途に応じてベターな手段を選ぶことができるとこまで整備されると
いいね
いいね
652デフォルトの名無しさん
2022/03/23(水) 19:30:22.64ID:Rq928qXu よくねーな。C++はとことん薄っぺらであるべき。
653デフォルトの名無しさん
2022/03/23(水) 19:48:39.65ID:BZjVj5dO >>646
template <class T,
class Container = std::vector<T>,
class Compare = less<typename Container::value_type>>
class priority_queue
デフォルトはlessで<を定義して、降順にするのが元の意味
fで<の意味をひっくり返せば、昇順になる
template <class T,
class Container = std::vector<T>,
class Compare = less<typename Container::value_type>>
class priority_queue
デフォルトはlessで<を定義して、降順にするのが元の意味
fで<の意味をひっくり返せば、昇順になる
654デフォルトの名無しさん
2022/03/23(水) 20:10:07.72ID:8yKlU7lo つーかリフレクションてコンパイル時に決定できない事を扱うから意味あるのに
性的に解決できることはリフレクションとしては意味がない
性的に解決できることはリフレクションとしては意味がない
655デフォルトの名無しさん
2022/03/23(水) 20:35:05.43ID:FjwJYdtM656デフォルトの名無しさん
2022/03/23(水) 20:52:55.01ID:k8Z8CHR2 またマクロ/const/リフレクション/windowsおじさんが自演で暴れてるw
マクロ→廃止すべき
const→常識なので話題に挙げないべき
リフレクション→静的/手動なべき(というか動的にリンクされない限り、C++では不要)
windows→滅びるべき
なのでおじさん不要w
マクロ→廃止すべき
const→常識なので話題に挙げないべき
リフレクション→静的/手動なべき(というか動的にリンクされない限り、C++では不要)
windows→滅びるべき
なのでおじさん不要w
657デフォルトの名無しさん
2022/03/23(水) 21:42:30.64ID:Rq928qXu ATL使ってCOMで実装しなさい。
658デフォルトの名無しさん
2022/03/23(水) 21:47:56.30ID:nUwfSeaH COMとかWin用に大型アプリ提供してる会社しか
継続してないんじゃないか。
C#のCOMは簡単だし妙な記述皆無だから
まだ使ってる人居そうだが。
継続してないんじゃないか。
C#のCOMは簡単だし妙な記述皆無だから
まだ使ってる人居そうだが。
659デフォルトの名無しさん
2022/03/23(水) 22:19:07.27ID:k8Z8CHR2 COM/DCOMの技術は良かったし、MSはときどきいい技術を作るんだけど、元の信用度が足りなくて普及しなくて失敗するw
COMやC++/CLI以降の話は正確にはC++じゃないので別スレでも作ってやれw
COMやC++/CLI以降の話は正確にはC++じゃないので別スレでも作ってやれw
660デフォルトの名無しさん
2022/03/23(水) 22:26:18.54ID:Rq928qXu MSの信用が足りないとかCOMが普及しなくて失敗したとか釣り針でかすぎ。
井の中の蛙というか下水道のゴキブリ。社会に出たことがないのだろう。
井の中の蛙というか下水道のゴキブリ。社会に出たことがないのだろう。
661デフォルトの名無しさん
2022/03/23(水) 23:17:30.63ID:k8Z8CHR2 釣りじゃねーよw
当時OMGのCORBA、JavaのRMI、MSのDCOMとかあったけど、全部潰れてSOAP一択になったろw
今じゃそれも廃れてRESTだけ残ってるw 井の中の蛙はお前w
当時OMGのCORBA、JavaのRMI、MSのDCOMとかあったけど、全部潰れてSOAP一択になったろw
今じゃそれも廃れてRESTだけ残ってるw 井の中の蛙はお前w
662デフォルトの名無しさん
2022/03/23(水) 23:26:20.36ID:e3uFLGnE DCOMその他とCOMを同列に扱うな
663デフォルトの名無しさん
2022/03/23(水) 23:37:17.78ID:k8Z8CHR2 ただのCOMなんて・・・w ActiveXと一部のコントロールで使われただけだろw 一言で言えばゴミw
664デフォルトの名無しさん
2022/03/23(水) 23:48:22.86ID:Rq928qXu 釣りかと思ったらこいつガチの引きこもりやんw
665デフォルトの名無しさん
2022/03/24(木) 00:06:11.51ID:1Vr2GJ3G 自己紹介乙w
ATLほんとに使ったことあんのか?w
俺はWin3.1のMFC/OLE時代からWindowsどっぷりで作りまくってたぞ
Java/.NET以降はWindowsあんまり触らなくなったけどなw
ATLほんとに使ったことあんのか?w
俺はWin3.1のMFC/OLE時代からWindowsどっぷりで作りまくってたぞ
Java/.NET以降はWindowsあんまり触らなくなったけどなw
666デフォルトの名無しさん
2022/03/24(木) 00:19:47.29ID:JVs5nwp2 今でもWindowsはcomの塊。IE、DirectX、Office全部comやで。
一太郎にExcelの表貼れるのも、vbscript、perlからExcel呼べるのも全部comのおかげ。
専ブラが一日で作れるのもcomのおかげ。
規格だけで実装では禄にオブジェクト間通信できなかったCORBAを
COMの対抗馬として本気で持ち出すあたりが無知で笑える。圧倒的MSの勝利。
一太郎にExcelの表貼れるのも、vbscript、perlからExcel呼べるのも全部comのおかげ。
専ブラが一日で作れるのもcomのおかげ。
規格だけで実装では禄にオブジェクト間通信できなかったCORBAを
COMの対抗馬として本気で持ち出すあたりが無知で笑える。圧倒的MSの勝利。
667デフォルトの名無しさん
2022/03/24(木) 01:01:10.28ID:1Vr2GJ3G そりゃWindowsはOLE時代から使ってるから当たり前だろw
むしろ他で使われてなければ負けなんだよw
むしろ他で使われてなければ負けなんだよw
668デフォルトの名無しさん
2022/03/24(木) 01:08:56.24ID:1Vr2GJ3G あと普通にCORBAは結構実装されてんぞ
COMが他のプラットフォームで使われてんの見たことないし、MS以外のCOMもWindowsプラットフォームでも結構レアw
専ブラなんて今どき何で作るのか知らんが、普通ならElectronで書くだろうし、COMってIEコンポーネントで作るのか???w
バカも休み休み言えw
COMが他のプラットフォームで使われてんの見たことないし、MS以外のCOMもWindowsプラットフォームでも結構レアw
専ブラなんて今どき何で作るのか知らんが、普通ならElectronで書くだろうし、COMってIEコンポーネントで作るのか???w
バカも休み休み言えw
669デフォルトの名無しさん
2022/03/24(木) 01:38:18.08ID:y95b8UUh Electronだと外からの操作大変だしアプリへの組み込み難しくなるから(electronの中で戦う苦しい状態に)
普通はWebView2もってくんじゃないかな。
どんな独自アプリでもサクッと組み込めるっしょ。
普通はWebView2もってくんじゃないかな。
どんな独自アプリでもサクッと組み込めるっしょ。
670デフォルトの名無しさん
2022/03/24(木) 02:15:16.69ID:1Vr2GJ3G ないないw Electron超簡単だよw JS書けるだけでいいし、すごい面倒くさいよw 二重管理だからw
WebView2なんてほとんど使ってるやついないだろうし、何でも外からやらないといけないからすごい大変そうw
Webの画面を表示したいのでなければ俺なら絶対に使わないw
WebView2なんてほとんど使ってるやついないだろうし、何でも外からやらないといけないからすごい大変そうw
Webの画面を表示したいのでなければ俺なら絶対に使わないw
671デフォルトの名無しさん
2022/03/24(木) 02:38:00.53ID:+RGleBjy 今はElectronより高速なTauriだな
672デフォルトの名無しさん
2022/03/24(木) 02:39:48.55ID:1Vr2GJ3G TauriとかWebView2よりないw
673デフォルトの名無しさん
2022/03/24(木) 03:31:57.74ID:DeDdmrpu Tauri>>>Electronで大方の勝負ついた感じだな
674デフォルトの名無しさん
2022/03/24(木) 04:02:03.79ID:y95b8UUh Electronて既存で出来上がってるアプリの一部、
一つのタブ内やパネル内に手軽に組み込めるの?
一つのタブ内やパネル内に手軽に組み込めるの?
675はちみつ餃子 ◆8X2XSCHEME
2022/03/24(木) 04:16:18.85ID:3pj9A089 WinRT は COM がベースだよ。
C++ から利用するなら旧来の API より使いやすいんだが、
WinRT もそれほど積極的に活用されてる感じはしないな。
C++ から利用するなら旧来の API より使いやすいんだが、
WinRT もそれほど積極的に活用されてる感じはしないな。
676デフォルトの名無しさん
2022/03/24(木) 04:28:29.36ID:1Vr2GJ3G そこに気付くとはw
C++のままだからな
.NETにすると自動的に変換可能なCOMになるっていうw
C++のままだからな
.NETにすると自動的に変換可能なCOMになるっていうw
677はちみつ餃子 ◆8X2XSCHEME
2022/03/24(木) 04:39:56.11ID:3pj9A089 ?
678デフォルトの名無しさん
2022/03/24(木) 05:46:41.46ID:1Vr2GJ3G .NETのアセンブリは元々publicなら設定によりCOM参照可能に出来る
https://docs.microsoft.com/ja-jp/dotnet/framework/interop/exposing-dotnet-components-to-com
WinRTは言語的な拡張なしに=C++のままで.NET(だけじゃないけどw)とinteractionするので、
https://en.wikipedia.org/wiki/C%2B%2B/WinRT
必然的にCOMになるよねって言っただけw
https://docs.microsoft.com/ja-jp/dotnet/framework/interop/exposing-dotnet-components-to-com
WinRTは言語的な拡張なしに=C++のままで.NET(だけじゃないけどw)とinteractionするので、
https://en.wikipedia.org/wiki/C%2B%2B/WinRT
必然的にCOMになるよねって言っただけw
679デフォルトの名無しさん
2022/03/24(木) 07:07:41.33ID:JVs5nwp2 > むしろ他で使われてなければ負けなんだよw
圧倒的シェアのWindowsではなく
ニッチ市場で使われないと負けという謎のオレオレルールw
圧倒的シェアのWindowsではなく
ニッチ市場で使われないと負けという謎のオレオレルールw
680デフォルトの名無しさん
2022/03/24(木) 07:22:11.34ID:s6VdVAhb イキッてるくせにCOMがそもそも何のためにあるのかがわかってないやつが散見されるな
681デフォルトの名無しさん
2022/03/24(木) 07:44:02.07ID:1Vr2GJ3G そもそも論ならWindowsのコントロール間でデータを授受するための仕組みであるOLEの成れの果てだぞw
ただ最終的に目指していたのはDCOMで、プラットフォーム非依存、DLLヘルからの脱却/GUID(UUID)での識別/バージョン管理などのローカル諸問題解決を含む、RPCだよw
.NET以降は表立って出て来ない形になり、Windowsでカスタムコントロールを作ったりしない限り、言葉としてもほぼほぼ失われたものだと思ってるw
ただ最終的に目指していたのはDCOMで、プラットフォーム非依存、DLLヘルからの脱却/GUID(UUID)での識別/バージョン管理などのローカル諸問題解決を含む、RPCだよw
.NET以降は表立って出て来ない形になり、Windowsでカスタムコントロールを作ったりしない限り、言葉としてもほぼほぼ失われたものだと思ってるw
682デフォルトの名無しさん
2022/03/24(木) 07:47:15.28ID:JVs5nwp2 > COMが他のプラットフォームで使われてんの見たことない
つ OpenVMS
つ OpenVMS
683デフォルトの名無しさん
2022/03/24(木) 07:55:15.79ID:1Vr2GJ3G VAXは流石に名前しか知らんw マニアックすぎるだろw
Openになってからも興味ないし、Alphaチップマシンは使ったことあるけど、普通にWindows動いてたよw
Openになってからも興味ないし、Alphaチップマシンは使ったことあるけど、普通にWindows動いてたよw
684デフォルトの名無しさん
2022/03/24(木) 08:11:46.86ID:s6VdVAhb APIの提供形態ってだけ
APIで発行された要求を処理している何者かがどこにあろうがそういう問題じゃないし
他の類似するものと比べるのもナンセンス
VirualAllocとGETMAINを比べるような不毛な話だ
APIで発行された要求を処理している何者かがどこにあろうがそういう問題じゃないし
他の類似するものと比べるのもナンセンス
VirualAllocとGETMAINを比べるような不毛な話だ
685デフォルトの名無しさん
2022/03/24(木) 08:34:27.56ID:1Vr2GJ3G そこでIBMとか・・・時代遅れにもほどがあるでしょ
なんでそんなどんどん話を逸していくの?
俺はDCOM的意味合いでしかCOMという用語を使ってないし、文脈的にはプラットフォーム非依存な話だと思ってたんだがw
なんでそんなどんどん話を逸していくの?
俺はDCOM的意味合いでしかCOMという用語を使ってないし、文脈的にはプラットフォーム非依存な話だと思ってたんだがw
686デフォルトの名無しさん
2022/03/24(木) 09:33:43.04ID:JVs5nwp2 C++はオブジェクト思考言語で、COMやCORBAはオブジェクト間通信の技術で、
ネットワーク越し、異処理系間通信もできるからといってそれのみと限定するほうが謎。
しかもコケたCORBAはともかくCOMが普及せず失敗したとかMS-OfficeやWindowsは普及してないと言ってるようなもの。
OLEの成れの果てと言うが木を見て森を見ずというか、むしろ草を見て地球を見ずレベル。
ネットワーク越し、異処理系間通信もできるからといってそれのみと限定するほうが謎。
しかもコケたCORBAはともかくCOMが普及せず失敗したとかMS-OfficeやWindowsは普及してないと言ってるようなもの。
OLEの成れの果てと言うが木を見て森を見ずというか、むしろ草を見て地球を見ずレベル。
687デフォルトの名無しさん
2022/03/24(木) 13:52:17.42ID:TSqeyWkd 氷河期世代特有のMSアンチおっさんは放置しておけ
688デフォルトの名無しさん
2022/03/24(木) 16:22:26.20ID:M4wmYApX template引数によって関数の定義有無を変えたいのですが、そのようなことは可能でしょうか?
template<typename T>
class Test
{
public :
FuncA(){ ・・・ }
FuncB(){ ・・・ } ←Tがfloat型以外のときに定義するようにしたい
}
template<typename T>
class Test
{
public :
FuncA(){ ・・・ }
FuncB(){ ・・・ } ←Tがfloat型以外のときに定義するようにしたい
}
689デフォルトの名無しさん
2022/03/24(木) 16:50:06.09ID:6Nkoi7KJ >>687
Linuxとかに手を出して、ちょっとPCに詳しくなった気になってMSアンチになるやつはどの世代にもいるから安心しろw
Linuxとかに手を出して、ちょっとPCに詳しくなった気になってMSアンチになるやつはどの世代にもいるから安心しろw
690デフォルトの名無しさん
2022/03/24(木) 17:02:11.79ID:RVLAMmSf691デフォルトの名無しさん
2022/03/24(木) 17:11:46.20ID:s6VdVAhb conceptは要するにSFINAEだから
C++17ならこういけばいい
auto FuncB() -> std::enable_if_t<!std::is_same_v<T, float>, void> {}
C++17ならこういけばいい
auto FuncB() -> std::enable_if_t<!std::is_same_v<T, float>, void> {}
693デフォルトの名無しさん
2022/03/24(木) 17:57:10.73ID:OAaMfHu2 あとは特化テンプレートとか
694デフォルトの名無しさん
2022/03/24(木) 18:00:33.75ID:s6VdVAhb 最近のっつーかenable_ifはC++11から使えるぞ
696デフォルトの名無しさん
2022/03/24(木) 18:09:14.56ID:RVLAMmSf >>691
そのSFINAEはまずい
class Test<float>が実体化された時点でfuncBが実体化される
(funcBはtemplateではない)
実体化した時点でfuncBの返り値型がtemplate依存のenable_ifではなくなるためコンパイルエラーになる
そのSFINAEはまずい
class Test<float>が実体化された時点でfuncBが実体化される
(funcBはtemplateではない)
実体化した時点でfuncBの返り値型がtemplate依存のenable_ifではなくなるためコンパイルエラーになる
697デフォルトの名無しさん
2022/03/24(木) 19:35:07.28ID:1Vr2GJ3G MSアンチはどの世代でも世界的に多いし、WindowsありきのOLEのような技術だけを指してCOMと言ってたら、Windowsの普及=MS Officeの普及=COMの普及になってしまうからなw
C++=OOP言語=RPCはCOM/CORBAというのは普通に自然w
Windowsだけで普及を語るのは正に草を見て地球を見ずレベルw
OSSなモノだと逆にWindowsだけ動かないという現象も日常茶飯事w それくらい嫌われているw
また部分だけで動かない例挙げて、メチャクチャになってるなw
ちゃんと動く例を挙げて、条件を明確にしとけw
_tとか_vとかもあれだしw
Windows坊やたちはこれだから・・・w
// C++11〜
#include <type_traits>
template<typename T> auto FuncB() -> typename std::enable_if<!std::is_same<T, float>::value, void>::type {}
int main() {
// FuncB(); // error: no matching function for call to ‘FuncB()’
// FuncB<float>(); // error: no matching function for call to ‘FuncB()’
FuncB<int>();
return 0;
}
C++=OOP言語=RPCはCOM/CORBAというのは普通に自然w
Windowsだけで普及を語るのは正に草を見て地球を見ずレベルw
OSSなモノだと逆にWindowsだけ動かないという現象も日常茶飯事w それくらい嫌われているw
また部分だけで動かない例挙げて、メチャクチャになってるなw
ちゃんと動く例を挙げて、条件を明確にしとけw
_tとか_vとかもあれだしw
Windows坊やたちはこれだから・・・w
// C++11〜
#include <type_traits>
template<typename T> auto FuncB() -> typename std::enable_if<!std::is_same<T, float>::value, void>::type {}
int main() {
// FuncB(); // error: no matching function for call to ‘FuncB()’
// FuncB<float>(); // error: no matching function for call to ‘FuncB()’
FuncB<int>();
return 0;
}
698デフォルトの名無しさん
2022/03/24(木) 22:24:41.52ID:eqpcVqC2 MSアンチというよりもMSの囲い込みが強引すぎて、他の環境を知ってしまうとMSから離れたくなるだけでは?
699デフォルトの名無しさん
2022/03/24(木) 22:30:06.36ID:bdM8JANZ どうしてもC++17以前でSFINAEでやんなきゃいけないなら無理矢理template依存にするしかない
ようこそ黒魔術の世界へ...
#include<type_traits>
template<class T>
class Test{
public:
template<int...dummy, typename std::enable_if<sizeof...(dummy)==sizeof...(dummy)&&!std::is_same<T,float>::value, int>::type = 0>
void funcB(){}
};
int main(){
Test<int> t1;
Test<float> t2;
t1.funcB();
//t2.funcB();
}
ようこそ黒魔術の世界へ...
#include<type_traits>
template<class T>
class Test{
public:
template<int...dummy, typename std::enable_if<sizeof...(dummy)==sizeof...(dummy)&&!std::is_same<T,float>::value, int>::type = 0>
void funcB(){}
};
int main(){
Test<int> t1;
Test<float> t2;
t1.funcB();
//t2.funcB();
}
700デフォルトの名無しさん
2022/03/24(木) 23:04:17.88ID:MDLggK/J MSよりマックの囲い込みのほうが鼻につくと思うのは自分だけだろうか
701デフォルトの名無しさん
2022/03/24(木) 23:13:46.53ID:1Vr2GJ3G apple>>>MS>>>>>それ以外って感じの強さw
702デフォルトの名無しさん
2022/03/24(木) 23:16:10.29ID:y95b8UUh 囲い込みの点ではハードから開発環境からストアに至るまでアップルは異常な囲い込み。
社外に対しては会社も各社員も殆ど貢献しねぇし。
アップルのためだけに請け負い会社潰しながら株価あげるため活動しとる。
社外に対しては会社も各社員も殆ど貢献しねぇし。
アップルのためだけに請け負い会社潰しながら株価あげるため活動しとる。
703デフォルトの名無しさん
2022/03/24(木) 23:27:03.23ID:k3BsWDgY MSの囲い込みとか言ってるのは爺だけだろ
OSSにどんだけ貢献してると思ってるんだよ
OSSにどんだけ貢献してると思ってるんだよ
704デフォルトの名無しさん
2022/03/24(木) 23:44:46.04ID:1Vr2GJ3G いやいやなんかWeb系のTypeScriptとかvscodeとかazureとかそういうのはいいんだよw
問題はWindows本体w
まともに動かないレベルのハードに未対応というのは分かるけど、どう見ても性能的に問題ないハードを対象外にしちゃうWindows11はどう考えてもやり過ぎw
問題はWindows本体w
まともに動かないレベルのハードに未対応というのは分かるけど、どう見ても性能的に問題ないハードを対象外にしちゃうWindows11はどう考えてもやり過ぎw
705デフォルトの名無しさん
2022/03/24(木) 23:45:11.78ID:rNy1eSrz 悪のゲイシ帝国。
706デフォルトの名無しさん
2022/03/24(木) 23:46:28.20ID:rNy1eSrz UEFIとチンポ2.0はセキュリティでは?
707デフォルトの名無しさん
2022/03/25(金) 00:01:19.19ID:m/iwpp86 >>703
VSCodeが囲い込みツールだもん、使えねぇって
VSCodeが囲い込みツールだもん、使えねぇって
708デフォルトの名無しさん
2022/03/25(金) 01:09:44.76ID:XVe+E9v/ Mac は、Homebrew, Fastlane とか、Rubyist が作らないと滅ぶw
CircleCI の料金表のmedium のクレジットは、
Docker 10, Windows 40, Mac 50
囲い込みとは思えないほど、高い
CircleCI の料金表のmedium のクレジットは、
Docker 10, Windows 40, Mac 50
囲い込みとは思えないほど、高い
709デフォルトの名無しさん
2022/03/25(金) 02:12:51.70ID:72EwLK9c >>704
Windows11のハード対象外は囲い込みとは言わないのでは?
Windows11のハード対象外は囲い込みとは言わないのでは?
710デフォルトの名無しさん
2022/03/25(金) 03:06:03.91ID:5+dT7ErM >>704
アップルなんて自社製のマシンでしか動かないんだけど
アプリも自社製のマシンでしか開発できないし
ストアも自社製しか認めない
自社製のアプリの邪魔になるものは開発を認めなかったり審査で落す
こういうのを囲いこみっていうんだけど・・
アップルなんて自社製のマシンでしか動かないんだけど
アプリも自社製のマシンでしか開発できないし
ストアも自社製しか認めない
自社製のアプリの邪魔になるものは開発を認めなかったり審査で落す
こういうのを囲いこみっていうんだけど・・
711デフォルトの名無しさん
2022/03/25(金) 03:15:43.43ID:MgzERarD Appleは開き直ってとことん囲い込みを追求してるからこそ逆に認められてるところがある
開発言語からしてObjective-CとSwiftっていう独自言語で徹底してる
MSは中途半端にC++標準に擦り寄ってるのがよくないね
開発言語からしてObjective-CとSwiftっていう独自言語で徹底してる
MSは中途半端にC++標準に擦り寄ってるのがよくないね
712デフォルトの名無しさん
2022/03/25(金) 05:45:38.18ID:rvvBDzFl VSCodeが囲い込みツール?
Linuxでも動くしそもそもOSSなんだけど…
Visual Studioと言うならまだわかるけどw
Linuxでも動くしそもそもOSSなんだけど…
Visual Studioと言うならまだわかるけどw
713デフォルトの名無しさん
2022/03/25(金) 06:08:26.54ID:6oNwnU1m iTunesが おきあがり
なかまに なりたそうに こちらをみている!
なかまに してあげますか?
┌───┐
│⇒はい│
│いいえ│
└───┘
iTunesが なかまに くわわった!
QuickTimeが なかまに くわわった!
Bonjour for Windowsが なかまに くわわった!
Apple Mobile Device Supportが なかまに くわわった!
Apple Software Updateが なかまに くわわった!
MobileMeが なかまに くわわった!
Apple Application Supportが なかまに くわわった!
Apple Software Updateが Safariを よびよせた!
Apple Software Updateが iPhoneソフトウェアを よびよせた!
:::::::::::.: .:. . ∧_∧ . . . .: ::::::::
:::::::: :.: . . /彡ミ゛ヽ;)ヽ、. ::: : ::
::::::: :.: . . / :::/:: ヽ、ヽ、i . .:: :.: :::
 ̄ ̄ ̄(_,ノ  ̄ ̄ヽ、_ノ ̄
QuickTime をアンインストールしますか?
>はい
なんとiTunes はしんでしまった!
QTTASKはぶきみにほえている!
なかまに なりたそうに こちらをみている!
なかまに してあげますか?
┌───┐
│⇒はい│
│いいえ│
└───┘
iTunesが なかまに くわわった!
QuickTimeが なかまに くわわった!
Bonjour for Windowsが なかまに くわわった!
Apple Mobile Device Supportが なかまに くわわった!
Apple Software Updateが なかまに くわわった!
MobileMeが なかまに くわわった!
Apple Application Supportが なかまに くわわった!
Apple Software Updateが Safariを よびよせた!
Apple Software Updateが iPhoneソフトウェアを よびよせた!
:::::::::::.: .:. . ∧_∧ . . . .: ::::::::
:::::::: :.: . . /彡ミ゛ヽ;)ヽ、. ::: : ::
::::::: :.: . . / :::/:: ヽ、ヽ、i . .:: :.: :::
 ̄ ̄ ̄(_,ノ  ̄ ̄ヽ、_ノ ̄
QuickTime をアンインストールしますか?
>はい
なんとiTunes はしんでしまった!
QTTASKはぶきみにほえている!
714デフォルトの名無しさん
2022/03/25(金) 07:22:48.15ID:Sf6AbPmi 「資源を独占的に確保すること」の意味での囲い込みw
Windowsで市場を独占し、離れる場合のリスクとコストを高めてから、高コストを強いるw
appleがやってるのは独占ではないけど、購入後に高コストを強いる同じ仕組みw
Windowsで市場を独占し、離れる場合のリスクとコストを高めてから、高コストを強いるw
appleがやってるのは独占ではないけど、購入後に高コストを強いる同じ仕組みw
715デフォルトの名無しさん
2022/03/25(金) 08:04:40.58ID:KarnMDBa macbookで動くwindows見かけると思わず笑みがこぼれるわ
716デフォルトの名無しさん
2022/03/25(金) 08:06:57.63ID:PW5qBu6I MSが資源を独占的に確保したわけじゃなくて
作りやすいWindows、使いやすいWindowsとユーザが選んだ結果だからね
相乗効果で結果的に市場を埋め尽くしているに過ぎず独占しているわけじゃないけどね
Macが誰にでも開発しやすい環境だったり
linux等が誰にでも使いやすい環境だったならMS市場にはならなかったかもしれない
でもまあMacもWindowsと同じ道を進んでいたら生き残っていなかったかもしれないけど
作りやすいWindows、使いやすいWindowsとユーザが選んだ結果だからね
相乗効果で結果的に市場を埋め尽くしているに過ぎず独占しているわけじゃないけどね
Macが誰にでも開発しやすい環境だったり
linux等が誰にでも使いやすい環境だったならMS市場にはならなかったかもしれない
でもまあMacもWindowsと同じ道を進んでいたら生き残っていなかったかもしれないけど
717デフォルトの名無しさん
2022/03/25(金) 08:13:25.03ID:bHihdD5b 互換性重視で昔はシェア伸ばしたMSも
なぜかAppleのマネして切り捨てするようになってシェア落としてる。
なぜかAppleのマネして切り捨てするようになってシェア落としてる。
718デフォルトの名無しさん
2022/03/25(金) 08:32:50.33ID:Sf6AbPmi ほんと頭悪いな・・・OS資源を独占的に確保してるでしょw
719デフォルトの名無しさん
2022/03/25(金) 09:03:46.71ID:bHihdD5b マカーはほんと馬鹿だからな
720デフォルトの名無しさん
2022/03/25(金) 09:09:22.13ID:PW5qBu6I >>718
OS資源って何?
OS資源って何?
721デフォルトの名無しさん
2022/03/25(金) 09:12:25.62ID:rQC9vpY7 嫌ならLinuxでも使えば?w
722デフォルトの名無しさん
2022/03/25(金) 09:15:06.51ID:6oNwnU1m723デフォルトの名無しさん
2022/03/25(金) 09:16:17.27ID:haNY4PtR 最近はGPUパススルー備えたKVMでLinuxでもほぼパフォーマンスペナ無しでWindows用ゲームできるらしいけどほんまなん?
724デフォルトの名無しさん
2022/03/25(金) 09:20:09.35ID:KE5lJ15x725デフォルトの名無しさん
2022/03/25(金) 10:53:37.87ID:6oNwnU1m 同じソフトをホストとゲストで使い比べるとやっぱ体感速度違うからな
726デフォルトの名無しさん
2022/03/25(金) 12:39:31.11ID:Sf6AbPmi apple製品は買ってないし、Native LinuxもWindowsも使ってるが、WindowsのVC++使いはスレ違いの話題をいつまで続ける気なんだ?
727デフォルトの名無しさん
2022/03/25(金) 18:58:24.97ID:NAR86/dh >>726
OS資源って何?
OS資源って何?
728デフォルトの名無しさん
2022/03/25(金) 19:10:47.53ID:3+VV5Xxj 50代になると30代の2割以下の量になるらしいから大事にしろよ
729デフォルトの名無しさん
2022/03/25(金) 19:30:24.85ID:5XdEy59o ぐり@関賢太郎 航空軍事記者
https://twitter.com/gripen_ng/status/1507210000024104972
何年か前、日本から韓国へのフッ化水素輸出に制限をかける外交摩擦あったよね。
あれで韓国製のガリウム砒素半導体を輸入していたロシアへ供給が止まり、ロシアの軍用AESAレーダーの生産が遅れ、戦闘機への搭載もできなくなるドミノ倒しになっていたことに気付いてしまった。
国際社会から孤立ってこわい
https://twitter.com/5chan_nel (5ch newer account)
https://twitter.com/gripen_ng/status/1507210000024104972
何年か前、日本から韓国へのフッ化水素輸出に制限をかける外交摩擦あったよね。
あれで韓国製のガリウム砒素半導体を輸入していたロシアへ供給が止まり、ロシアの軍用AESAレーダーの生産が遅れ、戦闘機への搭載もできなくなるドミノ倒しになっていたことに気付いてしまった。
国際社会から孤立ってこわい
https://twitter.com/5chan_nel (5ch newer account)
730デフォルトの名無しさん
2022/03/26(土) 02:00:27.84ID:w1Z+3JKm >>726
OS資源って何?
OS資源って何?
731デフォルトの名無しさん
2022/03/26(土) 22:01:10.04ID:+PRSGS1Y 整数で添え字アクセス可能なコンテナの要素を自身の添え字0〜n-1で初期化したい場合どう書くのがスマート?
<algorithm>の他の手段と同様の記述スタイルで書けるならそれに統一したいのでつが、、、
やっぱ
std::vector<int> arr((size_t)n);
for (int i = 0; i < n; i++) { arr[i] = i; }
というふうにチョー具体的にfor文とループ変数iを手で書くのに勝る妙案無し?
<algorithm>の他の手段と同様の記述スタイルで書けるならそれに統一したいのでつが、、、
やっぱ
std::vector<int> arr((size_t)n);
for (int i = 0; i < n; i++) { arr[i] = i; }
というふうにチョー具体的にfor文とループ変数iを手で書くのに勝る妙案無し?
732デフォルトの名無しさん
2022/03/26(土) 22:09:33.63ID:RpKSs2nj733デフォルトの名無しさん
2022/03/26(土) 22:15:39.57ID:O3+9n+yo イオタ\(^o^)/
734デフォルトの名無しさん
2022/03/26(土) 22:31:07.82ID:+PRSGS1Y >>732
なるほど<numeric>とかヘッダファイル自体使ってなかったわチョーdクス、
なるほど<numeric>とかヘッダファイル自体使ってなかったわチョーdクス、
735デフォルトの名無しさん
2022/03/26(土) 22:42:20.07ID:QEpYloYB イオタ\(^o^)/は草
736デフォルトの名無しさん
2022/03/26(土) 22:51:45.23ID:vQB7bLSM >>726
OS資源って何?
OS資源って何?
737デフォルトの名無しさん
2022/03/26(土) 23:43:36.18ID:9q2PYIcF また自演してるしwwwww ようやくiotaを知ったのねw
738デフォルトの名無しさん
2022/03/27(日) 18:49:59.41ID:lspELT3N 初歩的な質問すみません、2,3時間かかってもわからなかったのでここで質問させてください。
独学で3か月くらいの初心者です。
int iResult=1;
wchar_t* ShowStr = new wchar_t;
wsprintf(ShowStr, L"socket failed with error: %d", iResult);
delete ShowStr;
ShowStrはポインタで確保したのでdeleteしないと溜まってしまいますよね?
ShowStrは配列なのかなと思ったのですがdelete[]だとVS先生に怒られてしまいます。
配列の先頭だけ消してしまって残りの部分が参照できない形で残ってるとかそういうことなのかなと思った
のですが、だとすればどうすれば良いかもわからない次第です。
deleteの使い方一応は調べてみたつもりなのですが、
どなたか教えていただけませんでしょうか。
独学で3か月くらいの初心者です。
int iResult=1;
wchar_t* ShowStr = new wchar_t;
wsprintf(ShowStr, L"socket failed with error: %d", iResult);
delete ShowStr;
ShowStrはポインタで確保したのでdeleteしないと溜まってしまいますよね?
ShowStrは配列なのかなと思ったのですがdelete[]だとVS先生に怒られてしまいます。
配列の先頭だけ消してしまって残りの部分が参照できない形で残ってるとかそういうことなのかなと思った
のですが、だとすればどうすれば良いかもわからない次第です。
deleteの使い方一応は調べてみたつもりなのですが、
どなたか教えていただけませんでしょうか。
739デフォルトの名無しさん
2022/03/27(日) 18:54:07.95ID:uW5IEa4H #include <string>
std::wstring mojimoji = L"モジモジ ///";
std::wstring mojimoji = L"モジモジ ///";
740デフォルトの名無しさん
2022/03/27(日) 18:56:35.96ID:7vIiVU2b741デフォルトの名無しさん
2022/03/27(日) 18:58:29.72ID:7vIiVU2b >>738
あと、一個分のメモリしか確保できてないから、そこに
socketなんちゃらって文字列入れようとするとエラーになると思われる
だから
wchar_t* ShowStr = new wchar_t[200];
みたいにするのが正解か
あと、一個分のメモリしか確保できてないから、そこに
socketなんちゃらって文字列入れようとするとエラーになると思われる
だから
wchar_t* ShowStr = new wchar_t[200];
みたいにするのが正解か
742デフォルトの名無しさん
2022/03/27(日) 18:59:23.81ID:7vIiVU2b743デフォルトの名無しさん
2022/03/27(日) 19:31:30.48ID:lspELT3N >>742
ありがとうございます。
おかげさまで解決できました。
コンパイル時にどれだけのメモリを確保するのかは明確に分かっていたほうがよいのですね
今日は初めてダイアログからソケットをつなげることが出来たし、やっとエラーが出なくなって
何とか枕を高くして眠れそうです。ありがとうございます。
ありがとうございます。
おかげさまで解決できました。
コンパイル時にどれだけのメモリを確保するのかは明確に分かっていたほうがよいのですね
今日は初めてダイアログからソケットをつなげることが出来たし、やっとエラーが出なくなって
何とか枕を高くして眠れそうです。ありがとうございます。
744デフォルトの名無しさん
2022/03/27(日) 19:33:51.31ID:lspELT3N >>739
wstringというものを初めて知りました。
今回はLPWSTRの必要があったので使わなかったのですが、
ワイド文字を使う上で必要な知識が増えました。
ありがとうございます。
・・・手帳持ちなんだけど就職できるといいなぁ、未経験で
wstringというものを初めて知りました。
今回はLPWSTRの必要があったので使わなかったのですが、
ワイド文字を使う上で必要な知識が増えました。
ありがとうございます。
・・・手帳持ちなんだけど就職できるといいなぁ、未経験で
745デフォルトの名無しさん
2022/03/27(日) 19:45:45.04ID:uW5IEa4H >>744
うまくいきますよーに☆
うまくいきますよーに☆
746デフォルトの名無しさん
2022/03/27(日) 19:52:33.76ID:lspELT3N >>745
ありがとうございます(≧∀≦๑)ゞ
ありがとうございます(≧∀≦๑)ゞ
747デフォルトの名無しさん
2022/03/27(日) 20:24:01.35ID:nbMAc3Vl pythonのプラグイン作成ライブラリpybind11は今やwstringが標準
さもないとWindows対応できない
さもないとWindows対応できない
748688
2022/03/27(日) 21:15:33.59ID:Fwb/ewtW749デフォルトの名無しさん
2022/03/27(日) 21:21:28.16ID:PoGWmBV8 wstringしか使えないゴミライブラリなんて使わないでいいよw いつもの自演君w
750デフォルトの名無しさん
2022/03/27(日) 21:35:17.61ID:VLMZp/O7 wstring なんかいらない…普通に std:::basic_string<char16_t> とかで十分
https://ideone.com/uQKe4J
というか、wstring なんかさっさと obsolete/deprecated にすればいいのに、ほんと馬鹿ですね
https://ideone.com/uQKe4J
というか、wstring なんかさっさと obsolete/deprecated にすればいいのに、ほんと馬鹿ですね
751デフォルトの名無しさん
2022/03/27(日) 22:00:38.95ID:rG9TE9zE std::basic_string<TCHAR>とかはまれによくやる……
が操作や表示に_tで始まる関数を使わなければならないから
移植性とともに魂を損なわれていく気がするので
特段の理由が無い限りWin32APIの方を末尾Aので呼ぶことにしてstd::stringで通すようになった今日このごろ……
>>749
残念、自演君は私だ
が操作や表示に_tで始まる関数を使わなければならないから
移植性とともに魂を損なわれていく気がするので
特段の理由が無い限りWin32APIの方を末尾Aので呼ぶことにしてstd::stringで通すようになった今日このごろ……
>>749
残念、自演君は私だ
752デフォルトの名無しさん
2022/03/27(日) 22:07:12.24ID:nbMAc3Vl > まれによくやる
どっちなの
どっちなの
753デフォルトの名無しさん
2022/03/27(日) 22:08:19.23ID:PoGWmBV8 2垢でIDがうまく操作できてない感出まくってるw
754デフォルトの名無しさん
2022/03/27(日) 22:10:49.45ID:rG9TE9zE >>753の書くコードはことごとく根拠が欠けているのであろうことは想像に難くない
検証とかどこ世界の話?、レヴェルかと、
検証とかどこ世界の話?、レヴェルかと、
755デフォルトの名無しさん
2022/03/27(日) 22:33:58.84ID:nbMAc3Vl 確かに反ワクチンとかウクライナはネオナチとかこじらせてそう
756デフォルトの名無しさん
2022/03/27(日) 22:59:19.24ID:K7MWSPEs >>751
WindowsというOSはwchar_tが標準装備であってcharを受け付ける***A はWin9xのレガシーなのだよ...
Win32API向けの文字列操作はwchar_t系に統一するべきなのだが...
大体のC/C++コードは(ファイルIOですら)charがベースなので、Win32APIとの相互運用で***Wを使うことが苦痛になる
WindowsというOSはwchar_tが標準装備であってcharを受け付ける***A はWin9xのレガシーなのだよ...
Win32API向けの文字列操作はwchar_t系に統一するべきなのだが...
大体のC/C++コードは(ファイルIOですら)charがベースなので、Win32APIとの相互運用で***Wを使うことが苦痛になる
757デフォルトの名無しさん
2022/03/27(日) 23:25:52.46ID:QKAmAp06 Microsoftは馬鹿かと思う。
勝手にBitlockerがかかって、「この箱には鍵がかかっています。その鍵をあける番号は
箱の中にあります。」の連続。
勝手にBitlockerがかかって、「この箱には鍵がかかっています。その鍵をあける番号は
箱の中にあります。」の連続。
758デフォルトの名無しさん
2022/03/27(日) 23:36:32.07ID:PoGWmBV8 そんなことみんな知ってて言ってるだろw 何を今更w
通常C/C++だと低レベルな処理はプラットフォームでAPI分けるから、Windowsでは仕方なく(可能な範囲で)ワイド文字を使用する仕様にしたりすることもある、というくらいw
でもターゲットがWindowsだけだと逆に癖で文字にtypedef切ったり_T使ったりする不思議w
通常C/C++だと低レベルな処理はプラットフォームでAPI分けるから、Windowsでは仕方なく(可能な範囲で)ワイド文字を使用する仕様にしたりすることもある、というくらいw
でもターゲットがWindowsだけだと逆に癖で文字にtypedef切ったり_T使ったりする不思議w
759デフォルトの名無しさん
2022/03/27(日) 23:49:21.31ID:nbMAc3Vl Pythonの内部コードはUTF-16らしいよ
760デフォルトの名無しさん
2022/03/28(月) 02:22:28.60ID:51Y1Thh9761デフォルトの名無しさん
2022/03/28(月) 08:08:46.35ID:DkKihmtS ボクが考えるWindowsスレですか、ここは。
762デフォルトの名無しさん
2022/03/28(月) 08:45:03.78ID:zvnGSWPp どうでもいいけど、黒魔術とかコンセプト神とかなんとか大袈裟な言い回し、ブログとかでよく見るんだろうけど
あまり真似しない方がいい気はする
あまり真似しない方がいい気はする
763デフォルトの名無しさん
2022/03/28(月) 08:56:12.53ID:HSBaMW3J やたら絵文字を使いまくる頭悪そうなメールとノリが似てるね
764デフォルトの名無しさん
2022/03/28(月) 11:30:00.76ID:npKEPSZJ765デフォルトの名無しさん
2022/03/28(月) 11:35:09.55ID:4U9zlcIi 鼻から悪魔とか自分を足を撃つとか
そういう言い回し好きなアマチュアが吸い寄せられるのがC++って感じする
もちろん、仕事で嫌々使わされてる連中は除く
そういう言い回し好きなアマチュアが吸い寄せられるのがC++って感じする
もちろん、仕事で嫌々使わされてる連中は除く
766デフォルトの名無しさん
2022/03/28(月) 11:37:17.98ID:npKEPSZJ767デフォルトの名無しさん
2022/03/28(月) 13:30:08.02ID:HSBaMW3J fjによく出没していた河野ってやつが言ってた
「C++はちょっと気が狂ったようなところがある言語」
あんまりあいつに同調したくないがこれは言い得て妙だ
これは何から何までキチガイ仕様ばっかりという意味ではない
たまに首をかしげる変なところがあるってことだ
「C++はちょっと気が狂ったようなところがある言語」
あんまりあいつに同調したくないがこれは言い得て妙だ
これは何から何までキチガイ仕様ばっかりという意味ではない
たまに首をかしげる変なところがあるってことだ
768デフォルトの名無しさん
2022/03/28(月) 13:39:02.76ID:yqBWM3bb 難しいコード書けても設計出来ないとなんの意味もないしな
769デフォルトの名無しさん
2022/03/28(月) 15:23:35.37ID:DkKihmtS 他人が読めないコード書いてマウンティングする文化があるからな。
770デフォルトの名無しさん
2022/03/28(月) 16:26:35.03ID:R1D4p1O0771デフォルトの名無しさん
2022/03/28(月) 21:04:31.59ID:f80bfIyg >>765
それは C だ…
それは C だ…
772デフォルトの名無しさん
2022/03/28(月) 21:31:46.30ID:Uu0YihOb 色々すっきりわかりやすくなってプログラミング効率の良いRustと比べればC/C++どちらも
773デフォルトの名無しさん
2022/03/29(火) 08:04:21.14ID:mWQ/GdlN >>772
学習曲線をなだらかにしてから言いな。とりあえずNGにしとくわ。
学習曲線をなだらかにしてから言いな。とりあえずNGにしとくわ。
774デフォルトの名無しさん
2022/03/29(火) 08:09:47.04ID:LEuYcsU9 > 学習曲線をなだらか
C++が言うな
C++が言うな
775デフォルトの名無しさん
2022/03/29(火) 09:12:38.67ID:V3Kl11Pp 学習曲線をなだらかって何
776デフォルトの名無しさん
2022/03/29(火) 09:40:35.27ID:FuLLa2J8 >>765
最近買ったRust本の帯に、もう二度と自分の足を撃ちたくないならって書いてあった。何なのこれ?
最近買ったRust本の帯に、もう二度と自分の足を撃ちたくないならって書いてあった。何なのこれ?
777デフォルトの名無しさん
2022/03/29(火) 09:40:51.62ID:UOqSecAo 学習曲線なだらかだったらいつまでたっても習熟が進まないんだよなあ
778デフォルトの名無しさん
2022/03/29(火) 10:05:42.16ID:WvuxHdPq 舌触りなめらか
779デフォルトの名無しさん
2022/03/29(火) 10:21:02.72ID:HFhqj5qW ちんちんシュッシュッシュッ!
780デフォルトの名無しさん
2022/03/29(火) 10:46:35.81ID:MRVYy131 >>776
何なのってFPSゲームでしょ
何なのってFPSゲームでしょ
781デフォルトの名無しさん
2022/03/29(火) 11:27:10.53ID:l/5rTAs8 >>777
絶壁だったら学習できないよ。
第一、プログラミング言語を学習したいなんて奇人は少ないだろ。普通はプログラムを作りたいだけだし。
昔Accelerated C++みたいなC++を使うための入門書があったけど、ああいうのを整備する団体とか無いんかな。
絶壁だったら学習できないよ。
第一、プログラミング言語を学習したいなんて奇人は少ないだろ。普通はプログラムを作りたいだけだし。
昔Accelerated C++みたいなC++を使うための入門書があったけど、ああいうのを整備する団体とか無いんかな。
782デフォルトの名無しさん
2022/03/29(火) 13:24:22.14ID:oJxqSb9h783デフォルトの名無しさん
2022/03/29(火) 13:36:11.92ID:owrRZ3L6 設計ヘタクソなヤツは致命的、いや、池沼的なの居るからな
Rust養成ギブスで勉強してこいカスって感じ
Rust養成ギブスで勉強してこいカスって感じ
784デフォルトの名無しさん
2022/03/29(火) 15:03:31.53ID:ijYpt7F/ >>783
Rustやったところで、Pythonのインデントスタイルの勉強と一緒でRustスタイルのコーディングしかできなくなるだけだよ。
C++のプログラム技術向上のためにRustを勉強するとか、まったく意味無い。
Rustやったところで、Pythonのインデントスタイルの勉強と一緒でRustスタイルのコーディングしかできなくなるだけだよ。
C++のプログラム技術向上のためにRustを勉強するとか、まったく意味無い。
785デフォルトの名無しさん
2022/03/29(火) 15:26:21.04ID:6kEE5hUV786デフォルトの名無しさん
2022/03/29(火) 15:32:53.51ID:owrRZ3L6 グローバル変数でi宣言してるヤツとか
理由聞くと書くの面倒くさいからとか
池沼にも程がある
理由聞くと書くの面倒くさいからとか
池沼にも程がある
787デフォルトの名無しさん
2022/03/29(火) 19:18:21.80ID:ijYpt7F/ >>785
スレ違い。ここに書き込むの禁止な。
下のスレに行け。
C vs C++ vs Rust Part.3
ttps://mevius.5ch.net/test/read.cgi/tech/1643289587/
スレ違い。ここに書き込むの禁止な。
下のスレに行け。
C vs C++ vs Rust Part.3
ttps://mevius.5ch.net/test/read.cgi/tech/1643289587/
788デフォルトの名無しさん
2022/03/29(火) 19:46:14.12ID:LEuYcsU9 面倒だからメンバは全部public
789デフォルトの名無しさん
2022/03/29(火) 20:17:40.82ID:rprUptDm structって書けよ
790デフォルトの名無しさん
2022/03/29(火) 22:21:49.66ID:JBheGd8b structなんぞ頼らずnamespaceに全部書けよ
791デフォルトの名無しさん
2022/03/29(火) 22:27:01.22ID:pxj3Uqek structはデフォルトがprivateでclassはデフォルトがpublicなことを考えるといっそclassを消してしまった方が愚かな設計がなくなるのでは?
792デフォルトの名無しさん
2022/03/29(火) 22:40:45.57ID:q6aCWf20 >>791
それってRustじゃん
それってRustじゃん
793デフォルトの名無しさん
2022/03/29(火) 22:45:51.77ID:42Nx7yvC RustRustうるせーっつーの
巣に帰れ
巣に帰れ
794デフォルトの名無しさん
2022/03/29(火) 23:12:23.14ID:LEuYcsU9 キチガイrust厨しね
795デフォルトの名無しさん
2022/03/30(水) 06:33:06.22ID:8NFBSa0P >>781
学習曲線は横軸時間で縦軸習熟度の曲線やから絶壁が効率よくて、水平やったら誰も理解できん、という曲線やで
学習曲線は横軸時間で縦軸習熟度の曲線やから絶壁が効率よくて、水平やったら誰も理解できん、という曲線やで
796デフォルトの名無しさん
2022/03/30(水) 07:12:05.54ID:7Zu/8ZF2797デフォルトの名無しさん
2022/03/30(水) 08:22:59.56ID:WX1Rp50C >>796
本当だ逆だった…お恥ずかしい
本当だ逆だった…お恥ずかしい
798デフォルトの名無しさん
2022/03/30(水) 12:47:10.06ID:mFVNBRSc しばらくpythonとか触ってたけど今更C++の隠蔽設計とかバカらしく思えてきた
800デフォルトの名無しさん
2022/03/30(水) 19:26:05.50ID:xRfGRGrW オープンな性格なのです
801デフォルトの名無しさん
2022/03/30(水) 23:38:58.59ID:rveKwnBH >>767
河野@琉球大学?(記憶モード
河野@琉球大学?(記憶モード
802デフォルトの名無しさん
2022/03/30(水) 23:47:02.15ID:rveKwnBH しばらくgoとか触ってたけど今更C++のクラスベースのオブジェクト指向とかバカらしく思えてきた
803デフォルトの名無しさん
2022/03/30(水) 23:49:39.17ID:rveKwnBH ていうかプログラミング言語とか人間の愚かさに対する対策なので
特にシンタックスシュガー的な言語要素は突き詰めれば突き詰めるほど頭おかしい言語になっていくのは必定
特にシンタックスシュガー的な言語要素は突き詰めれば突き詰めるほど頭おかしい言語になっていくのは必定
804デフォルトの名無しさん
2022/03/30(水) 23:52:55.50ID:eQfKD0DM >>802
GoもRustもclassなんてなくてstructしかないが困らないもんな
GoもRustもclassなんてなくてstructしかないが困らないもんな
805デフォルトの名無しさん
2022/03/31(木) 01:51:31.09ID:nXMYhSR8 >>802,804
チンチャそれな!
チンチャそれな!
806デフォルトの名無しさん
2022/03/31(木) 02:10:02.10ID:lTtwcp13 C++とオブジェクト指向を関連付けて考えるからおかしくなる
C++の内包する多様なパラダイムの中にオブジェクト指向が含まれてるだけ
C++の良いところは何でもありなところ
C++の内包する多様なパラダイムの中にオブジェクト指向が含まれてるだけ
C++の良いところは何でもありなところ
807デフォルトの名無しさん
2022/03/31(木) 02:53:58.08ID:lTtwcp13 C++のclassもオブジェクト指向のための文法として捉えるべきではない
808デフォルトの名無しさん
2022/03/31(木) 03:00:57.77ID:3NXOGCnE C++のclassにpolymorphicというキーワードがあればclassとして理解しやすかっただろうに
C++自体が古いから仕方ない面もあるのだが
C++自体が古いから仕方ない面もあるのだが
809デフォルトの名無しさん
2022/03/31(木) 05:37:45.41ID:ZLovgCJ7 >>804
C++ も struct だけでもたいして困らんけどな
C++ も struct だけでもたいして困らんけどな
810デフォルトの名無しさん
2022/03/31(木) 06:50:05.99ID:yEOSoCRj SmalltalkやEiffielみたいにOOPとしての完璧さを目指した言語ではないからなC++は
PascalへのアンチテーゼがCであったように、完璧さを目指すことへのアンチテーゼでもある
そこを批判するやつとは根本的に相容れない
PascalへのアンチテーゼがCであったように、完璧さを目指すことへのアンチテーゼでもある
そこを批判するやつとは根本的に相容れない
811デフォルトの名無しさん
2022/03/31(木) 06:54:16.14ID:ivAOVlIc CからC++へ行かずに
CからGoとRustへ行けば十分に問題ない
CからGoとRustへ行けば十分に問題ない
812デフォルトの名無しさん
2022/03/31(木) 08:09:28.04ID:il5bYK9P813デフォルトの名無しさん
2022/03/31(木) 17:34:12.61ID:4cSTCvUa814デフォルトの名無しさん
2022/03/31(木) 17:45:20.70ID:R4GrqV7T 河野氏になんか恨みあんの?
俺知り合いだから代わりに言っとくよ
俺知り合いだから代わりに言っとくよ
815デフォルトの名無しさん
2022/03/31(木) 19:53:32.15ID:mHRscCZz if (xmm0 == xmm1)って下のやり方しかない?
_mm_movemask_epi8(_mm_cmpeq_epi...) == 0xFFFF
_mm_movemask_epi8(_mm_cmpeq_epi...) == 0xFFFF
816デフォルトの名無しさん
2022/03/31(木) 21:25:00.23ID:SxSNo1AU817デフォルトの名無しさん
2022/04/01(金) 01:39:47.02ID:/eP2awHk PTESTがあるぞ
818デフォルトの名無しさん
2022/04/01(金) 20:07:44.20ID:kF+DLIFz819デフォルトの名無しさん
2022/04/02(土) 03:00:41.15ID:JI80ciY+ ハンガリアン記法、いまだ健在なり
820デフォルトの名無しさん
2022/04/02(土) 05:57:08.65ID:iaVgC0+D プログラムほぼ未経験だけどこれから始めます
今は坊主頭の人の本を読み始めたところです
IDEのCLionを考えています
他におすすめあったら教えてください
今は坊主頭の人の本を読み始めたところです
IDEのCLionを考えています
他におすすめあったら教えてください
821デフォルトの名無しさん
2022/04/02(土) 08:28:40.83ID:KzPuamrt Visual studioオススメ。VSCode+CMakeでもいいぞ
822デフォルトの名無しさん
2022/04/02(土) 12:16:55.77ID:roqf8g4r bitsetで実装し終わった後にvector<bool>がconstexpr対応してる事知ったんだが?
はー先に教えてくれよ(クソデカため息)
はー先に教えてくれよ(クソデカため息)
823デフォルトの名無しさん
2022/04/02(土) 12:49:25.68ID:/j0/DBCU vector<bool>なんか使っちゃいけません
824デフォルトの名無しさん
2022/04/02(土) 14:22:05.97ID:YBLKDYh3 bitsetを実現するのならvector<bool>は妥当
だと思う派
だと思う派
825デフォルトの名無しさん
2022/04/02(土) 14:30:40.42ID:YBLKDYh3 しかしvectorKbool>様のブツ(一般に数千ビットとかのデカくて比較的疎なやつ)がconstexpr対応している
と特段のありがたみと
かあるん??
と特段のありがたみと
かあるん??
826デフォルトの名無しさん
2022/04/02(土) 14:35:10.49ID:X+p83iug 二進法で書いちまった方が…
827デフォルトの名無しさん
2022/04/02(土) 14:36:56.48ID:T5fexWVc vector<bool> 駄目って言ってる奴らって思考停止のバカでしょ
「特殊化されてるのである時は注意が必要」というのを理解できず思考停止でとりあえず禁止と見なしてるバカ
「特殊化されてるのである時は注意が必要」というのを理解できず思考停止でとりあえず禁止と見なしてるバカ
828デフォルトの名無しさん
2022/04/02(土) 14:38:37.01ID:YBLKDYh3 これか
https://cpprefjp.github.io/lang/cpp20/more_constexpr_containers.html
やっぱ内部でループのみならず、new / deleteするような関数までconstexprであってほしいと願うマニアが一定数居るんやな……
https://cpprefjp.github.io/lang/cpp20/more_constexpr_containers.html
やっぱ内部でループのみならず、new / deleteするような関数までconstexprであってほしいと願うマニアが一定数居るんやな……
829デフォルトの名無しさん
2022/04/02(土) 14:40:50.98ID:CNYN+CEs キューとかスタック的な使い方なら自然だと思うね
830デフォルトの名無しさん
2022/04/02(土) 14:44:28.98ID:p6D1htC0 一度作ってみたけどconstexpr関数内でnewしたらその関数内でdeleteまでしなきゃいけないのは使いづらい気がする
831デフォルトの名無しさん
2022/04/02(土) 14:53:16.59ID:ARI85DWJ まずはvector<bool>で実装してみて問題あるなら考える派
832デフォルトの名無しさん
2022/04/02(土) 14:53:28.58ID:YBLKDYh3 だがちょっとまって欲しい毎秒1億も2億も回るようなループの中でこそ高速化が必須だが
そんなループ内でnew /deleteしようとする発想が最初からなんかおかしいのではないか
そんなループ内でnew /deleteしようとする発想が最初からなんかおかしいのではないか
833デフォルトの名無しさん
2022/04/03(日) 18:44:27.58ID:NmP3n2Yz struct Hoge
{
std::vector<Hoge> hoges_;
};
ってなんでコンパイル通るの?
hoges_の定義時点ではまだ、Hogeの定義は完了していないのに。
{
std::vector<Hoge> hoges_;
};
ってなんでコンパイル通るの?
hoges_の定義時点ではまだ、Hogeの定義は完了していないのに。
834デフォルトの名無しさん
2022/04/03(日) 19:05:25.24ID:Yvr+7/y4 struct Hoge {
Hoge* ptr;
};
が通るのと同じ理屈なんじゃない?
Hoge* ptr;
};
が通るのと同じ理屈なんじゃない?
835デフォルトの名無しさん
2022/04/03(日) 19:25:23.89ID:7tOdFV5I ソースコード次第やな
allocatorでサイズ使いそうなもんだけど
allocatorでサイズ使いそうなもんだけど
836デフォルトの名無しさん
2022/04/03(日) 19:33:06.66ID:5C/3HoVM 宣言の時点では別に適当
837デフォルトの名無しさん
2022/04/03(日) 19:35:01.81ID:BfkCmsi5 宣言?
どこにも宣言のみの記述はありませんけど?
どこにも宣言のみの記述はありませんけど?
838デフォルトの名無しさん
2022/04/03(日) 19:48:52.09ID:CJTxuxUG 半角全角使うな厨が絶滅しますように (AA略
839デフォルトの名無しさん
2022/04/03(日) 20:07:54.56ID:Mnzv/avn 定義自体は再帰してても大丈夫じゃない?
840デフォルトの名無しさん
2022/04/03(日) 20:32:55.79ID:sNbs7j4z841デフォルトの名無しさん
2022/04/03(日) 20:58:54.41ID:NWvQ4doQ 参照だったらサイズが一意になるから問題なく処理できる
実態だったら無間地獄に落とされるからNG
実態だったら無間地獄に落とされるからNG
842デフォルトの名無しさん
2022/04/03(日) 21:17:02.42ID:sNbs7j4z843デフォルトの名無しさん
2022/04/03(日) 22:20:50.07ID:wOH19oBO えっstd::vector<T> hoge_; とやった場合Tが何であってもその場でhoge_のサイズは決まるから
struct Hogeのメモリレイアウトは鎧袖一触で決まるか
ら何の問題も無い
決まらないのはhoge_のインスタンスがポインタで保持することになるヒープ上の領域のサイズであって
struct Hogeのサイズは上述の通りstruct Hogeの定義を一通り見たとき鎧袖一触で決まっているから
Hoge::hoge_をインスタンス化するタイミングで問題無くインスタンス化されるという印象のような希ガス
いや知らんけど
※ 個人の感想です
struct Hogeのメモリレイアウトは鎧袖一触で決まるか
ら何の問題も無い
決まらないのはhoge_のインスタンスがポインタで保持することになるヒープ上の領域のサイズであって
struct Hogeのサイズは上述の通りstruct Hogeの定義を一通り見たとき鎧袖一触で決まっているから
Hoge::hoge_をインスタンス化するタイミングで問題無くインスタンス化されるという印象のような希ガス
いや知らんけど
※ 個人の感想です
844デフォルトの名無しさん
2022/04/03(日) 22:33:18.09ID:wOH19oBO とオモタがなんかVS2019(C++14)で試したら以下のコードのビルドが通る怪現象やな……
template<class T, int N>
class VarArr {
int T[N];
};
struct Hoge {
VarArr<Hoge, 3> m_arr;
int m_x;
};
Hoge x;
多分環境に拠るんだと思う
template<class T, int N>
class VarArr {
int T[N];
};
struct Hoge {
VarArr<Hoge, 3> m_arr;
int m_x;
};
Hoge x;
多分環境に拠るんだと思う
845デフォルトの名無しさん
2022/04/03(日) 22:35:40.26ID:wOH19oBO VarArr<T, N>の定義をまつがえたサーセン……orz
以下のコードなら正しくビルドエラーになる
template<class T, int N>
class VarArr {
T m_arr0[N];
};
struct Hoge {
VarArr<Hoge, 3> m_arr;
int m_x;
};
Hoge x;
ワイの答えはこれや!
以下のコードなら正しくビルドエラーになる
template<class T, int N>
class VarArr {
T m_arr0[N];
};
struct Hoge {
VarArr<Hoge, 3> m_arr;
int m_x;
};
Hoge x;
ワイの答えはこれや!
846デフォルトの名無しさん
2022/04/03(日) 23:14:48.08ID:Mnzv/avn >>839で適当に回答したけどメンバとしてを実体で持つかポインタで持つかで通るかが決まるな
847デフォルトの名無しさん
2022/04/03(日) 23:38:16.75ID:sNbs7j4z struct Hoge
{
int a[sizeof(Hoge)];
};
はHogeがまだ定義されていないから、コンパイルできない
だったら、なぜ
std::vector<Hoge> hoges_;
は許可できるんだ
{
int a[sizeof(Hoge)];
};
はHogeがまだ定義されていないから、コンパイルできない
だったら、なぜ
std::vector<Hoge> hoges_;
は許可できるんだ
848デフォルトの名無しさん
2022/04/03(日) 23:53:21.86ID:dOp+WKyA >>847
規格的に問題ないからだが、まあポインタなんでサイズ知らんでもええからだな
規格的に問題ないからだが、まあポインタなんでサイズ知らんでもええからだな
849デフォルトの名無しさん
2022/04/04(月) 00:18:36.05ID:F+M9/rKi >>847
std::vector<Hoge> hoges_; はクラスないしstructのサイズには影響しないからじゃないの?
そのクラスないしstructはstd::vector<Hoge> hoges_へのアドレスを保持するだけでしょ?
クラスないしstructの中でのhoges_のサイズはすでに決まっている
std::vector<Hoge> hoges_; はクラスないしstructのサイズには影響しないからじゃないの?
そのクラスないしstructはstd::vector<Hoge> hoges_へのアドレスを保持するだけでしょ?
クラスないしstructの中でのhoges_のサイズはすでに決まっている
850デフォルトの名無しさん
2022/04/04(月) 00:23:58.82ID:NuCanqg0851デフォルトの名無しさん
2022/04/04(月) 09:09:53.47ID:14cK0a9Z >>843
鎧袖一触の使い方間違いで草w
鎧袖一触の使い方間違いで草w
852デフォルトの名無しさん
2022/04/04(月) 23:12:20.74ID:JNKuDAOB 4、5年c++やってるけどまともなものを作れない
どれくらいで、ネットで有名なソフトって作れるものなの?
例えばvscodeみたいな便利なアプリ
どれくらいで、ネットで有名なソフトって作れるものなの?
例えばvscodeみたいな便利なアプリ
853デフォルトの名無しさん
2022/04/04(月) 23:46:47.47ID:9GHqD2yn >>852
VScodeはElectronつまりJavaScriptで書かれてるよね
VScodeはElectronつまりJavaScriptで書かれてるよね
854デフォルトの名無しさん
2022/04/05(火) 00:26:55.67ID:btSnYNGS >>852
C++Builderが楽だよ
C++Builderが楽だよ
855デフォルトの名無しさん
2022/04/05(火) 01:43:21.89ID:QuV3GhxG windowsは触ったことがない
856デフォルトの名無しさん
2022/04/05(火) 02:00:35.56ID:QYslDBWm ならばElectronかTauriがオススメ
WindowsだけでなくMacでもLinuxでも動くマルチプラットフォーム
WindowsだけでなくMacでもLinuxでも動くマルチプラットフォーム
857デフォルトの名無しさん
2022/04/05(火) 06:11:04.09ID:PM3+0qST858デフォルトの名無しさん
2022/04/05(火) 10:33:40.77ID:FcLzG6G8859デフォルトの名無しさん
2022/04/05(火) 17:09:26.03ID:PM3+0qST 「成功者」の法則をなぞるだけでは成果は出せない
そんなの誰でもできるから
形振り構うことより興味の向くまま突っ走るほうが肝心
そうして何かを成し遂げると自分なりの法則ができている
それまで周りは散々バカにしてくれるが
そんなのに折られないメンタルも大事だ
そんなの誰でもできるから
形振り構うことより興味の向くまま突っ走るほうが肝心
そうして何かを成し遂げると自分なりの法則ができている
それまで周りは散々バカにしてくれるが
そんなのに折られないメンタルも大事だ
860デフォルトの名無しさん
2022/04/05(火) 17:46:09.74ID:YcgsN5By メモリマップドファイルのライブラリが標準入りするのってまだまだ先ですか??
標準ライブラリとするのに何か問題でもあるの?
標準ライブラリとするのに何か問題でもあるの?
861デフォルトの名無しさん
2022/04/05(火) 19:10:03.35ID:Ssg9XCyk <filesystem>ですら入ったの最近だしあんまり期待してない
socketとかのネットワークライブラリも標準にはないんだぜ?
socketとかのネットワークライブラリも標準にはないんだぜ?
862はちみつ餃子 ◆8X2XSCHEME
2022/04/05(火) 19:53:34.34ID:AUzgrMft >>852
個人でなんらかのソフトを作る場合には「動くプログラム」を意識するといいよ。
構想通りに設計しようとするよりは機能を極小に絞ってでも動く状態のプログラムを作ってみて、
それを拡張していくという形にすれば行き詰まったところが学ぶべきことが潜んでいるところだとわかる。
ある程度までいったら最初から作り直したくなるときがくる。
学びながら作ったものなんてろくでもないんだから作り直すはめになるもんなんだよ。
どうせ作り直すと割り切って色々やってみればいい。
個人でなんらかのソフトを作る場合には「動くプログラム」を意識するといいよ。
構想通りに設計しようとするよりは機能を極小に絞ってでも動く状態のプログラムを作ってみて、
それを拡張していくという形にすれば行き詰まったところが学ぶべきことが潜んでいるところだとわかる。
ある程度までいったら最初から作り直したくなるときがくる。
学びながら作ったものなんてろくでもないんだから作り直すはめになるもんなんだよ。
どうせ作り直すと割り切って色々やってみればいい。
863デフォルトの名無しさん
2022/04/05(火) 20:56:02.32ID:6DtMUNMI Googleの人もイテレーティブな開発が良いって言ってたなあ
864デフォルトの名無しさん
2022/04/05(火) 21:08:43.94ID:79YAP4SX あーすべき、こーすべきと雁字搦めにPGを縛る硬直的で強迫的な教条主義が
投げやりなやっつけ仕事を大量生産するという教訓から色々な提案が出てるのに
教わったことにしがみつく後ろ向きな人が悪しき循環を継続させちまう
投げやりなやっつけ仕事を大量生産するという教訓から色々な提案が出てるのに
教わったことにしがみつく後ろ向きな人が悪しき循環を継続させちまう
865デフォルトの名無しさん
2022/04/05(火) 21:15:39.04ID:YcgsN5By C++って他の言語と違って何でも出来るから情報収集に時間使いすぎるんだよな
プランAからZまであらゆる手法を検討して最善手を打たなければどこかで詰む事になる
プランAからZまであらゆる手法を検討して最善手を打たなければどこかで詰む事になる
866デフォルトの名無しさん
2022/04/05(火) 21:15:57.95ID:rM7yNqDT 大昔の記憶だけどメモリマップというかネットワーク系のライブラリはC++に追加されないのかって聞いたときに
OS依存の仕様は実装されないって聞いた記憶あるけど最近のC++は方針変わったのか?
OS依存の仕様は実装されないって聞いた記憶あるけど最近のC++は方針変わったのか?
867デフォルトの名無しさん
2022/04/05(火) 22:34:00.51ID:QFtrY3nt C++とSTLは別だよ
868デフォルトの名無しさん
2022/04/05(火) 22:39:47.79ID:vLZKRt0y threadみたいにするならかまわんのだろ
869デフォルトの名無しさん
2022/04/05(火) 22:54:42.49ID:79YAP4SX プロセスがサポートされないアレでか
870はちみつ餃子 ◆8X2XSCHEME
2022/04/05(火) 23:18:25.53ID:AUzgrMft スレッドは OS が提供するスレッドと一対一で対応することを意図しているという記述がある。
https://timsong-cpp.github.io/cppwp/n3337/thread.threads#1
スレッドを持たないシステムに対応付けるならスレッドの生成に常に失敗するような実装になってても仕様には反しないんじゃない?
noexcept は例外を送出しないことを保証するけど実行時エラーがないことを保証するわけではない。
https://timsong-cpp.github.io/cppwp/n3337/thread.threads#1
スレッドを持たないシステムに対応付けるならスレッドの生成に常に失敗するような実装になってても仕様には反しないんじゃない?
noexcept は例外を送出しないことを保証するけど実行時エラーがないことを保証するわけではない。
871デフォルトの名無しさん
2022/04/05(火) 23:23:24.49ID:79YAP4SX 今さらDOSでC++11か
いや否定はできんけど・・・
いや否定はできんけど・・・
872デフォルトの名無しさん
2022/04/05(火) 23:31:23.00ID:EtikemGC プロセスを持ち出す意味がわからん
スレッドがあればいいんじゃ?
スレッドがあればいいんじゃ?
873デフォルトの名無しさん
2022/04/05(火) 23:37:46.31ID:79YAP4SX なんで?
アドレス空間の多重化とプロセス間通信はOSが違ったら移植性なしで割り切るの?
アドレス空間の多重化とプロセス間通信はOSが違ったら移植性なしで割り切るの?
874デフォルトの名無しさん
2022/04/05(火) 23:42:47.00ID:EtikemGC それがないとスレッドも許されんという理屈がわからない
875デフォルトの名無しさん
2022/04/05(火) 23:52:53.92ID:79YAP4SX スレッドも許されないなんて主張してないが
876デフォルトの名無しさん
2022/04/06(水) 07:13:16.72ID:e/YNs2XJ 質問ですがイテレータ間の距離はstd::distance<T>(first, last)で求められるそうなんですが
求めた距離を再びイテレータに戻す場合はどうすれば良いですのん?firstとlastがラ
ンダムアクセスイテレータならfirst + std::distance(last, first) == lastが成立するという具合に
足せば良いけどランダムアクセスイテレータか否かによらず共通に使えるテンプレートは?
求めた距離を再びイテレータに戻す場合はどうすれば良いですのん?firstとlastがラ
ンダムアクセスイテレータならfirst + std::distance(last, first) == lastが成立するという具合に
足せば良いけどランダムアクセスイテレータか否かによらず共通に使えるテンプレートは?
877デフォルトの名無しさん
2022/04/06(水) 08:10:41.61ID:tJlAug24878デフォルトの名無しさん
2022/04/06(水) 08:51:32.67ID:hbDmvmaG >>876
std::advance(イテレタ,求めた距離)
std::advance(イテレタ,求めた距離)
879デフォルトの名無しさん
2022/04/06(水) 14:47:30.60ID:/VxyOfiN technical default とかいう新技が出てきたね
880デフォルトの名無しさん
2022/04/06(水) 18:03:31.71ID:OIlaSdNT みなさん多次元配列ってどうやって持ってますか?
・blas, lapack等fortranの資源を使いたいからローメジャー、カラムメジャーは宣言時に決めたい
・添字アクセスがネイティブの多次元配列並みに早い
・STLコンテナみたいに使える
等の条件を満たす良いライブラリありますかね
本当はSTLに入ってほしいんですが、なぜ未だにないんですかね?
・blas, lapack等fortranの資源を使いたいからローメジャー、カラムメジャーは宣言時に決めたい
・添字アクセスがネイティブの多次元配列並みに早い
・STLコンテナみたいに使える
等の条件を満たす良いライブラリありますかね
本当はSTLに入ってほしいんですが、なぜ未だにないんですかね?
881デフォルトの名無しさん
2022/04/06(水) 18:15:07.58ID:Iu/ahyl1 ネイティブの多次元配列とは
882デフォルトの名無しさん
2022/04/06(水) 18:18:59.68ID:OIlaSdNT883デフォルトの名無しさん
2022/04/06(水) 18:30:19.00ID:aY4pnG+o eigen gmtlとか?
884デフォルトの名無しさん
2022/04/06(水) 19:07:48.95ID:ofj8wLUE 1つめがよーわからんけど
・次元数はコンパイル時決定
・要素数もコンパイル時決定
・子要素のサイズは全て同じ(arr[0].size()==arr[1].size() が常に成り立つ)
ってことでええの?
それなら単純にstd::array<std::array<T, 4>,5>でいいとは思うが
・次元数はコンパイル時決定
・要素数もコンパイル時決定
・子要素のサイズは全て同じ(arr[0].size()==arr[1].size() が常に成り立つ)
ってことでええの?
それなら単純にstd::array<std::array<T, 4>,5>でいいとは思うが
885デフォルトの名無しさん
2022/04/06(水) 19:36:43.45ID:vJ8PYFJ1 全部arrayだとスタックに配置される事あるからvector<array>でやってるな
886デフォルトの名無しさん
2022/04/06(水) 21:17:51.29ID:tUlkAQY7 >>880
std::mdspanというのが提案中だがまだ時間かかりそう
std::mdspanというのが提案中だがまだ時間かかりそう
887デフォルトの名無しさん
2022/04/06(水) 23:18:21.83ID:NvxWnsbd888デフォルトの名無しさん
2022/04/07(木) 03:17:05.89ID:yw7pyl+g889デフォルトの名無しさん
2022/04/07(木) 03:34:21.33ID:zyrTrwHF 柔軟な多重配列なんて自分ですぐ作っておしまいな話なのに
なぜ標準にないとかライブラリがないと言い出したり将来の仕様に期待するとか意味不明
なぜ標準にないとかライブラリがないと言い出したり将来の仕様に期待するとか意味不明
890デフォルトの名無しさん
2022/04/07(木) 03:49:06.16ID:g2f/LEmv numpyを使う。もちろん他にpython併用する理由があればだけど。
ローメジャーなのでメモリ上での向きは個別にやってる。
ローメジャーなのでメモリ上での向きは個別にやってる。
891デフォルトの名無しさん
2022/04/07(木) 05:59:06.00ID:kMhdBz2h >>880
blas使いたいんならstd::sliceがモロそのものだよ
blas使いたいんならstd::sliceがモロそのものだよ
892デフォルトの名無しさん
2022/04/07(木) 06:13:35.95ID:yw7pyl+g893デフォルトの名無しさん
2022/04/07(木) 06:17:36.20ID:OOyqDhdW あるクラスのコンストラクタがvector<int>をとるんだけど、たまにvector<size_t>を渡したいときがあるからオーバーロードするようにしたらambiguousだとエラーが出た
1) ambiguous にならない方法はありますか
2) vector<size_t>の各要素がintの範囲に収まるくらい小さいとき、これをvector<int>にキャストするナイスな書き方はありますか
1) ambiguous にならない方法はありますか
2) vector<size_t>の各要素がintの範囲に収まるくらい小さいとき、これをvector<int>にキャストするナイスな書き方はありますか
894デフォルトの名無しさん
2022/04/07(木) 06:40:42.70ID:kMhdBz2h ambigousにはならんようだが
https://ideone.com/YrFYsI
https://ideone.com/YrFYsI
895デフォルトの名無しさん
2022/04/07(木) 07:18:15.48ID:3YRGB6r4896デフォルトの名無しさん
2022/04/07(木) 08:17:57.53ID:CaxjwvsJ ファイルならまだしもオンメモリーで高速なランダムアクセスとか言語の範囲では工夫しようがなくね?
897デフォルトの名無しさん
2022/04/07(木) 08:32:07.21ID:Ym/mh0iz 近傍のアクセスが速いというのは言語関係ないしな
898デフォルトの名無しさん
2022/04/07(木) 10:27:53.88ID:2nzlX6cZ そういえばSTLのコンテナに[]で範囲外アクセスしたとき、デバッグモードだとちゃんとアサート出してくれるけど
あれってSTL実装した人がそう書いたから出るの?それともOSの機能か何か?
あれってSTL実装した人がそう書いたから出るの?それともOSの機能か何か?
899デフォルトの名無しさん
2022/04/07(木) 10:32:39.68ID:2HgVVA+6 全てそう書いたから出るんだよ
OSはレイヤが違う話
OSはレイヤが違う話
900デフォルトの名無しさん
2022/04/07(木) 10:39:14.99ID:2nzlX6cZ へえ、じゃやっぱマクロ使ってガシガシ書いてるんだろうね
自分じゃ絶対やりたくないなw
自分じゃ絶対やりたくないなw
901デフォルトの名無しさん
2022/04/07(木) 17:34:09.66ID:mHsgrYEE ifdefで括るだけだろ
902デフォルトの名無しさん
2022/04/07(木) 18:22:02.97ID:kMhdBz2h >>898
ルール上、保証がないことでも
やってくれてることって、どこにでもあるだろ
operator[](size_t)で範囲外アクセスした場合の動作は未定義なので
どんな扱いをされても合法なんだよ
# 一時期流行った気持ち悪い喩えはもうしない
ルール上、保証がないことでも
やってくれてることって、どこにでもあるだろ
operator[](size_t)で範囲外アクセスした場合の動作は未定義なので
どんな扱いをされても合法なんだよ
# 一時期流行った気持ち悪い喩えはもうしない
903デフォルトの名無しさん
2022/04/07(木) 21:49:18.59ID:6+zrl0OG SNSの気持ち悪いノリ持ち込むなよ
904デフォルトの名無しさん
2022/04/08(金) 01:44:38.29ID:jwLlCRWe >>900
お客様根性丸出しのプログラマとか・・・
お客様根性丸出しのプログラマとか・・・
905デフォルトの名無しさん
2022/04/09(土) 13:06:11.18ID:NDf9sYGT メモリが足らないから64ビットにするとかいうやつがいて
ソース見たら
double hoge[300][300][300];
って笑った
ソース見たら
double hoge[300][300][300];
って笑った
906デフォルトの名無しさん
2022/04/09(土) 13:37:31.78ID:gSPSOhuN 64bit化だけじゃ無理でしょ
スタックサイズを512MBぐらいにしなきゃ
スタックサイズを512MBぐらいにしなきゃ
907デフォルトの名無しさん
2022/04/09(土) 13:47:10.70ID:a9m8EYfT ツッコミどころが違う…
32bitのままヒープに確保で十分だから
32bitのままヒープに確保で十分だから
908デフォルトの名無しさん
2022/04/09(土) 13:49:15.33ID:jXZanj6A ヒープを使って良いのはアマチュアまでだからな
909デフォルトの名無しさん
2022/04/09(土) 13:53:57.22ID:qQptZxW8 世の中マシン性能で解決おじさんみたいなのばっかり
910デフォルトの名無しさん
2022/04/09(土) 14:20:15.81ID:erlZKZM8911はちみつ餃子 ◆8X2XSCHEME
2022/04/09(土) 15:54:11.32ID:LbeQCC1G デフォルトでのスタックサイズ上限がだいぶん小さめ (数メガバイト程度) になってるのは
基本的にそれで足りる、 なるべくそれで足りるように書けという暗黙の圧力だと思う。
必要に応じて柔軟に対処すりゃいいけど、最初からあえて逆らうべきでもないだろ。
なんでもかんでもスタックを使ってるとデバッガで追いづらいし、
流れを制御するための変数と処理する対象になるデータ (大抵はある程度に大きい) は分けたい。
回路設計に喩えると制御線と動力線を分けるみたいな感じ。
(わかりにくい比喩ですまんがあくまで感覚なのでこういう形でしか表現できない。)
基本的にそれで足りる、 なるべくそれで足りるように書けという暗黙の圧力だと思う。
必要に応じて柔軟に対処すりゃいいけど、最初からあえて逆らうべきでもないだろ。
なんでもかんでもスタックを使ってるとデバッガで追いづらいし、
流れを制御するための変数と処理する対象になるデータ (大抵はある程度に大きい) は分けたい。
回路設計に喩えると制御線と動力線を分けるみたいな感じ。
(わかりにくい比喩ですまんがあくまで感覚なのでこういう形でしか表現できない。)
912ハノン ◆QZaw55cn4c
2022/04/09(土) 16:35:28.22ID:50hSXO1R >>911
>回路設計に喩えると制御線と動力線を分けるみたいな感じ。
昔、試作基盤として、天地にべったり Vcc とアースを上辺と下辺に貼り付けて、間に島(ランド)をたくさん並べるっていうのを聞いたことがあります
どういう名称だったか忘れちゃいましたが…
>回路設計に喩えると制御線と動力線を分けるみたいな感じ。
昔、試作基盤として、天地にべったり Vcc とアースを上辺と下辺に貼り付けて、間に島(ランド)をたくさん並べるっていうのを聞いたことがあります
どういう名称だったか忘れちゃいましたが…
913デフォルトの名無しさん
2022/04/09(土) 16:45:04.63ID:erlZKZM8 おれおれコーディングルールを開陳されても困る
914デフォルトの名無しさん
2022/04/09(土) 18:42:32.24ID:njPxFZn6915デフォルトの名無しさん
2022/04/09(土) 19:24:26.54ID:mI1Pq9ZL 300が何の数字か知らんけど、それが変更や拡張で800くらいになったら溢れるんだから
64bitが必要って判断はなくはないでしょ
何の数字か知らんけど
64bitが必要って判断はなくはないでしょ
何の数字か知らんけど
916デフォルトの名無しさん
2022/04/09(土) 19:56:02.24ID:NDf9sYGT >>915
君は本物のバカだな
君は本物のバカだな
917デフォルトの名無しさん
2022/04/09(土) 21:01:35.50ID:/RZJpXw8 規格にスタックって出てくる?
918デフォルトの名無しさん
2022/04/09(土) 22:53:29.39ID:NDf9sYGT 出てくるわけねーじゃん
バカですか?
バカですか?
919デフォルトの名無しさん
2022/04/09(土) 23:32:57.29ID:lfgNvR7s std::threadで作ったスレッドのスタックサイズは1 MBで
変更はできないら
しい
今日日は仮想メモリがあるからなリ
ッチなマシンなら……
変更はできないら
しい
今日日は仮想メモリがあるからなリ
ッチなマシンなら……
920デフォルトの名無しさん
2022/04/10(日) 01:07:52.01ID:OW76vhVn 標準ライブラリなんて普通使わないだろ
汎用的にしすぎてて、いらない機能が多いからやたらと遅いし
汎用的にしすぎてて、いらない機能が多いからやたらと遅いし
921デフォルトの名無しさん
2022/04/10(日) 01:48:34.97ID:vpYyJyBE 標準以外なにをつかうんだ
922デフォルトの名無しさん
2022/04/10(日) 04:47:34.93ID:Fso6oKAR _beginthreadex()
923デフォルトの名無しさん
2022/04/10(日) 05:15:04.39ID:RmTwSS8K pthread
924デフォルトの名無しさん
2022/04/10(日) 05:58:59.81ID:xcZwEbFY <thread>で抽象化されていないOS特有の機能を使いたきゃAPI使うってだけ
925デフォルトの名無しさん
2022/04/10(日) 11:29:27.51ID:lpHEMRFm926デフォルトの名無しさん
2022/04/10(日) 11:37:41.44ID:vpYyJyBE >>925
被せるだけじゃなくて自作すんの?
被せるだけじゃなくて自作すんの?
927デフォルトの名無しさん
2022/04/10(日) 11:57:59.43ID:Np98oj9K ちんちんシュッ!シュッ!シュッ!
928デフォルトの名無しさん
2022/04/10(日) 13:14:21.25ID:wqaUV7TG929デフォルトの名無しさん
2022/04/10(日) 16:50:49.57ID:8UzTPUX4930デフォルトの名無しさん
2022/04/11(月) 06:43:40.41ID:x3kzaSAd 関数群をまとめたいときってクラスで切るべき? 名前空間で切るべき?
例えば sub1、 sub2 というサブルーチンがあって、これらが func1、func2 から呼ばれるときに、これらをまとめたいと思うんです
例えば sub1、 sub2 というサブルーチンがあって、これらが func1、func2 から呼ばれるときに、これらをまとめたいと思うんです
931デフォルトの名無しさん
2022/04/11(月) 06:51:36.36ID:r64ZejsB べきという言い方はあまり好まんが
関数間で連携させるならクラス
連携しない単なるグループなら名前空間
というのが俺がよく使う手だ
関数間で連携させるならクラス
連携しない単なるグループなら名前空間
というのが俺がよく使う手だ
932デフォルトの名無しさん
2022/04/11(月) 06:54:00.91ID:sjzgKw67 > これらをまとめたいと思うんです
どうまとめたいんだよ…
どうまとめたいんだよ…
933デフォルトの名無しさん
2022/04/11(月) 12:12:27.70ID:sxIacEU4 mc++d読んだけど、これが20年前以上に書かれたってことがすごいな
今となっては、当たり前のことをばっかだけど
当時は革新的だったんじゃないかな
今となっては、当たり前のことをばっかだけど
当時は革新的だったんじゃないかな
934はちみつ餃子 ◆8X2XSCHEME
2022/04/11(月) 13:01:51.57ID:7nQKgh0L >>930
特定の範囲でしか使わない関数があるという意味?
それだけの理由なら名前空間でもクラスでも分ける必要はない。
その翻訳単位で内部リンケージにしておけば十分だよ。
名前空間やクラスは外部に対してどう見せるかの問題なんだから
機能単位の中で階層を分ける必要はあんまりない。
特定の範囲でしか使わない関数があるという意味?
それだけの理由なら名前空間でもクラスでも分ける必要はない。
その翻訳単位で内部リンケージにしておけば十分だよ。
名前空間やクラスは外部に対してどう見せるかの問題なんだから
機能単位の中で階層を分ける必要はあんまりない。
935デフォルトの名無しさん
2022/04/11(月) 15:33:36.87ID:gXppguDy そういや翻訳単位の管理として新しくモジュールがc++20から導入されたけど、使い心地どうかしらん?
既存コードもモジュール化した方がいいくらい便利だったりするのかしらん?
既存コードもモジュール化した方がいいくらい便利だったりするのかしらん?
936デフォルトの名無しさん
2022/04/11(月) 16:44:48.15ID:bKclHLZw937デフォルトの名無しさん
2022/04/11(月) 19:36:19.35ID:KtON6/oU >>935
昨年末あたりにvisual studioで試したらどうやってもビルド通らなくて諦めたけど今もう使えるようになってるんかな
昨年末あたりにvisual studioで試したらどうやってもビルド通らなくて諦めたけど今もう使えるようになってるんかな
938デフォルトの名無しさん
2022/04/12(火) 01:31:53.93ID:EgjH8LRN 実験した程度でしかないけど使えてたよ。
939デフォルトの名無しさん
2022/04/12(火) 10:13:21.46ID:5vVn8Fqf >>934
その翻訳単位がグローバル領域だったら? って意味でしょ
その翻訳単位がグローバル領域だったら? って意味でしょ
941デフォルトの名無しさん
2022/04/12(火) 16:43:20.82ID:qoqTD/fb dfs とか bfs みたいな名前の関数はそれを呼ぶ関数とまとめたくなるよね分かる
関数内関数にすると他の関数から呼べなくなるしな
名前を変えよってのはナシなw
関数内関数にすると他の関数から呼べなくなるしな
名前を変えよってのはナシなw
942デフォルトの名無しさん
2022/04/12(火) 17:25:13.49ID:nzV1CUkS モジュール……
943デフォルトの名無しさん
2022/04/12(火) 17:51:32.45ID:RKLCiqJK アホな質問かもしれないのですが……
今までユニークポインタで実体領域確保していたクラスを、どうせ一つしかnewしないからと、クラス内部に自身型の静的変数を保持して使用する方法へと変更しました。
所謂シングルトンに似た感じのものだと思うのですが。
std::unique-ptr<Hoge>Temp=std::make-unique<Hoge>();
↓
static Hoge& GetInstance(){static Hoge temp;return temp;}
使用する分には問題ないのですが、実体化させたいクラス数が多く、結果的には静的変数のガズが増え、実体がグローバルに多数存在する状態になってしまっていると思います。
この場合、名前衝突以外に何か想定される不具合はありますか?
データを保持させるクラス以外は全てこれに置き換えようと思っているのですが、今までnewして使っていたため何か罠があると思えてなりません。
この方法はクラス名から実態を呼び出せて私に大変便利です。
今までユニークポインタで実体領域確保していたクラスを、どうせ一つしかnewしないからと、クラス内部に自身型の静的変数を保持して使用する方法へと変更しました。
所謂シングルトンに似た感じのものだと思うのですが。
std::unique-ptr<Hoge>Temp=std::make-unique<Hoge>();
↓
static Hoge& GetInstance(){static Hoge temp;return temp;}
使用する分には問題ないのですが、実体化させたいクラス数が多く、結果的には静的変数のガズが増え、実体がグローバルに多数存在する状態になってしまっていると思います。
この場合、名前衝突以外に何か想定される不具合はありますか?
データを保持させるクラス以外は全てこれに置き換えようと思っているのですが、今までnewして使っていたため何か罠があると思えてなりません。
この方法はクラス名から実態を呼び出せて私に大変便利です。
944デフォルトの名無しさん
2022/04/12(火) 18:22:24.95ID:fdFUG1QI >>943
ないです
ないです
947デフォルトの名無しさん
2022/04/12(火) 18:39:03.10ID:FTlcB8DO クラス外側でtemplate実装にしろよとは思うが
template<class T>
inline T Instance;
int main(){
Instance<Hoge>.Execute();
}
template<class T>
inline T Instance;
int main(){
Instance<Hoge>.Execute();
}
948デフォルトの名無しさん
2022/04/12(火) 19:21:11.76ID:72/2frZ9 static ローカル変数が定石じゃないの?
949デフォルトの名無しさん
2022/04/12(火) 20:27:31.77ID:vgUv52EM は?
950デフォルトの名無しさん
2022/04/12(火) 20:30:19.09ID:X1V1J1VK 経験的にはどうせ静的なら変に隠さずグローバル変数の方が使いやすいです
951デフォルトの名無しさん
2022/04/12(火) 21:36:16.25ID:RKLCiqJK ちょっと皆さんの言ってることがよくわからないのですが……
テンプレートにして有効範囲で使用する、グローバルでいつでも呼び出せるようにする
ということでしょうか?
使用を想定しているのは膨大なデータのコンプレックスではなく、外部データ加工用に少量のローカル変数を持たせたクラスなので、実体はひつとで大丈夫だと思います。
その際には、衝突を考えないならば、グローバウに無造作に置いた方が使いやすいよ、ということでしょうか?
テンプレートにして有効範囲で使用する、グローバルでいつでも呼び出せるようにする
ということでしょうか?
使用を想定しているのは膨大なデータのコンプレックスではなく、外部データ加工用に少量のローカル変数を持たせたクラスなので、実体はひつとで大丈夫だと思います。
その際には、衝突を考えないならば、グローバウに無造作に置いた方が使いやすいよ、ということでしょうか?
952デフォルトの名無しさん
2022/04/12(火) 22:13:59.90ID:oNokQpOT 左再帰が無限ループになる理由を教えて
954蟻人間 ◆T6xkBnTXz7B0
2022/04/12(火) 23:31:14.39ID:Dt0TGPDO 積んで解放しないから。
955デフォルトの名無しさん
2022/04/12(火) 23:39:21.85ID:EarvAF13 停止しないから無限ループする
…って酷い理由だな
…って酷い理由だな
956デフォルトの名無しさん
2022/04/13(水) 00:21:12.99ID:bubjF7cO じゃあ停止するかどうかを判定する汎用ルーチンHを作ればいいんだよ。
957947
2022/04/13(水) 01:25:51.41ID:qfz8Xp88958デフォルトの名無しさん
2022/04/13(水) 05:51:58.22ID:8pcHyiAe staticにインスタンス入れるやり方だとマルチスレッドマルチプロセスにした時すぐ破綻するから大き目の定数入れる以外には使ってないな
959デフォルトの名無しさん
2022/04/13(水) 08:11:33.40ID:ZQqXT36F グローバル変数は初期化順序が環境依存になる問題があるから、
呼び出し順序で初期化するインライン関数のstaticローカル変数の方が扱いやすい
という話があったかと思うけど、最近は回避するテクニックできたの?
呼び出し順序で初期化するインライン関数のstaticローカル変数の方が扱いやすい
という話があったかと思うけど、最近は回避するテクニックできたの?
960デフォルトの名無しさん
2022/04/13(水) 09:44:11.11ID:abmOAw0D961デフォルトの名無しさん
2022/04/13(水) 10:25:01.35ID:2DJG1h+b 相談
抽象的なノードクラスがあり、上流ノードから下流ノードが接続され情報を取り出したいとする
この時、接続時に上流ノードの出力タイプと、下流ノードの入力タイプが符合するかどうかを調べたい
今考えている実装方法としてenum型でタイプを列挙しておき、ノードの出力属性としてもたせ
入力に必要な属性を接続時に調べておく方法
シンプルでベストかなとは思うが、タイプが増えていくとその管理がやや大変かと思う
文字列で符合させるやり方も考えたが、例えば"int"と"integer"とかでごちゃごちゃしそう
なにか妙案があればお聞かせ願いたい
抽象的なノードクラスがあり、上流ノードから下流ノードが接続され情報を取り出したいとする
この時、接続時に上流ノードの出力タイプと、下流ノードの入力タイプが符合するかどうかを調べたい
今考えている実装方法としてenum型でタイプを列挙しておき、ノードの出力属性としてもたせ
入力に必要な属性を接続時に調べておく方法
シンプルでベストかなとは思うが、タイプが増えていくとその管理がやや大変かと思う
文字列で符合させるやり方も考えたが、例えば"int"と"integer"とかでごちゃごちゃしそう
なにか妙案があればお聞かせ願いたい
962デフォルトの名無しさん
2022/04/13(水) 10:28:21.90ID:CyvaZh5F 抽象的でわからん
963デフォルトの名無しさん
2022/04/13(水) 10:36:53.86ID:2DJG1h+b すいません、もうちょっと自分で考えて相談点まとめます
964デフォルトの名無しさん
2022/04/13(水) 10:44:17.47ID:zii+x7Ds それぞれのスレッドでは個別だけど スレッド内では唯一のインスタンス
スレッドをまたいでも共通で唯一のインスタンス
あたまがこんらんする
スレッドをまたいでも共通で唯一のインスタンス
あたまがこんらんする
965デフォルトの名無しさん
2022/04/13(水) 12:06:05.65ID:IuPW2iUE >>961
どのみち符号の管理・徹底は必須だから、文字列で符号化し、表とかにまとめてバージョン管理・周知徹底する。
protocol bufferとかでインターフェイス管理すれば少しは楽かね。
protocol buffer以外だとなにがいいかしらん?
どのみち符号の管理・徹底は必須だから、文字列で符号化し、表とかにまとめてバージョン管理・周知徹底する。
protocol bufferとかでインターフェイス管理すれば少しは楽かね。
protocol buffer以外だとなにがいいかしらん?
966デフォルトの名無しさん
2022/04/13(水) 12:12:18.93ID:5KnL277L // A と Bのところだけが異なるfとf2
// うまくこの関数をまとめれませんか?
#include <iostream>
#include <vector>
#include <algorithm>
struct Foo
{
void Func() const
{}
};
void f(const std::vector<Foo>& vf)
{
std::for_each(vf.begin(),vf.end(),
[](auto&& f)
{
f.Func();//A
}
);
}
void f2(const std::vector<Foo*>& vf)
{
std::for_each(vf.begin(),vf.end(),
[](auto&& f)
{
f->Func();//B
}
);
}
int main( int argc, char *argv[] )
{
std::vector<Foo> vf;
std::vector<Foo*> vfp;
f(vf);
f2(vfp);
}
// うまくこの関数をまとめれませんか?
#include <iostream>
#include <vector>
#include <algorithm>
struct Foo
{
void Func() const
{}
};
void f(const std::vector<Foo>& vf)
{
std::for_each(vf.begin(),vf.end(),
[](auto&& f)
{
f.Func();//A
}
);
}
void f2(const std::vector<Foo*>& vf)
{
std::for_each(vf.begin(),vf.end(),
[](auto&& f)
{
f->Func();//B
}
);
}
int main( int argc, char *argv[] )
{
std::vector<Foo> vf;
std::vector<Foo*> vfp;
f(vf);
f2(vfp);
}
967蟻人間 ◆T6xkBnTXz7B0
2022/04/13(水) 12:20:05.74ID:+YltrYoo std::vector<Foo*>
std::vector<Foo>
のインターフェイスに共通部分がない。アキラメロン。
std::vector<Foo>
のインターフェイスに共通部分がない。アキラメロン。
968947
2022/04/13(水) 13:02:01.63ID:sgl3F80B type_traitsで殴ればいけそう
template<class T>
auto& to_reference_if_pointer(T&t){
if constexpr(std::is_pointer_v<T>){
return *t;
}else{
return t;
}
}
to_reference_if_pointer(f).Func();
template<class T>
auto& to_reference_if_pointer(T&t){
if constexpr(std::is_pointer_v<T>){
return *t;
}else{
return t;
}
}
to_reference_if_pointer(f).Func();
969はちみつ餃子 ◆8X2XSCHEME
2022/04/13(水) 13:12:01.75ID:qCcEdGhE970デフォルトの名無しさん
2022/04/13(水) 18:00:26.46ID:m7JtDTD6 >>957
今実機で確認して、インライン化したテンプレートをヘッダーに咥える方法が自分にとって良い事を確認しました!
ありがとうございます。
いちいちスタティック咥えるより良いと思います。
マルチスレッドは使用したことがないのでわかりませんが、なるべき勉強してみたいと思います。
皆さんありがとうございます!
今実機で確認して、インライン化したテンプレートをヘッダーに咥える方法が自分にとって良い事を確認しました!
ありがとうございます。
いちいちスタティック咥えるより良いと思います。
マルチスレッドは使用したことがないのでわかりませんが、なるべき勉強してみたいと思います。
皆さんありがとうございます!
971デフォルトの名無しさん
2022/04/13(水) 18:15:56.73ID:I4ieD//T >>966
std::for_each(vf.begin(),vf.end(),std::mem_fn(&Foo::Func));
または
for (auto &&x : vf) { std::invoke(&Foo::Func, x); }
std::for_each(vf.begin(),vf.end(),std::mem_fn(&Foo::Func));
または
for (auto &&x : vf) { std::invoke(&Foo::Func, x); }
972デフォルトの名無しさん
2022/04/13(水) 18:28:24.44ID:U0E88zpG オマンコハンター チンポマン!
股間の銃を携えて今日もおまんこ狙い撃ち
股間の銃を携えて今日もおまんこ狙い撃ち
973デフォルトの名無しさん
2022/04/13(水) 23:40:49.30ID:grUsXYkY >>971
ラムダが消されてて笑った
ラムダが消されてて笑った
974デフォルトの名無しさん
2022/04/13(水) 23:53:02.59ID:nvVh9cdQ975デフォルトの名無しさん
2022/04/14(木) 07:29:49.75ID:Qd4x1CZh シングルトンは要らない子、とヴァカにしていたが
グローバルなオブジェクトのコンストラの呼び出し順序が翻訳単位を超えた呼び出し順序がまるきり不
定になるというC/C++の仕様を回避するのには有効おと1 mgぐらい考えを新ためた
OSのwrapperを書いて、main()でそれを初期化することにして
グローバルなオブジェクトのコンストラから思わずOSのwrapper経由でログを吐かせようとしたらクラッシュして気づいたから
最初のOSのwrapperの最初の呼び出しでまだ未呼び出しなら初期化したら良い(ビコーン ← まんまシングルトン
main()で初期化することが保証しているから、グローバルなコンストラの中でいきなりスレッドを起こしてそこから
OSのwrapperを呼ぶ、みたいなktgi行為が無い限りこのシングルトンはマルチスレッドの対策が不要
グローバルなオブジェクトのコンストラの呼び出し順序が翻訳単位を超えた呼び出し順序がまるきり不
定になるというC/C++の仕様を回避するのには有効おと1 mgぐらい考えを新ためた
OSのwrapperを書いて、main()でそれを初期化することにして
グローバルなオブジェクトのコンストラから思わずOSのwrapper経由でログを吐かせようとしたらクラッシュして気づいたから
最初のOSのwrapperの最初の呼び出しでまだ未呼び出しなら初期化したら良い(ビコーン ← まんまシングルトン
main()で初期化することが保証しているから、グローバルなコンストラの中でいきなりスレッドを起こしてそこから
OSのwrapperを呼ぶ、みたいなktgi行為が無い限りこのシングルトンはマルチスレッドの対策が不要
976デフォルトの名無しさん
2022/04/14(木) 07:33:43.77ID:Qd4x1CZh 訂正orz、
誤: 最初のOSのwrapperの最初の呼び出しでまだ未呼び出しなら初期化したら良い(ビコーン ← まんまシングルトン
正: 最初のOSのwrapperの最初の呼び出しでまだ未初期化なら初期化したら良い(ビコーン ← まんまシングルトン
誤: 最初のOSのwrapperの最初の呼び出しでまだ未呼び出しなら初期化したら良い(ビコーン ← まんまシングルトン
正: 最初のOSのwrapperの最初の呼び出しでまだ未初期化なら初期化したら良い(ビコーン ← まんまシングルトン
977デフォルトの名無しさん
2022/04/14(木) 08:28:49.07ID:79II+WyL 別にシングルトンじゃなくても単に起動時に初期化して渡せばええやん
978デフォルトの名無しさん
2022/04/14(木) 09:59:18.13ID:wwxSZsaE いや要るでしょシングルトン
何らかのリソースマネージャ作るときとか避けて通れないし
何らかのリソースマネージャ作るときとか避けて通れないし
979デフォルトの名無しさん
2022/04/14(木) 10:35:30.42ID:dlHUY+WK >>977
初期化順序の問題って回避できたっけ?
初期化順序の問題って回避できたっけ?
980デフォルトの名無しさん
2022/04/14(木) 10:40:07.14ID:79II+WyL mainでリソース用意しろという話よ
ライブラリだったら初期化用になんか叩いてもらえ
ライブラリだったら初期化用になんか叩いてもらえ
981デフォルトの名無しさん
2022/04/14(木) 10:47:06.20ID:rsrkTEkU グローバル変数をポインタにしておいてmainでnewとか
friend int main(int, char**); とか?
friend int main(int, char**); とか?
982デフォルトの名無しさん
2022/04/14(木) 10:56:36.07ID:79II+WyL なんでグローバル変数にこだわるんだよ
983デフォルトの名無しさん
2022/04/14(木) 10:58:53.82ID:dlHUY+WK984デフォルトの名無しさん
2022/04/14(木) 15:09:30.09ID:4tVKG4Xu 1個でもグローバルなりがあると
エントリポイントの main よりも前に走るコンストラクタ内部であれこれされる可能性を想定する必要に迫られる と
エントリポイントの main よりも前に走るコンストラクタ内部であれこれされる可能性を想定する必要に迫られる と
985デフォルトの名無しさん
2022/04/15(金) 00:01:53.91ID:he9C7sX7986デフォルトの名無しさん
2022/04/15(金) 00:06:58.93ID:xDiQzMrD mainの実行より前に意味があることしようと思ったらコンパイル時しかなかろうよ
987デフォルトの名無しさん
2022/04/15(金) 00:13:00.39ID:he9C7sX7 >>986の主観の話をしているのではない件について:
988デフォルトの名無しさん
2022/04/15(金) 00:22:10.66ID:xDiQzMrD989デフォルトの名無しさん
2022/04/15(金) 04:08:04.71ID:sm6VHVYM 静的ストレージは実装と心中するプログラム以外マジでやめといたほうがいい
移植性が大幅に低下する
移植性が大幅に低下する
990デフォルトの名無しさん
2022/04/15(金) 04:23:41.78ID:1Y3hD0GJ グローバルやstaticな変数を使用する時は排他制御を必ず行なう
これを厳守していれば使っても大丈夫です
もちろん使わずに済む別の方法がある時は別の方法を取るべきです
これを厳守していれば使っても大丈夫です
もちろん使わずに済む別の方法がある時は別の方法を取るべきです
991デフォルトの名無しさん
2022/04/15(金) 06:36:24.15ID:he9C7sX7 >>988
・任意のユーザーが任意のクラスをグローバル変数として使うことをOSが禁止するわけにはいかない
・クラスのコンストラクタでOS資源を確保することは普通(イベントオブジェクトを確保する等、ハンドルのメンバを有効な値で初期化しようとする
・誰かがグローバル変数のコンストラクタでOSの資源を確保しようとしたら、この場合初期化前のOSのwrapperが呼ばれる
ここまで書かないと>>986がいかにたわごとを言っているかわからないわけ?!
>>990
>グローバルやstaticな変数を使用する時は排他制御を必ず行なう
まあそれはそう。今回排他制御を避けられるのは
>main()で初期化することが保証しているから、グローバルなコンストラの中でいきなりスレッドを起こしてそこから
>OSのwrapperを呼ぶ、みたいなktgi行為が無い限りこのシングルトンはマルチスレッドの対策が不要
というktgi行為が無いことの条件付き。
・任意のユーザーが任意のクラスをグローバル変数として使うことをOSが禁止するわけにはいかない
・クラスのコンストラクタでOS資源を確保することは普通(イベントオブジェクトを確保する等、ハンドルのメンバを有効な値で初期化しようとする
・誰かがグローバル変数のコンストラクタでOSの資源を確保しようとしたら、この場合初期化前のOSのwrapperが呼ばれる
ここまで書かないと>>986がいかにたわごとを言っているかわからないわけ?!
>>990
>グローバルやstaticな変数を使用する時は排他制御を必ず行なう
まあそれはそう。今回排他制御を避けられるのは
>main()で初期化することが保証しているから、グローバルなコンストラの中でいきなりスレッドを起こしてそこから
>OSのwrapperを呼ぶ、みたいなktgi行為が無い限りこのシングルトンはマルチスレッドの対策が不要
というktgi行為が無いことの条件付き。
992デフォルトの名無しさん
2022/04/15(金) 07:35:15.38ID:xDiQzMrD >>991
えっと、つまり、使えるものは使わずにはおれない一族に生まれたということですか?
えっと、つまり、使えるものは使わずにはおれない一族に生まれたということですか?
993デフォルトの名無しさん
2022/04/15(金) 08:15:20.73ID:xhqbcuaF994デフォルトの名無しさん
2022/04/15(金) 08:29:52.88ID:y04/Kx9U 自分で記述するだけならどうとでもなるけど
他人に使ってもらう前提だと
限度はあるにしても色々防護策を講じたくなるのもわかる
他人に使ってもらう前提だと
限度はあるにしても色々防護策を講じたくなるのもわかる
995デフォルトの名無しさん
2022/04/15(金) 08:31:14.00ID:xDiQzMrD モジュールの結合度を評価するのにまず排他がどうとか気にするもんかね?
996デフォルトの名無しさん
2022/04/15(金) 08:40:46.42ID:WMzvufu2 C++相談室 part160
https://mevius.5ch.net/test/read.cgi/tech/1649979572/
https://mevius.5ch.net/test/read.cgi/tech/1649979572/
997デフォルトの名無しさん
2022/04/15(金) 08:43:44.23ID:ZcCJtqdn >>995
それとは独立の問題
並行&並列でも動くことが現代では求められているため
一般的にグローバルやstatic変数の読み書きには排他制御が必ず必要となる
厳密な意味で変数ではなく一度限り初期化される定数のようなものの場合はその初期化が排他制御される保証のみでも大丈夫なだけ
それとは独立の問題
並行&並列でも動くことが現代では求められているため
一般的にグローバルやstatic変数の読み書きには排他制御が必ず必要となる
厳密な意味で変数ではなく一度限り初期化される定数のようなものの場合はその初期化が排他制御される保証のみでも大丈夫なだけ
998デフォルトの名無しさん
2022/04/15(金) 08:44:18.42ID:wykOop5a >>994
シングルトンパターンならコンストラクタをプライベートにするんだから、そもそもグローバル変数として初期化できないんじゃない?
シングルトンパターンならコンストラクタをプライベートにするんだから、そもそもグローバル変数として初期化できないんじゃない?
999デフォルトの名無しさん
2022/04/15(金) 08:44:58.60ID:wykOop5a1000デフォルトの名無しさん
2022/04/15(金) 08:49:06.65ID:xDiQzMrD >>997
グローバル変数批判でまずそれが問題だと思うのはどうかしてるよ
グローバル変数批判でまずそれが問題だと思うのはどうかしてるよ
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 54日 20時間 52分 24秒
新しいスレッドを立ててください。
life time: 54日 20時間 52分 24秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★11 [ぐれ★]
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★3 [蚤の市★]
- 日本損失1.7兆円に修正 中国渡航自粛の影響試算 [蚤の市★]
- 「どうしようもない」 ため息つくアジアの玄関口 中国の訪日自粛で−福岡市 [蚤の市★]
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【実況】博衣こよりのえちえち朝こよ🧪
- でもこんなに高市がやらかしても中東みたいにミサイル飛んできたりしないから東アジアってクッソ平和だよなwwwwwwwwwwwwwwww [271912485]
- 中国「高市が頭を下げて謝罪しない限り、絶対に許さない」 [329329848]
- ほかほかご飯にかけるとうまいもの一覧
- 🏡
- 「これが完成された醜い姿である>>1」←これなに?
