[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 04/19 16:45 / Filesize : 311 KB / Number-of Response : 1020
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

C++相談室 part132



1 名前:デフォルトの名無しさん mailto:sage [2017/10/10(火) 00:11:34.01 ID:nc/5PI4P0.net]
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part131
mevius.2ch.net/test/read.cgi/tech/1501295308/

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

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

[C++ FAQ]
https://isocpp.org/wiki/faq/
www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

232 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 18:40:54.94 ID:se7vIA1E0.net]
auto下痢症

233 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 18:55:08.38 ID:EF3aiwNW0.net]
autoネタ大人気だな
俺もiteratorなんかじゃ迷わずauto使うけど
ポインタすらちゃんと理解してないような奴が無闇にauto使ってるのを見るとね

234 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 18:57:53.27 ID:KmwbyHDC0.net]
それ以上autoの話をするのはアウトだぞ

235 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 19:55:30.03 ID:se7vIA1E0.net]
おぉっと

236 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 20:20:21.90 ID:8UQnYlEC0.net]
同じ話題ばかりで食傷気味、もう吐きそう。
…というこの書き込みも同系ネタで済まぬ。

237 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 22:27:19.25 ID:oyaJ8gC3M.net]
>>229
auto を単なるシンタックスシュガーと言うのもどうかと思うが
とりあえず使わないと言う選択肢はないわ

238 名前:片山博文MZ mailto:sage [2017/10/26(木) 22:29:12.27 ID:LcK6lNJBd.net]
暇潰しに
https://github.com/katahiromz/TextCanvas
でも見て行って

