C++相談室 part145at TECH
C++相談室 part145 - 暇つぶし2ch921:デフォルトの名無しさん
19/11/04 22:40:59.70 jCRIC3rQ.net
そもそもポインタ参照ごときのオーバーヘッドをも許さないほどリアルタイム性を要求するもの作ってんの?

922:デフォルトの名無しさん
19/11/04 22:51:45.72 TNJ/Yj6e.net
>>914
適当がいやなら同じサイズにすりゃいいじゃん
static_asserの条件を==にすればいい
手間はかかるが、それが許容できる前提の案ね

923:デフォルトの名無しさん
19/11/04 22:58:08.77 7wrIz40y.net
>>916
バカなの?
ちょっとサイズ変更されたら使えない
かと言ってどんだけ余裕持てばいいかは未来予知能力でもないと無理
要するに常人には使いどころがないってことな

924:デフォルトの名無しさん
19/11/04 23:05:23.77 J+RS26ji.net
>>915
C++の用途として可能な限りオーバーヘッドをゼロとすることが要求されるケースがあるのは当然の話であるが、別に議論に参加するものがそういう物を作っている必要性はないだろうに、何でこだわってるんだ?

925:デフォルトの名無しさん
19/11/04 23:12:26.97 TNJ/Yj6e.net
>>917
だから手間がかかると言ってるわけ
やる気になれば自動化できるスクリプトは作れるだろうけどね
バカと思うかもしれないけどreserveフィールドでバイナリ互換を保つってのは実際やるんだよ
未来を予測できないのはそのとおり
適当に決める
まぁお前の知らない世界の話だから気にするな

926:デフォルトの名無しさん
19/11/04 23:25:59.73 DlV1X8tk.net
外部からはデストラクタもコピーコンストラクタも動かせないのにあえてインラインにする
理由がよくわからないな。
よっぽど特殊でピンポイントな要件なのかもしれないが。

927:デフォルトの名無しさん
19/11/05 01:47:52.32 8w7ODMFL.net
placement new を使った
char* ptr = (char *)malloc(sizeof(CPerson));
CPerson *pPerson = new(ptr) CPerson;
という書き方、実は、「コンストラクタの明示的呼び出し」なるものを使って、
CPerson *pPerson = (CPerson *)malloc(sizeof(CPerson));
pPerson->CPerson::CPerson();  // コンストラクタの明示的呼び出し
と書くことも出来るらしいことを最近知った。

928:デフォルトの名無しさん
19/11/05 06:17:56.31 cY6SY5gz.net
ああそうそれは良かったね~

929:デフォルトの名無しさん
19/11/05 07:19:41 UkGDCuYx.net
>>919
手間の問題じゃないよ
せっかく変更に強くするためにやってるのに
> 適当がいやなら同じサイズにすりゃいいじゃん
なんてやったら本末転倒だろ

> やる気になれば自動化できるスクリプトは作れるだろうけどね
未来予知機能付きのスクリプトができたらいいねw

> バカと思うかもしれないけどreserveフィールドでバイナリ互換を保つってのは実際やるんだよ
ああ、昔のコボラー爺の発想ねw
ファイルとか通信とかで外部とやり取りするようなものだと今でも普通にあるけどメモリーレイアウトでやるのは流石に悪手でしかない

> まぁお前の知らない世界の話だから気にするな
時代遅れのお前の妄想に閉じ込めといてくれw

930:デフォルトの名無しさん
19/11/05 07:51:55.68 rlbxGVpf.net
>>780
cygwinで配布してるwxwidgitはgcc3時代のabiでバイナリ作られてるが当然gcc8でもabiオプションで変えてリンクできる

931:デフォルトの名無しさん
19/11/05 07:55:46.59 Cze7w/ei.net
>>921 何を見て「出来るらしい」と言ってるのかな?

932:デフォルトの名無しさん
19/11/05 08:36:03.93 g61EG+/r.net
解放も自前でやるんなら別にいんじゃね?

933:デフォルトの名無しさん
19/11/05 08:47:49.22 wVD+ILW8.net
>>819
pimplが理想だなんて頓珍漢なレスで
ひっ絡んで来たのそっちだろうが
何がそういう返しだ
冗談は顔だけにしろ奇形チンパンジーめ

