次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part131
http://mevius.2ch.net/test/read.cgi/tech/1501295308/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.101【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1500329247/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
探検
C++相談室 part132
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん 転載ダメ (ワッチョイ faeb-wbjw)
2017/10/10(火) 00:11:34.01ID:nc/5PI4P0305sage (ワッチョイ ebe8-KIob)
2017/10/29(日) 12:54:06.20ID:t3scGPtZ0 組み込みはPCで動くの違って配置も考えないといけないから大変だな
マイコンでの配置に関してはここより組み込みが普通の電電板のマイコンスレでの方が良いような気がするが。
マイコンでの配置に関してはここより組み込みが普通の電電板のマイコンスレでの方が良いような気がするが。
306デフォルトの名無しさん (ワッチョイ 13b3-X7g4)
2017/10/29(日) 16:49:46.36ID:9sOuhtQV0 >>274
純粋にC言語の書き方するだけならコンパイラの能力次第だと思う
純粋にC言語の書き方するだけならコンパイラの能力次第だと思う
307デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 18:26:51.08ID:5nFESEae0 ヘッダファイルに型定義して、実装をCPPに書くのってどうかなーと思う。特に組み込み
だとファイルを分ける意味がわからない。分けるとクラスのイメージが掴みにくい気がする。
だとファイルを分ける意味がわからない。分けるとクラスのイメージが掴みにくい気がする。
308片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-+nyC)
2017/10/29(日) 18:28:45.31ID:k1qoOab2d >>307
コンパイル時間短縮とか中身の隠蔽とかしたいなら、ソースとヘッダーを分けてもいいんじゃね?
コンパイル時間短縮とか中身の隠蔽とかしたいなら、ソースとヘッダーを分けてもいいんじゃね?
309デフォルトの名無しさん (ワッチョイ 13b3-X7g4)
2017/10/29(日) 18:58:48.05ID:9sOuhtQV0310デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 19:08:11.02ID:5nFESEae0 クラスってのは型の定義なんだから、使う時は全部インクルードではだめなの?
例えば
clsAAA.h
clsBBB.h
...
clsXXX.h
main.cpp
の中で
include "cls\clsAAA.h"
include "cls\clsBBB.h"
....
include "cls\clsXXX.h"
例えば
clsAAA.h
clsBBB.h
...
clsXXX.h
main.cpp
の中で
include "cls\clsAAA.h"
include "cls\clsBBB.h"
....
include "cls\clsXXX.h"
311デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 19:13:52.28ID:5nFESEae0 >コンパイル時間短縮とか中身の隠蔽とかしたいなら、ソースとヘッダーを分けてもいいんじゃね?
100個くらいクラスがあってもどってことないと思うが、、、ロード時間が問題になるんだったら
clsディレクトリにクラスファイルを入れて
prtディレクトリにメソッドを実装しない型だけ抜き出したのを入れといて、xxx.prtをインクルードする
方がいいと思う。
100個くらいクラスがあってもどってことないと思うが、、、ロード時間が問題になるんだったら
clsディレクトリにクラスファイルを入れて
prtディレクトリにメソッドを実装しない型だけ抜き出したのを入れといて、xxx.prtをインクルードする
方がいいと思う。
312デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 19:15:39.48ID:5nFESEae0 prtは自動生成できるって前提だy。
313デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 19:18:10.19ID:5nFESEae0 やっぱりメッソドがデータなんかと分離するのはわかり難い。他のオブジェクト指向のコンパイラでもそんなことはしないしね。
314デフォルトの名無しさん (ワッチョイ 99c3-6HUO)
2017/10/29(日) 19:21:46.87ID:qxWnFrvp0 ヘッダだけだと循環参照起きるし、循環参照起きるところだけcppってのも気持ち悪い
315デフォルトの名無しさん (ワッチョイ 13e1-Zxfq)
2017/10/29(日) 19:34:33.73ID:XE573cMW0316片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-+nyC)
2017/10/29(日) 19:36:43.09ID:k1qoOab2d >>314
inlineキーワード使って定義もヘッダーに書いちゃえば?
inlineキーワード使って定義もヘッダーに書いちゃえば?
317デフォルトの名無しさん (ワッチョイ 13b3-X7g4)
2017/10/29(日) 20:07:38.66ID:9sOuhtQV0318デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 20:13:48.53ID:5nFESEae0 >314
前方宣言でいいのでは?
そういうのは特殊な場合だけだから
前方宣言でいいのでは?
そういうのは特殊な場合だけだから
319デフォルトの名無しさん (ワッチョイ 99c3-6HUO)
2017/10/29(日) 22:07:47.02ID:qxWnFrvp0320片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-+nyC)
2017/10/29(日) 22:10:20.28ID:k1qoOab2d >>319
宣言を両方最初に書いておき、定義を後に書く。
宣言を両方最初に書いておき、定義を後に書く。
321デフォルトの名無しさん (ワッチョイ 99c3-6HUO)
2017/10/29(日) 22:21:25.90ID:qxWnFrvp0 >>320
class Aとclass Bが同じファイルで定義されてるならいいかもしれないけど、そうじゃない場合のほうが多いでしょ
class Aとclass Bが同じファイルで定義されてるならいいかもしれないけど、そうじゃない場合のほうが多いでしょ
322デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/29(日) 22:40:54.16ID:5nFESEae0 いづれにしてもメソッドをばらして別ファイルに書くほうが良いという根拠にはならんだろ。
323デフォルトの名無しさん (ワッチョイ 99c3-6HUO)
2017/10/29(日) 22:52:18.92ID:qxWnFrvp0 一部分けなきゃできないところがあるから全部分けるだけで、できるならc#とかみたいに全部一つのファイルに書きたい
324デフォルトの名無しさん (ワッチョイ 13e7-20SA)
2017/10/29(日) 23:53:27.12ID:OlzRTZr+0 それだとクラスが縦に長くなって範囲がぱっと見わからなる
1クラス1ファイルの場合はいいけどさ
1クラス1ファイルの場合はいいけどさ
325デフォルトの名無しさん (ワッチョイ eb81-peU6)
2017/10/30(月) 01:18:16.05ID:ImI1HNcW0 てかコードの利用者はヘッダしか見ねーんだから普通に分けとけよ
326デフォルトの名無しさん (ワッチョイ 139d-xXVv)
2017/10/30(月) 03:59:29.97ID:XQpDzkmg0 >323
できないところってどんなところ? C#にできてC++にできないなんてどういうことか意味わからん。
cls::とか邪魔くさい。悪しき慣習だろ。あまりにばかげてるからC#では止めにしただけでしょ。
できないところってどんなところ? C#にできてC++にできないなんてどういうことか意味わからん。
cls::とか邪魔くさい。悪しき慣習だろ。あまりにばかげてるからC#では止めにしただけでしょ。
327デフォルトの名無しさん (ワッチョイ 6b3b-OCcV)
2017/10/30(月) 05:31:15.27ID:shFErbol0328デフォルトの名無しさん (ドコグロ MMa3-6HUO)
2017/10/30(月) 09:03:26.26ID:d9bwD/eVM >>327
ヘッダとソースを分けないでって意味でシングルソースってことではないと思うぞ
ヘッダとソースを分けないでって意味でシングルソースってことではないと思うぞ
329はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-20SA)
2017/10/30(月) 10:19:54.36ID:/9ncNuq00 モジュールについては検討中みたいだからそのうち仕様に入るんじゃね?
コンセプト並みのビッグトピックだからどんどん後ろ倒しされそうな気もするけど。
コンセプト並みのビッグトピックだからどんどん後ろ倒しされそうな気もするけど。
330デフォルトの名無しさん (ワッチョイ 6b5f-ZDdo)
2017/10/30(月) 22:49:10.56ID:ao9CiOaa0 vector<shared_ptr<T>>を使う場合、
shared_ptrから自分自身のvector上のindexを取得するにはvector要素を1つずつ走査していくしかないんかね?
vector[0]のアドレスをうまく引き算すればうまくいくかと思いきや、
shared_ptr自体は同じアドレスを持つインスタンスがvectorに格納されているわけでないのでうまく行かんのです
shared_ptrから自分自身のvector上のindexを取得するにはvector要素を1つずつ走査していくしかないんかね?
vector[0]のアドレスをうまく引き算すればうまくいくかと思いきや、
shared_ptr自体は同じアドレスを持つインスタンスがvectorに格納されているわけでないのでうまく行かんのです
331デフォルトの名無しさん (ワッチョイ 6b3e-qypI)
2017/10/30(月) 23:15:50.92ID:GaTL14js0332デフォルトの名無しさん (ワッチョイ d98a-1LOm)
2017/10/31(火) 01:31:02.70ID:Bb7HxcAo0 もしindexが変わらんのであれば別にmap<shared_ptr<T>, int>持つとか
Tにindex持たせるとか
Tにindex持たせるとか
333デフォルトの名無しさん (ワッチョイ 1b8a-zApk)
2017/10/31(火) 06:49:36.25ID:/ULkeF1E0 cppで作ったライブラリ(.a)をcに取り込むときって何か注意いる?
cppには公開apiを1つ用意して、そのなかでクラスを作って計算させようとしてる
cppには公開apiを1つ用意して、そのなかでクラスを作って計算させようとしてる
334デフォルトの名無しさん (ワッチョイ 6b3e-qypI)
2017/10/31(火) 08:34:02.64ID:tApLOrdW0 >>333
その公開apiをextern "C"するのを忘れない事。
その公開apiをextern "C"するのを忘れない事。
335はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-20SA)
2017/10/31(火) 09:33:49.44ID:54GXLgHP0 extern "C" しとかないと大抵はリンクの段階で失敗してくれるから、そんなにおかしなことにもならないだろうけどね。
あとは C++ 側で作ったライブラリから例外が送出されると C 側を通過できなくてクラッシュする環境がある。
あとは C++ 側で作ったライブラリから例外が送出されると C 側を通過できなくてクラッシュする環境がある。
336デフォルトの名無しさん (ワッチョイ 1b9f-20SA)
2017/10/31(火) 11:08:02.92ID:B8ReYjkr0 >>300
やり方しだいジャネーノ?C++推奨しないが、スタックが〜 ramが〜っていうなら自分で管理するか、newに任せるにして実験すればいいんじゃね?
#include <stdio.h>
#include <string.h>
char buf_hige[1000];
class Hoge {
private: char *m_pBuf; int m_size, m_IsNew;
public:
Hoge(char *p, int s) { m_size = s; m_pBuf = p; m_IsNew = 0; }
Hoge() : m_size(100) { m_pBuf = new char[m_size]; m_IsNew = 1; }
~Hoge() { if (m_IsNew) { delete[]m_pBuf; printf("~Hoge()自動削除\n"); } else printf("~Hoge()\n"); }
void zero() { memset(m_pBuf, 0, m_size); }
void show() { printf("アドレス %p size %d\n", m_pBuf, m_size); }
};
void main() {
char buf_hoge[200];
Hoge a(buf_hige, sizeof(buf_hige));// 自分でメモリー割り当ててクラスを使う 普通は ram.. #pragmaとかで移動できる?
Hoge b(buf_hoge, sizeof(buf_hoge));// 自分でメモリー割り当ててクラスを使う mainのstack
Hoge c;// 内部でnew/deleteして動的に使う ram
a.zero(); b.zero(); c.zero(); a.show(); b.show(); c.show();
}
やり方しだいジャネーノ?C++推奨しないが、スタックが〜 ramが〜っていうなら自分で管理するか、newに任せるにして実験すればいいんじゃね?
#include <stdio.h>
#include <string.h>
char buf_hige[1000];
class Hoge {
private: char *m_pBuf; int m_size, m_IsNew;
public:
Hoge(char *p, int s) { m_size = s; m_pBuf = p; m_IsNew = 0; }
Hoge() : m_size(100) { m_pBuf = new char[m_size]; m_IsNew = 1; }
~Hoge() { if (m_IsNew) { delete[]m_pBuf; printf("~Hoge()自動削除\n"); } else printf("~Hoge()\n"); }
void zero() { memset(m_pBuf, 0, m_size); }
void show() { printf("アドレス %p size %d\n", m_pBuf, m_size); }
};
void main() {
char buf_hoge[200];
Hoge a(buf_hige, sizeof(buf_hige));// 自分でメモリー割り当ててクラスを使う 普通は ram.. #pragmaとかで移動できる?
Hoge b(buf_hoge, sizeof(buf_hoge));// 自分でメモリー割り当ててクラスを使う mainのstack
Hoge c;// 内部でnew/deleteして動的に使う ram
a.zero(); b.zero(); c.zero(); a.show(); b.show(); c.show();
}
337デフォルトの名無しさん (ワッチョイ 138a-whYl)
2017/10/31(火) 14:04:56.90ID:QkT+8axj0 普通の opereter new 定義するだけじゃ駄目なの?
338デフォルトの名無しさん (ワッチョイ 0923-Lz9C)
2017/10/31(火) 15:27:26.38ID:ivXWtcCM0 その例なら m_pBuf とか m_size とか m_isNew がどこに置かれるかって話してるんだよ
339はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b6f-20SA)
2017/10/31(火) 15:50:52.40ID:54GXLgHP0 >>300
リンカスクリプトで定義できるんじゃねーの
リンカスクリプトで定義できるんじゃねーの
340デフォルトの名無しさん (ブーイモ MMd5-ZDdo)
2017/10/31(火) 20:31:59.83ID:cRyJj2TVM341デフォルトの名無しさん (ワッチョイ 1b9f-20SA)
2017/11/01(水) 09:45:22.08ID:Rrk0WseL0 >>338
リンカーでMAP指定して確認したらいいんじゃねーの?アドレスわかるだろ?
リンカーでMAP指定して確認したらいいんじゃねーの?アドレスわかるだろ?
342デフォルトの名無しさん (ワッチョイ 0beb-nu9H)
2017/11/01(水) 23:49:32.94ID:KV/dR0JW0 共用体って使い道あるの?
素人目からしたら役に立つようには到底思えない
素人目からしたら役に立つようには到底思えない
343はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-lboT)
2017/11/02(木) 00:33:40.96ID:4tfXXWiS0 使わずに済むならそれにこしたことはないだろうけど、
部分的に動的型みたいにしたいときは有るよ。
yacc が生成するコードに出てきたりする。
部分的に動的型みたいにしたいときは有るよ。
yacc が生成するコードに出てきたりする。
344デフォルトの名無しさん (ワッチョイ 82b3-6lPO)
2017/11/02(木) 01:14:44.84ID:6O09mL2X0 >>342
例えば通信パケットとかで必ず固定長だけど、複数の箇所のコマンドとか意味とかのコードで
内容がコロコロ変わる様な時は便利かも知れない?
それぞれの構造体にキャストしろよって言いたくもなるけど、
複数の人で開発してると通信パケットの内容とかで下らない不具合出したくないから
1つのヘッダで全部規定したりって事はあったな
例えば通信パケットとかで必ず固定長だけど、複数の箇所のコマンドとか意味とかのコードで
内容がコロコロ変わる様な時は便利かも知れない?
それぞれの構造体にキャストしろよって言いたくもなるけど、
複数の人で開発してると通信パケットの内容とかで下らない不具合出したくないから
1つのヘッダで全部規定したりって事はあったな
345デフォルトの名無しさん (ワッチョイ 82b3-6lPO)
2017/11/02(木) 01:35:58.84ID:6O09mL2X0 あ、後H8開発してた時とか、メモリマップドIOとかがモードでコロコロ意味変わる時、
1バイトのデータになったりビットフィールドになったりなとことかがunionになってた
1バイトのデータになったりビットフィールドになったりなとことかがunionになってた
346デフォルトの名無しさん (ワッチョイ 4104-mbga)
2017/11/02(木) 04:56:03.82ID:i8MAyZKO0 union RGBA{
struct {R:5,G:5,B:5,A:1};
std::uint16_t Colors;
};
こんな感じのことするけど。たまに。
struct {R:5,G:5,B:5,A:1};
std::uint16_t Colors;
};
こんな感じのことするけど。たまに。
347デフォルトの名無しさん (ワッチョイ 4104-mbga)
2017/11/02(木) 04:57:25.31ID:i8MAyZKO0 あ、片宣言抜けてた。
たまにしか使わないからなぁ。
struct {std::uint16_t R:5,G:5,B:5,A:1};
たまにしか使わないからなぁ。
struct {std::uint16_t R:5,G:5,B:5,A:1};
348デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/02(木) 09:40:30.47ID:N8nuZaLN0 union { double d; int i; char c;} u;
は1番大きな要素、この場合は double d のサイズと
メモリアライメントを持つというのが union の重要な機能
これのおかげで非ワード境界からワードを読もうとするようなコードを避けられる
は1番大きな要素、この場合は double d のサイズと
メモリアライメントを持つというのが union の重要な機能
これのおかげで非ワード境界からワードを読もうとするようなコードを避けられる
349デフォルトの名無しさん (ワッチョイ 42d2-81c4)
2017/11/02(木) 21:55:55.26ID:JP+uyw1T0 #pragma data_seg
でdllの共有領域を作ってるんですけど
ここにクラスのインスタンスを置いておくことはできますか?
でdllの共有領域を作ってるんですけど
ここにクラスのインスタンスを置いておくことはできますか?
350デフォルトの名無しさん (エムゾネ FF62-S23b)
2017/11/02(木) 22:11:01.00ID:e7UKjGN4F コンストラクタのない、構造体にメンバ関数付いただけのクラスのインスタンスなら大丈夫じゃないかな。
動的にメモリをアロケーションするクラスではアロケーションしたメモリは共有されないので注意。
動的にメモリをアロケーションするクラスではアロケーションしたメモリは共有されないので注意。
351デフォルトの名無しさん (スップ Sdc2-S23b)
2017/11/02(木) 22:11:46.90ID:m+SMCXhed ↑
共有されないってのは「プロセス間で」ということね
共有されないってのは「プロセス間で」ということね
352デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/02(木) 23:18:08.17ID:H/ANuUhm0 >>348
『プログラミング言語C』のmalloc()の実装例のやつで見た
『プログラミング言語C』のmalloc()の実装例のやつで見た
353デフォルトの名無しさん (ワッチョイ 2e80-frTj)
2017/11/03(金) 00:39:07.86ID:Xm/a3Zyv0 共用体は、パリティチェックで使う
あるサイズの内容を、ある方法で計算して、データが破壊・改変されていないか。
通信データが正しいかどうか
あるサイズの内容を、ある方法で計算して、データが破壊・改変されていないか。
通信データが正しいかどうか
354デフォルトの名無しさん (ブーイモ MM6d-5Y2u)
2017/11/03(金) 01:31:20.38ID:f3hy7vD8M355デフォルトの名無しさん (ワッチョイ 4d08-S32u)
2017/11/03(金) 07:14:49.06ID:3SB+84d60 境界調整はalignasでできるようになった
356デフォルトの名無しさん (ワッチョイ 6e5f-Osc9)
2017/11/03(金) 18:27:07.09ID:6x/Gce9W0 string::format()マダァー?
<<は失敗だったって早く認めようぜ
<<は失敗だったって早く認めようぜ
357デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/03(金) 21:32:49.68ID:A4m/loi/0 printf()系関数とstring::c_str()(ていうかbasic_string<T>::c_str())があるから無問題
358デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/03(金) 21:34:26.06ID:A4m/loi/0 入力はscanf()系とか使うとCの経験が長いプログラマーには軽蔑の眼差しで見られるが
cinとかより速くて使い勝手も良いのだから仕方が無い
cinとかより速くて使い勝手も良いのだから仕方が無い
359デフォルトの名無しさん (ワッチョイ ad2d-7GNV)
2017/11/03(金) 21:46:14.60ID:+rn5t+yk0 boost::format よく使ってる
360デフォルトの名無しさん (ワッチョイ e178-HrHe)
2017/11/03(金) 23:08:11.68ID:veVAWEWL0 可変テンプレート使えるんならprintfにクラス喰わせたりすることぐらいできるだろ
361デフォルトの名無しさん (ワッチョイ 6e5f-Osc9)
2017/11/04(土) 00:02:18.18ID:9Iye7uTf0 snprintfじゃstringstreamの代わりとしては役者不足だろ
362デフォルトの名無しさん (ワッチョイ 6278-9hO9)
2017/11/04(土) 07:27:21.97ID:CbR/PKzh0 「役者不足」は造語なんで使わないほうが無難
363デフォルトの名無しさん (ワイモマー MMa5-FISE)
2017/11/04(土) 09:25:02.17ID:v7stxdd6M >>362
しかも「役不足」じゃあ、「役より実力が遥かに高い」の意味だしね。
しかも「役不足」じゃあ、「役より実力が遥かに高い」の意味だしね。
364デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/04(土) 12:54:53.20ID:z55RyEJo0 「力不足」な
365デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/04(土) 14:09:16.93ID:CaxSQdEs0 >>361
全然wwwwwwwwwww
自作クラスのシリアライズ/デシリアライズの下請け関数として使う分には
機能上全く困らない上に速いのだから
で、シリアライズ/デシリアライズおあ
void ISeriarizable::seriarize(FILE* fp)とvoid ISeriarizable::deseriarize(FILE* fp)
にして「<<」や「>>」のオーバーロードみたいな変態じみたことはせずに同等の柔軟性を確保できる
全然wwwwwwwwwww
自作クラスのシリアライズ/デシリアライズの下請け関数として使う分には
機能上全く困らない上に速いのだから
で、シリアライズ/デシリアライズおあ
void ISeriarizable::seriarize(FILE* fp)とvoid ISeriarizable::deseriarize(FILE* fp)
にして「<<」や「>>」のオーバーロードみたいな変態じみたことはせずに同等の柔軟性を確保できる
366デフォルトの名無しさん (ワッチョイ ed83-Q/5A)
2017/11/04(土) 14:29:00.75ID:+71Y93dj0 設計が古いな。
367デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/04(土) 15:30:32.32ID:2OIo1NJb0 cin,cout って組み込みで使えるんかい?
何処をどう書き換えるとそうなるん?
何処をどう書き換えるとそうなるん?
368デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/04(土) 15:34:07.08ID:2OIo1NJb0 string s1("foo");
const char *p = NULL;
p = s1.c_str();
cout << p << endl;
return 0;
????
cout << s1<<endl; じゃダメなん?
const char *p = NULL;
p = s1.c_str();
cout << p << endl;
return 0;
????
cout << s1<<endl; じゃダメなん?
369デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/04(土) 22:22:05.63ID:2OIo1NJb0 Coutを実験してみたがコードがバカでかくなるので駄目だな。組み込みでは使えない。
370デフォルトの名無しさん (ドコグロ MM29-r/51)
2017/11/04(土) 22:34:50.04ID:WXoZTt/lM >>369
組み込みで何をやりたいのか知らんけど普通coutを書き換えるだろ
組み込みで何をやりたいのか知らんけど普通coutを書き換えるだろ
371デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/04(土) 22:37:40.26ID:z55RyEJo0 組み込みに使うなら実験とかじゃなくちゃんとどんなコードか把握しろよw怖いわ
372デフォルトの名無しさん (ワッチョイ d2eb-7T4N)
2017/11/04(土) 22:57:54.30ID:GShvEvWZ0 そもそも組み込みの標準入出力がどんなもんなのかすら想像できないw
373デフォルトの名無しさん (ワッチョイ c2e1-bcP5)
2017/11/04(土) 23:37:09.27ID:wPtyVAZ40 組み込みでは使えないなんていう次元ならそもそも標準ライブラリ使わないだろ
374デフォルトの名無しさん (ワッチョイ e178-HrHe)
2017/11/05(日) 00:56:53.05ID:1GSqUY/t0 デバッグ担当「なぁ?なんかログにアホとかハゲとかあるんだけどナニコレ?オレの事おちょくってんじゃねーだろうなぁ?!あ!!!!」
375デフォルトの名無しさん (ワッチョイ 4980-VYVV)
2017/11/05(日) 05:24:49.90ID:qHZ+DCMx0 streamの変更ムズいんだけど。
入力だとstreambufのunderflow実装すると思うけど、エラー発生したときどうやってistreamに通知すんの?
入力だとstreambufのunderflow実装すると思うけど、エラー発生したときどうやってistreamに通知すんの?
376デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 06:18:13.15ID:vRj0Z3ir0 struct lock_interrupt {
lock_interrupt() : masked(get_imask_ccr()) {
set_imask_ccr(1);
}
〜lock_interrupt() {
set_imask_ccr(masked);
}
bool masked;
};
// in some function...
lock_interrupt lk;
// do critical action, lets forget unmask interrupt flag!
}
このコード lock_interrupt() : masked(get_imask_ccr()) {
ここの部分の”:”ってどういう意味なの?
何となくコンストラクタとディストラクタがせっとになってるだろうなー
だから”}”に出会うと自動的にディストラクトされるコードだろうか?
ってくらいしかわからないレベルだから、、、、是非ともこのコードを
使い倒してみたい。
lock_interrupt() : masked(get_imask_ccr()) {
set_imask_ccr(1);
}
〜lock_interrupt() {
set_imask_ccr(masked);
}
bool masked;
};
// in some function...
lock_interrupt lk;
// do critical action, lets forget unmask interrupt flag!
}
このコード lock_interrupt() : masked(get_imask_ccr()) {
ここの部分の”:”ってどういう意味なの?
何となくコンストラクタとディストラクタがせっとになってるだろうなー
だから”}”に出会うと自動的にディストラクトされるコードだろうか?
ってくらいしかわからないレベルだから、、、、是非ともこのコードを
使い倒してみたい。
377デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/05(日) 06:23:01.44ID:U5vPVsbz0 メンバイニシャライザでググれ
てか初等文法くらい勉強しろよ
てか初等文法くらい勉強しろよ
378デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 06:27:09.42ID:vRj0Z3ir0 >組み込みで何をやりたいのか知らんけど普通coutを書き換えるだろ
ん?
普通はcoutを使わないという意味だろうか? それなら同意する。
#include <iostream>
を追加しただけで256kbyteを超えてしまう。これではマイコンじゃ使えないな。
もちろんcoutが使えないって意味だよ。使えないなら書き換える? まあそれは
むりだな。なぜなら書き換える場合でもiostramをインクルードするひつようがあるからね。
つまり書き換えなんてできない。つまり使えないし使わない。すなわち結論としては
Cのsprintfを使うってのが順当かと思う。
ん?
普通はcoutを使わないという意味だろうか? それなら同意する。
#include <iostream>
を追加しただけで256kbyteを超えてしまう。これではマイコンじゃ使えないな。
もちろんcoutが使えないって意味だよ。使えないなら書き換える? まあそれは
むりだな。なぜなら書き換える場合でもiostramをインクルードするひつようがあるからね。
つまり書き換えなんてできない。つまり使えないし使わない。すなわち結論としては
Cのsprintfを使うってのが順当かと思う。
379デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/05(日) 06:30:56.15ID:U5vPVsbz0 >>376
あとついでにクラス全体を説明すると、コンストラクタで割り込みをマスクして
デストラクタで元に戻している。
こんな感じで使う
void foo () {
lock_intterupt lock; // 以下割り込み禁止
if (...) {
....
return;
}
.....
return;
}
割り込み禁止を解除するコードを書き忘れたり複数書いたりせずに済む。
あとついでにクラス全体を説明すると、コンストラクタで割り込みをマスクして
デストラクタで元に戻している。
こんな感じで使う
void foo () {
lock_intterupt lock; // 以下割り込み禁止
if (...) {
....
return;
}
.....
return;
}
割り込み禁止を解除するコードを書き忘れたり複数書いたりせずに済む。
380デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 06:35:39.18ID:vRj0Z3ir0 >メンバイニシャライザでググれ
キーワードありがとう。
ググってみた。メンバーイニシャライザってことはわかったんだがなんか特殊だな
masked = get_imask_ccr();
こういうことか? なるほど。
キーワードありがとう。
ググってみた。メンバーイニシャライザってことはわかったんだがなんか特殊だな
masked = get_imask_ccr();
こういうことか? なるほど。
381デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 07:06:11.45ID:vRj0Z3ir0 ここでlockという名称は何でもいいんですよね。要するにstructを生成するだけだから。
2か所でlockしたいような場合には使えないという欠点があるね。
void foo() {
lock_intterupt lock; // 以下割り込み禁止
if (...) {
....
return;
}
lock.unlock();
.....
.....
.....
lock.relock(); // ここでも割り込み禁止
if (...) {
....
return;
}
.....
return; // ここでlock(割り込み禁止)した部分が解除される。
}
こうするにはどうしたらいい?
2か所でlockしたいような場合には使えないという欠点があるね。
void foo() {
lock_intterupt lock; // 以下割り込み禁止
if (...) {
....
return;
}
lock.unlock();
.....
.....
.....
lock.relock(); // ここでも割り込み禁止
if (...) {
....
return;
}
.....
return; // ここでlock(割り込み禁止)した部分が解除される。
}
こうするにはどうしたらいい?
382デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 07:09:12.73ID:vRj0Z3ir0 なんでclassにしないでstructなのだろうか?
383デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 07:26:22.28ID:vRj0Z3ir0 C++の本見るとcout,cinの例が必ず出ているが、これは大きな間違いだな。なぜなら
1.マイコンではiostremは馬鹿でかくて使えない。だからcout,cinは使えない。
2.じゃあパソコンで使うのかというと、パソコンならjavaかC#があるのにC++なんて
使うのは間違い。
以上の理由からサンプルにcout使うのは馬鹿。
1.マイコンではiostremは馬鹿でかくて使えない。だからcout,cinは使えない。
2.じゃあパソコンで使うのかというと、パソコンならjavaかC#があるのにC++なんて
使うのは間違い。
以上の理由からサンプルにcout使うのは馬鹿。
384デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 07:28:47.99ID:vRj0Z3ir0 というか、もっとmiimaizeしたiostream実装しろよな。といいたい。
385デフォルトの名無しさん (ワッチョイ 42b3-r/51)
2017/11/05(日) 08:04:41.58ID:3uuR82Hq0 >>381
> 2か所でlockしたいような場合には使えないという欠点があるね。
ブロックも知らんのかよ...
void foo(){
{
lock_intterupt lock; // 以下割り込み禁止
if(...){
...
return;
}
}
...
...
{
lock_interrupt lock; // ここでも割り込み禁止
if(...){
...
return;
}
}
return; // ここでlock(割り込み禁止)した部分が解除される。
}
> 2か所でlockしたいような場合には使えないという欠点があるね。
ブロックも知らんのかよ...
void foo(){
{
lock_intterupt lock; // 以下割り込み禁止
if(...){
...
return;
}
}
...
...
{
lock_interrupt lock; // ここでも割り込み禁止
if(...){
...
return;
}
}
return; // ここでlock(割り込み禁止)した部分が解除される。
}
386デフォルトの名無しさん (ワッチョイ d2fb-K7eU)
2017/11/05(日) 09:19:24.45ID:fHP76uUy0 メンバーイニシャライザーなんて上級者向け
387デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 09:44:11.28ID:vRj0Z3ir0 >>ブロックも知らんのかよ...
そういうのがあったのか。 ブロックってスコープだけの問題ではないんだ。
スコープ外れるとディストラクトされるんだ。
いがいと使えるなー。
そういうのがあったのか。 ブロックってスコープだけの問題ではないんだ。
スコープ外れるとディストラクトされるんだ。
いがいと使えるなー。
388デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 09:47:03.86ID:vRj0Z3ir0 >メンバーイニシャライザーなんて上級者向け
イニシャルなんて基本中の基本なのに、上級者でしか使えないほど分かりづらい構造になっている。
素直に=をつかったらいいのにな。
イニシャルなんて基本中の基本なのに、上級者でしか使えないほど分かりづらい構造になっている。
素直に=をつかったらいいのにな。
389デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 09:49:48.35ID:vRj0Z3ir0 lock_interrupt(){
masked = get_imask_ccr();
set_imask_ccr(1);
}
これでいいじゃん。
masked = get_imask_ccr();
set_imask_ccr(1);
}
これでいいじゃん。
390デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/05(日) 10:01:45.17ID:U5vPVsbz0 物知らず自慢されても周りの人は当惑するだけですよ。
メンバーイニシャライザが何故必要なのかはメンバーイニシャライザでググってください。
メンバーイニシャライザが何故必要なのかはメンバーイニシャライザでググってください。
391デフォルトの名無しさん (ワッチョイ ed83-Q/5A)
2017/11/05(日) 10:06:52.16ID:+AqtjiW/0 自虐ネタですかね?
392デフォルトの名無しさん (ワッチョイ 2ee8-Swf1)
2017/11/05(日) 10:08:40.02ID:t3ZH1B/20 このスレ和むね
393デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 10:23:28.34ID:vRj0Z3ir0 メンバーイニシャライザでググると
メリット1:const指定のメンバ変数の初期化ができる
メリット2:メンバイニシャライザの方が効率的
メリット3:クラスを継承する場合は、メンバイニシャライザに基底クラスのコンストラクタを記述します。
メリット4:メンバイニシャライザを使えるようになると、プログラミングが上手になったような気分になれます。
とあるが、
1はあまり意味がない。constを初期化しないで使うケースは皆無。
2は理由が不明。わかり難いし、効率が変わる理由がない。効率を変えることができるなら、コンストラクタの効率も上げればいいだけだ。
3も意味不明だ。基底クラスのコンストラクタをイニシャライザに記入する必要性がないと思うが、出来ないのか? この方法でしか
できないのならそれはデメリットというのが正しい日本語だ。
4はこれが最大のメリットだろうな。
メリット1:const指定のメンバ変数の初期化ができる
メリット2:メンバイニシャライザの方が効率的
メリット3:クラスを継承する場合は、メンバイニシャライザに基底クラスのコンストラクタを記述します。
メリット4:メンバイニシャライザを使えるようになると、プログラミングが上手になったような気分になれます。
とあるが、
1はあまり意味がない。constを初期化しないで使うケースは皆無。
2は理由が不明。わかり難いし、効率が変わる理由がない。効率を変えることができるなら、コンストラクタの効率も上げればいいだけだ。
3も意味不明だ。基底クラスのコンストラクタをイニシャライザに記入する必要性がないと思うが、出来ないのか? この方法でしか
できないのならそれはデメリットというのが正しい日本語だ。
4はこれが最大のメリットだろうな。
394デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 10:28:17.46ID:vRj0Z3ir0 結論
テクを自慢したい人以外はメンバーイニシャライザは使うべきではない。
テクを自慢したい人以外はメンバーイニシャライザは使うべきではない。
395デフォルトの名無しさん (ワッチョイ 4980-VYVV)
2017/11/05(日) 10:30:41.33ID:qHZ+DCMx0 >>393
代入するまでそれがどういう状態になるのか考えた?
代入するまでそれがどういう状態になるのか考えた?
396デフォルトの名無しさん (オッペケ Srf1-K7eU)
2017/11/05(日) 10:31:58.48ID:GarpakNhr >>393の文才に嫉妬
397デフォルトの名無しさん (ワッチョイ 1e7f-3ZLQ)
2017/11/05(日) 10:33:41.73ID:PHl2cqXG0 上級者すげー
398デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 10:38:30.72ID:vRj0Z3ir0 >代入するまでそれがどういう状態になるのか考えた?
ん? constとは定数ですよ。代入なんてありえません。設定です。コンパイラーがシコシコ考えて設定済みです。
プログラムが走る時には最初から決まってるもの、最初を決めるのに別にイニシャライザで
やろうが、コンストラクタでやろうが関係ないです。はい。
ちがった?
ん? constとは定数ですよ。代入なんてありえません。設定です。コンパイラーがシコシコ考えて設定済みです。
プログラムが走る時には最初から決まってるもの、最初を決めるのに別にイニシャライザで
やろうが、コンストラクタでやろうが関係ないです。はい。
ちがった?
399デフォルトの名無しさん (ワッチョイ 4980-VYVV)
2017/11/05(日) 10:42:52.94ID:qHZ+DCMx0 >>398
うん。君はC++使わない方がいいね。
うん。君はC++使わない方がいいね。
400デフォルトの名無しさん (スプッッ Sdc2-OC8P)
2017/11/05(日) 10:44:47.64ID:tNj/Rw6Vd c#とかのconstと勘違いしてない?
401デフォルトの名無しさん (スップ Sd62-3K0w)
2017/11/05(日) 10:51:53.00ID:bjKo+Lyid 初期化と代入の違い
constとコンパイル時定数の違い
constとコンパイル時定数の違い
402デフォルトの名無しさん (ワッチョイ 22f9-hwZj)
2017/11/05(日) 10:52:44.25ID:W+ILxFMJ0403デフォルトの名無しさん (ワッチョイ 42b3-r/51)
2017/11/05(日) 11:05:07.65ID:3uuR82Hq0 >>398
> constとは定数ですよ。
残念ながら違う
class c {
private:
const int n;
public:
c(const int x): n(x){}
...
}
なんてことができる
> constとは定数ですよ。
残念ながら違う
class c {
private:
const int n;
public:
c(const int x): n(x){}
...
}
なんてことができる
404デフォルトの名無しさん (ワッチョイ ed83-Q/5A)
2017/11/05(日) 11:16:27.20ID:+AqtjiW/0 >>402
そんな本は存在しない。
そんな本は存在しない。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「1800万円の売り上げゼロに…」中国インバウンドに特化の宿の今 [蚤の市★]
- 「中国人の訪日熱は冷めた」 人気旅行先から日本外れる 14日で自粛呼びかけ1カ月 [蚤の市★]
- 最新版Z級クソ映画ランキングが決定! [牛丼★]
- クリスマスの「予定なし」54% [少考さん★]
- 日銀0.75%に利上げへ、30年ぶりの水準に 19日金融政策決定会合 [蚤の市★]
- 「中国人の訪日熱は冷めた」 人気旅行先から日本外れる 14日で自粛呼びかけ1カ月 ★2 [蚤の市★]
- 統一教会・田中富広会長、辞任会見で「山上徹也君の起こした(安倍晋三銃撃)事件について背景に家庭連合が存在することは事実」と述べる [377482965]
- 【実況】博衣こよりのえちえち機動戦士ガンダム逆襲のシャア🧪★3
- 【実況】博衣こよりのえちえち機動戦士ガンダム逆襲のシャア🧪★2
- コーヒー、来年3月から30パーセント値上げへ [709039863]
- 茶ぁしばこうや···
- 愛国者「釘を使わない日本独自の伝統工法スゴイ!」X民「それ中国起源ですよ」→批判殺到 [834922174]