239 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 22:31:49.27 ID:6866r+hk0.net]
嘔吐嘔吐、うるせーなぁ(´・ω・`)

240 名前:デフォルトの名無しさん [2017/10/27(金) 04:04:41.73 ID:lyx9X4ms0.net]
>>228
同感



241 名前:デフォルトの名無しさん [2017/10/27(金) 08:02:50.09 ID:O+M8u5Cb0.net]
>>233
>>233
>>233

242 名前:デフォルトの名無しさん [2017/10/27(金) 08:33:50.52 ID:beF6mKBOd.net]
C++使わないとか頭固すぎ
使えるところは全部C++だわ

243 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 08:39:18.11 ID:2A0a9mBA0.net]
単なるシンタックスシュガーでオーバーヘッドとか副作用無いしねw

244 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 08:39:47.11 ID:2A0a9mBA0.net]
いやテンプレートは違うか

245 名前:デフォルトの名無しさん [2017/10/27(金) 08:41:10.57 ID:Aa1jtLeH0.net]
実は>>213は、>>233のパクリ

246 名前:デフォルトの名無しさん [2017/10/27(金) 09:37:02.86 ID:EP/R3fy90.net]
ID:2A0a9mBA0 ←こういう馬鹿が本当にC++使ってるとは思えない。無職だろう。

247 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 09:50:50.86 ID:+sOx5VXfM.net]
auto絶対使わないマンってややこしい型も、全部手で書いてるの?
ET使うときとかどうしてんだろ。

248 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 10:00:22.45 ID:tbT2n0brd.net]
テンプレートを除いた部分は単なるシンタックスシュガーだよ?
o->vftbl->f(o, a) と書こうが o->f(a) と書こうが何の違いもない。
テンプレートはチューリングマシンとしての計算能力があるから別だけど。

249 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 10:25:02.18 ID:n3hllmLr0.net]
>>245
ET使う時って評価するときか?
auto a = b + c * d;
これやるとautoの型は式テンプレートで、評価が起きないから困ったことになるぞ
(まだ評価せずに組み合わせる場合は逆にautoが便利だけど)
ET作るときや実装時は確かに型がややこしいけど、普通returnの一文で終わるから
return {うんたらかんたら};
で済むと思う

あと、ET周りの関数の宣言時をautoでやってしまうと、実装完了まで使用できないというのが足かせになると思うぞ

250 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 11:54:16.72 ID:2++1MvhW0.net]
auto使うのって例えば

template <class U, class V>
auto func(U& a, V& b) -> decltype(a + b);

みたいに戻り値の型が簡単に推測しにくい時に使ってるけどな



251 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 19:49:19.03 ID:+sWf4zsJ0.net]
auto LocalFunc = [&]() { ... };

252 名前:デフォルトの名無しさん [2017/10/27(金) 22:31:31.38 ID:67YjQzLBM.net]
>>248
そのautoは型推論のautoとは違う使い方だよね。
戻値の後置宣言都合によるプレースホルダ的な。

253 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 22:53:59.94 ID:cIkV9qHA0.net]
同じだろう

254 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 01:40:27.36 ID:rDr3prXm0.net]
mapみたいな複数行にまたがるようなのを
for( auto const & r: hoge ){}
とかにまとめる用途にしか怖くて使えんな
意図しない型になってたけどたまたまコンパイルに通ってたとか
後で仕様変更とか根元の hoge 書き換え後にたまたまコンパイルに通ってたりとかで
期待したメソッドの動作にならなかったりとかされるとハマりそうで怖い

255 名前:デフォルトの名無しさん [2017/10/28(土) 02:17:51.25 ID:pC+TnRxI0.net]
>>252
暗黙の型変換乱用しないかぎりそんな事ならんと思うが

256 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 08:28:41.62 ID:Jnrw/MWj0.net]
テクノロジーに善悪は無い

257 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 08:44:41.02 ID:rDr3prXm0.net]
>>253
暗黙の云々とかoperator=とかが怖いってだけ
それに後から読み返した時、どんな戻り値が欲しかったのかとか
autoだとわかり辛いって事がままあるし、autoはなるべくあちこちに散乱させたくない
.NET方面のvarとかも気持ち悪いったらありゃしない・・・

258 名前:デフォルトの名無しさん [2017/10/28(土) 08:56:43.01 ID:JVsxHO5Xd.net]
autoの数々の利点のほうが大きいからどの言語でも型推論は基本になってきてるな
メイヤーズも言ってるしマイクロソフトも推奨してるし

259 名前:デフォルトの名無しさん [2017/10/28(土) 09:55:15.82 ID:QoaQu2To0.net]
autoはどのように推定されるかを理解して使うもので、
断じてバカ用のヘルパーではない
バカ自身はそれがわからないから変な杞憂に陥るってだけ

260 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 11:02:25.42 ID:J8kLZQh+0.net]
バカだけどIDEさんが、IDEさんさえいてくれれば大丈夫だ問題ない



261 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 12:14:14.53 ID:BDtptoiy0.net]
初心者はまずauto使わずにプログラミング出来るようになってからにした方がいいね

262 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 17:38:09.89 ID:VIxhg0oq0.net]
auto使わずにコンパイラの警告レベルを最高、警告は即エラーって設定にして
テンプレートライブラリ使ったテストプログラムを書いてみると
autoのありがた味が分かると思う。

ループの制御変数の型がえらいことになったりするからな。
いわんやイテレータをや。

263 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 22:00:09.12 ID:Jnrw/MWj0.net]
例えば
 Bar x;
 auto z = x;
としたときに、zはの型は必ずBarになってBarの基底クラスになったりしないの?

264 名前:片山博文MZ mailto:sage [2017/10/28(土) 22:00:59.73 ID:TWx2GtJid.net]
>>261
インスタンスとクラスを区別せよ。

265 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 22:03:17.64 ID:Jnrw/MWj0.net]
Barの基底クラスがFooだとして、
実はBarはコピコンがprivateでなぜかoperator Foo()だけがpublicで定義されているかもしれない
かもしれない運転、

266 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 22:11:30.59 ID:Jnrw/MWj0.net]
あるいは
class Foo {
 void assign(const &Foo) { ... } // (A)
};
class Bar : public Foo {
 void assign(const &Foo) { ... } // (B)
};
Foo x1, x2;
Bar y;
auto z = x1;
z.assign(x2); // (C)
y = z;
とかなときに(C)で呼ばれるassign()はどっち?

267 名前:片山博文MZ mailto:sage [2017/10/28(土) 22:12:10.53 ID:TWx2GtJid.net]
>>264
試せばわかる。

268 名前:片山博文MZ mailto:sage [2017/10/28(土) 22:16:47.80 ID:TWx2GtJid.net]
参照なしのautoで代入だから、この場合は同じ型でコピーだね。メソッドは仮想関数でもないから、同じクラスのメソッドが呼ばれるはずだ。

269 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 22:57:04.67 ID:Jnrw/MWj0.net]
C++で起き得るBarとFooのパターン全てについてテストケースを考えるのは無理ゲーすぐる、
auto儲はどのようにして有限の人生と無限に近い(ときに想像を絶する結果をもたらす)C++の自由度との折り合いを付けているのであろうか…

270 名前:片山博文MZ mailto:sage [2017/10/28(土) 23:02:38.36 ID:TWx2GtJid.net]
かしこいIDE使ってるなら、ビルドしたらその場でautoの型がわかるはず。スマートに行こうぜ、スマートに。



271 名前:デフォルトの名無しさん mailto:sage [2017/10/28(土) 23:49:55.51 ID:n2BUqhCar.net]
struct S {};
using Bar = S const;
Bar x;
auto z = x;

必ずしも同じ型ではないな

272 名前:デフォルトの名無しさん [2017/10/29(日) 01:18:54.15 ID:jdBIz2nU0.net]
>>263
それがどんな問題が起きると?
>>264
Bar使われてないじゃん

273 名前:デフォルトの名無しさん [2017/10/29(日) 05:32:17.05 ID:0yKrkLYC0.net]
大量のC++のコードを読み、大量のC++を書いてきた人は今更シンタックスを変えようとは思わない。
碌にコードを読んだことがない、書かない人が文法を変えたがるのだ。

外国人の日本語入門者が「は」と「が」が難しいからautoにしろ、どっちの意味かは読む人、聞く人が考えろと言ってるうなもの。
ひらがなとカタカナを統一しろとかね。日本人ならそうは思わない。日本語を使い続けて必要な理由を知ってるから。
日本語から「が」がなくなれば不便で仕方がない。

だからauto使いは大学デビューとか言われるのだ。未だコードネイティブではないのだ。
10年使ってからautoが必要かどうか考えろ。答えは明らかだ。

274 名前:デフォルトの名無しさん [2017/10/29(日) 07:32:07.72 ID:m60zTw010.net]
> 大量のC++を書いてきた人は今更シンタックスを変えようとは思わない。

これは嘘
autoだけでなくtrailing return typeやusing aliasなど
かゆいところにやっと手が届いたシンタックス変更は大歓迎している
C++11以後に拒否反応しまくって、未だにC++98のマゾプレーを続行中の変態は
頭固すぎだ

# 自分で言うのも何だが、俺に頭固いなんて言われるのは極端すぎだ

275 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 07:55:51.29 ID:Heo7FnD+0.net]
>>270
藻前の呼びたかったassign()は実はFoo::assign()(基底クラスの方)だったかもしれないじゃん?

276 名前:デフォルトの名無しさん [2017/10/29(日) 08:02:49.06 ID:5nFESEae0.net]
ところでこれからC++を始めたいのだが、純粋にC++が始めたいのではなくてc言語の代わりとして
C++を使ってみたい。多少なりともC++

277 名前:フ方が便利だろうとおもうから。一つ二つ制約があって
ROMが256バイトしかない。RAMが8Kしかない。こういう場合に今までROM48Kバイト、RAM8K
バイトでおさまっていたプログラムをC++で移植するのは余裕だろうか? それとも便利になる分
スペースがとられてRomエリアが少なすぎるってレベルだろうか?
[]
[ここ壊れてます]

278 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 08:05:45.00 ID:6IgW6Wrm0.net]
アセンブリで書けるレベルじゃね?それ。

279 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 08:07:50.71 ID:XRmGRjwZ0.net]
>>271
要出典:auto使いは大学デビュー

ラムダ式を変数に入れたいときはどうやるの?
コンテナのイテレータを変数に入れたいときは型名全部書くの?
std::bindの戻り値を変数に入れたいときはどうするの?

何でもかんでもauto使うのはどうかと思うがこういう面倒なところはautoでいいんじゃね

280 名前:片山博文MZ mailto:sage [2017/10/29(日) 08:09:27.19 ID:k1qoOab2d.net]
>>274
メモリーをけちるなら、STLとかテンプレートとか呼ばれるものはあまり使わない方がいい。
std::coutなどのストリームもダメだ。あれは遅いし、バカ食いする。



281 名前:デフォルトの名無しさん mailto:sage釣 [2017/10/29(日) 08:10:20.13 ID:XyYI0EpP0.net]
cでもキツいな

282 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 08:14:51.32 ID:Heo7FnD+0.net]
多分printf()がリンクされたら死ぬレベル

283 名前:片山博文MZ mailto:sage [2017/10/29(日) 08:19:49.13 ID:k1qoOab2d.net]
>>274
256KBの間違いだろ?
まずは、メソッド、デストラクタ、std::stringの3つを学習してみな。便利だとわかるから。

284 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 08:25:23.25 ID:XRmGRjwZ0.net]
>>274
ROMは256Kの誤記だとして
RAM8Kはきついな

マイコン向けの開発環境も無償版や評価版なんてのがあるから一回試した方がいいと思う

コンパイラのオプションで例外と実行時型情報はOFFにするのを忘れずに
C++のコンテナクラス(std::vectorやstd::string)はメモリ不足で使えなさそうだな

285 名前:デフォルトの名無しさん [2017/10/29(日) 08:51:05.52 ID:5nFESEae0.net]
ROMは256kの間違い。外部RAMは256kbある。(ただしSPIでアクセスするので遅い)
だから8kは純粋にワークとして使える。
8kのRAMがきついと思うのは何故?
C++もワークはスタックを使うと思うけど、プログラムの実行エリアとして例えばクラスインスタンスを
作るのにRAMを消費することになるんだろうか? 動的にインスタンスを作成するとそのクラスが大きいと
RAMエリア(mallocで確保してロードしたら、解放するまではRAMエリアを使う)を圧迫することになる。
ということはRAMをあまり消費しない手法ってあるんだろうか?

286 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 09:18:10.76 ID:Heo7FnD+0.net]
普通は処理系が要求するコード、CONSTデータ、、スタック、初期値付きデータ、BSSの各セクションを
プログラマーが明示的にリンカに指示して割り当てさせるんじゃね;;
これはCもC++も同じなのでCでのやり方を理解しているなんならC++でも同じようにやれば良い
(グローバルなオブジェクトの構築と破棄の手当てが追加になるだけぐらいしか違いが無い

287 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 09:30:39.20 ID:XRmGRjwZ0.net]
>>282
最適化切って動作確認したり、デバッグ用のコードを仕込んだりしてると8Kは意外とすぐに使いきれてしまう
当然プログラムの規模や書き方によるところだから必ず足りないわけではないけど

C++だから足りないというわけではない
元のプログラムがCで書かれてて8Kで動いてたならまぁ大丈夫か

288 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 09:31:08.74 ID:Heo7FnD+0.net]
>>282
>8kのRAMがきついと思うのは何故?
全てはID:5nFESEae0が上記各セクションをROMやRAMにどのように割り付けようとしているのかにかかってゐるのだが、

仮にスタックと初期値つきデータとBSSを全部8 KBのRAMに割り付けた場合、
コード以外の全て(malloc()含む)のメモリ消費がトータルで8 KBに収まらねばならず、
メモリ不足のせいでやれることは相当にきびしくなるとおもー

289 名前:デフォルトの名無しさん [2017/10/29(日) 09:38:54.44 ID:0yKrkLYC0.net]
ID:XRmGRjwZ0

> RAM8Kはきついな
> コンパイラのオプションで例外と実行時型情報はOFFにするのを忘れずに
> C++のコンテナクラス(std::vectorやstd::string)はメモリ不足で使えなさそうだな

こいつレベル低すぎだろ。ド素人にもほどがある。
完全に組み込み経験なしじゃねーか。学生じゃねーのか。

290 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 09:49:26.98 ID:6IgW6Wrm0.net]
コンテナクラスの消費バイトは12バイト。だっけ?



291 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 09:56:55.29 ID:Heo7FnD+0.net]
sizeof(コンテナクラス)すればワカル、
ただしコンテナに要素の追加でmalloc()される分は別枠

292 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 10:05:31.40 ID:NWVP0NdTH.net]
>>274
論外 勉強目的だろ
自称プロでも 8kB なんて環境で組んだことのある人間なんて少数
普通はデフォルトのスタックサイズやvtableの存在すら知らん
考え直せ

293 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 10:24:19.89 ID:9Q+tOYh80.net]
Microchip マイコン PIC24FJ128GA006-I/PT 16ビット RISC PIC24FJ,
32MHz, 128 kB フラッシュ, 8 kB RAM, 64-Pin
jp.rs-online.com/web/p/microcontrollers/6230897/

8KB RAM は、400円のPIC マイコンとかだろ

そもそも、C++ のコンパイラが無い

294 名前:デフォルトの名無しさん [2017/10/29(日) 10:29:34.45 ID:5nFESEae0.net]
コンパイラはありますよ。C/C++とうたってるので恐らくC++もできると思うが、、、
TIとかHewとか他にもKeilとか

295 名前:デフォルトの名無しさん [2017/10/29(日) 10:41:22.70 ID:5nFESEae0.net]
>グローバルなオブジェクトの構築と破棄の手当てが追加になるだけぐらいしか違いが無い

おお、心強いお言葉。
例えば

class MyClass
{
int buf[1000];
int no = 0;
void inputdisp(int aa){
sprintf(buf," aa=%d",aa);
}
};
int sub1()
{
MyClass aaa;
aaa.disp(333);
return 0;
}

こういう場合はaaaはbufは2000バイトのRAMを使うけれども、stackに確保するんだろうか?
aaa自体はrom上にできると考えていい?
それなら、cと混在で徐々にC++に変えていく程度でも問題ないのかなとは思っている。

296 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 10:52:19.32 ID:Heo7FnD+0.net]
>>292
>aaa自体はrom上にできると考えていい?
質問の意味不明 再入力せよ

297 名前:デフォルトの名無しさん [2017/10/29(日) 11:05:38.47 ID:5nFESEae0.net]
動的にNewを使ってインスタンスを生成した場合には、コードは必

298 名前:然的にRam上に置かれる。しかしスタティックに
生成した場合は、Code部分は原理的にはRom上にも置くことができる。そういう機能があるかどうか?って質問。
[]
[ここ壊れてます]

299 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 11:08:14.46 ID:Heo7FnD+0.net]
>>294
>動的にNewを使ってインスタンスを生成した場合には、コードは必然的にRam上に置かれる。
断じて否
こういう手合いに騙されてはいけない

300 名前:デフォルトの名無しさん [2017/10/29(日) 11:14:29.67 ID:jdBIz2nU0.net]
>>292
aaaもbufも同じ場所。大抵のコンパイラでは同じアドレスを指す。C解るならclassをstructに置き換えて考えたらいい。それと一緒。



301 名前:片山博文MZ mailto:sage [2017/10/29(日) 11:15:45.86 ID:k1qoOab2d.net]
operator newの再定義ね。

302 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 11:29:26.33 ID:Heo7FnD+0.net]
ていうか>>294ハ質問者本人かしつれいorz

>>292のMyClass::inputdisp(int aa)のコードは、名前が適当にマングルされて(*1)
 void hoge(MyClass* this, int aa) // (1)
という2引数の関数としてコードセクションにコードが格納される、というのが真実(*2)(*3)
オブジェクトaaaを動的にNewを使ってインスタンスを生成しようがスタティックに生成しようが、
そんなこととは無関係に、aaa.inputdisp((int型データ))というメソッドの呼び出しは(1)の関数呼び出しにコンパイルされる

*1: ここでは簡単のため’hoge’という名前にマングルされたとしている。本当は引数の型や戻り値も情報として含む名前になるが省略
*2: C++の言語規格でそうせよ決まっているかどうかは知らないが、そう処理する処理系しか無いと思う
*3: コードセクションがROM上なのかRAM上なのかはプログラマーがコードセクションをどう割り付けたかによる

303 名前:デフォルトの名無しさん [2017/10/29(日) 12:14:39.69 ID:5nFESEae0.net]
>296
うろ覚えで使ってるが、
Section Type of Memory Section Type of Memory
 .bss RAM
 .stack RAM
 .data RAM
 .sysmem RAM
 .text  ROM   これがコード部分
 .その他 ROM
こういうのがある。

Hewの場合#pragumaでセクションを生成できたとおもうが、一般的に#pragma とかで割り当てできるんだろうか?
今回はTiのコンパイラを使う予定なので初めての試み。
多分 
static Myclass aaa;
みたいにスタティックかなにかを冠して宣言すれば.textにコードは配置されると思うが、どうなんだろう。
スタティックなんだから原理的には配置はどうにでもなる筈。

304 名前:デフォルトの名無しさん [2017/10/29(日) 12:18:36.34 ID:5nFESEae0.net]
問題はスタティックにした場合, コードは.textに配置されるとしてもdataが.dataに配置されると非常にまずい。
スタックでやってもらえないと困る。

305 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 12:34:41.62 ID:n8H8yUIJM.net]
>>300
関数が再入されることを考えたら普通にスタックに配置されると思うよ。
むしろstaticにしたらスタックには配置されない。
ここまでインスタンスの話。
コードはいずれにしても.textに配置されると思うよ。特に指定がない限り。でもそれは>>300にとっても問題にならないかと。

306 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 12:40:57.57 ID:oFRxn/Jf0.net]
>>289
30年ぐらい前に ROM2KB, RAM2KB の Z80 ボード用プログラムをC言語で作ったことあるよ。

307 名前:デフォルトの名無しさん [2017/10/29(日) 12:43:00.92 ID:5nFESEae0.net]
例えば、パネル表示をまとめたクラスのような場合にはクラスのメソッド部分が非常に大きくなる。しかもライブラリ
的に使うわけだから、階層のわりと下で使うことになる。3階層あって、2階層目くらいから同時にいくつかが
生成されてしまう可能性も高い。するとRAMエリアが直ぐにパンクする。なのでメソッドを大量に含んだライブラリ的な
働きをするクラスに関しては、.textにあってほしい。それは可能だと思うがじゃあそのクラス内でつかうバッファなどの
変数なんかが問題になる。これは動的に生成しないとクラスの使い道が非常に限られてくる。第一suba()で使っていて
subb()で使うとバッファエリアが壊れてしまう。
1.bufを持てないクラスなんて殆ど意味がない。
2.bufをスタティックにしか配置できないクラスなんて使い道がない。
3.小規模マイコンでメソッドをramに確保するなんて馬鹿げている。
これは明らかだよね。
 つまりMyclassのbuf[1000]、メソード関数()(例えば50個)をスタックと.textにそれぞれ上手く配置する工夫が
絶対に必要ってことだね。

308 名前:デフォルトの名無しさん [2017/10/29(日) 12:45:06.72 ID:5nFESEae0.net]
>コードはいずれにしても.textに配置されると思うよ。特に指定がない限り。でもそれは>>300にとっても問題にならないかと。

であれば何も問題ないですね。

309 名前:sage mailto:sage [2017/10/29(日) 12:54:06.20 ID:t3scGPtZ0.net]
組み込みはPCで動くの違って配置も考えないといけないから大変だな

マイコンでの配置に関してはここより組み込みが普通の電電板のマイコンスレでの方が良いような気がするが。

310 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 16:49:46.36 ID:9sOuhtQV0.net]
>>274
純粋にC言語の書き方するだけならコンパイラの能力次第だと思う



311 名前:デフォルトの名無しさん [2017/10/29(日) 18:26:51.08 ID:5nFESEae0.net]
ヘッダファイルに型定義して、実装をCPPに書くのってどうかなーと思う。特に組み込み
だとファイルを分ける意味がわからない。分けるとクラスのイメージが掴みにくい気がする。

312 名前:片山博文MZ mailto:sage [2017/10/29(日) 18:28:45.31 ID:k1qoOab2d.net]
>>307
コンパイル時間短縮とか中身の隠蔽とかしたいなら、ソースとヘッダーを分けてもいいんじゃね?

313 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 18:58:48.05 ID:9sOuhtQV0.net]
>>307
その定義した型を他のファイルから使う時はどうするのさ?
単一のファイルしか使ってないなら分ける必要はないけど

314 名前:デフォルトの名無しさん [2017/10/29(日) 19:08:11.02 ID:5nFESEae0.net]
クラスってのは型の定義なんだから、使う時は全部インクルードではだめなの?
例えば
clsAAA.h
clsBBB.h
...
clsXXX.h

main.cpp
の中で
include "cls\clsAAA.h"
include "cls\clsBBB.h"
....
include "cls\clsXXX.h"

315 名前:デフォルトの名無しさん [2017/10/29(日) 19:13:52.28 ID:5nFESEae0.net]
>コンパイル時間短縮とか中身の隠蔽とかしたいなら、ソースとヘッダーを分けてもいいんじゃね?
100個くらいクラスがあってもどってことないと思うが、、、ロード時間が問題になるんだったら
clsディレクトリにクラスファイルを入れて
prtディレクトリにメソッドを実装しない型だけ抜き出したのを入れといて、xxx.prtをインクルードする
方がいいと思う。

316 名前:デフォルトの名無しさん [2017/10/29(日) 19:15:39.48 ID:5nFESEae0.net]
prtは自動生成できるって前提だy。

317 名前:デフォルトの名無しさん [2017/10/29(日) 19:18:10.19 ID:5nFESEae0.net]
やっぱりメッソドがデータなんかと分離するのはわかり難い。他のオブジェクト指向のコンパイラでもそんなことはしないしね。

318 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 19:21:46.87 ID:qxWnFrvp0.net]
ヘッダだけだと循環参照起きるし、循環参照起きるところだけcppってのも気持ち悪い

319 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 19:34:33.73 ID:XE573cMW0.net]
>>313
分けなきゃいけないことはない
分けた方が効率が良い(場合が多い)というだけだから
理解した上で敢えて分けないならそれはそれで好きにすれば良い

320 名前:片山博文MZ mailto:sage [2017/10/29(日) 19:36:43.09 ID:k1qoOab2d.net]
>>314
inlineキーワード使って定義もヘッダーに書いちゃえば?



321 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 20:07:38.66 ID:9sOuhtQV0.net]
>>307
> ヘッダファイルに型定義して、実装をCPPに書くのってどうかなーと思う。

>>310
> クラスってのは型の定義なんだから、使う時は全部インクルードではだめなの?

いったい何をどうしたいのかさっぱりわからん

322 名前:デフォルトの名無しさん [2017/10/29(日) 20:13:48.53 ID:5nFESEae0.net]
>314
前方宣言でいいのでは?
そういうのは特殊な場合だけだから

323 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 22:07:47.02 ID:qxWnFrvp0.net]
>>318
class Aからclass Bのメソッドを呼んで
class Bからclass Aのメソッドを呼ぶ場合前方宣言だけでは無理なはず

324 名前:片山博文MZ mailto:sage [2017/10/29(日) 22:10:20.28 ID:k1qoOab2d.net]
>>319
宣言を両方最初に書いておき、定義を後に書く。

325 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 22:21:25.90 ID:qxWnFrvp0.net]
>>320
class Aとclass Bが同じファイルで定義されてるならいいかもしれないけど、そうじゃない場合のほうが多いでしょ

326 名前:デフォルトの名無しさん [2017/10/29(日) 22:40:54.16 ID:5nFESEae0.net]
いづれにしてもメソッドをばらして別ファイルに書くほうが良いという根拠にはならんだろ。

327 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 22:52:18.92 ID:qxWnFrvp0.net]
一部分けなきゃできないところがあるから全部分けるだけで、できるならc#とかみたいに全部一つのファイルに書きたい

328 名前:デフォルトの名無しさん mailto:sage [2017/10/29(日) 23:53:27.12 ID:OlzRTZr+0.net]
それだとクラスが縦に長くなって範囲がぱっと見わからなる
1クラス1ファイルの場合はいいけどさ

329 名前:デフォルトの名無しさん mailto:sage [2017/10/30(月) 01:18:16.05 ID:ImI1HNcW0.net]
てかコードの利用者はヘッダしか見ねーんだから普通に分けとけよ

330 名前:デフォルトの名無しさん [2017/10/30(月) 03:59:29.97 ID:XQpDzkmg0.net]
>323
できないところってどんなところ? C#にできてC++にできないなんてどういうことか意味わからん。
cls::とか邪魔くさい。悪しき慣習だろ。あまりにばかげてるからC#では止めにしただけでしょ。



331 名前:デフォルトの名無しさん [2017/10/30(月) 05:31:15.27 ID:shFErbol0.net]
>>323
一部だけ分けりゃいいじゃん
それとシングルソースにしちまうと分担がしにくいだろ

332 名前:デフォルトの名無しさん mailto:sage [2017/10/30(月) 09:03:26.26 ID:d9bwD/eVM.net]
>>327
ヘッダとソースを分けないでって意味でシングルソースってことではないと思うぞ






[ 続きを読む ] / [ 携帯版 ]

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

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