934:デフォルトの名無しさん
19/11/05 12:36:38.02 UkGDCuYx.net
>>927
まさかと思うが
> 目指す理想がpimpl?
って理想がpimplって言ってるとでも思ったのか?
デザインパターンの前に日本語の勉強しろよw

935:デフォルトの名無しさん
19/11/05 12:48:20.10 XPYDDbPn.net
日本人じゃないんじゃない?

936:デフォルトの名無しさん
19/11/05 16:03:35.45 wVD+ILW8.net
>>928
安心しろ
あからさまにラリッてる廃人の戯言など
どうとも取ってねえよ
そんな価値があるとでも思っているなら
とんだナルシストだw

937:デフォルトの名無しさん
19/11/05 17:28:48.96 X2+zjlng.net
>>923
pimplの目的が変更に強いことってはお前の見方にすぎない
コンパイル時に検知できるんだから特別手間ではないし、
呼び出しコストを下げる目的は達している
技術的な話したいなら物事をフェアに見ような

938:デフォルトの名無しさん
19/11/05 18:57:55.00 lmPmis8+.net
手間はあるけど(俺は)手間だと感じないだから、変更に強いとは思わない
って言ってるの?

939:デフォルトの名無しさん
19/11/05 19:21:00.26 X2+zjlng.net
>>894

940:デフォルトの名無しさん
19/11/05 19:48:59.34 C6JaWlq+.net
実装側のサイズが想定をオーバーしたら互換性無くなって再コンパイルになるんでしょ
それが許容される環境ならインターフェース切る意味が薄れるんじゃないの?
まぁ実際はオーバーしないようにするんだろうけど

941:デフォルトの名無しさん
19/11/05 19:52:57.91 UkGDCuYx.net
>>930
どうとも取ってないのに顔真っ赤にしてレスするとか珍しいなw

942:デフォルトの名無しさん
19/11/05 19:54:47.54 UkGDCuYx.net
>>931
ごめん、お前なんのために>>898みたいなことやるの?
説明できる?w

943:デフォルトの名無しさん
19/11/05 20:04:16.17 Rmlz0hln.net
>>936
pimplの説明ならこのスレで何度も出てると思うが?
それにしたいして、お前の反論は「俺はそうは思わない」という感想でしょ?
技術的な話したいなら物事をフェアに見ような

944:デフォルトの名無しさん
19/11/05 20:18:38.99 GaJDeol8.net
>>893 というお題な対して出した案が >>898
privateは隠蔽できて、かつ呼び出しコストは低い
配列サイズ増やしたらバイナリ互換がとれないのは承知してる
しかしそれはI/Fにする構造体一般の話であってこの件に限ったことではない
もう十分説明したつもり

945:デフォルトの名無しさん
19/11/05 20:37:36.25 UkGDCuYx.net
>>937
>>898がpimplに見えるならちょっと黙っててもらっていいかな?
邪魔なだけだし
>>938
なるほどね
とにかくprivateは見せたくないって事ならそれでいいんじゃね?
俺はやりたくないけどw

946:デフォルトの名無しさん
19/11/05 20:51:01.63 mHpC8FDb.net
>>935
とID真っ赤にしてレスするやつ
別に珍しくもねえ どこにでもいる虫けらめ

947:デフォルトの名無しさん
19/11/05 21:09:19.41 uxZ9xTP


948:+.net



949:デフォルトの名無しさん
19/11/05 21:15:13.47 ZKJgPI6j.net
事務職だけど、C++使ってる 
こんな便利なプログラミング言語があるとは

950:蟻人間
19/11/05 21:19:49.70 36DcdPPB.net
pimplesが顔に出たのは中学・高校時代だったか。

951:蟻人間
19/11/05 21:23:07.90 36DcdPPB.net
pointer to implementation

952:デフォルトの名無しさん
19/11/05 22:48:13.18 5N1tjWFS.net
結局のところ、>>893の言う「インラインPimpl」なるものの解釈なんだよな。
「そんなものありえない」>>896
「こうすればできるよ」>>898
俺は「ありえない」派だが。

953:デフォルトの名無しさん
19/11/05 22:54:52.19 JFmkzqZr.net
ピンプルはシンプルじゃないとダメでしょ

