- 1 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 10:31:46 ]
- スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
過去ログ スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/ スレを勃てるまでもないC/C++の質問はここで 2 pc11.2ch.net/test/read.cgi/tech/1178503366/ スレを勃てるまでもないC/C++の質問はここで 3 pc11.2ch.net/test/read.cgi/tech/1187521676/ スレを勃てるまでもないC/C++の質問はここで 4 pc11.2ch.net/test/read.cgi/tech/1221633708/ スレを勃てるまでもないC/C++の質問はここで 5 pc11.2ch.net/test/read.cgi/tech/1230516307/ スレを勃てるまでもないC/C++の質問はここで 6 pc11.2ch.net/test/read.cgi/tech/1231564903/ スレを勃てるまでもないC/C++の質問はここで 7 pc11.2ch.net/test/read.cgi/tech/1232983248/ スレを勃てるまでもないC/C++の質問はここで 8 pc12.2ch.net/test/read.cgi/tech/1235921779/ スレを勃てるまでもないC/C++の質問はここで 9 pc12.2ch.net/test/read.cgi/tech/1240022781/ スレを勃てるまでもないC/C++の質問はここで 10 pc12.2ch.net/test/read.cgi/tech/1242300936/ スレを勃てるまでもないC/C++の質問はここで 11 pc12.2ch.net/test/read.cgi/tech/1245059383/ スレを勃てるまでもないC/C++の質問はここで 12 pc12.2ch.net/test/read.cgi/tech/1248010352/ スレを勃てるまでもないC/C++の質問はここで 13 pc12.2ch.net/test/read.cgi/tech/1260842197/ スレを勃てるまでもないC/C++の質問はここで 14 pc12.2ch.net/test/read.cgi/tech/1269273471/
- 152 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:42:44 ]
- >>150
それでいいっぽいな ただし配列名での初期化が出来るのはC++のみで、Cだとコンパイルエラーが出た #include <iostream> #include <iomanip> int main(void) { int x1[][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}}; int x2[][4] = {{17, 18, 19, 20}, {21, 22, 23, 24}, {25, 26, 27, 28}, {29, 30, 31, 32}}; int x3[][4] = {{33, 34, 35, 36}, {37, 38, 39, 40}, {41, 42, 43, 44}, {45, 46, 47, 48}}; int x4[][4] = {{49, 50, 51, 52}, {53, 54, 55, 56}, {57, 58, 59, 60}, {61, 62, 63, 64}}; int (*x[])[4] = {x1, x2, x3, x4}; int i, j, k; for (k = 0; k < 4; k++) { std::cout << "x = " << (k + 1) << '\n'; for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) std::cout << std::setw(4) << x[k][i][j]; std::cout << std::endl; } } }
- 153 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:51:33 ]
- Cだとわざわざこういう風に書かないとならん
面倒だな #include <stdio.h> int main(void) { int x1[][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}}; int x2[][4] = {{17, 18, 19, 20}, {21, 22, 23, 24}, {25, 26, 27, 28}, {29, 30, 31, 32}}; int x3[][4] = {{33, 34, 35, 36}, {37, 38, 39, 40}, {41, 42, 43, 44}, {45, 46, 47, 48}}; int x4[][4] = {{49, 50, 51, 52}, {53, 54, 55, 56}, {57, 58, 59, 60}, {61, 62, 63, 64}}; int (*x[4])[4]; int i, j, k; x[0] = x1; x[1] = x2; x[2] = x3; x[3] = x4; for (k = 0; k < 4; k++) { printf("x%d = \n", k + 1); for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) printf(" %3d", x[k][i][j]); putchar('\n'); } } return 0; }
- 154 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:51:35 ]
- >Cだとコンパイルエラーが出た
当たり前だ。 Cだと配列の要素には定数以外使えない。 実行時に決まるスタック上のアドレスや関数呼び出しの戻り値などは 配列を初期化する値に出来ない。
- 155 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:51:45 ]
- >>151
かしこいな! こんな使い方があったのか
- 156 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 23:30:19 ]
- ideone.com/ssEMB
ideone.com/v9lsi codepad.org/QCxegedL なんだこりゃ だめだこれ
- 157 名前:デフォルトの名無しさん [2010/05/24(月) 00:03:15 ]
- クラスの配列で
要素0内の複数のメンバ変数を要素1に複製したいときって 普通にmemcpyでOK?
- 158 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 00:21:49 ]
- >>157
条件によっては大丈夫な場合もあるけどまったく保証はされない。
- 159 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 00:46:11 ]
- >>157
Cならおk C++なら、コピーするメンバ変数が組み込み型かPODならおk
- 160 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 02:29:54 ]
- ていうか
a[1] = a[0]; でえーやん。 ディープコピーの問題だとかメモリ確保してた場合にどうだとかは 代入演算子をどうする(作る)かの問題だけど。
- 161 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 20:56:06 ]
- stl風にコンテナの中から絶対値が最大のモノを指すイテレータを探すにはどう書く?
findだと最初のが見つかったら終わっちゃうよね あ、ちなみにソート済みコンテナではないです
- 162 名前:デフォルトの名無しさん [2010/05/24(月) 22:14:18 ]
- 質問です。Hoge という class が合ったとして、その配列の pointer を
あるプログラムのheaderで以下のように定義して Hoge* h[2]; それをメインルーチンで以下のようにobject を指すようにしたとします。 h[0] = new Hoge("foo"); h[1] = new Hoge("bar"); そのときにデストラクタでは delete h[0]; delete h[1]; のように二回呼ばないといけませんか? それとも delete [] h; でいけるのでしょうか?何となく前者じゃないといけない気がするのですが。 よろしくお願いします。
- 163 名前:デフォルトの名無しさん [2010/05/24(月) 22:17:08 ]
- 2回呼ばないといけません。
- 164 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 22:27:20 ]
- VisualStudio2010でWIN32アプリケーションの勉強をしているのですが、
作った関数で戻り値に文字列を指定する事は出来るのでしょうか? 普通に LPWSTR CLASS(・・){ WCHAR str[100] 略 return str } とかやっても文字列は帰ってきませんし、他のサイトでは文字列を戻す関数作成のサンプルを見かけません。
- 165 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 22:27:40 ]
- >>162
delete[] h; は完全な間違いです。 未定義の動作ですから鼻から悪魔です。
- 166 名前:デフォルトの名無しさん [2010/05/24(月) 22:31:22 ]
- >>164
ローカル変数を戻り値にしちゃだめだよ。
- 167 名前:デフォルトの名無しさん [2010/05/24(月) 22:33:44 ]
- >>163>>165
ありがとうございます
- 168 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 22:37:49 ]
- >>164
std::stringとかstd::wstring
- 169 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 22:40:38 ]
- >>164
文字列受け取りたい場合は void GetStr( WCHAR* str, int size ) { strに値をコピー } ってやったら?
- 170 名前:デフォルトの名無しさん [2010/05/24(月) 23:32:38 ]
- #include <stdio.h>
int main(void){ int n=1; float w,kei=0,heikin,max,min; while(1){ printf("%d件目のデータを入力してください-->",n); scanf("%f",&w); if(w==0) break; kei+=w; if(n==1){max=w;min=w;} if(w>max) max=w; if(w<min) min=w; n++; } heikin=kei/(n-1); printf("合計 :%.1f[kg]\n" "件数 :%d[件]\n" "平均値:%.1f[kg]\n" "最大値:%.1f[kg]最小値:%.1f[kg]\n",kei,n-1,max,min); return 0; } 最小値にループを抜けるための条件のW=0が代入されてしまいます breakでループを抜けたらその後の kei+=w; if(n==1){max=w;min=w;} if(w>max) max=w; if(w<min) min=w; の文は処理されないはずではないのですか?
- 171 名前:デフォルトの名無しさん [2010/05/24(月) 23:33:52 ]
- 浮動小数点と==は相性悪いよ
- 172 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 23:41:08 ]
- c言語の質問です。
main(void){ register int a[10], i; for(i = 0; i < 10; i++) scanf("%d", a[i]); } というようにレジスタ上の配列aに数値を読みこみたいのですが、 windowsのgccでコンパイルするとwarningが出てしまい、 配列aはレジスタ上に配置されずにメモリに配置されている予感がします これをレジスタ上に確保したままfor文で数値を読み込む方法はあるのでしょうか?
- 173 名前:デフォルトの名無しさん [2010/05/24(月) 23:41:44 ]
- nをint型にしていてもダメなんですか?
- 174 名前:デフォルトの名無しさん [2010/05/24(月) 23:42:30 ]
- >>173は>>171へ
- 175 名前:デフォルトの名無しさん [2010/05/24(月) 23:48:46 ]
- breakするかどうかは、nでは決まらないよね?
- 176 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 23:50:19 ]
- >>166
JAVAのようには出来ないんですね どうもです。
- 177 名前:デフォルトの名無しさん [2010/05/24(月) 23:50:41 ]
- >>175
あっ!そういうことですか。ありがとうございました_ _
- 178 名前:デフォルトの名無しさん [2010/05/24(月) 23:51:19 ]
- >>172
_asm
- 179 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 02:34:49 ]
- >>172
お前がやりたい事は無理 そもそもレジスタを理解してないように見えるが
- 180 名前:172 mailto:sage [2010/05/25(火) 04:56:04 ]
- >>178-179
ありがとうございます 最近学び始めたばかりでして知らないことが多すぎたようです
- 181 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 05:41:35 ]
- registerなんてキーワードは忘れてしまってよろしい
- 182 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 10:51:56 ]
- なんでboostは動的デリータ付きのスコポを用意しなかったんですか?
- 183 名前:デフォルトの名無しさん [2010/05/25(火) 14:54:32 ]
- アメリカ人にとってのアルゴリズム辞典の定番の書籍って何がありますか?
- 184 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 17:01:59 ]
- AmericanCode第三版
- 185 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 17:21:26 ]
- 現実に存在する本でお願いします。
- 186 名前:デフォルトの名無しさん [2010/05/25(火) 18:16:33 ]
- www.amazon.co.jp/dp/0521701465/
- 187 名前:デフォルトの名無しさん [2010/05/25(火) 23:39:09 ]
- C言語であるメモリアドレスを引数経由で返すような関数を定義する場合
int hoge( void ** ); といった定義をしたのですが、 char *fuga; hoge( &fuga ); だと、ポインタの方が違うとワーニング hoge( (void**)&fuga ); だと、strict aliasingのワーニングになってしまいます。 void **という引数指定をするのはおかしな事なのでしょうか? int hoge( void * ); という定義にするとなんだか意図が異なる関数のような int hoge( char * ); とポインタの型を決めてしまうのも意図が異なるような ・・・というあたりで行き詰まっています。
- 188 名前:デフォルトの名無しさん [2010/05/26(水) 00:12:47 ]
- 4.9:
参照呼び出しに使うため汎用のポインターを関数に渡すのに、 void **を使うことができるか。 A: 移植性まで考れば不可能である。C言語には汎用のポインターへのポ インター型は存在しない。void *が汎用のポインターとして振る舞う のは、他の型のポインターをvoid *に設定したり参照するときに、 自動的に変換が行われるからである。void *以外の何かを指している void **を使って間接参照しようとすると、この変換は実行できない (隠れた正しいポインターの型がわからない)。
- 189 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 00:13:25 ]
- .libファイルって作ったコンパイラ以外のコンパイラでも使えますか?
- 190 名前:デフォルトの名無しさん [2010/05/26(水) 00:25:20 ]
- 互換性があれば使えます。
- 191 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 00:27:14 ]
- >>188
と、いうことは汎用性をあきらめて特定の型のポインタのポインタとするか ポインタは戻り値で返すように作るかしかないということでしょうか? それともほかに常套手段のようなものがありますか?
- 192 名前:デフォルトの名無しさん [2010/05/26(水) 00:28:45 ]
- void* hoge();
- 193 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 00:44:05 ]
- 正直そこまで汎用性にこだわる理由が分からん
- 194 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 00:44:42 ]
- 気にせず使え
- 195 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 02:31:02 ]
- void *p;
f((void**)&p); char *fuga = (char*)p; てのはどうよ?
- 196 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 22:10:39 ]
- >>193
こだわるわけでもないですが いい方法があるなら知りたい使いたいというわけで ないのなら特に気にしないで適当に >>195 確かにその方法ならキャスト不要ですが わざわざそのためだけに別の変数を定義するのも・・・ って事で、気にしないことにします
- 197 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 00:02:35 ]
- template<class T, class U>
T **pp_cast(U **pp) { return reinterpret_cast<T**>(pp); } char *p; f(pp_cast<void>(&p));
- 198 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 14:00:25 ]
- >>131
実は>>109=>>122なんだ 自分のミスを自分で突っ込んだだけなんだよ
- 199 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 15:31:44 ]
- typedef struct _CELL{
char as_status; int x; int y; int cost; int heuristic; int score; }CELL; void SetScoreBubbleSort(const CELL*& node, CELL*& list){ int cnt(0); // ソート開始 while( ( node->cost > list[cnt].cost ) && ( list[cnt].cost != 0 ) ){ cnt++; } list[cnt] = *node; }//続く
- 200 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 15:35:54 ]
- // 続き
int main(void){ // ---上・省略--- // 床セルのデータ生成(newの二次元配列) CELL** cell_floor; int cnt(0); int cnt2(0); cell_floor = new CELL* [CellWidth]; for(cnt=0; cnt<CellWidth; cnt++){ cell_floor[cnt] = new CELL[CellLength]; // Astarソート用セルリスト生成(ポインタ型) CELL** open_list; open_list = new CELL*[(CellWidth * CellLength)]; // ---途中・省略--- SetScoreBubbleSort(cell_floor[x][y], open_list);//★ここでコンパイルエラー // ---途中・省略--- // 床セルのデータの削除(deleteの二次元配列) for(cnt2=0; cnt2<CellLength; cnt2++){ delete[] cell_floor[cnt2]; } delete[] cell_floor; // Astarソート用セルリスト削除 delete[] open_list; } ってやってるんだけど、コンパイルするとerror C2664: 'SetScoreBubbleSort' : 1 番目の引数を 'CELL' から 'const CELL *&' に変換できません。って出るんだけどどうしたらいい?
- 201 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 15:58:46 ]
- &はどっから出てきたんだよ
- 202 名前:199、200 mailto:sage [2010/05/27(木) 16:04:08 ]
- &はSetScoreBubbleSortの関数の引数にポインタを渡したいから使ったんだけどマズイかな?
- 203 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 16:48:54 ]
- ポインタ渡すなら&cell_floor[x][y]
- 204 名前:199、200 mailto:sage [2010/05/27(木) 16:55:58 ]
- >>203
配列の形式でそのまま渡せばポインタの先頭アドレスが入ると思って&はつけてなかったけどつけてコンパイルしてみた。 そしたら「error C2664: 'SetScoreBubbleSort' : 1 番目の引数を 'CELL *__w64 ' から 'const CELL *&' に変換できません。」になった。
- 205 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 17:21:21 ]
- ポインタ受け取る方は const CELL * で
- 206 名前:199、200 mailto:sage [2010/05/27(木) 17:33:00 ]
- >>205
ポインタ受け取る方の参照演算子&を除いて void SetScoreBubbleSort(const CELL* node, CELL* list)とし、 int main{}の中の部分は SetScoreBubbleSort(&cell_floor[x][y], *open_list); としたら一応、コンパイルエラーは取れた。 関数使うときにポインタ渡したいのに*つけるのは気が引けたけど、エラーになる。 関数が抜けたときにまともに値が反映されてるか禿げしく不安・・・。
- 207 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 17:47:21 ]
- >>206
引数として渡したいものが、 ・CELL ・CELLへのポインタ ・CELLへのポインタのポインタ の何れなのかをはっきりさせよう
- 208 名前:199、200 mailto:sage [2010/05/27(木) 18:16:14 ]
- >>207
引数として渡したいのは「cell_floorの先頭アドレス」と「open_listの先頭アドレス」です。 CELLは型名なので。
- 209 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 18:21:10 ]
- 先頭アドレスならcell_floorだけでいいんじゃね
- 210 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 18:22:59 ]
- Cのポインタから勉強しなおしだな
- 211 名前:199、200 mailto:sage [2010/05/27(木) 18:25:16 ]
- すみません。引数として渡したいのは「cell_floorポインタ型配列の中のポインタ」の間違いです。
- 212 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 18:46:47 ]
- >>208
(先頭)アドレスというのは値のことであり、その値の型として ・CELLへのポインタ ・CELLへのポインタのポインタ があるということ。 同じ値であっても型が違うんだよ。その変がよくわかってないんじゃないか。
- 213 名前:199、200 mailto:sage [2010/05/27(木) 19:09:04 ]
- SetScoreBubbleSort関数では、
1番目の引数の配列の中のポインタの先の値(2次元配列)を 2番目の引数の配列の中のポインタの先の値(1次元配列)と比較した後に 1番目の引数の配列の中のポインタを2番目の中にコピーしようとする意図があります。
- 214 名前:199、200 [2010/05/27(木) 19:50:46 ]
- デバッグしてたらいくつもマズイ点を見つけたので出直してくるorz
- 215 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 03:42:27 ]
- Unix上のCで標準入力と標準出力をファイルとしてオープンする場合に
"/dev/stdin", "/dev/stdout"と記述することができたと思いますが Windows上のC++(Visual C++ 2010 Express)ではどのように記述 すれば良いでしょうか?
- 216 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 06:40:03 ]
- // fprintf に標準出力したいなら、こうだ。
#include <stdio.h> main(){ // FILE *stdout; fprintf(stdout,"err"); }
- 217 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 07:14:52 ]
- >>216
一般のファイルの入出力用に書かれたプログラムをそのまま利用して 標準入出力の読み書きをするにはどうするの?という質問だと思う。
- 218 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 07:54:26 ]
- FILE *fp;
if(1==0){ fp = fopen("/dev/stdin"); }else{ fp = stdin; } か、コメントにすればいいのではないか。例をw
- 219 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 08:57:26 ]
- fopen() で con は使えたっけ?
- 220 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 09:21:13 ]
- >>219
使えるわけないだろ
- 221 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 09:59:12 ]
- >>220
使えないって確認した? >>215 Linux MS-DOS /dev/stdin con /dev/stdout con /dev/null nul のように対応するからやってみて。 >>216 「fprintfに標準出力」じゃ日本語が破綻している。
- 222 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 11:34:33 ]
- >>221
con は入力には使えるが出力には使えない お前こそ試したことあるのか?
- 223 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 11:52:27 ]
- コンパイル環境がVC++ならok
- 224 名前:221 mailto:sage [2010/05/28(金) 11:54:33 ]
- ないよ。だから、試してみてと書いている。
別に、「使えるに決まっているから>220は嘘だ」なんて書いていないから安心してね♥
- 225 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 11:55:29 ]
- 221じゃないけど
bcc5.82ではできた
- 226 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 12:14:30 ]
- >>215
環境依存せず stdout と stdin を使うのがいい バカどもの発言には惑わされない方がいいよ
- 227 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 12:30:00 ]
- >>226
話がわからないのなら、無理に書かなくていいよ。 今は、「標準入出力の環境依存したデバイス名は何?」って話題だからね。 それとも、環境依存しないデバイス名が存在しているなんて妄想に囚われているのかい?
- 228 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 15:05:42 ]
- >>227
アンカー見てないの? >>215 に対するレスだよ お前が振ったくだらん話題には興味ないよ 自意識過剰にも程があるよ
- 229 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 15:08:30 ]
- conで開けるのは標準入出力ではなくコンソールだけどね
Windows API の CreateFile で CONIN$ と CONOUT$ というのもある
- 230 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 15:08:32 ]
- 誰と戦っているのだろう……
- 231 名前:215 mailto:sage [2010/05/28(金) 15:23:44 ]
- fgets(buf, 256, stdin);
で問題なく動きました。 ありがとうございました。
- 232 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 17:58:46 ]
- 質問はオープンの仕方だったのにね
- 233 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 20:15:13 ]
- まあ、ファイルは開かないと読めないものという先入観があるのは
しょうがないだろう。
- 234 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 20:28:00 ]
- え?
- 235 名前:233 mailto:sage [2010/05/29(土) 01:02:34 ]
- いや、だからstdinというファイルハンドルが自動的に開いているという可能性を
知らなかったから 「標準入力をファイルとしてオープンする」という質問になっちゃったんでしょう。 >>231結果的に欲しかったのはファイルハンドルだったから。
- 236 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 09:40:18 ]
- boostが使えない環境でスマポを自作しないといけないとして
どの程度のレベルまで仕様とか実装を練りこむ?
- 237 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 09:45:09 ]
- >>236
理由が政治的かメモリサイズかによって違ってくるな。
- 238 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 09:47:14 ]
- ハードウェア的な問題ではない
ただ、boostに不慣れな人がいてとりあえず今回はなしで、という感じ
- 239 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 09:56:48 ]
- >>238
その判断は今回だけではすまないし後々後を引く。スマポは後から導入が面倒だから今後も見送りになりやすいぞ。 スマポ作るならboost::shared_ptrかstd::tr1::shared_ptrのインターフェース互換にして後にusingで切り替えられるようにすることを勧める。
- 240 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 09:58:05 ]
- プロジェクトに必要なもの調べてそれだけ実装
- 241 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 10:08:37 ]
- Googleみたいにboostの一部だけを厳選して使用すればいい
この場合の選定基準は理解が簡単でトレーニングの必要が少ないライブラリだけを許可することかな shared_ptrやoptionalとか、その辺の解説サイトを流し読みすれば理解できるでしょ
- 242 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 10:12:23 ]
- 選定の結果、見事>>236の社内標準に採択されたprogress_displayであった。
- 243 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 10:13:40 ]
- shared_ptrはヘッダだけだし、boost展開した箇所にincludeパス張るだけなんだからってPM説得したほうが良さげ
- 244 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 17:16:50 ]
- shared_ptr使ってて修正を重ねるうちに
気が付かないうちに循環関係になっててメモリリークを引き起こしちゃって原因の判明に苦労したのだが もうこれは気をつける以外に対応がないものなのか?
- 245 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 17:55:19 ]
- >>244
デバッグ終了時にリークはレポートされるから、レポートされたときの版のコミットログ調べればすぐに特定できると思う。 循環参照が起きるパターンは限られてるんで、その場で対応すればいいと思うよ。 予想外の循環参照が起きるのは設計が悪いとしか言いようがない。たとえば参照の方向を一定にし、前方参照とshared_from_thisを使わない設計にすれば循環参照は自然に避けられる。
- 246 名前:デフォルトの名無しさん [2010/05/30(日) 10:57:28 ]
- stdio.hをインクルードしなくても
printf関数が使えるんですけどどういうことですか? 単なる警告なだけでエラーにならないのが不思議です。 本にはインクルードせよみたいに書いてあるのに じゃあ何のためにインクルードするの?って感じなんですが・・・。
- 247 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 11:04:15 ]
- Cの事なら、宣言されていない関数は
戻り値の型が int で、引数が (...) であるのと同じように解釈されて実行される。 だから、math.h をインクルードせずに sin(1) とかやると 変になる(int sin(int) であると解釈して実行されるので)など、 ちゃんとインクルードしないと意図しない動作を引き起こす恐れがあるので、 必ずインクルードすること。 (数学関数を特別視してちゃんとdoubleにしてくれるコンパイラもあるけど、 それはそのコンパイラ独自の仕様) C++なら文法エラー。
- 248 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 11:34:35 ]
- googleのコーディング規約の整数型の項目についてなんだけど
これってコンテナのoperator[]の引数もintあるいはintN_tにしろってこと? あとintは少なくとも32bitあると考えても良いって書いてあるけどそんな保証はないよね?
- 249 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 11:58:15 ]
- グーグルの開発環境では最低32bitなだけだろ
- 250 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 12:22:04 ]
- 組み込みやらないなら最低32bitの過程が今時崩れることはないだろう
- 251 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 12:29:44 ]
- 社内規約をなんだと思ってるんだろうw
- 252 名前:デフォルトの名無しさん [2010/05/30(日) 16:10:26 ]
- float に100.123と入力して表示させると
100.123001となってしまうのは何故ですか?
|

|