C++相談室 part145

レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん
垢版 |
2019/09/13(金) 17:13:24.60ID:/ygW08Jq
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part144
https://mevius.5ch.net/test/read.cgi/tech/1563769115/

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

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

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

----- テンプレ ここまで -----
2019/11/02(土) 10:06:09.13ID:smHgTNTv
void*からC++クラスのポインタ型にstatic_castってできたっけ、
2019/11/02(土) 10:12:48.91ID:l25LSbph
出来るよ
多態使いたかったらbase ptrとvoid*の相互変換をする

派生ptrからvoid*に直接変換すると危険
2019/11/02(土) 10:18:39.64ID:smHgTNTv
>>806
安全性と危険性が反対くね?
void*が指すアドレスは構造体やクラスの境界に整列している保証が無いのでは…

>>804
WIN32の内部において、ハンドルが単なるindexでなくポインタとして使われているという根拠は?
確かに正体がvoid*だったりするが、ポインタだとしたらOS視点では
INVALID_HANDLE_VALUE判定が
難しくなるのであった、(一般論として
2019/11/02(土) 10:20:03.47ID:dYVngRw/
>>800
だからおまえがな
2019/11/02(土) 10:21:28.65ID:dYVngRw/
static_cast<void*>は最派生クラスにダウンキャストだね
2019/11/02(土) 10:27:48.65ID:egbBWGD9
>>807
外見維持してることが重要なんであって中身でなにをどうしてようがはどうでもいいがな
2019/11/02(土) 10:28:34.71ID:smHgTNTv
やべービルド通るわこれ
うちのコンパイラは壊れてるな…
int g_nSomeValue;
int main()
{
int* p = &g_nSomeValue;
int* q = static_cast<int*>(p);
printf("p=0x%p\n", q);

return 0;
}
2019/11/02(土) 10:30:01.86ID:smHgTNTv
貼りまつがえた、
誤: int* p = &g_nSomeValue;
正: void* p = &g_nSomeValue;
2019/11/02(土) 10:39:33.14ID:l25LSbph
void*は型情報が完全に消えるから、
型が完全に一つだとわかっているならそのままstatic_castすればいい

多態だと派生型からvoid*に直接変換してしまうと、void*から戻す場合に基底ポインタには戻せる保証がない
2019/11/02(土) 10:39:40.95ID:RcR6NuMm
>>802
依存している構造体のサイズやレイアウト変わったらアウトだろ
2019/11/02(土) 10:45:21.22ID:RcR6NuMm
>>803
C++でラップしてる時点で中途半端なのはかわらない
むしろ手間増えてる
2019/11/02(土) 10:46:18.05ID:pWYzNK5/
過去の遺産のCOMなんて使いにくいて横で話ししてるやろ
10年後の環境のことまで気にする必要ないんだよ
ばっさり捨ててその時代にあったものを作るべき
無理に資産転用とか互換性とか気にするからクソが生まれる
2019/11/02(土) 10:47:10.74ID:l25LSbph
pimplで実装隠したところで、
引数に例えばstd::string使うだけでコンパイラバージョン変えたときの保証は無くなるしなぁ
2019/11/02(土) 10:56:15.43ID:vl/bFsjF
要するに>>759は知ったかが無理矢理考えたアホストーリーと言うことでいいかな?w
2019/11/02(土) 10:57:17.10ID:vl/bFsjF
>>808
ああ、もうそういう返ししかできないのか…
高い理想とか笑えるわw
2019/11/02(土) 11:06:42.79ID:smHgTNTv
>>814
pimplだと構造体の実装はライブラリ側に完全隠蔽なのでその観点はおかしい
つかjコンパイラのバージョンも関係無い
2019/11/02(土) 11:16:21.46ID:smHgTNTv
>pimplだと構造体の実装はライブラリ側に完全隠蔽なのでその観点はおかしい
何が言いたいのかというとライブラリ使用側がライブラリが依存する構造体メンバに直アクセスする前提なら
そんなライブラリはpimplにできんだろとゆーこと
つまりpimpl対非pimplの比較の想定が変
非pimpl条件のライブラリのインターフェース仕様だけ抽象度を下げて議論しても仕方が無い
2019/11/02(土) 11:16:32.42ID:EX+sUHBj
>>816
そんなライブラリ誰が使いたがるんだよ
2019/11/02(土) 11:23:46.22ID:l25LSbph
オープンソースやクローズドでも社内での話だったらソースごと提供すれば終わる話だし
社外提供なら多言語で使えるようにcのAPIを出すのが普通じゃないのか
その上で各言語用のラッパーも提供されるってのがありがちなパターン
2019/11/02(土) 11:37:12.15ID:pWYzNK5/
>>822
現時点で有用なら使うでしょ
逆に10年前からメンテされてなくて現時点でも使われてるライブラリなんてある?
メンテされてるかよりその時代に即したものに乗り換えてくでしょ
2019/11/02(土) 11:50:05.18ID:EX+sUHBj
いやメンテなり機能追加はしろよ
仕様がらっと変わるのわかってるもんなんて使いたくないわ
作り手も使う側めんどいだろ
826デフォルトの名無しさん
垢版 |
2019/11/02(土) 12:26:20.48ID:DuRHh2CY
D なぜ流行らなかったし
Go 突き抜けてる
Rust ちょっと意識高い系
Nim 有望
JULIA 話にならない
2019/11/02(土) 12:50:14.99ID:esIitHWU
>>824
ライブラリじゃないけど例えばExcel2003とかまだCOM経由なら動かせるでしょ
COMの泥臭いインターフェースだから面倒だけどね
2019/11/02(土) 12:54:19.41ID:pWYzNK5/
>>827
動かせるけどクソだよね?
だから新しいのつかうじゃん?
つうかoffice系は延々と互換性意識してメンテされ続けてるじゃん
2019/11/02(土) 13:22:43.30ID:esIitHWU
>>828
俺が言ってるのはCOMの話な
Excelの話はケースバイケースだからなんとも言えんし俺には関係ないからどうでもいい
2019/11/02(土) 13:28:52.76ID:pWYzNK5/
>>829
COMの中身詳しくないんだけど一切メンテされてないの?
今までwinは山ほど脆弱性をupdateしてるけど、そういう中にCOM周りの修正とかなかったの?
間違いなくあったと思うんだよね。
COMに限らず現状使えるMS産のもので10年間内部が未修正のものなんて多分存在しないんじゃない?
だから10年後のことだけなんて考慮する必要なくて将来に渡り有益ならどうせメンテされるし一時的なもので将来無益になるなら消え去るんだよ
2019/11/02(土) 13:32:28.90ID:pWYzNK5/
>>829
なんか前後で俺の主張がずれてる感じで申し訳ない
2019/11/02(土) 13:52:05.38ID:esIitHWU
>>830-831
インターフェースの話とインターフェースの先にあるライブラリとかCOMサーバーの話をごっちゃにしてないか?
2019/11/02(土) 14:07:55.01ID:RcR6NuMm
>>821
勘違い甚だしい
ライブラリ使用者に無関係で見せたくないからpimplで隠すという話をしてる隠さなかったら無用にincludeが増えるし、最悪そのinclude先の仕様変更で互換がくずれる場合もあると
2019/11/02(土) 14:12:10.51ID:RcR6NuMm
>>823
そう、それが結局いまだによくも悪くもベストプラクティス
わかってないやつ多いんだよ
いきってc++で自称モダンな設計で作り上げてあとで泣きながらcのインタフェース作るはめになる
たいてい機械的なラッパーではすまないからな
2019/11/02(土) 14:34:01.62ID:SXOl8GCi
void*的な「ハンドル」を経由して操作するやーつ
C由来のインターフェースは強いな
2019/11/02(土) 14:53:41.66ID:QFHeQDAU
>>827
> ライブラリじゃないけど例えばExcel2003とかまだCOM経由なら動かせるでしょ

Excelとか以前に、DirectXやシェル(エクスプローラー)そのものがCOMだから
2019/11/02(土) 14:55:12.97ID:QFHeQDAU
>>832
そうそう。脆弱性の話はCOMじゃなくてDCOM。

もちろんCOMも脆弱性とは無関係ではないんだけど、
それはC++がバッファーオーバーフローと無関係ではないのと
同じようにCOMの設計自体の問題じゃない
2019/11/02(土) 15:00:15.19ID:4213U75y
ComPtr使ってる?
2019/11/02(土) 15:04:46.15ID:i1zx37WV
Essential COMの第1章で、C++からいかにしてCOMに至るか書いてあるけど、あの流れすごい好き
2019/11/02(土) 15:07:11.40ID:QFHeQDAU
std::filesystem はようやくできたかって感じだが、環境変数でまたorz

なんでこう、使う道具がまともに作られてないんだろうな
C++はメモリ管理ばっかり気にしてる気がする。
2019/11/02(土) 15:09:57.95ID:esIitHWU
>>836-837
> Excelとか以前に、DirectXやシェル(エクスプローラー)そのものがCOMだから
だからCOMとその先を区別してくれよ
COM自体は単なるインターフェース規約で実装は別
脆弱性とかは実装の不具合だから見つかり次第修正されてる
インターフェース規約も仕様バグとかありうるけどCOM自体の仕様バクは聞いたことない
2019/11/02(土) 15:13:34.66ID:OyXmLdGY
                   _
            .:⌒: 、  __ >: : : : : : :.   <
         |: : : :/´ : : : : : : : : : : : : :.     `゙  、 
       ‐.、/: : : : : : : : : : : : : : : : : : : i      
      У: : : : : : : : : : : : : : : : : : : : :/             \
     /: : : : : : : : : : : : ', : { : : : : : : :}         __   \  
.      j: : ;彡': : : : : : : : : ' : ', : : : : : リ       / : : : : : : . . \
     : : : : : : : : : : : : : : : }: :ト : : : : ′     /: : : : : : : : : : : ヽ '.
    : : : : : : : : : : : : : : :ノ :∧: : : : {       / : : : : : : : : : : : : : : v
.     i: : : : : : : : : : , ‐< >: :∧: : : :',  >‐:'―: : : : : : : : : : : : : : :.
.     | : : /⌒y:/   /: : : : : _ヽ: : /: ヽ: : : : : : : : : : : : : : : : : : :|
   八: : {   ^      {: : : Y´   ∨: : : x ― - . . __: : : : :__, : : : : }
      ー′        У: : j    {: : : ノ /: : : : : : : ̄: : : : : : イ
                 〈: : :/^     ー^ / : : : : : : : : : : : : : <
                ^彡        /: : :ヽ -‐=    ̄ ̄
                          {: : :ノ
                        ゞ´
2019/11/02(土) 15:31:17.24ID:QFHeQDAU
>>841
俺に言うなよ。俺はCOMは使われてるとしか言ってない。
シェル(エクスプローラー)をCOMで操作できるという
基本的な機能の互換性をなくすとか考えられん。
2019/11/02(土) 15:36:48.55ID:16zH/LAn
>>840
環境変数は昔から標準化されてるだろ。設定は微妙だけどデファクト標準関数があるし。
2019/11/02(土) 15:56:49.53ID:QFHeQDAU
>>844
std::cout << なんとか("PATH");
のように一行でやる方法教えて
もちろん脆弱性などで非推奨と言われるようなやり方は禁止

俺はここまでできて「使える道具」だと思ってるよ
2019/11/02(土) 16:32:02.24ID:neC/7x9U
>>843
だからCOMの話にその先であるエクスプローラの話を混ぜるなよ…
ところでExplorerってCOMで操作できたっけ?
Internet Explorerの話じゃないよね?
2019/11/02(土) 16:32:29.90ID:neC/7x9U
>>845
なぜに一行縛りなの?
2019/11/02(土) 16:50:16.72ID:TAka4wsD
OpenStack, Terraform でも、クレデンシャルなどの環境変数は、1つのファイルにまとめる

それでプログラム内で、os.environ[ 'OS_PASSWORD' ]
みたいに取得する

直接、設定ファイルに書いて、git に保存するのは禁止!
849デフォルトの名無しさん
垢版 |
2019/11/02(土) 17:09:24.74ID:orbX83iK
>>845
curl
env()
2019/11/02(土) 18:41:30.33ID:QFHeQDAU
>>847
実現可能な最小の行数

(一行でできるようにすることは他の言語で実現されてることからも明らか)
2019/11/02(土) 18:44:29.21ID:QFHeQDAU
ちなみにさっきオレオレで20行ぐらいの関数を書いて
一行で環境変数を取得できるようにしたよ。
でもこういうのは標準ライブラリで用意してあるべきもの
2019/11/02(土) 18:44:52.66ID:RcR6NuMm
こいつアホだろ
2019/11/02(土) 18:46:14.06ID:neC/7x9U
>>850
短ければ偉いとか思ってる?w
2019/11/02(土) 18:48:21.60ID:QFHeQDAU
>>853
俺が思ってるかどうかじゃなくて、
お前が、こういう理由で短いのがいい or だめと
"お前の意見" を書け
2019/11/02(土) 19:23:54.18ID:neC/7x9U
いや、お前がそう思ってるならいいんじゃね?w
2019/11/02(土) 20:10:41.91ID:QFHeQDAU
ん?反対意見があるんじゃないのか?
ないんだね。

お前がなにか思ってるだけかよw
2019/11/02(土) 20:16:14.52ID:FTVoAoH0
この手のバカでもたった20行で作れるんだろ
やっぱりC++は偉大じゃないか
2019/11/02(土) 20:17:34.65ID:QFHeQDAU
車輪の再発明。ってか他の言語使ったほうがいいよ。
2019/11/02(土) 20:28:57.58ID:16zH/LAn
>>845
だったらはじめから「僕はこうじゃなきゃヤなんだー」って言ってくれないと何も伝わらないぞ
2019/11/02(土) 20:32:42.04ID:QFHeQDAU
はじめから言ってる

> std::cout << なんとか("PATH");
> のように一行でやる方法教えて
2019/11/02(土) 20:36:29.98ID:dYVngRw/
> 車輪の再発明

典型的なアイディアキラー! マジ死ねよ

ガタガタくだらねえこと言ってねえで
本能のままにやってみたいことに暴走しなきゃ
何もできちゃ来ねえんだよ

そういう生産物の上にあぐらかいて怠けているゴミ共にわかるわけねえ!
2019/11/02(土) 20:42:10.52ID:QFHeQDAU
std::filesystemができたように、
std:envも作れってだけの話なのにね
何がそんなに気に触ったんだろう?
2019/11/02(土) 20:49:43.64ID:16zH/LAn
>>860
はあ?845が初出じゃん

getenvでいいだろ。
未定義時のエラー処理まで自動でやってほしいのか?
2019/11/02(土) 20:58:09.22ID:wdMk8lAB
一行じゃないとヤダとか条件を後出ししたからじゃね
2019/11/02(土) 21:01:20.92ID:dYVngRw/
> 何がそんなに気に触ったんだろう?

とぼけてんなよ、はっきり書いてんだろ
車輪の再発明と貴様はほざいた
撤回も修正も今さらいらねえ
2019/11/02(土) 21:08:11.55ID:QFHeQDAU
>>864
そんな下らないことで(笑)

一行とかそんなの重要なところじゃなく、
stdの名の元でまともなライブラリを作ってくれって話だよ
仮にも「標準」ライブラリなんだからさ

昔ながらのgetenvやその安全版はstd:stringが使われてないし、
std::getenvも、なぜかstd::stringではなくchar*が使われていて
使うとエラーとされるレベルの非推奨関数だし、当然ワイド文字版もないし
使おうと思った人なら、まともじゃないの意味ぐらいわかるはず

あ、使ったことない人が噛み付いてきたのかw


あと環境変数の未定義は正常な状態としてありえるのでエラーではない
細かくてすまんなw 適当な発言は気になるんだよ。
2019/11/02(土) 21:09:21.56ID:QFHeQDAU
>>865
噛み付いてばかりじゃなくて、"自分の意見"を言うだけの
知識はあるのかい?
2019/11/02(土) 21:11:47.48ID:RcR6NuMm
c++の標準ライブラリにプラットフォーム抽象の機能求めるってのは筋が悪いんだよ
filesystemだって結局はposixをテンプレートの味付けで焼き直した程度でファイルの監視もできないだろ
envとか別に標準で提供されなくても何も困ってない
1行かどうかなんてさらにどうでもいい
あと標準ライブラリが提供する範囲の機能で足りてるアプリ作ってるやつは
c++以外の言語使うことを考えた方がいい
2019/11/02(土) 21:29:52.49ID:neC/7x9U
>>856
> お前がなにか思ってるだけかよw
うん、バカな縛りだなと思ってるw
2019/11/02(土) 21:36:05.57ID:lCdDFN2K
組み込み系なんてenvどころかfilesystemとかそもそもねぇの普通な環境も多いしね
2019/11/02(土) 21:56:35.34ID:dYVngRw/
>>867
本能の枯れた人生の搾りかすめ
2019/11/02(土) 22:00:29.09ID:jnnO2x8F
ここは毎回しょうもないことで荒れるな
これだからC++界隈って嫌い
2019/11/02(土) 22:07:02.10ID:lY37zOLC
まあもともと広いレンジで使われることを目的とした言語だし
いろんな輩が入ってくるのはしゃーない。
しかしc++11以降は明らかに開発してないクソガキが増えたなという印象はある。
2019/11/02(土) 22:52:35.22ID:egbBWGD9
ないなら作りゃいいのに
なんのためプログラミングなんだろか
2019/11/02(土) 22:57:03.69ID:l25LSbph
せっかくhas_includeみたいなのも出来たのだから、環境ごとに存在しない場合機能提供されないようなものも標準化進めていったらいいんだよね
2019/11/02(土) 22:57:09.83ID:oLFNuF1W
2chのゴミスレ=C++界隈
2019/11/02(土) 23:15:11.30ID:FTVoAoH0
>>876
そこに涌く小バエ
2019/11/02(土) 23:38:30.50ID:dJ3V2vrm
>>876 >>877
場所そのものを馬鹿にするのはよくない。
それは差別や権威主義を生み易い。
2019/11/03(日) 00:27:38.19ID:wm/wPyZM
>>875
一応フリースタンディング処理系っていう分類があるのでそれはもうされてる
2019/11/03(日) 21:55:47.13ID:A1whpPq+
>>732
一つ教えてください、pimpl とか何べん読み返しても「利益の源泉」がわからないのですが、一つ一言で言い切っていただけませんか?
2019/11/03(日) 21:58:20.86ID:A1whpPq+
>>775
>マングリングって知ってるか?
>そもそもC++のクラスライブラリを簡単にリンク

私は Java も ruby も触っていますが、お手軽に java のライブラリを c++ から使いたいと、ふつふつ、と、思っているのです…
2019/11/04(月) 00:16:08.68ID:J7PIJnTc
>>880 (732じゃないけど)
クラス実装の変更に対する再コンパイルの必要性の削減。


これが利益とならない環境では用はない。これが利益となる環境はある。

個人的には同じ目的ならインターフェースクラス+生成関数のほうが手間が少なくて好み。
公開済みのクラス(具象クラス)に後付けでも適用できるのが pimpl の強みじゃないかな。
2019/11/04(月) 00:45:00.04ID:sHXph+lc
>>833
>>821は、>>802からの流れなのでヨロ

そうした上で、
>ライブラリ使用者に無関係で見せたくないからpimplで隠す
それがpimpl固有の特質である根拠とは…
構造体の詳細を見せる必要が無いなら
別にハンドルでも良いじゃん?Cだと昔からそうしてきたわけやし…

>>834
構造体の詳細を見せる必要が無いなら
別にハンドルでも良いじゃん?Cだと昔からそうしてきたわけやし…

pimplとかC++で実装する側がソースコードを整理したい目的で使うものであって、
ライブラリの公開インターフェースがpimplであるべきという論こそ勘違い甚だしい
2019/11/04(月) 00:50:27.63ID:HxncxYCK
>>881
お前の老害頭では無理だと思う
2019/11/04(月) 01:01:50.05ID:qdasM095
コンパイル時にリフレクションできたらC++にはもう何も望まないんだけどな
2019/11/04(月) 01:16:04.50ID:bOoSbled
リフレクションしたいとか実行時にあれだとかこれだとかしたいとか
もっと安全性を高めたいとかいう人はC#にいったらいいとおもうんだが
なぜいかないのか
2019/11/04(月) 04:20:27.81ID:6RBgtjpd
マングリングとかも規格で決めてほしいよね
そうすればクラスのエクスポートなんかも簡単になるのに
2019/11/04(月) 06:09:25.96ID:26dKwYrd
動的はともかく静的リフレクションはあって困る場面は無いだろ

冗長な記述や変なマクロを使わずに、enumを文字列化したりしたいだろ
2019/11/04(月) 06:17:29.31ID:ktSXuT3K
名前マングリングの方法がコンパイラ毎に違うおかげで
互換性のないオブジェクトファイル同士がリンクされる事故を防げる、って
『More Effective C++』に出てたな。

便利さも欲しいが安全性も保ちたい、という要求のせめぎあいだな。
2019/11/04(月) 06:59:32.99ID:1EaGoi2+
今生き残ってるC++のコンパイラってどのくらい種類あんの
特定ハード向けのもgccの派生なんでしょ?
2019/11/04(月) 09:40:11.27ID:sHXph+lc
>>833
>>883とオモタがちょっち訂正しておき鯛、
publicなメンバ関数だけでprivateを一切含まずに事を済ますクラス定義を広義のpimplとみなすなら
ライブラリの公開インターフェースとしてpimpl最高じゃな

ハンドルだけだとユーザーが間違った呼び出しをしかねない
これをpimpl式にクラスでwrapするのはスゲー有効
2019/11/04(月) 10:05:11.25ID:7p81GTJD
つーかハンドルで渡して使う時にキャストするって面倒だからさ
privateだからいいでしょとかいう問題じゃない
2019/11/04(月) 12:16:24.53ID:pwba8h1Q
記述の煩雑さはもう諦めるけどインラインPimplでゼロオーバーヘッドにしてほしい
2019/11/04(月) 12:22:24.34ID:TNJ/Yj6e
煩雑さを許容できるならやれるでしょ
pointerでなくバイト配列にしておいて中でcastするやつ
気を付けないところいろいろあるけど
2019/11/04(月) 12:35:35.98ID:jCRIC3rQ
オーバーヘッドを気にしている人の大半は、気にする必要のあるものを作っていない
2019/11/04(月) 12:35:45.49ID:DlV1X8tk
実装をpimplに押し込めて公開インターフェース上の変数メンバの増減を無くすのが肝なんだから
pimplのデリファレンスのオーバーヘッドは避けようがないだろう。
2019/11/04(月) 12:41:44.84ID:7p81GTJD
そもそもprivateな関数宣言をpublicなヘッダに
書かないといけないというC++言語仕様の欠陥

publicヘッダとprivateヘッダの二つに分けて
クラス宣言できればよかった

ちなみにC#ではpartialクラスといって
複数のファイルにまたがってクラスの定義ができる
2019/11/04(月) 13:33:20.96ID:TNJ/Yj6e
>>896
こういうの
https://ideone.com/EB36N2
pointerじゃないからpimplではない
2019/11/04(月) 13:45:03.05ID:7wrIz40y
まあ欠陥って言われてもprivateメンバー変数変更されたらインスタンスのサイズ変わったりするから
1) 参照してるソースも含めてリコンパイルする
2) ポインタで持つ(pimpl)
しかないからねぇ
C++的には現状の言語仕様でIDEでprivateは見せないようにもできるとかでいいと思う
2019/11/04(月) 13:47:25.16ID:ncwvkXHO
>>898
パズルとしてはいいけど真顔で書いてたらちょっと引くわw
2019/11/04(月) 13:59:48.02ID:DlV1X8tk
>>898
その場合でも任意の変数メンバの拡張性は結局 Hide::a の存在で保証されているわけだろう。
impl[32] と予約された範囲まで拡張できるというのもあるのかもしれんが。
2019/11/04(月) 14:00:47.43ID:7P/NsyXI
結局低レイヤーを考慮しないでバカが文句言ってるだけで
そんなことに付き合う必要はないんだよ。
2019/11/04(月) 14:16:11.73ID:TNJ/Yj6e
>>901
バイナリ境界にしたときの拡張性のこと言ってる?
それはまさに配列のサイズでリザーブだね
溢れたら終わり

目的がヘッダー依存を切ることなら必要に応じて配列サイズ増やせばいいだけ
めんどいけどassertかけてあるからミスることはない
あとpimplは中でnewされるのがいやな場合あるからそれを避けられるってのも大きいね
2019/11/04(月) 14:34:36.07ID:mRc+a4F8
>>897
(使う側が)、CPerson person[10]; や、new CPerson[10] のように書いたと
すると、C++は高速化のため、CPersonのバイトサイズを定数値として
静的にコンパイルして、スタックや Heapからそれらのオブジェクトの領域を
確保する。
なので、たとえC++でCPersonのprivateメンバがC#のpartialの様に分けて宣言できた
としても、それらを全て合わせた全体のバイトサイズが分からないと静的に処理できない。
故に結局、partialの一部であっても全体のサイズに影響のあるような変更が行われた
場合には、上記の様な形でCPersonを使うプログラムは再コンパイルが必要となる。
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況