954:デフォルトの名無しさん
19/11/05 23:19:34.53 +/SJ/H3y.net
他の言語ではprivateを隠すための努力なんてしなくていいよね
あくまでc++特有のパターンとしてpimplがある
pimplの肝は、ポインタだけなら前方宣言すればincludeしなくてOKっていう
抜け穴的なところからきていてポインタであることは妥協の産物
implクラスを変更しても互換性が保たれるというのはあくまで副次的
ゼロコストじゃないわけでc++の思想からも外れている

955:デフォルトの名無しさん
19/11/05 23:26:17.64 +K1+YrIp.net
何をもって思想から外れていると?
C++の設計思想は最速を目指すことじゃないからな

956:デフォルトの名無しさん
19/11/05 23:41:22.87 +/SJ/H3y.net
Bjarne Stroustrupがそう言ってる

957:デフォルトの名無しさん
19/11/05 23:55:16.05 +K1+YrIp.net
始まりはそうだったかも知れんが、現在の規格の設計思想は明らかに違う

958:デフォルトの名無しさん
19/11/05 23:58:36.99 UFe3q3jM.net
最速を目指すって言うと少し外れてるけど、速度を重視するという所は変わってない

959:デフォルトの名無しさん
19/11/06 00:01:20.76 x6qzxIK7.net
それ以上に集団での開発効率を重視したもの
>>898のような奇怪なものよりpImplの方がモダンC++の設計思想に合っているのは間違いない

960:デフォルトの名無しさん
19/11/06 00:04:55.89 pco2p4E4.net
別に抜け穴でも何でもないだろ
なきゃこまるじゃん

961:デフォルトの名無しさん
19/11/06 00:12:17.42 L0p3vvTY.net
>>950
明らかに~
説明できないときにつかう常套句だよね
少なくともc++17まではその設計ポリシーが挙げられてるよ

962:デフォルトの名無しさん
19/11/06 00:18:49.38 L0p3vvTY.net
>>952
はぁ?
pimplのどこがモダンなの?
最低限delegateを手で書かなくてもいいようにしてから言ってくれよ
スマートポインタ以下だから

963:デフォルトの名無しさん
19/11/06 00:32:45.47 EoKh/jsd.net
設計の方針は曖昧なものではなく明文化されてるから調べてきてね

964:デフォルトの名無しさん
19/11/06 01:17:04.07 mNM1KOm6.net
ピンプルってピンポンみたいだね

965:デフォルトの名無しさん
19/11/06 01:37:31 clVAOuCS.net
ハリソン・フォード主演映画「逃亡者」(1993年)の主人公の名前は、キンブルだったね。
この映画はサントラが良い。ジェームズ・ニュートン・ハワードが音楽担当。
このサントラの「Helicopter Chase」という曲は、「タクティクスオウガ」(1995年)というテレビゲームの「VENDETTA!」という曲によく似ている。

966:デフォルトの名無しさん
19/11/06 05:47:10 iGLzVPkM.net
pimpl使ったことないからスルーしてたけど
>>947=>>949
ゼロオーバーヘッドの原則は言語が掲げるもので言語利用者を縛るものじゃねーよ

実際それが便利でコストが問題にならない使い方ならどう使ってもいいだろ

967:デフォルトの名無しさん
19/11/06 05:56:01 iGLzVPkM.net
>>954
君もなんか勘違いしてない?
最速を目指すなんて厨二病みたいなことを挙げていたというソースは?

968:デフォルトの名無しさん
19/11/06 06:54:13.33 cnDla3Ge.net
>>959
> ゼロオーバーヘッドの原則は言語が掲げるもので言語利用者を縛るものじゃねーよ
そうだよ、だからこの手の機能は言語仕様には含まれないってことな
> 実際それが便利でコストが問題にならない使い方ならどう使ってもいいだろ
誰もお前に使うななんて言ってないから使いたいなら勝手に使ってろよw

969:デフォルトの名無しさん
19/11/06 07:21:04.31 GB7Qlzkj.net
>>947
その主張にincludeは関係ないぞ

970:デフォルトの名無しさん
19/11/06 07:24:02.54 hwyI/gg2.net
質問です。
サンプルプログラムで割り込み処理の一文で
ISR(TIMER1_CAPT_vect) {}でサブルーチンを呼び出してたんだけど、()内の意味わかりますか?

971:デフォルトの名無しさん
19/11/06 07:41:29.30 iGLzVPkM.net
>>961
>そうだよ、だからこの手の機能は言語仕様には含まれないってことな
誰か言語仕様に含めろなんて言ってたか?
さすがに隠したいメンバをポインタ経由で隠して無駄にコストかかる言語なら俺もお断りだが
ちな俺はplmpl使いたいなどと書いてない、人の主張を勝手に捏造するな

