■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

C++相談室 part14
251 名前:デフォルトの名無しさん :03/01/06 11:15
unsigned int aaa = 0xFFDDEECC;
unsigned char a1 = (aaa >> 24) & 0xff;
unsigned char a2 = (aaa >> 16) & 0xff;
unsigned char a3 = (aaa >> 8) & 0xff;
unsigned char a4 = (aaa >> 0) & 0xff;
unsigned int bbb = (a1 << 24) | (a2 << 16) | (a3 << 8) | (a4 << 0);


252 名前:デフォルトの名無しさん :03/01/06 11:19
& 0xffはいらないだろ。

と思いつついつも書いてしまう小心者の俺...

253 名前:248 :03/01/06 11:24
初心者には勉強になるかと思ってあえて超丁寧に書いただけだよ。
ワーニングが出る処理系もあるし。

254 名前:デフォルトの名無しさん :03/01/06 14:01
> そりゃあよほどアホなコンパイラじゃないのかね

あんたほどじゃないだろうけどね(w

255 名前:デフォルトの名無しさん :03/01/06 14:09
関数の先頭で変数宣言するのと、途中で宣言するのは
なにか違いはありますか?必要になり次第処理の途中で
スタックに積む方が効率がいいと思うのですがどうでしょうか?

256 名前:デフォルトの名無しさん :03/01/06 14:14
>>255
それはコンパイラの実装次第。例えばBorland-C++5.5.1では、変数が出てくる
度にスタックに積むのではなく、最初に関数の中身を全部調べて、必要なだけ
のスタックを関数の入り口で確保してしまう。

257 名前:デフォルトの名無しさん :03/01/06 14:18
>>256
つまりそのあたりのスタックの使い方に標準はないということですね。
当たり前かもしれませんが。。。自分のコンパイラをよく調べてみます。
ありがとうございました。

258 名前:デフォルトの名無しさん :03/01/06 14:26
initialize…ハァハァビヨーンタソ

259 名前:デフォルトの名無しさん :03/01/06 15:26
二次元配列の動的確保ってどうやってやるんですか?

260 名前:bloom :03/01/06 15:27


http://www.agemasukudasai.com/bloom/

261 名前:デフォルトの名無しさん :03/01/06 15:46
>>259
列の次元が決まっていてもいいなら

TYPE (*p)[100] = new TYPE[n][100];

行、列とも可変なら

TYPE** p = new TYPE*[m];
for (int i = 0; i < m; i++)
p[i] = new TYPE[n];

262 名前:デフォルトの名無しさん :03/01/06 15:48
>261
サンクスです♪
これでrenewが作れます。

263 名前:デフォルトの名無しさん :03/01/06 18:10
main(){
int* pa=new int;
pa=(int*)new double;
delete pa;
}
これがメモリリークしてしまうのは、何故ですか?

264 名前:デフォルトの名無しさん :03/01/06 18:13
new * 2
delete * 1

265 名前:デフォルトの名無しさん :03/01/06 18:32
>>263

int* pa = (int*)new double;
delete pa;

こういう事か?

266 名前:デフォルトの名無しさん :03/01/06 19:46
>264
二回deleteしたら当たり前のように落ちるんですが・・・

267 名前:デフォルトの名無しさん :03/01/06 20:05
市販本についているVC++のプログラムで、
main関数が無いのに実行できるのですが、どうしてでしょうか?
それが分からないと改造できないので、よろしくお願いします。

268 名前:デフォルトの名無しさん :03/01/06 20:06
( ´,_ゝ`)プッ

269 名前:デフォルトの名無しさん :03/01/06 20:21
>>266
同じアドレスに対して二回deleteしたら落ちるのは当然。
delete pa;
pa = 0;
delete pa;
とすれば落ちない。でもメモリリークは治らない。

270 名前:デフォルトの名無しさん :03/01/06 20:32
>>267
君みたいな奴に限って、違法コピーのVisualStudioを使ってるんだよなあ。

271 名前:デフォルトの名無しさん :03/01/06 20:34
>267
WinMainじゃないだろうな?

272 名前:デフォルトの名無しさん :03/01/06 20:56
>>271
実行するとWindowsが開くんですけど、WinMainってそれに関係してるんですか?


273 名前:PGバイト人(学生) :03/01/06 20:59
MFC使ってんだと思われ。

274 名前: :03/01/06 21:01
コピペお願いします

半島の組織票で逆転されました。
一人でも多くの協力が必要なんです
http://live.2ch.net/test/read.cgi/festival/1039531056/926
CNNのアンケート
合衆国は北朝鮮と不可侵条約を締結するべきか?
Noに投票してください!

投票所:http://asia.cnn.com/の右下
祭り会場:http://live.2ch.net/test/read.cgi/festival/1041681450/
ハングルhttp://ex.2ch.net/test/read.cgi/korea/1041848026/

275 名前:デフォルトの名無しさん :03/01/06 21:02
MFCって?
どうすれば見れるんですか?


276 名前:デフォルトの名無しさん :03/01/06 21:09
・・・君の買った本には書いてないのか?
っていうか
>WinMainってそれに関係してるんですか?
で、MFCは無茶。
で、ここは「C++」のスレ。winもMFCもスレ違い。

277 名前:PGバイト人(学生) :03/01/06 21:11
>>275
スレ違いなのだが・・・。

まだ>>275はその市販本で勉強するには知識が足りない。
(もしくは市販本の説明が悪い)

簡潔に言うとWinMain関数はWindowsのMain関数みたいなもんで
MFC内で定義されている。
この話題はこのスレの趣旨に合っていないので、

初心者にVisual C++を教えるスレ★

を勧める。
以上

278 名前:デフォルトの名無しさん :03/01/06 21:16
>>276
買った本にはMFCについて書いておりませんので・・・。

>>277
そちらのスレで聞いてみます。


279 名前:デフォルトの名無しさん :03/01/06 23:00
>>277
フリーターが何を偉そうに

280 名前:デフォルトの名無しさん :03/01/06 23:09
環境依存の話はそちらのスレでどうぞ

281 名前:デフォルトの名無しさん :03/01/07 01:11
> 簡潔に言うとWinMain関数はWindowsのMain関数みたいなもんで
> MFC内で定義されている。
( ´,_ゝ`)プッ

282 名前:デフォルトの名無しさん :03/01/07 01:26
_tWinMainはあるね。

283 名前:デフォルトの名無しさん :03/01/07 01:31
class A {};

void func1(A& a) {...}
void func2(const A& a) {...}

void caller() {
 func1(A());
 func2(A());
}

func1のが怒られる理由って何だっけ

284 名前:デフォルトの名無しさん :03/01/07 01:52
>>283
怒られませんが・・・・・

285 名前:デフォルトの名無しさん :03/01/07 01:54
マジ?gcc3.2は怒った

286 名前:デフォルトの名無しさん :03/01/07 02:07
>>284
貴様MSVCだな!

287 名前:デフォルトの名無しさん :03/01/07 02:13
>>283
一時変数はconstなんじゃ?

288 名前:デフォルトの名無しさん :03/01/07 02:17
Borland C++ ではお咎めなし、引数つかってねーよって警告は出たが…。
gcc は 2.95.3-5 でも怒られるね…なんで?
呼び出し中に非const の A が作られてるのに、そいつが const A& にはなれて
A& にはなれない理由は〜〜?俺も知りたいー。

289 名前:288 :03/01/07 02:19
>>287
マジっすか?プログラミング言語C++ か仕様書で書いてある所あったら
セクション番号きぼんぬ!

290 名前:デフォルトの名無しさん :03/01/07 02:27
>>289
一時変数はconstではないが、変数のリファレンスに一時変数を与える
事は禁止されているらしい。
プログラミング言語C++第3版、P135、§5.5

291 名前:デフォルトの名無しさん :03/01/07 02:45
多分これと同じ理由だろう。

int main() {
A& a = A(); // エラー
const A& aa = A(); // OK
}

292 名前:デフォルトの名無しさん :03/01/07 07:19
291が何故ダメなのか分からない…(´・ω・`)

293 名前:デフォルトの名無しさん :03/01/07 07:33
>>292
こういう風に書き換えたらわかるかな?
int main() {
int& a = 1; // エラー
const int& aa = 1; // OK
}

294 名前:デフォルトの名無しさん :03/01/07 09:03
メンバ変数に触っていない関数をstatic関数のように呼び出すのは
いいの?というかそれなら最初からstatic関数にしておけばいいのに
と思いません?

295 名前:デフォルトの名無しさん :03/01/07 09:38
しろよ。

296 名前:292 :03/01/07 10:22
>>293
それは理解できたのですが、また疑問が沸き上がりました。
A& a = A();で確保したaはスコープが外れるとデストラクトされるのですか?

297 名前:デフォルトの名無しさん :03/01/07 11:41
>>296
なんで試してみないんだ?
ちなみに、結果はコンパイルエラーのはずだが。

298 名前:288 :03/01/07 12:49
>>291
ありがとうございます。家に帰ったら読んでみます。

>>296
new で作ったものじゃなければスコープ外になったらデストラクトされるでしょう。(多分)


299 名前:292 :03/01/07 13:25
>>297-298
試してみたらちゃんと呼ばれてました。
混乱して済みません。

環境:VC++7.0

#include <iostream>

class A {
public:
A() { std::cout << "constract A()" << std::endl; }
virtual ~A() { std::cout << "deconstract ~A()" << std::endl; }
int m_i;
};

int main() {
A& a = A(); // 通る
const A& aa = A(); // 通る

int& b = 1; // エラー
const int& bb = 1; // 通る
}



300 名前:デフォルトの名無しさん :03/01/07 13:49
>>292
見境なく仮想デストラクタにするのはやめたほうが…

301 名前:デフォルトの名無しさん :03/01/07 15:01
IEEEで取り込んだ画像をC++で入出力する
プログラムがあります
それをいち早く編集したいのです!
なにを学べばいいかわかりません。。。。
助けて

302 名前:デフォルトの名無しさん :03/01/07 15:07
>>301
早くそのプログラムを送って!
助けて!

303 名前:デフォルトの名無しさん :03/01/07 15:19
cout << (char*)NULL << endl;
これって何も言わずにexitしちゃうんだけどいいの?

304 名前:デフォルトの名無しさん :03/01/07 15:36
>>303
C++ には NullPointerException なんかねーよ。


305 名前:303 :03/01/07 15:40
文字列の初期化なんだけど、
どっちにしてますか?

char* szA = NULL;
cout << szA << endl; // 落ちる
...
if(szA != NULL){
 delete szA;
 szA = NULL;
}

char* szB = "";
cout << szB << endl // 改行
...
if(strcmp(szB, "")){
 delete szB;
 strcpy(szB, "");
}


306 名前:デフォルトの名無しさん :03/01/07 16:01
>>302
おくりました!
助けてーくーだーさーい


307 名前:デフォルトの名無しさん :03/01/07 16:09
誰のメアドかも分からんに送っちゃ駄目だろ

308 名前:デフォルトの名無しさん :03/01/07 16:15
>>305
どっちでもいいけど、後始末が両方ダメ。

309 名前:303 :03/01/07 16:26
>>304
実行時エラーだったら何か言って欲しいと思うのです。

>>305
訂正。
delete szB;
szB = new sizeof(char);
strcpy(szB, "");

>>308
どこがダメ?


310 名前:デフォルトの名無しさん :03/01/07 16:29
送ってといわれたので・・・


311 名前:デフォルトの名無しさん :03/01/07 17:12
>> 309
あのな、C++で文字列を扱いたかったら、std::string 使え。
ほかに、文字列変数に sz プレフィクスつけると、ガンガリアンが混乱するからやめれ。
で、文字列初期化の仕方も間違ってるし。
すこし勉強してからまたきなさい。
なにがしたいのかもわからないし。

312 名前:302 :03/01/07 17:36
受け取りますた

本当に送ってくるとは思ってなかったけども

313 名前:デフォルトの名無しさん :03/01/07 17:38
X x;
x[][];

と、いう風に書きたいのですが、opeator[][]()はエラーになります。
何かいい方法ありませんか?

314 名前:デフォルトの名無しさん :03/01/07 17:44
>>305
文字列には、string を使う。

 std::string s;

これで初期化も確保も一発。
つーか >>303 は何がしたいのさ?

315 名前:303 :03/01/07 17:52
勉強のため文字列クラスを自作してます。

>>311
だからどう間違ってるのかって聞いてるのに・・・


316 名前:デフォルトの名無しさん :03/01/07 17:55
>>313
template<class T, int M, int N>
class X {
T array[M*N];
public:
T* operator[](size_t i) { return array + N*i; }
};
とか?

317 名前:デフォルトの名無しさん :03/01/07 18:06
class X{
int a[10][10];
};

X x;
x[0][0];
こんな感じです。

318 名前:デフォルトの名無しさん :03/01/07 18:12
a を public にして、
x.a[0][0];
じゃだめなの?

319 名前:デフォルトの名無しさん :03/01/07 18:15
その方法が一番まっとうだと思うんですが、xを配列のように扱って
みたいんです。

320 名前:デフォルトの名無しさん :03/01/07 18:15
オイオイオイオイ…

321 名前:デフォルトの名無しさん :03/01/07 18:20
すみません・・・
なんとかならないですかねぇ

322 名前:デフォルトの名無しさん :03/01/07 18:21
>321
アンタ誰だよ・・・

323 名前:302 :03/01/07 18:33
>>321
俺は鬱病なんでやる気ない、すまん

324 名前:デフォルトの名無しさん :03/01/07 18:38

どっかにうpして晒すとか…

325 名前:303 :03/01/07 18:48
delete [] szA;
szA = new char [1];
だった(;´Д`)逝ってきます

つか自作文字列クラスの仕様では
デフォルトコンスタクタ以外、文字列を空にする必要って無かった


326 名前:デフォルトの名無しさん :03/01/07 20:01
>>325
あなた、一回、そのクラス定義をさらしなさい。みんな、あなたが何をやりたいのか
わからないから何もアドバイスできないのよ。

327 名前:デフォルトの名無しさん :03/01/07 20:18
>>315
std::cout << (char*)NULL << std::endl;
gcc3.2.1(MinGW)では落ちないぞ。何も表示されなかったけど。

std::printf("%s", NULL);
と同じような意味だと思う。但し、printfの%sはアドレスに0を渡すと、"(null)"って
表示してくれる。

328 名前:デフォルトの名無しさん :03/01/07 20:38
何故、nullポインタを出力したいのか、その意図がわからん

329 名前:デフォルトの名無しさん :03/01/07 20:48
ファイル "nafxcwd.lib" を開けません。
というエラーメッセージが出てしまうのですが
どうすればいいのか教えてください。

330 名前:デフォルトの名無しさん :03/01/07 20:55
このようなsample.dsp sample.cpp sample.rc sample.clw
sapleDoc.cpp sampleView.cpp Stdafx.cpp ともともとあるファイルで、
どのファイルをいじくれば編集できるのですか?(画像処理で色変換がしたいです)
初心すぎてすみません、教えてください


331 名前:デフォルトの名無しさん :03/01/07 20:58
スレ違いだと何遍言えば(略

332 名前:デフォルトの名無しさん :03/01/07 22:06
>>329-330
VC++のスレへ逝け

333 名前:デフォルトの名無しさん :03/01/07 23:32
>>319
struct X {
 int a[10][10];
 struct proxy {
  int& operator[] ( int j ) { return x->a[i][j]; }
  proxy( X*x, int i ) : x(x),i(i) {}
  X* const x;
  int const i;
 };
 proxy operator[](int i) { return proxy(this,i); }
};

334 名前:デフォルトの名無しさん :03/01/08 10:52
std::max<int>はconst int& を受け渡ししますが、
このおかげで値渡しによる実装に比べて効率が悪くなるのは、
コンパイラの最適化の責任ですか?
STL実装の責任ですか?
利用者の責任(代替の実装を使うべし)ですか?

335 名前:! :03/01/08 11:05
Proxy Pattern come from?

336 名前:308じゃないけど :03/01/08 13:12

>>303

T* obj = new T; と確保したら、解放は delete obj;
T* obj = new T[size]; と確保したら、解放は delete[] obj;
基本中の基本です。

>>303 は、ポインタを new していないのに、 delete で消そうとしているからだめだめ。
>>305 で、char* szB = ""; と、定数へのポインタを delete で消すなんていうのはもってのほか。

メモリリークで苦しみたくなければ、メモリや変数について、1から勉強したほうがよいと思われ。
それが嫌なら、C/C++ やめて Java か C# でもやってなさい

337 名前:デフォルトの名無しさん :03/01/08 13:15
>>334
inline展開が効けばマクロ並になると思われ。

338 名前:334 :03/01/08 13:54
>>337
そうおもってたんですが、アセンブリ見たら、
値をレジスタからメモリに移してアドレス取ってるんですよ。
もうね、(中略)と。
ちなみに、cygwin gcc3.2 でも同様の結果を確認。

339 名前:デフォルトの名無しさん :03/01/08 14:19
>>338
const int&は必ず一時変数を必要とするので、レジスタ変数が使える場面
でも一度メモリに入れるのかもしれません。

RISC CPUで動くg++の結果も見たいものです。

340 名前:デフォルトの名無しさん :03/01/08 14:25
>>338
ちなみに一時変数を必要としない変数の参照版ではちゃんとレジスタで
比較してくれました。

template <typename T>
inline T mymax(T& a, T& b)
{
return (a > b) ? a : b;
}

但し変数の参照は一時変数をバインドできないので、mymax(1, 2)なんて
やるとエラーが出ます。

341 名前:デフォルトの名無しさん :03/01/08 14:39
ごめそ。そう思ったけど、やってみたら、

template <typename T>
inline T& mymax(T& a, T& b)
{
return (a > b) ? a : b;
}

ではやっぱりアドレスとるね。それから

template <typename T>
inline T mymax(const T& a, const T& b)
{
return (a > b) ? a : b;
}

ではレジスタで比較してくれた。だから、constがあるかないかではなく、返り値が
参照かそうでないかで最適化が決まるみたい。intのような小さいオブジェクトでは
効率が悪くなるが、class変数に対してはアドレス取った方が効率が良くなるから
痛し痒しですな。

342 名前:デフォルトの名無しさん :03/01/08 17:02
TypeTraits<int>::ParameterType は解決にならんか?

343 名前:デフォルトの名無しさん :03/01/08 17:12
intで特化した関数maxを多重定義しておけば?

344 名前:IP記録実験 :03/01/08 21:30
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。

345 名前:デフォルトの名無しさん :03/01/08 22:54
ほぜむ

346 名前:デフォルトの名無しさん :03/01/08 23:03
保守

347 名前:デフォルトの名無しさん :03/01/08 23:07
C++の例外で質問があります
例外クラスを作ったんですが、
例外は実体を投げたほうがいいんでしょうか
それともnewしてポインタを投げたほうがいいんでしょうか

348 名前:デフォルトの名無しさん :03/01/08 23:09
>>347
実体というか、コンストラクタを使って作った一時変数を投げてconst & で
受けるとよい。
newするとdeleteしないといけないし面倒くさい。

349 名前:デフォルトの名無しさん :03/01/08 23:13
>>348
即レスありがとうございます。
 throw A(); とかですよね。
こいつが削除されるタイミングっていつになるんでしょう。
catch節を抜けたとき、であってますか?

あと、例外クラスを継承したとき、
たとえば class B : public A {}; としたとき
 throw B();
したのが
 } catch ( const A& a ) {
で捕まえられるもんなのでしょうか。
また、たとえば、この場合に
 } catch ( A a ) {
なんてやるとどうなるんでしょう・・・

350 名前:デフォルトの名無しさん :03/01/08 23:16
intとかの型ってどうやって定義されているんだろう?
気になる。いっぺんでいいから定義文を見てみたい

351 名前:デフォルトの名無しさん :03/01/08 23:24
削除されるタイミングは、もちろんcatchを抜けた時。一時変数が削除される。
B()をconst A&で受けると、型が違うので多分ダメ。

Aで受けると、文法的には一時変数のコピーを受けることになるが、最適化
によって大抵一時変数そのものを受けるので効率的には変わらないのでは
ないかと思う。これについては確信無し。


352 名前:デフォルトの名無しさん :03/01/08 23:32
'あ'はchar型?

353 名前:デフォルトの名無しさん :03/01/08 23:33
あちゃー

354 名前:デフォルトの名無しさん :03/01/08 23:46
>351
> B()をconst A&で受けると、型が違うので多分ダメ。
基底クラスへの参照なら、問題ないぞ。っつーか A& ではなく A で受けると
スライシングが起こるから、たいてい不幸な結果になる。

355 名前:デフォルトの名無しさん :03/01/09 00:02
>>354
継承したクラスを基底クラスで受けられるって初めて知った。
目から鱗です∈( ̄o ̄)∋。勉強し直しです。

それから、確かにAで受けると、先に~A()が呼び出されてしまうから
まずいね。

356 名前:デフォルトの名無しさん :03/01/09 00:10
ちょっと質問です。

class Except {
public:
const char* what() const { return "abc"; }
Except() { std::cout << "Except()" << std::endl; }
~Except() { std::cout << "~Except()" << std::endl; }
};

class Ex2 : public Except {
public:
Ex2() { std::cout << "Ex2()" << std::endl; }
~Ex2() { std::cout << "~Ex2()" << std::endl; }
};

int main()
{
try {
throw Ex2();
}
catch (const Except& e) {
std::cout << e.what() << std::endl;
}
}

357 名前:デフォルトの名無しさん :03/01/09 00:11
何を?

358 名前:デフォルトの名無しさん :03/01/09 00:11
上のプログラムを実行すると次のような出力が得られます。

Except()
Ex2()
~Ex2()
~Except()
abc
~Ex2()
~Except()

なんか、デストラクタが1回ずつ余計に実行されているように見えるのですが、
大丈夫なんでしょうか?

359 名前:デフォルトの名無しさん :03/01/09 00:11
引数が
char*& pStreamData
となってる関数があるのですが、
これってどういう意味なんですか?
最初の宣言は
char  pStreamData
としていいのでしょうか?




360 名前:age2ch.pl 0.03.28 :03/01/09 00:12
そんなわけで、qbサーバでIPの記録実験をはじめましたー。


361 名前:デフォルトの名無しさん :03/01/09 00:13
>>358
コピーコンストラクタも cout に表示するようにしてみ。

362 名前:デフォルトの名無しさん :03/01/09 00:14
>>359
ポインタのリファレンス。簡単に言うと、ポインタのポインタみたいな使い方を
する。
最初の宣言はchar* pStreamDataでは?

363 名前:デフォルトの名無しさん :03/01/09 00:17
キタ━━━━━━(゚∀゚)━━━━━━ !!!!!

364 名前:デフォルトの名無しさん :03/01/09 00:17
>>361
なるほど、すっかり忘れていました!
特にポインタ変数があるような場合はコピーコンストラクタを書いて
おかないといけないんでしたね。

365 名前:デフォルトの名無しさん :03/01/09 00:22
>>361
これで、継承したクラスを基底クラスの参照ではなく変数で受けると
ヤバイ理由がわかりました。基底クラスのコピーコンストラクタと
デストラクタが呼び出されてしまうわけですね。でも基底クラスの
コピーコンストラクタなら大丈夫な気もするのですが・・・気のせいでしょうか?

366 名前:デフォルトの名無しさん :03/01/09 00:29
家族構成と小学校時代の恥ずかしかった思い出も記録されます。

367 名前:デフォルトの名無しさん :03/01/09 00:49
>>155
2ちゃんねるはアングラなの? △ ▽  ▲ ▼
 誰もが自由に書き込みが出来る匿名掲示板(←ここ)のシステムには

368 名前:デフォルトの名無しさん :03/01/09 00:52
なんかさっきからトンチンカンな書き込みが多いが・・・・・
2chビューアのバグ?

369 名前:デフォルトの名無しさん :03/01/09 00:54
小食にします。>>265

370 名前:デフォルトの名無しさん :03/01/09 01:01
一回あげてみる。

371 名前:デフォルトの名無しさん :03/01/09 01:04
>>386
IP記録うんぬんのやつに引き続き荒らされてる。

372 名前:デフォルトの名無しさん :03/01/09 01:05
IP記録うんぬん=ダウン厨

373 名前:デフォルトの名無しさん :03/01/09 01:09
>>366>>367>>369>>371>>372
だからお前らいったいどこのスレの住人なんだよ?

374 名前:デフォルトの名無しさん :03/01/09 01:09
>>339

わかってます。
でも心の2ちゃんは荒れまくってます。
AAのオンパレードです。

375 名前:371 :03/01/09 01:15
>>373
すまん。>>368 のつもりだった。
PC 系の板で同じように荒らされているみたい。

376 名前:デフォルトの名無しさん :03/01/09 01:15
そろそろ1ch.tvの出番か?(藁

377 名前:デフォルトの名無しさん :03/01/09 01:24
>>446
ソナチネとか結構好きです。
>>449
もうすでに。

378 名前:デフォルトの名無しさん :03/01/09 01:58
IPの記録はまじでやめてほしい


379 名前:デフォルトの名無しさん :03/01/09 02:02
>>378
悪いことしなければ問題ないだろ

380 名前:デフォルトの名無しさん :03/01/09 02:56
nyの掲示板に来い!

381 名前:デフォルトの名無しさん :03/01/09 03:41
最高裁への上告は認められなくなったから、これで事実上判決確定だよ。
逆転も何もないって。
勢いで上告なんかしても一発で上告却下(門前払い)だよ。

二審も一審を支持。これに対して上告しようにも、
刑事訴訟と同様、自由に上告できるってもんでもないのです。
民事訴訟法312条 (上告の理由) 1項
「上告は、判決に憲法の解釈の誤りがあること
その他憲法の違反があることを理由とするときに、することができる。」
http://www.m-net.ne.jp/~doba/goto/hon.htm

ようするに上告しても今の制度では100%無駄。
これで完全終了ってことか。



382 名前:デフォルトの名無しさん :03/01/09 12:20
スレ違い馬鹿はどっか行ってくれ

↓↓ 次の方、質問をどうぞ ↓↓

383 名前:デフォルトの名無しさん :03/01/09 12:38
>>135
最後自宅かよ!

384 名前:デフォルトの名無しさん :03/01/09 13:08
>>382
昨晩からどうやらスクリプトが狂っていて、どこか他のスレへの書き込みが
このスレへスルーしてくるみたい。
書き込みしているヤシには見えないらしいので、このスレが埋まるまで
待つか、新しいスレ立てるしかないかもしれん。

385 名前:! :03/01/09 15:07
>>378
厨房は一生厨房のままです。

386 名前:デフォルトの名無しさん :03/01/09 15:37
trye{
// ...
}
template <class T>
catch(const T& e){
std::cout << e.what() << std::endl;
}


387 名前:デフォルトの名無しさん :03/01/09 15:46
if you think C++ is difficult, trye English.

by Byo-n.

388 名前:デフォルトの名無しさん :03/01/09 17:20
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────

389 名前:303 文字列クラスその1 :03/01/09 22:04
遅くなりましたが、>>336さんありがとうございます。
一応動くようになったんですが、晒して見ます。
よろしければ突っ込み入れてください。

class UString
{
protected:
 char* m_sz;
 int m_len;

public:
 UString();
 UString(const char* a_sz);
 UString(const UString& a_str);
 ~UString();

 UString& operator = (const UString& a_str);
 UString& operator = (const char* a_sz);
 UString& operator += (const UString& a_str);

 int GetLengthSz(const char* a_sz);
 const char* GetSz();
 int GetLength();

 bool CopySz (char* a_dst, const char* a_src);
 bool EqualSz (const char* a_szA, const char* a_szB);

 friend UString& operator + (const UString& a_strA, const UString& a_strB);
 friend bool operator == (const UString& a_strA, const UString& a_strB);
 friend bool operator != (const UString& a_strA, const UString& a_strB);
 friend ostream& operator << (ostream& a_ostream, const UString& a_str);
};

390 名前:303 文字列クラスその2 :03/01/09 22:22
UString :: UString ()
{
 m_len = 0;
 m_sz = new char [1];
 m_sz[0] = '\0';
}

UString :: UString (const UString& a_str)
{
 m_len = a_str.m_len;
 m_sz = new char [m_len + 1];
 CopySz(m_sz, a_str.m_sz);
}

UString :: ~UString ()
{
 if(m_sz != NULL)
  delete [] m_sz;
}

UString& UString :: operator = (const UString& a_str)
{
 if(m_sz != NULL)
  delete [] m_sz;
 m_len = a_str.m_len;
 m_sz = new char [m_len + 1];
 CopySz(m_sz, a_str.m_sz);
 return *this;
}


391 名前:303 文字列クラスその3 :03/01/09 22:41
UString& operator + (const UString& a_strA, const UString& a_strB)
{
 UString* ret_str = new UString();
 *ret_str += a_strA;
 *ret_str += a_strB;
 return *ret_str;
}

UString& UString :: operator += (const UString& a_str)
{
 int lennew = m_len + a_str.m_len;
 char* sznew = new char [lennew + 1];
 int i = 0;
 int k = 0;
 for(i=0; i<m_len; i++)
  sznew[i] = m_sz[i];
 for(k=0; i<lennew; i++,k++)
  sznew[i] = a_str.m_sz[k];
 sznew[i] = '\0';
 delete [] m_sz;
 m_sz = sznew;
 m_len = lennew;
 return *this;
}

重なる部分、あまり重要でない部分は端折ってありますが、以上です。
長文失礼しました。


392 名前:デフォルトの名無しさん :03/01/09 22:55
>>389
・メンバの初期化は初期化リストを使え。
・delete前の分岐は冗長。
・protectedメンバがあるのに、デストラクタがvirtualじゃないのはおかしい。
・operator + の型が、慣用的なものと異なる。
・operator + が、効率が悪い上、メモリーリークする。
・newでbad_allocが飛ぶことが考慮されていない。

393 名前:デフォルトの名無しさん :03/01/09 23:12
記念かきこ

394 名前:デフォルトの名無しさん :03/01/09 23:36
void func(int){}
main(){
void* vp=func;
}
とあるとき、vpからfuncの返値、引値の型をとる方法ありますか?

395 名前:デフォルトの名無しさん :03/01/09 23:39
>>386
それほしいんだけど・・・
catchをズラズラ書くのはダサイし・・・

396 名前:デフォルトの名無しさん :03/01/09 23:39
typeidはなしの方向で

397 名前:303 :03/01/09 23:58
>>392
的確なアドバイスありがとうございます。
疑問点がまた幾つか浮かび上がってきまた。
修行してきまつ

398 名前:デフォルトの名無しさん :03/01/10 00:02
クラスライブラリを作成してるんですが、拡張性を持たせようと
ほとんどのメンバ関数をvirtual指定しました。
そしたら、友人から「virtual指定すると遅くなるから、必要な物だけにしたほうがいい」
と言われたんですが、実際そうなんでしょうか?
(なんか仮想関数テーブルがなんたらかんたらで遅くなるといっていました)

399 名前:デフォルトの名無しさん :03/01/10 00:06
>>398
ディスアセンブルしてみろ。

400 名前:398 :03/01/10 00:08
アセンブリ言語よくわからないんでつ。。

401 名前:デフォルトの名無しさん :03/01/10 00:09
それ以前の問題で
「拡張性を持たせるためにvirtualにする」
が変。

どこをどう拡張するかを決めずに設計しても無駄。

402 名前:デフォルトの名無しさん :03/01/10 00:09
>>398
そもそも、拡張性のために何でもvirtualという考え方がどうかと・・・
何でもvirtualじゃないと拡張性が無いのだとすれば、
クラス設計自体に問題があるのかもしれません。

403 名前:デフォルトの名無しさん :03/01/10 00:12
>>402
そうそう。
ポリモーフィズムが必要な場合を判断できなきゃね。

404 名前:398 :03/01/10 00:17
>>401-403
なるほど。。クラス設計考え直して見ます。
ありがとうござますた。
(C++の基本的な考えとして、virtualしたものはしないものより遅くなるんでしょうか?)


405 名前:デフォルトの名無しさん :03/01/10 00:21
398叩かれまくり。かわいそうだからフォローしてやろう。
"拡張性"の定義はしっかりしたほうがいい。

プラグイン的なものを組み込めるような拡張性
多くの用途に対応するための拡張性
環境への依存度を下げるための拡張性

これらは重なる部分もあるけど微妙に違う。
どの拡張性を求めているのか、検討しとけ。

virtualのコストは確かにあるが、最近のCPUではわずかなもんだ。
そこにハマって効率を上げる努力より、
しっかりクラス設計をする努力のほうが何万倍も効果があるぞ。
言語仕様に流されすぎないようにな。

406 名前:デフォルトの名無しさん :03/01/10 00:37
余談だが
同人コミケ板のバナーにC++って書いてあるような気がするのは俺だけか?
一体何の関係が?

407 名前:デフォルトの名無しさん :03/01/10 00:45
>>406
あれは2CHと書いてあるんだと思われ。

408 名前:デフォルトの名無しさん :03/01/10 00:45
ループの内側だと一生懸命になる罠

409 名前:デフォルトの名無しさん :03/01/10 00:50
ひろゆき氏が発行するメールマガジンで明らかにした。
ってあるけど、電波2ch以外にメルマガってあった?

410 名前:デフォルトの名無しさん :03/01/10 01:53
>>398
ここは C++ のスレなので(当然) C++ 文化が濃厚だから、
他(Java厨やC#厨のすくつ)でも聞いてみるといい。

(Java厨の所では「メソッドは final が基本って本当ですか?
C#厨の所では「sealed が基本って本当ですか?
と書けば、C++ でいう非 virtual が基本ですか?と聞いてるのとほぼ同じような意味になる)

色々な文化の人の意見を聞いて、自分で実践してみて、
自分が正しいと思ったものを選べばいいさ。

411 名前:デフォルトの名無しさん :03/01/10 02:00
言語仕様マンセーな連中にバカにされて終わりだろ
言語に強く依存した設計してるうちは仕方ないかもしれんけど

412 名前:デフォルトの名無しさん :03/01/10 02:11
JavaやC#はMethodTableのようなもので全てのメンバ関数を管理してるから、
virtualかどうかはパフォーマンスに関係ない。C++はそういうものとは違う。
非virtual関数はC関数のように直接callする。Cで理由もなく全ての関数に
関数ポインタを作って、それ経由で呼び出してるのと同じぐらい馬鹿げてる。
virtualは必要なところでだけ使うべき。

ただ、、、Cで書くほど最適化されている必要はないけど、VM上では遅すぎる。
こういうニーズってのがやっぱりあって、また設計上の柔軟性(いい加減さ)も
必要となれば、virtual多用も悪くないかもしれないとは思う。

413 名前:デフォルトの名無しさん :03/01/10 07:13
昨日の教訓。
暗黙のコピーコンストラクタでは、各メンバのコピーは
やっぱりコピーコンストラクタで行われる。代入(operator=())ではコピーされない。
つまり、「暗黙のコピーコンストラクタは、コピーコンストラクタしか呼ばない。」
「何だ当然じゃん」という意見もあるだろうが、バグって改めて実感。
これが昨日の教訓。

ポインタ型のメンバを持つデータ型をSTLコンテナへ突っ込む場合、
一応コンストラクタを再確認した方がよろしいですね。
「そのポインタの先は生きているか?」(藁
代入演算子は頑張ったんですけど、暗黙のコピーコンストラクタに関しては・・・片手落ちでした。
これが昨日の教訓。

414 名前:デフォルトの名無しさん :03/01/10 08:14
>>412
> JavaやC#はMethodTableのようなもので全てのメンバ関数を管理してるから、
> virtualかどうかはパフォーマンスに関係ない。C++はそういうものとは違う。
本気で言ってるのか?

415 名前:デフォルトの名無しさん :03/01/10 09:32
>>42
ん?おそらく伝わってないと思われ。
まず、普通、企業が内容証明で削除依頼を出すとき、
内容証明で名誉毀損の部分を削除しろって言うわけでしょ。
その時点で、ひろゆきは名誉毀損を知るから、削除義務が生じるって言いたいだけ。
内容証明が来る=名誉毀損でなくても削除する
とは俺は一言もいってないですよ。

416 名前:デフォルトの名無しさん :03/01/10 09:53
>>42
ん?おそらく伝わってないと思われ。
まず、普通、企業が内容証明で削除依頼を出すとき、
内容証明で名誉毀損の部分を削除しろって言うわけでしょ。
その時点で、ひろゆきは名誉毀損を知るから、削除義務が生じるって言いたいだけ。
内容証明が来る=名誉毀損でなくても削除する
とは俺は一言もいってないですよ。

417 名前:デフォルトの名無しさん :03/01/10 10:11
俺が言ってる前提が
内容証明=削除依頼になっていて、削除してほしいリストが書いてあるはず
だからおそらくかみ合ってないのだな。

内容証明が来て、名誉毀損箇所を削除してねって書いてあって、
それが名誉毀損だったら削除しなきゃダメよってことかな。

418 名前:デフォルトの名無しさん :03/01/10 10:46
裁判官は西村博之に自分の子供の心臓手術をさせて藪か層でないか確かめろ。

半ケツはそれからだ。

419 名前:デフォルトの名無しさん :03/01/10 11:27

実質的には上告はもう無理らしい。

うれしいなぁ。




420 名前:デフォルトの名無しさん :03/01/10 11:51
文字列 "sensor:10.00000, 20, 30, 40, 50.00000 ,60"
の各値を
配列 double sensor_data[6]
に格納できる関数とかってありますか?

421 名前:デフォルトの名無しさん :03/01/10 11:53
>>549
そうです・・・

422 名前:! :03/01/10 14:56
>>420
std::sprintf or std::istringstream
do yo?

423 名前:デフォルトの名無しさん :03/01/10 15:02
どよ?

424 名前:デフォルトの名無しさん :03/01/10 15:03
ここは排他的なボランティアですね。

425 名前:デフォルトの名無しさん :03/01/10 15:45
名前(アルファベット)五人分入力
         ↓
     辞書式に並び替える
         ↓
  "meido.doc"ファイルに書き込む
というプログラムを教えてください。
まじ困ってます。

426 名前:デフォルトの名無しさん :03/01/10 16:09
conservation!

427 名前:デフォルトの名無しさん :03/01/10 16:10
>>425
宿題スレいけ

428 名前:デフォルトの名無しさん :03/01/10 16:17
2

429 名前:デフォルトの名無しさん :03/01/10 16:18
マルチは放置しろ、と。

430 名前:デフォルトの名無しさん :03/01/10 16:33
これ解析してください。お願いします・・心から
if ( pix == NULL ) {
pix = new BYTE[dim_x*dim_y];
{BITMAPINFOHEADERinfoHeader;
int i;
if(pMapBits)delete pMapBits;
infoHeader.biSize = sizeof(BITMAPINFOHEADER);
infoHeader.biWidth = DIM_X;
infoHeader.biHeight = DIM_Y;
infoHeader.biBitCount = 8;
infoHeader.biPlanes = 1;
infoHeader.biXPelsPerMeter = 0;
infoHeader.biYPelsPerMeter = 0;
infoHeader.biClrUsed = 256;
infoHeader.biClrImportant = 0; // nColors;
infoHeader.biCompression = BI_RGB;
infoHeader.biSizeImage = DIM_X * DIM_Y;
int colorAlloc = 256 * sizeof(RGBQUAD); // size of color tables
int bitsAlloc = infoHeader.biSize + colorAlloc;//+ infoHeader.biSizeImage;
pMapBits = (LPBITMAPINFO)new BYTE[bitsAlloc];
memset(pMapBits,80,bitsAlloc*sizeof(BYTE));
pMapBits->bmiHeader = infoHeader;
LPSTR pColor = ((LPSTR)pMapBits + (WORD)(pMapBits->bmiHeader.biSize));
for (i = 0; i < 256; i++)
((WORD*)pColor)[i] = i;

431 名前:デフォルトの名無しさん :03/01/10 16:41
>>430
宿題スレいけ

432 名前:デフォルトの名無しさん :03/01/10 21:09
>412
それ以前に、virtual 関数だろうが型が明示的に決まってれば間接ジャンプに
ならんでしょ。

struct B { virtual void foo(); };
struct D : B { virtual void foo(); };

D d;
d.foo();  // これは直接ジャンプになる

virtual で間接ジャンプになるのはポインタや参照を使った場合だが、それって
同等のコードを仮想関数なしで書こうと思ったら、switch - case 使うことになる
だけ。どっちにしても必要なコストだよ。

433 名前:デフォルトの名無しさん :03/01/10 22:39
誰かtypeof作ってくれよ。

434 名前:デフォルトの名無しさん :03/01/10 22:39
質の低い書きこみを減らすのが趣旨です。

435 名前:デフォルトの名無しさん :03/01/10 22:47
この板、荒れなくなったね

436 名前:デフォルトの名無しさん :03/01/11 00:13
ZDNetは2chネタ好きだからな

437 名前:デフォルトの名無しさん :03/01/11 01:09
>>434
C++ Template 統合スレで目にしたような気がする。
GCC の typeof のようにはいってないけど

438 名前:デフォルトの名無しさん :03/01/11 01:17
>>412
いい加減さの為にvirtual多用したら、
保守が大変で再利用不可のクラスが出来るだけじゃない?

>>432
静的に使うなら、virtualにしなくても良いのでは?
virtualって、動的な使い方しないなら不要かと思うのだが。

ただ、必要なコストってのは同意。
むしろ、virtual使って動的にした方が、
コードがスッキリして保守が楽だと感じる。
ただし、設計がおかしくてvirtualの罠にハマって無い場合ね。


439 名前:デフォルトの名無しさん :03/01/11 01:23
> D d;
> d.foo();  // これは直接ジャンプになる
なにが直接ジャンプだ。頼むからウソ書かないでくれよ。 >>432


440 名前:デフォルトの名無しさん :03/01/11 01:37
コンストラクタのイニシャライザで
配列のデータメンバを初期化することはできますか?

class A{
bool flags[2];
A() : flags( { FALSE, FALSE }){}
};

を試しましたが、ダメでした。

441 名前:デフォルトの名無しさん :03/01/11 01:41
>>440
標準ではできない。g++の拡張使えばできるんじゃないかな。

442 名前:デフォルトの名無しさん :03/01/11 01:55
>>440
これじゃダメ?

class A{
bool flags[2];
A(BOOL bA, BOOL bB)
};

A::A(BOOL bA, BOOL bB){
flags[0]=bA;
flags[1]=bB;
}


A myA(FALSE,FALSE);


443 名前:デフォルトの名無しさん :03/01/11 01:57
>>439
g++だとテーブル経由にならないよ。
それともジャンプじゃなくてコールだって言いたかった?

444 名前:432 :03/01/11 01:59
>>439
論より証拠やね。
void test() { D d; d.foo(); }
これを gcc でコンパイルした結果。

.globl _test__Fv
  .def  _test__Fv; .scl  2; .type 32; .endef
_test__Fv:
  subl $28,%esp
  movl $__vt$1D,(%esp)
  addl $-12,%esp
  leal 12(%esp),%eax
  pushl %eax
  call _foo__1D
  addl $16,%esp
  addl $28,%esp
  ret

vptr 介さず、直で D::foo (_foo__1D) 呼んでるでしょ。

445 名前:デフォルトの名無しさん :03/01/11 02:04
それって最適化の範疇に含まれるの?それとも言語仕様的に
そうするのがいいっていう暗黙の了解みたいなやつ?

446 名前:デフォルトの名無しさん :03/01/11 02:08
>>445
コンパイルされた後のコードの話だから言語仕様とは無関係。


447 名前:デフォルトの名無しさん :03/01/11 02:10
>>446
いや、そういう仕様に含まれるのかどうかの話じゃなくて
他のコンパイラもそうなってるのかっていう話

448 名前:デフォルトの名無しさん :03/01/11 02:17
>>447
少なくともVC++6.0は仮想関数テーブル経由しないみたいだが。

449 名前:デフォルトの名無しさん :03/01/11 03:01
>>447
C++にはオブジェクトの仮想テーブルを直接変更する手段は用意されていないので
普通そうなる、でいい?

450 名前:デフォルトの名無しさん :03/01/11 03:23
>449
いや、そういう問題では…。

444 のコード見ても分かるように D d; の時点で vtbl ($__vt$1D) はインスタンス
に書き込まれている。

一般には仮想関数は vtbl->vptr 経由で呼ばれるんだが、変数の実際の型が
ソースコードを呼んで分かる場合 (D&, D* ではなく D そのものを使ってる時)
には vtbl->vptr を介さずに直に D::func() を呼ぶ。

って話でしょ。

451 名前:440 :03/01/11 03:25
>>441-442
ありがとうございます。素直に代入文で書こうと思います。
ちなみにg++でも無理でした。

452 名前:デフォルトの名無しさん :03/01/11 03:33
>>450
同じことだからもう少し考えてみそ。

453 名前:デフォルトの名無しさん :03/01/11 03:33
キタ━━━━━━(゚∀゚)━━━━━━!!!!! キタ━━━━━━(゚∀゚)━━━━━━!!!!!
現在ダウンロード数130000
2ちゃんねらー創作の作品
すみださつじんじけん
http://my.vector.co.jp/servlet/System.FileDownload/download/http/0/253012/pack/win95/game/avg/SUMIDA-Exe.LZH
過去ベクター1位
キタ━━━━━━(゚∀゚)━━━━━━!!!!! キタ━━━━━━(゚∀゚)━━━━━━!!!!!


454 名前:デフォルトの名無しさん :03/01/11 03:41
多胎がやっと理解できますたこうゆーことだったんですね

#include <cstdio>
class Juukan{public:virtual Juukan& operator=(int nani){return *this;}};
class Usi:Juukan{public:Juukan& operator=(int nani){printf("モッモォォオ〜〜\n");return *(Juukan*)this;}};
class Uma:Juukan{public:Juukan& operator=(int nani){printf("ヒッヒィィイン\n");return *(Juukan*)this;}};
class Hituji:Juukan{public:Juukan& operator=(int nani){printf("メェェェエエ〜〜\n");return *(Juukan*)this;}};
int main(){Juukan *p;
p=(Juukan*)new Usi;(*p)=1;delete(p);
p=(Juukan*)new Uma;(*p)=1;delete(p);
p=(Juukan*)new Hituji;(*p)=1;delete(p);}


455 名前:デフォルトの名無しさん :03/01/11 09:19
312 :ひろゆき ◆3SHRUNYAXA :03/01/10 19:59 ID:jWxHxvti
全部にいれてみた。

http://qb.2ch.net/test/read.cgi/accuse/1042131034/312

456 名前:デフォルトの名無しさん :03/01/11 09:20
クソスレは今から立てようと思ってるんだけど

457 名前:デフォルトの名無しさん :03/01/11 10:49
           ◎●●●●●◎
           ◎●ミ.|.|.|.|.|.|.|彡●◎
         ◎●ミ    口  彡●◎
         ◎●三  口 .| .|   三●◎
         ◎●彡   ノ └-.ミ●◎
          ◎●彡川.|.|.|.ミミ●◎
           ◎●●●●●◎
            __◎' ◎' ◎_
            |   友    |
            |   枝    |
            |   小    |
            |   P     |
            |   T     |
            |   A     |
           /7 ̄ ̄ ̄ ̄ ̄キヘ
          /7         キヘ
         /7           キヘ

458 名前:デフォルトの名無しさん :03/01/11 11:18
半島人に占領されたこの国での最後のフロンティアだったのに・・・

これで、レジスタンスの活動の場が一つ減った・・

459 名前:632 :03/01/11 11:35
>>444
それは同一ソースにすべてを書いたときのgccの最適化の結果。

ソースの書き方や、処理系、最適化などがそのような条件を満たさないと
「これは直接ジャンプになる」なんてこと、断言できないでしょ?

>>432 ではそんなこと、どこにも書いてないじゃん。

ここは特定の処理系がどのような実装をしているかのスレじゃないわけだから、
純粋に C++ の言語仕様などに関して、初心者があらぬ誤解をしないように書かないと...。

...と、いうことが言いたいんだがな。


460 名前:デフォルトの名無しさん :03/01/11 11:51
struct A
{
std::stringstream _Base;
typedef std::basic_ostream< char, std::char_traits<char> > _Myt;
_Myt& operator<<(wchar_t a){}
_Myt& operator<<(unsigned short a){}
};

wchar_t と unsigned short て区別できないのかな。

数字と文字で区別したいとき困る気がするのだが...。


461 名前:デフォルトの名無しさん :03/01/11 12:09
>>455
> それって最適化の範疇に含まれるの?

C++のクラスってコンパイル時に静的に決定するから、例の呼び出しは
直接コールにしてもvtbl経由でも結果は同じ。つか同じにならないと変。

直接コールにすることを最適化と呼ぶかどうかは
コンパイラ実装者の気分次第。

>>459
> それは同一ソースにすべてを

すべてって?
この例ではD::foo()の実装しか追い出せないと思うが、
D d; d.foo();
は常に直接コールにすることが可能じゃないか?

> 断言できないでしょ

おそらく皆々皆様方((c)沢村)が知りたいのは、
直接コールにすることが仕様上問題ないか、であって、
必ず直接コールになるかどうか、じゃないと思う。

462 名前:デフォルトの名無しさん :03/01/11 12:16
          ,,-'  _,,-''"      "''- ,,_   ̄"''-,,__  ''--,,__
           ,,-''"  ,, --''"ニ_―- _  ''-,,_    ゞ    "-
          て   / ,,-",-''i|   ̄|i''-、  ヾ   {
         ("  ./   i {;;;;;;;i|    .|i;;;;;;) ,ノ    ii
     ,,       (    l, `'-i|    |i;;-'     ,,-'"   _,,-"
     "'-,,     `-,,,,-'--''::: ̄:::::::''ニ;;-==,_____ '"  _,,--''"
         ̄"''-- _-'':::::" ̄::::::::::::::::;;;;----;;;;;;;;::::`::"''::---,,_  __,,-''"
        ._,,-'ニ-''ニ--''" ̄.i| ̄   |i-----,, ̄`"''-;;::''-`-,,
      ,,-''::::二-''"     .--i|     .|i          "- ;;:::`、
    ._,-"::::/    ̄"''---  i|     |i            ヽ::::i
    .(:::::{:(i(____         i|     .|i          _,,-':/:::}
     `''-,_ヽ:::::''- ,,__,,,, _______i|      .|i--__,,----..--'''":::::ノ,,-'
       "--;;;;;;;;;;;;;;;;;""''--;;i|      .|i二;;;;;::---;;;;;;;::--''"~
               ̄ ̄"..i|       .|i
                 .i|        |i
                 i|        |i
                 .i|          .|i
 キタ━━━━━━━━━ i|   (゚∀゚)   .|i ━━━━━━━━━━!!!
                .i|           |i
               .i|      ,,-、 、  |i
               i|      ノ::::i:::トiヽ、_.|i
           _,,  i|/"ヽ/:iヽ!::::::::ノ:::::Λ::::ヽ|i__n、ト、
     ,,/^ヽ,-''":::i/::::::::/:::::|i/;;;;;;/::::;;;;ノ⌒ヽノ::::::::::::ヽ,_Λ
     ;;;;;;:::::;;;;;;;;;;:::::;;;;;;;;:::/;;;;;;:::::::::;;;;;;/;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::::;;:;;;;:::ヽ

463 名前:デフォルトの名無しさん :03/01/11 13:03
フレンドは無理な設計変更に対応するための非常用という
認識で間違ってないですか?。今見てるソースは親クラスを
フレンドにしてたりしてわけわかめです。

464 名前:デフォルトの名無しさん :03/01/11 13:18
アフォにはその認識でいいのでは。

465 名前:デフォルトの名無しさん :03/01/11 13:20
>>463
非常用というより、必ずフレンドを使う場面はある。
+演算子の実装とか。
フレンドクラスはコンポジションを使って複数のクラスを協調動作
させ、なおかつカプセル化も維持したい場合よく使う。

466 名前:デフォルトの名無しさん :03/01/11 13:21
アフォでない人はどのような認識を持ってると??

467 名前:デフォルトの名無しさん :03/01/11 13:24
>>465
なるほど、勉強になりました。ありがとうございます。

468 名前:デフォルトの名無しさん :03/01/11 13:44
DMC貧相すぎ
iostream使えねえ

469 名前:デフォルトの名無しさん :03/01/11 15:25
>>422
さんきゅうです。
遅レスすまそ。

470 名前:デフォルトの名無しさん :03/01/11 15:34
2げっとさ

471 名前:デフォルトの名無しさん :03/01/11 15:41
半角板がおもしろい

472 名前:デフォルトの名無しさん :03/01/11 16:16
ぼんやりと思ったのだが、文字列をコードとして認識する機能ってC++にないのか?
ありゃ便利だと思うのだが。

473 名前:デフォルトの名無しさん :03/01/11 17:18
いばーる

474 名前:デフォルトの名無しさん :03/01/11 18:42
>いばーる
そりゃなんすか?関数?クラス?

475 名前:デフォルトの名無しさん :03/01/11 19:08
>>472
それは、実行ファイルにコンパイラを埋め込めといってるのか?

スクリプト系の言語だと eval() とかあるけど、コンパイラ言語だと自前で
マクロ言語を組み込むのが普通かと。yacc + lex 使えると幸せになれるぞ。

476 名前:デフォルトの名無しさん :03/01/11 19:23
文字列にマシン語ルーチンを入れてコールしれ。

477 名前:デフォルトの名無しさん :03/01/11 20:30
>476
例を

478 名前:デフォルトの名無しさん :03/01/11 23:36
ひろゆきの腐れチンコめ
氏ね

479 名前:デフォルトの名無しさん :03/01/11 23:38
まぢかよ。

480 名前:デフォルトの名無しさん :03/01/11 23:46
IP記録しても構いませんので、スレッドをもっと立てやすくしてください。

IPが記録されるような掲示板は匿名掲示板とはいえませんが、

スレッドが立てられないような掲示板はもはや掲示板ですらありません。


481 名前:デフォルトの名無しさん :03/01/11 23:47
文字列じゃないが構造体にマシン語ぶちこんでる例が見たければATLのソース。

482 名前:デフォルトの名無しさん :03/01/11 23:53
だいぶ昔とらわざコンピュータで「文字列のマシン語」見たいなやつがあったな。
普通にテキストファイルで開けるんだけど、実は実行形式みたいなやつ。

483 名前:デフォルトの名無しさん :03/01/12 01:04
>直接コールにすることが仕様上問題ないか、であって、
>必ず直接コールになるかどうか、じゃないと思う。
おっと、問題をすり替えないでくださいよ。

直接コールになるとは「断言できない」ってことを、
>>461 は自分から認めてしまいましたね。


484 名前:デフォルトの名無しさん :03/01/12 01:11
>>459
> ソースの書き方や、処理系、最適化などがそのような条件を満たさないと
> 「これは直接ジャンプになる」なんてこと、断言できないでしょ?
まぁ C++ の規格って、そういうもんだからな。

ただ「型が明示的に分かる場面では仮想関数でも直接コールされる」ってのは、
「inline と指定した関数はインライン展開される」のと同程度には、信用して良い
でしょ。

485 名前:デフォルトの名無しさん :03/01/12 01:15
>>483
おちつけ…

> 直接コールになるとは「断言できない」ってことを、
agree.

ただし、ポインタ・参照を介さずに仮想関数を呼び出す場合、呼び出す関数を
コンパイル時に確定できるってのは理論的に正しい。で、実際に最適化を有効
にしたにも関わらず、間接呼び出しにしてるコンパイラの実例が一つも挙がっ
てないのも確か。

後は「読んだ人間が自分で判断してくれ」で、良いんじゃないの?

486 名前:デフォルトの名無しさん :03/01/12 01:24
inline void somefunc(B* pB)
{
 pB->method();
}

foo() {
 D d;
 somefunc(&d);
}

これはどうだろう。

487 名前:デフォルトの名無しさん :03/01/12 01:33
>>486
君初心者だね。


488 名前:デフォルトの名無しさん :03/01/12 01:42
> 間接呼び出しにしてるコンパイラの実例

マイナーなC++コンパイラが列挙されるだけだと思う

489 名前:デフォルトの名無しさん :03/01/12 02:02
マイナーなコンパイラ一覧がみたいぞよ

490 名前:デフォルトの名無しさん :03/01/12 02:14
&マジでやったんかい。







俺もびびったよ。

491 名前:デフォルトの名無しさん :03/01/12 02:18
メルマガ転載きぼん

492 名前:デフォルトの名無しさん :03/01/12 02:18
>>489
UNIX WS 用のベンダ純正品とかだと、一般人は見たことない「マイナー」な
コンパイラだろうけど、最適化はしっかりしてるし…。Comeau とか Digital
Mars あたりは、ちょっとマイナーかねぇ。

ttp://www.research.att.com/~bs/compilers.html
ttp://www.parashift.com/c++-faq-lite/compiler-dependencies.html#faq-37.5

っつか ANSI C++ 規格をそれなりにでも満たすコンパイラを作るのって技術
的なハードルが高いから、その技術力を持ってしてあの程度の最適化を省
くってのは考えにくい気がする。

493 名前:デフォルトの名無しさん :03/01/12 09:49
結局、キラーは何もしなかったんだな、
まぁ、それでいいわけだが。


少し、ほんの少し、祭りを期待していた自分がいる(´・ω・`)

494 名前:デフォルトの名無しさん :03/01/12 09:51
こっちか。

他に、今、裁判中なのは何??



495 名前:デフォルトの名無しさん :03/01/12 11:19
ラミチンマ ワウゼゴゾ ベオ アチヨ ダ トキャエ
http://pc.2ch.net/test/read.cgi/prog/1042301604/l50

496 名前:デフォルトの名無しさん :03/01/12 11:33
>>483
なんだまだやってんのか、結論のみ言う。

型が静的に確定できる場合、例えば
obj.fun() (obj は参照ではないとする) とか pobj->class_name::fun() の時
仮想関数テーブルは参照されない。
あるいは virtual 非virtual を区別しないと言うべきか。
ただ単に無用であるばかりでなく、有害な場合さえある。
最適化は関係無い。

497 名前:デフォルトの名無しさん :03/01/12 11:43
>>496
> 仮想関数テーブルは参照されない。

されない?してはならない?するべきでない?しなくてもよい?

はっきりさせてくださいよ。

498 名前:デフォルトの名無しさん :03/01/12 11:50
>>497
そんなこと言う前に本を嫁よ。
言語仕様には関係ないってんだろ。コンパイラの実装にまかされてるよ。

499 名前:デフォルトの名無しさん :03/01/12 13:11
>>498
構ってクンを相手にするな。ほっとけ。

500 名前:デフォルトの名無しさん :03/01/12 13:20
pobj->class_name::fun() については規格書に
Explicit qualification with the scope operator suppresses the virtual call mechanism.
と書いてあるんだが、obj.fun() については記述を見つけられなかった。


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.