次スレを立てる時は本文の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/5PI4P0324デフォルトの名無しさん (ワッチョイ 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
そんな本は存在しない。
そんな本は存在しない。
405デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/05(日) 11:25:28.59ID:edJGSUmw0 メンバーイニシャライザの構文は必要悪
だとは感じる
基底クラスやconstメンバの初期化構文が別途必要だったというのは必要悪ながら必要性がワカルが
その他のメリットはあんまはっきりしない
だとは感じる
基底クラスやconstメンバの初期化構文が別途必要だったというのは必要悪ながら必要性がワカルが
その他のメリットはあんまはっきりしない
406デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 11:38:09.47ID:vRj0Z3ir0 >class c {
>private:
> const int n;
>public:
> c(const int x): n(x){}
> ...
>}
>なんてことができる。
定数ではなくて、変更禁止の変数ってことだね。それにどれだけ意味があるんだろう。
イニシャライザ―でしか変更できないんでしょ。クラスを生成したときにしか設定できない変数になる
から、定数と同じ機能しかないよ。
const int n = 9600;って書く方が分かりやすい。
しかし別のインスタンスを生成する時は
c rs(115200);みたいに初期値を変更したい場合がある。これを実現できるのはイニシャライザ以外にはないってことか。
なるほど。
全く意味がないってことはないな。たしかにメリットはある。
>private:
> const int n;
>public:
> c(const int x): n(x){}
> ...
>}
>なんてことができる。
定数ではなくて、変更禁止の変数ってことだね。それにどれだけ意味があるんだろう。
イニシャライザ―でしか変更できないんでしょ。クラスを生成したときにしか設定できない変数になる
から、定数と同じ機能しかないよ。
const int n = 9600;って書く方が分かりやすい。
しかし別のインスタンスを生成する時は
c rs(115200);みたいに初期値を変更したい場合がある。これを実現できるのはイニシャライザ以外にはないってことか。
なるほど。
全く意味がないってことはないな。たしかにメリットはある。
407デフォルトの名無しさん (ワッチョイ beeb-Q/5A)
2017/11/05(日) 11:46:35.42ID:8p1KlMD80 目醒ましたら香ばしいのがおるなあ
408デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 11:49:30.00ID:vRj0Z3ir0 結論を変更
メリット1:クラスのインスタンスごとにconst指定のメンバ変数のユニークな初期化ができる
メリット2:const指定のメンバ変数はユニークに設定できるにも拘わらずコードをまったく消費しない。
メリット1:クラスのインスタンスごとにconst指定のメンバ変数のユニークな初期化ができる
メリット2:const指定のメンバ変数はユニークに設定できるにも拘わらずコードをまったく消費しない。
409デフォルトの名無しさん (ドコグロ MM75-r/51)
2017/11/05(日) 11:50:18.72ID:brx6OlnVM410デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 12:04:33.48ID:vRj0Z3ir0 コンストラクタの構文があるんだから並置してつくるべきだね。
たとえはこんな感じだ。
class cass {
private:
const int n;
public:
cass(const int x){}
cass{ n = 9600 }
...
}
たとえはこんな感じだ。
class cass {
private:
const int n;
public:
cass(const int x){}
cass{ n = 9600 }
...
}
411デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 12:06:36.32ID:vRj0Z3ir0 ~cass()があるんだから
!cass()でもいい。
!cass()でもいい。
412デフォルトの名無しさん (スップ Sd62-3K0w)
2017/11/05(日) 12:25:46.31ID:bjKo+Lyid413デフォルトの名無しさん (ドコグロ MM0a-r/51)
2017/11/05(日) 12:29:36.35ID:uz/X8WP/M >>410
こいつはコンストラクタを複数持てることも知らんのか...
マジで初心者スレに行けよ
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1509780815/
こいつはコンストラクタを複数持てることも知らんのか...
マジで初心者スレに行けよ
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1509780815/
414デフォルトの名無しさん (ドコグロ MM0a-r/51)
2017/11/05(日) 12:31:24.75ID:uz/X8WP/M >>412
そう言う意味ではC#のreadonlyの方が近い感じだな
そう言う意味ではC#のreadonlyの方が近い感じだな
415デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 12:58:59.38ID:vRj0Z3ir0 >C++のconstは、ユーザー入力など実行時に決まる値に固定化した変数を作れる
実行時は無理でしょ。インスタンス生成時でしょ。見かけ上実行時にインスタンスを生成することで
可能というだけですよね。
実行時は無理でしょ。インスタンス生成時でしょ。見かけ上実行時にインスタンスを生成することで
可能というだけですよね。
416デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 12:59:54.85ID:vRj0Z3ir0 >こいつはコンストラクタを複数持てることも知らんのか...
オーバーロードってことかな? イニシャライザとはなんも関係ないね。
オーバーロードってことかな? イニシャライザとはなんも関係ないね。
417デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 13:00:39.74ID:vRj0Z3ir0 >あと組み込みを前提に考えるのもやめとけ。
C++は組み込みにしか活路がない。というか組み込みに特化すべきだと思う。
PCの場合はJavaとかC#の方が圧倒的にいいからね。
組み込みにCではなくてC++を使うべき最大の理由は?
最大のメリットはScopeが使えることだと思う。NameSpaceとかブロックとかだね。
まあClassの基本構造もスコープを制限できるという意味では含める。これらを使うだけでも
価値がある。
Cでは少しプログラムが大きくなると名前付けで混乱してくる。多少はコード効率が落ちてもC++の方がいい。
C++はすでに化石かと思っていたがなかなか使えそう。
C++は組み込みにしか活路がない。というか組み込みに特化すべきだと思う。
PCの場合はJavaとかC#の方が圧倒的にいいからね。
組み込みにCではなくてC++を使うべき最大の理由は?
最大のメリットはScopeが使えることだと思う。NameSpaceとかブロックとかだね。
まあClassの基本構造もスコープを制限できるという意味では含める。これらを使うだけでも
価値がある。
Cでは少しプログラムが大きくなると名前付けで混乱してくる。多少はコード効率が落ちてもC++の方がいい。
C++はすでに化石かと思っていたがなかなか使えそう。
418デフォルトの名無しさん (ワントンキン MM92-K6ym)
2017/11/05(日) 13:07:42.41ID:CS19J9ATM 普通にデータベースとかC++で書かれてるが…
419デフォルトの名無しさん (ワッチョイ 81b3-ip3T)
2017/11/05(日) 13:12:57.94ID:PxmV+gVs0 多分パフォーマンス重視のソフトとか一つも知らないんじゃね
420デフォルトの名無しさん (ワッチョイ ed83-Q/5A)
2017/11/05(日) 13:15:03.92ID:+AqtjiW/0 速度が要求される用途ということは、アセンブラの代替としての言語なのだ。
高級言語志向の奴はKotlinでも使ってろ。
高級言語志向の奴はKotlinでも使ってろ。
421デフォルトの名無しさん (ワッチョイ 81b3-ip3T)
2017/11/05(日) 13:17:22.43ID:PxmV+gVs0 C++で数百万行になるプロジェクトをアセで書けと?
422デフォルトの名無しさん (スップ Sd62-3K0w)
2017/11/05(日) 13:18:14.72ID:bjKo+Lyid423デフォルトの名無しさん (ワッチョイ 2e80-frTj)
2017/11/05(日) 13:31:02.52ID:kyKiHR5g0 メンバイニシャライザって、基本だろ。
初期化と代入は異なるから、マシン語も異なるし、効率的
君らは、実行ファイル中の、BSS セクションとか、
異なるセクションのデータが、異なるマシン語になる事も、知らんのか?
初期化と代入は異なるから、マシン語も異なるし、効率的
君らは、実行ファイル中の、BSS セクションとか、
異なるセクションのデータが、異なるマシン語になる事も、知らんのか?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- アメリカ、入国時に「日本人を含む外国人観光客の最大5年分のSNS履歴の提出」義務化 過去10年間に使用のメールアドレスや電話番号等も [Hitzeschleier★]
- 【中国外務省】日本への渡航自粛を再度呼びかけ 今度は「地震発生」を理由に [ぐれ★]
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性に共通点が★3 [Hitzeschleier★]
- 【おこめ】「有能だったんじゃ」おこめ券で批判殺到の鈴木農水大臣…ネットでは前任の“進次郎再評価” [ぐれ★]
- 【芸能】デパートで見つけたランドセルが衝撃価格! つまみ枝豆「どこかで規制しないと」に共感の声殺到 「全て同感」「高すぎます」★2 [冬月記者★]
- 【速報】年収の壁の自民案判明、26年は168万円 [蚤の市★]
- なぜ、ネトウヨはアメリカ含む西側とイスラエルを倒した朕に逆らってくるのじゃ? [805596214]
- 日本人、世界で最もブランドに興味なし🇯🇵 [462275543]
- 【悲報】鈴木農水大臣、国民から「こいつひょっとしてアホなんじゃね?」と思われ始めてしまうwww [793117252]
- 【高市速報】 防衛省公式X、このタイミングで日本の防衛兵器や攻撃ミサイルを動画で宣伝wwww [197015205]
- 【悲報】たぬかなが渡邊渚を壮絶バッシング 「グラビア出したあたりから臭いな~と思ってたが激臭になってたわ。中居は悪くない」 [455031798]
- 自閉症児の父親「中絶しておけば良かった。 家族が欲しかったのに、手に入れたのは人間たまごっち」 [777114754]