972:デフォルトの名無しさん
19/11/06 08:14:41.32 N/klFKt1.net
あと>>961=947と想定してもう一つ言っておくと
ポインタ変数の宣言に型(クラス)の実際の定義が必要ないのは抜け穴じゃない
必要ないから要求されないだけだ
どうもC++に対する認識がおかしい気がする
D&Eでも読んでこい

973:デフォルトの名無しさん
19/11/06 08:16:11.65 cnDla3Ge.net
>>964
> 誰か言語仕様に含めろなんて言ってたか?
誰もお前が言語仕様に含めろと言ってるなんて言ってないぞ
自意識過剰すぎだろ
> ちな俺はplmpl使いたいなどと書いてない、人の主張を勝手に捏造するな
使いたい「なら」な
C++の前に日本語やり直してこいw

974:デフォルトの名無しさん
19/11/06 08:17:38.83 cnDla3Ge.net
>>965
> あと>>961=947と想定して
バカほどこういう想定をしたがるw

975:デフォルトの名無しさん
19/11/06 08:21:27.02 N/klFKt1.net
ただの荒らしなら出てけ

976:デフォルトの名無しさん
19/11/06 08:31:26.58 zr2SzfAm.net
>>963
コンパイラが分からんけど、割り込みベクタテープルのシンボルだと思う。
タイマ1キャプチャ割り込みのハンドラを今から定義しますよ、みたいな。

977:デフォルトの名無しさん
19/11/06 09:33:53.63 GEOrtix2.net
サイズの違うコンテナ同士で代入を試みたらセグメンテーション違反になったんだが、リサイズしつつ代入って簡単にできないの?

978:デフォルトの名無しさん
19/11/06 09:54:01.45 B/9oP97H.net
>>970 できるよ。
#include <vector>
#include <cassert>
int main()
{
std::vector v1{1}, v2{1,2};
v1 = v2;
assert(v1 == v2);
}

979:デフォルトの名無しさん
19/11/06 10:35:41.19 GEOrtix2.net
>>971
普通できるのか
boostの「STLコンテナらしく振る舞う」というある多次元配列コンテナでできなかったから一般的にできないんだと思っちゃった
スマン

980:デフォルトの名無しさん
19/11/06 10:42:41.76 rSUWYkcI.net
そのためのstd::vectorのメンバ関数operator=だしな

981:デフォルトの名無しさん
19/11/06 12:22:15.65 2MfY+5W5.net
>>968
頓珍漢な想定でくだらんことしか言えないお前が出て行けよw

982:デフォルトの名無しさん
19/11/06 15:11:24.10 BVN8Da8w.net
今事務職であいてる時間C++やってるんだけど、事務職に特化したライブラリとかってない?

983:デフォルトの名無しさん
19/11/06 15:24:12.57 EoKh/jsd.net
>>975
awk,sed

984:デフォルトの名無しさん
19/11/06 17:52:40.67 lpQz5w/v.net
>>975
Excelのアドオン

985:デフォルトの名無しさん
19/11/06 18:44:11.86 XJugYxC8.net
char str[ ];
と宣言した場合、str[0] = '\0';というNULL終端をしなければなりませんが
string str[ ];
と宣言した場合は、特にNULL終端の必要性っていうのはないのでしょうか?

986:デフォルトの名無しさん
19/11/06 19:20:03.22 x6qzxIK7.net


987:蟻人間
19/11/06 19:23:25.64 Z1hQUtYe.net
std::stringはstd::string::c_strメソッドを使ってアクセスするとヌル終端になることが保証されている。

988:デフォルトの名無しさん
19/11/06 19:45:32.35 o3tEvZiY.net
char hoge[] は char の配列
別に文字列として扱う気がなければ 0 終端は必須ではない
string hoge[] は(突っ込まれるかもしれんが敢えて言うと) char[] の配列
上の char hoge[] とは別物

989:デフォルトの名無しさん
19/11/06 19:48:44.64 o3tEvZiY.net
あと片山の答えは >>978 の回答になっていない無関係な話 (いつものことだが)

990:デフォルトの名無しさん
19/11/06 19:59:36.42 JQYyTTQU.net
今やc_strでなくてもnull終端は保証されてるしな

991:デフォルトの名無しさん
19/11/06 20:14:12.93 KdcLkZY9.net
char str="";で多分null終端される。
stringは多分std::stringなのでそもそも文字列ではなくアドレスを扱う。
た・・・ぶ・・・ん・・・。うぼぁあああああああ。

992:デフォルトの名無しさん
19/11/06 20:14:31.39 XJugYxC8.net
>>978です
すみません 文字列として扱い、いきなりその変数を文字列と文字列の連携で使う場合の話です
つまり、その場合でも std::stringで宣言する場合は、"\0"で初期化する必要は無しということですね?

993:デフォルトの名無しさん
19/11/06 20:16:22.14 KdcLkZY9.net
すまん書き直し。
char str[]="";で多分初期化時にnull終端される。
「string str[];」は多分std::stringの配列なのでそもそも文字列ではなくアドレスを扱う。

994:デフォルトの名無しさん
19/11/06 20:52:15.48 vhzIqEHb.net
>>985
説明が上手くないからもうコードで書きなよ

995:デフォルトの名無しさん
19/11/06 20:56:59.66 y5v/16J4.net
ひょっとするとstd::string str[]じゃなくてstd::string strの間違いじゃないの?

996:デフォルトの名無しさん
19/11/06 21:29:23.43 3LXwRiA7.net
日本語の説明よりコード片の方が多少間違っていても意図を理解できるという

997:デフォルトの名無しさん
19/11/06 23:14:40.66 7z10T+eB.net
char[]は文字の配列=一つの文字列でstring[]は文字列の配列だからそもそも比較するのが間違ってる

998:デフォルトの名無しさん
19/11/07 06:10:28 +Fv/+mh5.net
>>978 の char str[ ]; string str[ ]; は、どっちも
要素数不明の配列の定義でコンパイルエラーになるんと違うか?
宣言ってことは extern のつもりなんじゃろか。

>>988 の言う通り string str[ ]; は string str; かも知れんけど、
いずにせよ「質問が曖昧で答えようがない」の類かと。

999:デフォルトの名無しさん
19/11/07 08:06:36.36 N9TqrKuA.net
アスペ多すぎ
まともな頭していればstring str;の書き間違いだってわかる

1000:デフォルトの名無しさん
19/11/07 08:28:39.90 pA1g5yhx.net
コンパイラが空気読むわけないだろ(笑)

1001:デフォルトの名無しさん
19/11/07 08:37:03.72 S+DlaQTT.net
・・・からけ?

1002:デフォルトの名無しさん
19/11/07 08:39:29.18 t3M9+vGM.net
>>992
本気でstring str[];だと思ってる可能性を否定しきれない
現実にその手の奴はいるし

1003:デフォルトの名無しさん
19/11/07 08:44:57.00 C1GJGInU.net
>>978です
明らかに自分が悪いです
char str[ ];
と宣言した場合、str[0] = '\0';というNULL終端をしなければなりませんが
std::string str;
と宣言した場合は、特にNULL終端の必要性っていうのはないのでしょうか?
に修正です

1004:デフォルトの名無しさん
19/11/07 09:42:08.88 GEuBrdxx.net
無い
というか元々stringはC言語由来のゼロ終端とは違い、
「サイズ持ってんだから最後を示すデータは不要」という考え方だった
C++11からは利便性のためにゼロ終端が保証されてるけどユーザーが何かする必要はない

1005:デフォルトの名無しさん
19/11/07 09:51:34.14 GEuBrdxx.net
初心者ぽいから説明が悪かったかもしれん
クラスが内部でやってくれることなので特に何かする必要はない
けど、内部データを直接書き換えたりするとおかしなことになるので注意

1006:デフォルトの名無しさん
19/11/07 10:35:04.78 Q8xac2sp.net
stringに対するstring_viewみたいにint配列等にたいするviewはありますか?

1007:デフォルトの名無しさん
19/11/07 10:38:43.53 dB1QBGXo.net
'\0' と 0 とどっち使うのが良い?
NULL は論外だよな

1008:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 54日 17時間 25分 19秒

1009:1002
Over 1000 Thread.net
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。

──────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
──────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
URLリンク(premium.5ch.net)
▼ 浪人ログインはこちら ▼
URLリンク(login.5ch.net)

1010:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


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