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


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

C++相談室 part38
501 名前:デフォルトの名無しさん :04/12/17 23:19:46
それ(戻り値最適化)が出来るのは
戻り値を return Matrix(...); と書ける場合のみ

502 名前:デフォルトの名無しさん :04/12/17 23:20:38
ちょっと訂正
×戻り値最適化が出来るのは
○戻り値最適化によって、コピー回数がゼロになるのは

503 名前:デフォルトの名無しさん :04/12/18 03:28:29
>502
名前付き戻り値最適化っていうのも規格上は許されていますけれどね.
実際にコンパイラが最適化出来るかどうかはまた別の問題ですが.

504 名前:デフォルトの名無しさん :04/12/18 07:29:39
>>501
明示的なキャストの評価結果は?

505 名前:デフォルトの名無しさん :04/12/18 07:30:22
>>501
オブジェクトを()ではなく=で初期化した場合は?

506 名前:501 :04/12/18 07:34:04
揚げ足取りうざい

507 名前:デフォルトの名無しさん :04/12/18 08:02:28
>>506
ちょっとしたタイポ類ではなく
言ってる内容の本筋の誤りを指摘したわけだが
逆切れか・・・

ま、そういう手合いならこちらもそのつもりでいようか

508 名前:デフォルトの名無しさん :04/12/18 08:57:54
>>504=>>505=>>507はトリップ付けてね

509 名前:504=505=507 ◆dGkqy8VIyg :04/12/18 09:05:50
すまんかった

510 名前:デフォルトの名無しさん :04/12/18 09:24:35
509は俺じゃない
ま、「そーゆー手合い」のすることですから (プ

511 名前:デフォルトの名無しさん :04/12/18 09:27:03
(何一人で熱くなってるんだろ…)

512 名前:デフォルトの名無しさん :04/12/18 09:29:54
ナニこのヒト?
って感じ。

513 名前:デフォルトの名無しさん :04/12/18 09:38:02
最適化の話はどうした?
ぐうの音も出ないのか

ま、そーだろな (プ

514 名前:デフォルトの名無しさん :04/12/18 09:54:18
ぐぅ〜



( -Д-)あ〜腹減った…

515 名前:デフォルトの名無しさん :04/12/18 13:46:52
二次元配列を動的にメモリ確保するにはどうすればいいんでしょうか。

int xsize = 100;
int ysize = 100;
int ** array = new int[xsize][ysize];

では駄目でした。

516 名前:デフォルトの名無しさん :04/12/18 13:57:53
>>515 Ruby!

517 名前:デフォルトの名無しさん :04/12/18 13:58:28
>>515
こうすればいいけど、std::vectorを使うほうが楽。
int x = 100;
int y = 100;
int ** array = new int*[x];
array[0] = new int[x * y]
for (int i = 1; i < x; i++)
  array[i] = array[0] + i * y;

delete[] array[0];
delete[] array;



518 名前:デフォルトの名無しさん :04/12/18 15:12:29
>>517 は二次元配列とは呼ばない。ポインタの配列。


519 名前:デフォルトの名無しさん :04/12/18 15:24:17
>>515
char (*p)[50];
p = new char[100][50];


520 名前:デフォルトの名無しさん :04/12/18 16:09:58
MFCのダイアログベースアプリ作ってます。
CStringの変数の中に半角スペースが入っているか確かめるにはどうすればいいでしょうか。
全角スペースは関係なしです。

たとえば、CString AAA; の中身が
"c:\\program files\\test\\test.exe"
これならNG
"c:\\testapp\\test\\test.exe"
これならOK
という具合にしたいです。

521 名前:デフォルトの名無しさん :04/12/18 16:18:01
>>520
AAA.Find(' ')じゃだめか?
ついでにGetShortPathNameも調べてみな

522 名前:デフォルトの名無しさん :04/12/18 16:18:28
>>520
スレ違い。

523 名前:デフォルトの名無しさん :04/12/18 18:42:32
どなたか>>519をかみ砕いて説明していただけないでしょうか…
char(*)[50]型のpを宣言しているのは何となく分かるのですが

524 名前:デフォルトの名無しさん :04/12/18 18:50:51
>>523
char a[100][50]; は char b[50]; が100個繋がったもの。
つまりchar b[50]; がarray_50という型だとすると array_50 a[100]; という風に考えることができる。
>>519に当てはめると
array_50 *p;
p = new array_50[100];
となるから俺もわかんなくなってきたから自分で考えてくれ。

525 名前:デフォルトの名無しさん :04/12/18 18:59:49
new char[100] はcharが100個連続したものを返してくるから
charへのポインタで受ける。
new char[100][50] はchar[50]が100個連続したものを返してくるから
char[50]へのポインタで受ける。


526 名前:デフォルトの名無しさん :04/12/18 19:13:05
>>524,525ありがとうございます。
やっていることはわかるのですがpの宣言の仕方にひっかかっています。
もっと調べてみます。

527 名前:デフォルトの名無しさん :04/12/18 19:16:27
>>519
それだと

int x = 100, y = 100;
char (*p)[y];
p = new char [x][y];

これができないと思うんだけど

528 名前:デフォルトの名無しさん :04/12/18 20:09:53
そもそもyの部分がコンパイル時に決まらないと2次元配列は無理だな。

529 名前:デフォルトの名無しさん :04/12/18 20:21:38
>>517
でええやん。

530 名前:& ◆QWv3R1XL8M :04/12/18 21:08:56
15日でC++をSTL、テンプレまで使えるようになる修行方法教えてください。


531 名前:デフォルトの名無しさん :04/12/18 21:10:33
>>530
まずはペンキ塗りからだ。終わったら床掃除。

532 名前:デフォルトの名無しさん :04/12/18 21:15:09
便所掃除も忘れるなよ

533 名前:デフォルトの名無しさん :04/12/18 21:25:56
>>529
>>517 は論外

534 名前:デフォルトの名無しさん :04/12/18 21:48:29
ある動的に生成されたクラスが、他のポインタに参照されている
、あるいはされていないということを実行中に知ることは出来ますか?

class CA{...}:

int main(void){
CA pca = new CA();
void* = pca;
if(pca->参照されているか否か())
{
cout<<"参照されてない"<<endl;
}

}

535 名前:デフォルトの名無しさん :04/12/18 21:52:28
>>534
言わんとすることはわかるが、めちゃくちゃだな。
答えとしてはできない。

536 名前:デフォルトの名無しさん :04/12/18 21:58:32
多分求めたいものはshared_ptr

537 名前:デフォルトの名無しさん :04/12/18 22:00:45
shared_ptr<CA> pca(new CA);
shared_ptr<CA> pca_p;

pca_p = pca;

if (pca.use_count() == 1) {
 cout << "参照されていない" << endl;
}

538 名前:デフォルトの名無しさん :04/12/18 22:01:03
>535
すまん、C++は余り知らんのだ。

C++でJAVAのGCみたいなことできないかなと思ったが、
やっぱ素直にスマートポインタ使えと言うことなのかな

539 名前:デフォルトの名無しさん :04/12/19 03:01:55
>534
weak_ptr?

540 名前:362 :04/12/19 03:28:51
>538
Boehm GCはどうよ?

541 名前:デフォルトの名無しさん :04/12/19 05:03:53
月狼タンハァハァ

542 名前:デフォルトの名無しさん :04/12/19 05:11:53
うちの大学の講師が変数は全て関数の最初で宣言した方が
わかりやすいって言っているんですが、これってどうなのでしょうか…?

543 名前:デフォルトの名無しさん :04/12/19 06:16:21
ただ単にCに慣れてるだけだろ

544 名前:デフォルトの名無しさん :04/12/19 07:58:31
>>542
(;´Д`)
わかりやすいかどうかは別にして、無駄にコンストラクタが呼ばれることが増えるな。

545 名前:デフォルトの名無しさん :04/12/19 08:37:59
>>542
関数の最初ではなくスコープの最初というのなら、わからんでもない。
ソースをCに移植した時、泣きを見ずにすむのは確かだ。

546 名前:デフォルトの名無しさん :04/12/19 08:45:57
>>545
>ソースをCに移植した時
そんなことするか?
するとしたらそれこそ変数の宣言位置の問題なんかかわいいもんだろう。

547 名前:デフォルトの名無しさん :04/12/19 10:08:33
>>542
そのうち、

メンバ関数を使うと処理が分散してわかりにくくなるので禁止
アクセスしやすいようにメンバ変数はグローバルにする
#define TRUE 1

などと言い出すに違いない


548 名前:デフォルトの名無しさん :04/12/19 10:13:30
>ソースをCに移植

extern "C"

549 名前:デフォルトの名無しさん :04/12/19 10:19:31
>>545
現実問題としてC++で構築されたものをCしかない環境へ移植しなければならないって案件見たことないんだけど、なんか事例ある?
よほど小さい簡易なコードならわからんでもないんだけど。


550 名前:デフォルトの名無しさん :04/12/19 10:39:28
>>548

551 名前:デフォルトの名無しさん :04/12/19 10:55:08
Cocoaアプリへの移植とか?
Mac使ったことないから良く知らないけど

552 名前:デフォルトの名無しさん :04/12/19 13:22:33
>>547
> #define TRUE 1
これの笑いどころが理解出来ない。

553 名前:デフォルトの名無しさん :04/12/19 13:28:31
if(strcmp(unko, geri) == TRUE) goto 552;

554 名前:デフォルトの名無しさん :04/12/19 13:35:11
>>552

555 名前:デフォルトの名無しさん :04/12/19 14:08:52
>>553
ワロタ

556 名前:デフォルトの名無しさん :04/12/19 14:24:18
>>553-555の笑いどころが理解できない

557 名前:デフォルトの名無しさん :04/12/19 19:26:18
>>556の笑いどころが理解できない

558 名前:デフォルトの名無しさん :04/12/19 19:37:40
void func()
{
return void;
}

int main()
{
func();
}

結果:コンパイルエラー
結論:C++はvoidを返値として使えるというのは嘘です。

559 名前:デフォルトの名無しさん :04/12/19 19:39:13
int func()
{
return int;
}

int main()
{
func();
}

結果:コンパイルエラー
結論:C++はintを返値として使えるというのは嘘です。


560 名前:デフォルトの名無しさん :04/12/19 19:58:40
( ゚д゚)ポカーン

561 名前:デフォルトの名無しさん :04/12/19 20:02:38
m9(^Д^)プギャー

562 名前:デフォルトの名無しさん :04/12/19 20:05:54
>>558-559
すれ違い
http://pc5.2ch.net/test/read.cgi/tech/1101931660/

563 名前:デフォルトの名無しさん :04/12/19 20:09:10
>>558
観測対象の選択を誤っている

564 名前:デフォルトの名無しさん :04/12/19 20:22:10
なんとなくぬるp

565 名前:デフォルトの名無しさん :04/12/19 20:24:09
main()
{
char a;

(int)a = 0;
}

結果: コンパイルOK
結論: 標準変換の結果は左辺値であるというのは本当です。

566 名前:デフォルトの名無しさん :04/12/19 20:38:41
>>565
error出たぞ

567 名前:デフォルトの名無しさん :04/12/19 20:56:28
test.cpp(5) : error C2106: '=' : 左のオペランドが、左辺値になっていません。
test.cpp(6) : warning C4508: 'main' : 関数に戻り値の型が指定されていません。戻り
値を void 型と見なします。


568 名前:デフォルトの名無しさん :04/12/19 21:15:30
リソースファイルの書き方が詳しく乗ってるサイト知りませんか?
検索したのに見つかりません

569 名前:デフォルトの名無しさん :04/12/19 21:18:46
>>568
リソースファイルってもいろいろあるわけなんだが…

570 名前:568 :04/12/19 21:23:22
bcc + winAPI
のです。
英語出来ないので日本語のページでお願いします

571 名前:デフォルトの名無しさん :04/12/19 21:51:44
英語できないならプログラミングも止めたら?

572 名前:デフォルトの名無しさん :04/12/19 21:54:10
>>571
うっせー馬鹿。シネヨ屑

573 名前:デフォルトの名無しさん :04/12/19 21:56:44
>>572
人間やめたら?

574 名前:デフォルトの名無しさん :04/12/19 22:01:02
>>570
http://www.google.co.jp/search?hl=ja&q=%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88&lr=lang_ja

575 名前:デフォルトの名無しさん :04/12/19 22:01:05
>>517ってdelete[]時にxが必要無いようにするアプローチだと思いますが
これって三次に拡張できますか?

576 名前:デフォルトの名無しさん :04/12/19 22:08:25
>>575
そりゃできるけど、面倒くさい。vector使え。

577 名前:デフォルトの名無しさん :04/12/19 22:09:58
boost::multi_arrayの方がいいかと
メモリを連続領域に確保してくれるし

578 名前:デフォルトの名無しさん :04/12/19 22:18:43
>>573
    ・ ・ ・ ・ ・ ・
俺は人間をやめるぞぉぉ JoJoォォォ

579 名前:デフォルトの名無しさん :04/12/19 22:23:15
>>576,577
どうもです。
vector使ってますが、517の手法は初めて見たもんでおもしろくて。
やれるのであれば、やってみます。

580 名前:568 :04/12/19 22:51:23
>>574さん
ありがとうございます
調べるキーワードが、見当違いだったみたいです。
>>572さん、落ち着いて

581 名前:デフォルトの名無しさん :04/12/20 02:50:06
ISO/IEC 14882:1998とISO/IEC 14882:2003でどこが変わったのか書いてある資料ってありませんか?英語でもかまいません。
規格票には変更点は書いてないようなんですが、あの量を読み比べるのはさすがにつらいので。

582 名前:デフォルトの名無しさん :04/12/20 03:58:58
>581
1998から2003への変更は正誤表(Technical Corrigenda, TC)の追加なのでそれを追えば良いと思います.
言語のコアな部分に関しては
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#TC1%20Status
で"Status: TC1"となっているもので,標準ライブラリに関しては
http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html
で"Status: TC"となっているものがそれに当たります.
上のリストには2003以降で新たにTCとなったものも入ってるかも知れません.

583 名前:デフォルトの名無しさん :04/12/21 11:12:04
C++でビットマップなどの画像表示とかってできるのでしょうか?

584 名前:デフォルトの名無しさん :04/12/21 11:12:55
こりゃまた抽象的な質問ですね

585 名前:デフォルトの名無しさん :04/12/21 11:16:18
質問させてください、仮想関数を持つクラスから菱形継承した場合、
普通のメンバの曖昧さの解決はできると思いますが、仮想関数は
どうなるのでしょうか。試してみたのですが仮想関数の継承でエラー出ました。
以下のようなパターンです↓
class A {
  int i;
  virtual void Hoge(void){i = 0;}
};

class B : virtual public A {
  void Hoge(void){i = 1;}
};

class C : virtual public A {
  void Hoge(void){i = 2;}
};

class D : public B, public C {
};

この場合DにHogeを書けばコンパイルは通りますが、
例えばDでBのHogeを使いたいなんて思ったときどうすればよいのでしょうか?
「多重継承なんか使うな」とかは無しでお願いします

586 名前:デフォルトの名無しさん :04/12/21 11:26:52
>>584
できる

587 名前:586 :04/12/21 11:27:27
みす。
>>583

588 名前:デフォルトの名無しさん :04/12/21 11:28:48
>>585
B::Hoge();

589 名前:デフォルトの名無しさん :04/12/21 11:53:24
レスありがとうございます、すみません仮想継承だということを
書き忘れてました(´・ω・`) (i と Hoge()の実体を一つにしたいわけです
DでHogeを実装しない場合(585のコードそのままだと)
「error C2385: 'C::Hoge' の派生があいまいです。
warning C4385: 可能性 : 'Hoge' がベース 'A' of class 'C' にあります。
warning C4385: または : 'Hoge' がベース 'B' of class 'C' にあります。」
と出ました(´・ω・`) (VC
DにBと同じ内容のHogeを書けば済むのですが、
そんなことしなくても済む方法があればなぁと思いました。

590 名前:デフォルトの名無しさん :04/12/21 12:02:31
class D : public B, public C {
void Hoge(){ なんか }
void Piyo(){ B::Hoge(); }
}
って意味じゃないの?

591 名前:デフォルトの名無しさん :04/12/21 12:04:10
クラスの静的メンバ変数を、インラインで定義することはできないでしょうか?
↓こんな感じにやりたいのですが。
class Hoge {
public:
  static const char* name = "ほげ太郎";
};

592 名前:デフォルトの名無しさん :04/12/21 12:07:02
>>591
できない

593 名前:585 :04/12/21 12:09:50
なるほど!理解力なくてすみませんでした_| ̄|○
コード量も無駄に増えなくて済みますね(菱形継承の時点でアレだけど)、
>>588 >>590 助かりました、どうもありがとうございました!

594 名前:デフォルトの名無しさん :04/12/21 12:11:56
>>591
環境依存でいいのなら__declspec(selectany)

595 名前:デフォルトの名無しさん :04/12/21 12:53:47
C++で自作した汎用的なソースが増えたので
自作ライブラリを構築しようかと思っておりますが
名前とか、ファイルのフォルダ分けとかの形式
悩んで作れません。
名前空間使うとdoxygenのhtmlヘルプファイルがわかりにくくなるし
かといって無しだと、何かとぶつかる可能性もあるし(CThread等)
クラス名のプリフィックスにライブラリ名(ここでは、GDKとする)
GDKThreadとつけても、なんかしっくりこない。
3日後には、ププーGDKなんて何かっこつけてんですか?
どうせラッパーでしょ。と自己嫌悪

あと、フォルダ分類。
Graphis/Sound/Input/Window/...等分類しようとしていますが
分類しづらいファイルタイプもあったりするし
#include "Graphics/Texture.h"みたいにわざわざ改装指定めんどいし、
かと言って、全部同じフォルダだと150以上のファイルがごっちゃになるわけで。


自分の優柔不断さに呆れてきました。
ガツンと何か言ってくれ



596 名前:デフォルトの名無しさん :04/12/21 13:16:54
>>595
公開するインクルードファイルが何でそんなにたくさんになるのやら。
必要最低限だけ公開するようにしたら?
#まさか1クラス1ファイル主義じゃあるまいし。

597 名前:デフォルトの名無しさん :04/12/21 13:59:41
>>595
名前空間を使え
ディレクトリは細分しちゃえ

迷ったら「boost もそうしてるし」と念じる。

598 名前:デフォルトの名無しさん :04/12/21 15:16:28
>>596
主義じゃないけどたまに1クラス1ファイルあるかも。

Graphics関連が
Mesh.Texture,Light,Fog,Camera,Sharder,...等たくさんあったり
ひとまとめにした方がいいですかね。
でも、モデルファイル(XFile)が複雑だ
あああ

>>597
boostの構造調べてみます。
みました。細分してみたー。
yaneSDK3みたいになってきた。(´・ω・`)これでいいのかな。

まあああ
整理整頓できない子ですみません。

とりあえず、名前空間は導入
名前空間使う言語って少数派じゃない?
きもいけど慣れたら大丈夫かな

こうなったら、たくさんC++機能利用してやるか。

古い人に教わってたから
変な呪いがかかってるんだ。
C依存考慮、固定少数の呪縛や、速度、容量(数KByte)気にしすぎたりとか。


599 名前:デフォルトの名無しさん :04/12/21 16:07:41
Javaのパッケージは高度な名前空間と言えなくもない。

600 名前:デフォルトの名無しさん :04/12/21 17:05:11
パッケージが羨ましい

namespace MyName{

   伺か

}

閉じるのめんどくさい。

601 名前:デフォルトの名無しさん :04/12/21 17:09:12
伺かかよ

602 名前:デフォルトの名無しさん :04/12/21 17:16:51
deleteすんのめんどくさい

603 名前:デフォルトの名無しさん :04/12/21 17:32:30
そこでD言語ですよ

604 名前:デフォルトの名無しさん :04/12/21 17:38:16
そこでBoehmですよ

605 名前:デフォルトの名無しさん :04/12/21 17:52:32
j a v a

606 名前:デフォルトの名無しさん :04/12/21 18:00:53
BCBからSQLiteを操作するのに参考になるサイトを教えてもらえませんか?

607 名前:デフォルトの名無しさん :04/12/21 18:19:14
たぶんスレ違い
Builderスレ

608 名前:デフォルトの名無しさん :04/12/21 18:19:53
C++Builder相談室 Part12
http://pc5.2ch.net/test/read.cgi/tech/1099238936/

609 名前:デフォルトの名無しさん :04/12/21 18:46:13
ひまわり言語

610 名前:デフォルトの名無しさん :04/12/21 23:55:08
>>596
そんなもん人の勝手

611 名前:デフォルトの名無しさん :04/12/22 00:08:07
>>600
namespace MyName{

   伺か

\e

612 名前:デフォルトの名無しさん :04/12/22 00:37:03
C以外の何か with class

                                  \e

613 名前:デフォルトの名無しさん :04/12/22 00:55:29
今初めてえんい〜の意味を知った
そのままだったのね

614 名前:デフォルトの名無しさん :04/12/22 02:07:41
C with classがあるのにD without classがないのはなぜだろう

615 名前:デフォルトの名無しさん :04/12/22 03:15:45
>>613
そのまま??
わからんおせーて

616 名前:デフォルトの名無しさん :04/12/22 08:49:18
>>614
みんな君ほど頭がヒマじゃないからだと思う。

617 名前:デフォルトの名無しさん :04/12/22 20:12:09
>C with classがあるのに

ねえよ、少なくとも C++ の系譜上にそんなのは
禿のサイトでも調べてからもの言えよまったく

618 名前:デフォルトの名無しさん :04/12/22 20:23:50
C with class 696件
http://www.google.co.jp/search?num=50&hl=ja&newwindow=1&c2coff=1&q=%22C+with+class%22&lr=

C with classes 4,880件
http://www.google.co.jp/search?num=50&hl=ja&newwindow=1&c2coff=1&q=%22C+with+classes%22&lr=

619 名前:デフォルトの名無しさん :04/12/22 21:35:17
STLのvectorコンテナについてわからないことがあるのですが

int型を格納する場合は
vector<int> array;
int data;
ary.push_back(data);
のように単純ですが

自作のクラスを格納する場合は
vector<JisakuClass> array;
JisakuClass *aaaa = new JisakuClass;
ary.push_back(*aaaa);

この場合は2行目のnewで確保したメモリは
ary.clear();
などしたときにSTL側で開放処理をしてくれるのでしょうか?
それとも自分で開放しなければいけないのでしょうか?自分で開放するのでしたら
どのタイミングで開放すればいいのでしょう・・・

vector<JisakuClass> array;
JisakuClass data;
ary.push_back(data);

そしてこのようにした場合、dataがスコープ外にでて消滅した場合でもvector内のデータは大丈夫なのか
その辺の関係がわかりません
簡単にでもいいので助言をくださいませ


620 名前:Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>> C++ :04/12/22 21:43:47
>などしたときにSTL側で開放処理をしてくれるのでしょうか?
いいえ。
>それとも自分で開放しなければいけないのでしょうか?
はい。
newによって割り当てられたオブジェクトへのポインタがコンテナに格納されている場合は
自分で全部deleteしてまわる必要があります。

>自分で開放するのでしたら
コンテナを破棄する前に自分で解放する必要があります。

>そしてこのようにした場合、dataがスコープ外にでて消滅した場合でもvector内のデータは大丈夫なのか
大丈夫じゃありません。

>簡単にでもいいので助言をくださいませ
see also boost::shared_ptr

621 名前:デフォルトの名無しさん :04/12/22 22:00:41
>>619
push_back()でpushされるJisakuClassのオブジェクトは、JisakuClassのコピーコンストラクタ
によって生成されたオブジェクトです。
これはstd::vectorのclear()時にJisakuClassのデストラクタを呼び出してくれますが、元々
newで確保した方のオブジェクトはそのままです。
push_back()でstd::vector()に入れられるオブジェクトと、newで生成したオブジェクトは別の
物である事を理解しましょう。

622 名前:デフォルトの名無しさん :04/12/22 22:21:22
619です

あくまでvectorコンテナに格納されるものはコピーコンストラクタによって
作成されたオブジェクトであって、コピー元のデータは自分で処理をする

vectorにクラスを格納する場合、STLが開放処理をしてくれる
vectorにクラスへのポインタを格納する場合、clearするまえに自分で開放する

要約するとこういうことになるのでしょうか

もっと勉強しよう・・・( ´・ω・`)

623 名前:デフォルトの名無しさん :04/12/22 22:21:44
お礼をわすれてました。
ありがとうございます


624 名前:デフォルトの名無しさん :04/12/22 22:26:27
>>622
push_bnack()の実現方法によっては、コピーコンストラクタではなくて代入演算子
で書かれているかもしれないので、一応両方用意しておくのが鉄則。

と言っても、クラス内部でnew/deleteするようなクラスでないと必要ないがな。

625 名前:デフォルトの名無しさん :04/12/22 22:33:23
>>619
オブジェクトの生成、解放はSTLコンテナにすべて一任するのが楽。
だから、newしたものを突っ込むんじゃなくて値をそのまま突っ込むべし。

626 名前:デフォルトの名無しさん :04/12/22 22:33:53
>>620の痛さが光るな。氏んでいいよw

>newによって割り当てられたオブジェクトへのポインタがコンテナに格納されている場合は
>自分で全部deleteしてまわる必要があります。

vector<JisakuClass> array;って明記してあるのに、
勝手にvector<JisakuClass*>の話に勘違いした挙句

>>そしてこのようにした場合、dataがスコープ外にでて消滅した場合でもvector内のデータは大丈夫なのか
>大丈夫じゃありません。

100%ウソ回答ww

vector<JisakuClass> array;

{
  JisakuClass data;
  array.push_back( data );//ここでdataのコピーがarrayに追加される
}//ここでdataが破棄される

arrayに入るのはdataのコピーなので、dataが破棄されても全然平気です。


627 名前:デフォルトの名無しさん :04/12/22 22:35:21
変なのがいるな。

628 名前:デフォルトの名無しさん :04/12/22 22:35:27
幸いnew/deleteは使っていない単純なクラスなので
デフォルトのコピーコンストラクタ(というか無し)で
問題なさそうです

もしクラス内部にまた別のvectorコンテナとmapコンテナが入っている場合は
特殊なことが必要なのでしょうか・・・?



629 名前:デフォルトの名無しさん :04/12/22 22:37:49
何も必要ありません。

630 名前:デフォルトの名無しさん :04/12/22 22:40:29
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> C++
とか書いている馬鹿がいるスレはココですか?

631 名前:デフォルトの名無しさん :04/12/22 22:41:31
rubyユーザって痛い人が多いの?

632 名前:デフォルトの名無しさん :04/12/22 22:45:03
>>626
俺も>>620のような内容を書きかけて、>>619をよく読んで「オブジェクトへのポインタ」の問題じゃ
なかったから投稿やめたのに。

>>628
>>629さんが答えているけど、コンテナがデータメンバなら必要ない。但し、コンテナへのポインタ
だと代入演算子とコピーコンストラクタが自前で必要になる。

633 名前:デフォルトの名無しさん :04/12/22 22:51:16
>>631
まぁ、教祖が痛いから。

634 名前:デフォルトの名無しさん :04/12/22 22:55:23
619です。

コピーされると思っていなかったため最初の質問分が既にトンチンカンでした
ごめんなさい

動的確保したメモリなどを使っていると、コピーしたときに
コピー先とコピー元でポインタがかぶるためコピーコンストラクタで
自分で確保しなおしてあげることが必要ということでしょうかね

625さんがおっしゃられているように、クラスもクラスの内部も
すべてnew/delete等を使わない設計のほうが楽チンなので
そうすることにします。

教えてくださったみなさま助かりました(`・ω・´)

635 名前:デフォルトの名無しさん :04/12/22 23:02:39
>>634
そそ。領域がかぶると、一つの動的に確保したデータメンバを書き換えただけですべてのその
クラスのデータメンバが書き換わってしまうだけでなく、多重deleteによりプログラムが不正終了
する原因になるからタブーなのね。

コピーコンストラクタと代入演算子で、動的なデータメンバの中身も自分でコピーしてやる事に
より、それぞれが別々の実体を持つようになり、そのような問題はなくなる。

636 名前:デフォルトの名無しさん :04/12/22 23:02:42
STLコンテナにポインタを格納するのは主に継承によるポリモーフィズムを
使うときなど。

637 名前:デフォルトの名無しさん :04/12/22 23:06:16
んで、ついつい面倒になるのでboost::shared_ptrを使いたくなるけど、そうするってえと
std::mem_fun()が使えなくなるから、boost::bindやboost::mem_fnを使うようになり、
ますますboostにはまっていくという罠。

638 名前:デフォルトの名無しさん :04/12/22 23:11:38
const_castの挙動が理解不能な件について

#include <iostream>
using namespace std;
int main()
{
const int a=100;
int *pa=(int *)&a;
*pa=200;
cout<<&a<<" "<<pa<<endl;
cout<<a<<" "<<*pa<<endl;
return 0;
}

実行結果
0013FED4 0013FED4
100 200

なぜですか。

639 名前:638 :04/12/22 23:13:52
あ、const_cast使ってなかった。
int *pa=const_cast<int *>(&a);
としても同様。
動作確認はVC++.net2003で。

アドレスが同じなのになぜ値が違うんだ……

640 名前:デフォルトの名無しさん :04/12/22 23:14:37
>>636
継承によらないポリモーフィズムってあるんですか?

641 名前:デフォルトの名無しさん :04/12/22 23:18:54
>>640
一言多い天の邪鬼め。

642 名前:638 :04/12/22 23:19:00
*((int *)&a) と *((const int *)&a) の値が違うらしい。ますます理解不能

643 名前:デフォルトの名無しさん :04/12/22 23:20:43
const_castを嬉々として使う奴を初めて見た

644 名前:デフォルトの名無しさん :04/12/22 23:21:28
>>640
テンプレートや関数オーバーロードだって広義のポリモーフィズム。

645 名前:デフォルトの名無しさん :04/12/22 23:22:16
>638
ローカルなconst valueが定数に最適化されるからでしょ。
実体を伴う必要はないから。
*(int *)&a も、中身はただのaであることがコンパイラには分かるから。

646 名前:デフォルトの名無しさん :04/12/22 23:22:51
const intの方は定数リテラル的に扱われてるのかもね。
だめじゃんw

647 名前:デフォルトの名無しさん :04/12/22 23:24:22
ていうかconst_castっていつ使うの?元々constにしなかったら
いいだけじゃないの?と燃料投下。

648 名前:デフォルトの名無しさん :04/12/22 23:26:25
こちらへどうぞ。
【C++】 const だけでメシが3杯食えちゃうスレ
http://pc5.2ch.net/test/read.cgi/tech/1078193971/l50


649 名前:デフォルトの名無しさん :04/12/22 23:27:28
>>647
じゃなくて、static_cast、reinterpret_castと分類してしまったから、必然的にconst_cast
が必要になったんだろ。
dynamic_castはC++特有の物だから別格。

650 名前:デフォルトの名無しさん :04/12/22 23:31:10
>>649
必然的にってのを詳しく

651 名前:デフォルトの名無しさん :04/12/22 23:32:49
で、10種類はまだですか?

652 名前:デフォルトの名無しさん :04/12/22 23:34:29
既存のCのキャストの代用として、static, reinterpret, dynamicを作ったけど、
これらのキャストのどれにもconst hoge => hoge の変換はしっくり来ない。
だからconst_castが導入された、と>649は言いたいのではないかと。

653 名前:デフォルトの名無しさん :04/12/22 23:34:56
スレ違い

654 名前:653 :04/12/22 23:35:55
ごめん

655 名前:デフォルトの名無しさん :04/12/22 23:38:17
mutable

656 名前:638 :04/12/22 23:45:35
なるほど、最適化されて実行時にはすでに定数、と……
参考になったトンクス

657 名前:デフォルトの名無しさん :04/12/22 23:49:09
いや、目の付け所は悪くないんだけどね・・・
ローカル変数なんだし、ポインタ参照されてる時点で
最適化をやめるぐらいのココロイキがほしいところだ

658 名前:デフォルトの名無しさん :04/12/22 23:49:26
>>656
そしてまた、規格票を確認もせずに与太話を強固にプリンティングされたアフォが1匹増えたわけか

undefined hehavior
unspecified behavior
implementation defined behavior
well formed
ill formed

659 名前:デフォルトの名無しさん :04/12/22 23:50:55
>>658
そういうチミは、今回のconst_castの件はセクションどこなのか即答できるのかね。
俺は探してる所だ。

660 名前:デフォルトの名無しさん :04/12/22 23:51:45
>>652
C++になってconstポインタからポインタへの変換を廃止するか、
reinterpret_cast扱いにするかって選択肢もあったような気がするわけよ。

661 名前:デフォルトの名無しさん :04/12/22 23:53:52
>>659
§5.2.11.7だと思うが。
undefined behavior。つまり未定義。

662 名前:デフォルトの名無しさん :04/12/22 23:54:44
>>661
参りました。師匠と呼ばせて下さい。

663 名前:デフォルトの名無しさん :04/12/22 23:54:54
>>659
は? それは有料です
教えてくれそうな会社をディレクトリで探して聞いてみて下さい
もしかして、私が答えてるかも知れませんね

664 名前:デフォルトの名無しさん :04/12/22 23:55:23
>>662
いや、君のような出来の悪い弟子は(゚听)イラネ。

665 名前:デフォルトの名無しさん :04/12/22 23:59:37
>>664
Ruby最高?

666 名前:デフォルトの名無しさん :04/12/24 11:52:17
で、プリンティングって何?

667 名前:デフォルトの名無しさん :04/12/24 18:52:20
洋菓子の一種

668 名前:デフォルトの名無しさん :04/12/24 19:07:24
私はライスプディングがどうしても食べられないんだ。

669 名前:デフォルトの名無しさん :04/12/24 19:21:45
俺も…なんかぐちょぐちょして甘くて気持ち悪い

670 名前:デフォルトの名無しさん :04/12/24 20:23:03
イギリス行ってM&Sあたりで適当なケーキ類買ってみれ。

日本で売ってるライスプディングなんてまだぬるかったと思い知らされるから。。

671 名前:デフォルトの名無しさん :04/12/24 21:10:05
イギリスで食っていいのはフィッシュアンドチップスと中華とイタリアンとマクドナルドだけだ。

672 名前:デフォルトの名無しさん :04/12/24 21:13:58
インド料理を忘れないでくれ

673 名前:デフォルトの名無しさん :04/12/24 21:23:38
>>670
ちょっと用事でイギリス行った時にホテルで食べたんだけど、やっぱり日本人には
ミルクとご飯の組合せはダメだね。

674 名前:デフォルトの名無しさん :04/12/24 21:35:17
サンドイッチと、コーンフレーク類(本格的なやつね)はかなり美味しい。

イギリス行くなら、朝コーンフレーク、昼サンドイッチ、夕中華orインド料理で耐えるといい。

675 名前:デフォルトの名無しさん :04/12/24 23:06:08
日本人にとって、ミルクとご飯の組み合わせとは、給食の残りを
残飯として混ぜ込んでいたときの光景を想起させるものである。

676 名前:デフォルトの名無しさん :04/12/24 23:31:30
鶏肉の中華粥、ミルク味すきだけど・・・

677 名前:デフォルトの名無しさん :04/12/24 23:37:55
BSEパイってイギリスだっけ?

678 名前:デフォルトの名無しさん :04/12/24 23:41:22
マイクロソフトのビルゲイツ(敬称略)が、「いいプログラマになるためには、天才プログラマが書いたプログラムを
読むのがよい」といったらしいのですが、
それを聞いて、自分も天才プログラマが書いたC++プログラムを読みたいと思ったのですが、
で、最近オープンソースが話題になっており、何か参考になるようなフリープログラムはないですかねぇ?
紹介していただくとうれしいです!


679 名前:デフォルトの名無しさん :04/12/24 23:47:09
firefox

680 名前:デフォルトの名無しさん :04/12/24 23:50:19
gcc linux

681 名前:VC++です :04/12/25 00:39:16
#import "c:/Program Files/Microsoft Office/Office/MSO9.DLL"
#import "C:/Program Files/Common Files/Microsoft Shared/VBA/VBA6/VBE6EXT.OLB"
// windows.h に DialogBox などが定義されているため、リネームで回避する
#import "c:/PROGRAM FILES/MICROSOFT OFFICE/OFFICE/EXCEL9.OLB" \
rename("RGB", "RBGXL") \
rename("ExitWindows", "WordExitWindows") \
rename("DialogBox", "DialogBoxXL") \
rename("DocumentProperties", "DocumentPropertiesXL")

こういう感じでEXCELとワードのVBAをVC++からつかえるようにしたのですが、

BSCMAKE: warning BK4502 : 切り捨てられた .SBR ファイル '.\Debug\StdAfx.sbr' は Debug/EightAppSdi.bsc 内にありません。

というエラーが出て、クラスウィザードが使えなくなりました。
助けてください

682 名前:デフォルトの名無しさん :04/12/25 02:45:44
スレ違い。

683 名前:デフォルトの名無しさん :04/12/25 02:49:11
>>682
何でですか?
Visual 「C++」の話ですよ。
答えられないなら黙っていて下さい。

684 名前:デフォルトの名無しさん :04/12/25 02:56:07
>>681
こっち行け
★初心者にVisual C++を教えるスレ★ Part16
http://pc5.2ch.net/test/read.cgi/tech/1101022051/

685 名前:デフォルトの名無しさん :04/12/25 03:04:20
>何でですか?

#import

686 名前:デフォルトの名無しさん :04/12/25 03:10:34
Chest! A buttock of a very rare Japanese serow!

687 名前:デフォルトの名無しさん :04/12/25 10:32:47
CppUnit って、使う価値あるものですか?
簡単に調査した限りでは、あまりテストコードを書く助けにならないような気がするのです。
ライブラリをビルドしたりする分だけ、逆に手間がかかるように思います。
みなさんの率直なご意見をお願い致します。

688 名前:デフォルトの名無しさん :04/12/25 13:57:59
必要な人には必要とされる。
素人にはおすすめできない。

689 名前:自己レス :04/12/25 14:42:49
>>681
昨日は調べ方が甘かった・・・
stdafx.hに書けばいいらしい

690 名前:デフォルトの名無しさん :04/12/25 16:36:49
new演算子をオーバーロードして、それを継承させることはできますか。
具体的には、親クラスでオリジナルなメモリ管理ライブラリをnew演算子にオーバーロード
(ここまでは簡単)、さらに、そこから派生させた子クラスもやはりその独自ライブラリでnew する、
みたいなの。
さらに、子クラスがtemplete で勝手な型を作ったときも、やはり、親クラスが勝手に作った
独自メモリ管理ライブラリがその勝手な型の中で使われないとまずいんです。

以上、何とかしてください。

691 名前:デフォルトの名無しさん :04/12/25 16:40:27
オーバーロードできるnewは、グローバルなoperator new一つだけじゃなかったでしたっけ。

692 名前:デフォルトの名無しさん :04/12/25 16:41:47
>>690
>さらに、そこから派生させた子クラスもやはりその独自ライブラリでnew する、
>みたいなの。
これは普通に出来る。

>さらに、子クラスがtemplete で勝手な型を作ったときも、
どういう事?

693 名前:デフォルトの名無しさん :04/12/25 17:15:38
>>690
Effective C++7項〜10項
More Effective C++項目8

templateについては俺も知らん。

694 名前:デフォルトの名無しさん :04/12/26 17:40:10
別スレで聞いたのですが答えがなかったのでここで質問させて頂きます。
C++で、読み込みファイルのランダムアクセスをするような、
以下のコードを書きましたが、
ifstream fin;
fin.open("data.txt",ios::in);
  n=fin.tellg();//→n=0

do{
・・・
}while(fin.getline(buf,256));
   n=fin.tellg();//→n=70000
ここでまたデータを最初から読み込むために
fin.seekg(0,ios::beg);
としたところ
     n=fin.tellg();//→n=-1
となってしまいうまく行きません。
ご教授いただけないでしょうか。

695 名前:デフォルトの名無しさん :04/12/26 17:44:51
>>694
一度最後まで読み切ってしまうとEOFフラグが立って、
それ以降ストリームが無効になると思われ。

fin.clear(); してみては?

696 名前:デフォルトの名無しさん :04/12/26 17:46:10
>>694
seekg() の直後にエラー判定して std::perror() でも出してみると、原因がわかるかもしれん。

697 名前:694 :04/12/26 17:56:22
695さん、696さん、ありがとうございました!!
fin.clear();で解決できました。

ただ、fin.seekg(0,ios::beg);の後に
perror("perror says :" );としたところ、うまくできる時
(clesrしたとき)もうまくいかない時(clearしないとき)も
同じ値でした。エラーにはなってないのですかね。



698 名前:デフォルトの名無しさん :04/12/26 18:24:20
>>697
clear() でいけたんなら、ストリームインスタンスだけの問題。
errno は関係ない。

699 名前:デフォルトの名無しさん :04/12/26 18:36:03
perror(errno)は、単に、クリアされないまま
前回エラーが起きた時(読み込み時にEOF)の値が残っているのでは

700 名前:694 :04/12/26 18:51:03
>699さん
説明不足でしたが、clearした場合としない場合でそれぞれ実行した結果、
perror("perror says :" );で、perror says : No error
と出ましたので、(よく知らないですが)stream instanceの問題のようです。

701 名前:デフォルトの名無しさん :04/12/26 18:53:32
C++標準でのエラーとは「規格とは外れた動作」を指すんじゃないんでしょうか?
EOFが返ってくるのは規格と適合しているからエラーではないのでは

702 名前:デフォルトの名無しさん :04/12/26 22:52:52
エラーの意味の取り方の違いでしょ?
何を基準に考えてるかっていうかね、そんな感じ。

703 名前:デフォルトの名無しさん :04/12/27 21:58:18
すみません、教えてください。
Cの構造体をC++でも使いたいのですが、どのようにすればいいのでしょうか?

<test2.c>
#include "test2.h"

AAA aaa;

<test2.h>
extern struct AAA {
int int1;
char str[256];
} aaa;

<test1.cpp>
#include "test2.h"

???


↑こんな感じで使いたいです。
また、構造体を使うほかにCとCPPで値を共有する方法などはあるでしょうか。
宜しくお願いします。

704 名前:デフォルトの名無しさん :04/12/27 22:01:47
.cから.cppのhoge関数を使いたい場合は、

// hoge.cpp

extern "C" {
void hoge() {…}
}

あとCの構造体はそのままcppでも使えると思うけど

705 名前:デフォルトの名無しさん :04/12/27 22:12:57
>>703
Cだとstruct AAA aaa;じゃないか?

706 名前:703 :04/12/27 22:13:58
704さんありがとうございます。
Cの構造体は普通に使えるんですね。

includeして実際にやってみまして、コンパイルは通りました。
が、実態がないようで、値の代入が出来ません。
デバッガで値を見ると、アドレスはあるみたいなのですがポインタ参照みたいになっています。

aaa : struct AAA * aaa

みたいな感じです。
Cで実態を持たせてるのですが、CPP側でもincludeのほかになにかやらなければいけないことがあるのでしょうか?


707 名前:デフォルトの名無しさん :04/12/27 22:20:31
>>706
根本的なことが分かってない気がする

708 名前:デフォルトの名無しさん :04/12/27 22:21:37
>>705,706
ああスマンコ
Cでは
struct AAA { ・・・ };
で使用は
struct AAA hoge;
だけど、C++ではstructはclassと同じ扱いだから
AAA hoge;
だけでいい

709 名前:デフォルトの名無しさん :04/12/28 00:21:39
> 705さん、708さん
ありがとうございました。
どうにかできているみたいです。
C++だとクラスと同じ扱いになるんですね。

710 名前:デフォルトの名無しさん :04/12/28 00:45:28
>>709
C++でのclassとstructの違いは省略時にpublicになるかprivateになるかだけ。

711 名前:デフォルトの名無しさん :04/12/28 21:55:09
newの戻り値がnullかどうかってチェックするべきなんでしょうか?
今までVC6を使ってたんで一応、

char* ptr = new char[5]
if (!ptr) return;

みたいにしてたんですが、
VC7.1ではnewが失敗したら例外をなげるから、
if (!ptr) return; は無意味になる。

nullチェックってもう忘れちゃってもいいんでしょうか?

712 名前:デフォルトの名無しさん :04/12/28 22:11:56
例外を投げるのが標準だから、
VC6を今後使うつもりがないなら無視してOK。

713 名前:デフォルトの名無しさん :04/12/28 22:13:45
一応、Mozillaのコーディングスタイルでは
newの後のnullチェックを義務づけてるけどね

714 名前:デフォルトの名無しさん :04/12/28 22:20:22
>>712
ありがとうございます。
VC7以降なら標準にしたがって堂々と無視してOKってことですよね。

VC7以降と6で大幅に違うのってこれくらいでしょうか?

今はまわりがVC6から7.1に移行してる段階なんでいろいろ混乱がありそうです。

715 名前:デフォルトの名無しさん :04/12/28 22:22:48
>>713
それも気になっていました。
Mozillaの場合は例外自体を使えない(発生しない)ようにしてる、は間違いですか?

716 名前:デフォルトの名無しさん :04/12/28 22:24:18
>>714
テンプレートの部分特殊化の有無は
newが例外投げるより大きいんじゃなかろうか…

717 名前:デフォルトの名無しさん :04/12/28 22:46:11
>>716
テンプレートの部分特殊化・・・、えーと、勉強してきます・・・orz

718 名前:デフォルトの名無しさん :04/12/28 22:57:15
<new>ヘッダをインクルードしてnewをnew(nothrow)に変更すれば、古いnewと同じ動作をする。

#include <new>

char* ptr = new(nothrow) char[5] 
if (!ptr) return; 

719 名前:デフォルトの名無しさん :04/12/28 23:32:32
>>718
using書いていないからnew(std::nothrow)ってつっこみはおいといて、
俺んとこは<new>をインクルードしなくてもnew(std::nothrow)が使えるんだけど、
<new>をインクルードしたほうがいい?

720 名前:デフォルトの名無しさん :04/12/28 23:35:21
>>714
for の初期化部で宣言した変数のスコープがfor内部のみになった。
#つまりISOに準じた。

STLを使っても識別子の長さオーバーの警告が出なくなった。

CStringがテンプレートクラスになった。
#おまけでエンバグしたり仕様が変わった。

721 名前:デフォルトの名無しさん :04/12/28 23:40:36
>>719
std空間はいかにしてソースに組み込まれたのであろうか?
インクルードヘッダが一切ない状態で試してこそ、真の漢である。

722 名前:デフォルトの名無しさん :04/12/29 01:06:49
>>720
使えちゃったり。(VC7.1)

for(int i = 0; i < 10; ++i){ /* 何か */ }
i += 10; // OK
for(int i = 0; i < 10; ++i){ /* 何れか */ }
i += 10; // OK


723 名前:デフォルトの名無しさん :04/12/29 02:30:24
>>722
俺もそれ気になってた、vc6.0では無理とか言ってるやつがいたから試したけど.netでも普通に使えた

724 名前:デフォルトの名無しさん :04/12/29 02:41:36
//map<wstring, wstring> mapss;
//wstring tmp;

tmp = _T("key");
tmp += _T(" ") + mapss[tmp];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~のところの式は合っているんでしょうか?

725 名前:デフォルトの名無しさん :04/12/29 02:54:54
>>722
VC6互換にすると二番目のforでエラーにならないか?
ISO準拠なら当然代入がエラーな訳だが。
#ディフォルトがVC6互換なのは困ったもんだが。

726 名前:デフォルトの名無しさん :04/12/29 03:03:14
>>724 「式が合っている」とは?

727 名前:デフォルトの名無しさん :04/12/29 03:54:15
>>725
VC7.1ではエラーにならなかったりする。
ただ、VC6では >>722 のコードはエラーになる。
(C2374 : i が2回宣言されているぞ)

つまり、VC7.1では、状況が悪化していると…

728 名前:デフォルトの名無しさん :04/12/29 03:58:53
>>727
悪化はしてないと思うが、
forスコープの外でiが使えるのは気持ち悪いな

729 名前:デフォルトの名無しさん :04/12/29 08:47:41
>>721
俺の負けだ。
何もインクルードしていないときはnothrowはstd::付ける付けない関係なしに無理だった。OTL

730 名前:デフォルトの名無しさん :04/12/29 08:51:09
>>724
typedef basicstring<TCHAR> tstring; // _TCHARでも可
map<tstring, tstring> mapss;
tstring tmp;
tmp = _T("key");
tmp += _T(" ") + mapss[tmp];
上か下か好きな方を選べ。
map<wstring, wstring> mapss;
wstring tmp;
tmp = L"key";
tmp += L" " + mapss[tmp];

731 名前:デフォルトの名無しさん :04/12/29 12:25:02
>>726
>>730
レスありがとうございます
「式が合っている」とは、tmp += _T(" ") + mapss[tmp];でtmpに代入しますよね
その時にmapssでがちゃんと[tmp]をキーとして使えるのかなと思っただけです、よく考えたら使えますよね orz
=の右辺は一回どこかのバッファにためられてから左辺に代入してるのかな(わからないです)

すみませんbasicstringってなんですか、下のでも似たようなことが出来そうですけど
#define UNICODE
 typedef wstring tstring;
#else
 typedef string tstring;
#endif


732 名前:携帯 ◆QkYL666666 :04/12/29 12:37:07
どこにカキコすればいいのかわからないのでここにカキコします。
情報工学科の大学一年です。
学校でC言語の講義があってLinuxを使っています。
自分はすごく苦手で毎日空き時間は学校のパソコン使って練習しています。
課題はできるのですが試験が全く出来ません。
例えば課題の例を出しますと、
毎日の睡眠時間を読み込んでその最大値と最小値と何日目であるのかを示すプログラムをかけ。
というようなものでそのようなものならできますが、試験では
データの数(これはなんとかできます)、データの合計を秒単位と時間分秒で表す、最大値を分単位で表す、最小値を秒単位で表す、日毎の変動時間の平均値を分単位で表す、変動時間が一時間以上である回数
を表させるようにもっと複雑になってしまい何も出来ないです。
いつも数式を立てるのは紙に書けばすぐできますしフローチャートも順調に書けます。
けどプログラムをパソコンで組むと作れないことが多いです(コンパイルでは異常ないけど実行すると目茶苦茶な結果が出て来る)
どうすれば解決できるようになりますか。他の筆記科目(微積、線形代数、力学、電磁気、化学、英語、回路講義、計算機についての講義等パソコンではなくペーパー試験)はだいたい8割以上とれるけど、このプログラムだけは半分もとれません。
やっぱり基礎が出来ていないからですかね。一応家には学校で支給されたKNOPPIXというのがあるので実家に戻って使う予定です。

733 名前:デフォルトの名無しさん :04/12/29 12:40:43
>>732
で、何が聴きたいんだ?
とりあえず普段頭と紙だけで考えて、実際に動かしてないだろ。

734 名前:デフォルトの名無しさん :04/12/29 12:40:55
>722-
ttp://www.tietew.jp/cppll/archive/11282
このトピックなんかも参考に。

735 名前:デフォルトの名無しさん :04/12/29 16:44:56
732
必要な道具(関数)を考えろ。外部設計の基礎だ。

736 名前:デフォルトの名無しさん :04/12/29 21:01:29
>>732
あー、いるいる。そういう奴。
初めから大風呂敷ひろげすぎては自爆を繰り返す藁パターンな。
(何を隠そう若き日の俺だったりするが)

まずシンプルに徹したVer1を確実に押さえてから少しずつVer-upすれ。
もともと複雑怪奇な問題はより単純な問題に分解することを再帰的にやれ。
気長な話だが、短気な性格にも活かし方はある。

737 名前:デフォルトの名無しさん :04/12/29 21:19:52
>>731
basic_stringはstringやwstringの実体。ここからtypedefされている。
typedef basic_string<char> string;
typedef basic_string<wchar_t> wstring;
お前の#ifdef UNICODE〜#endifとtypedef basic_string<TCHAR> tstring;は結果は同じ、好きな方を選べ。

738 名前:デフォルトの名無しさん :04/12/29 21:51:17
TCHARが short だったりしてな。

739 名前:デフォルトの名無しさん :04/12/29 21:58:30
>>738
せめてunsigned shortだろ。

740 名前:デフォルトの名無しさん :04/12/30 18:27:28
templateなstaticメンバ変数だけヘッダで初期化できるのは不公平だと思います!

741 名前:デフォルトの名無しさん :04/12/30 19:41:19
http://www.rubyist.net/~matz/20041227.html#p03
Ruby以外の言語は糞であるとRuby作者自身が明言した!

742 名前:デフォルトの名無しさん :04/12/30 19:51:55
>>740
C++使いにはいくつかの禁句があることを知れ

743 名前:デフォルトの名無しさん :04/12/30 19:53:03
<<で出力とかばっかじゃねぇの?

とか?

744 名前:デフォルトの名無しさん :04/12/30 21:51:43
>>743
それはむしろC++使いも同意だったりするんじゃないかと

745 名前:デフォルトの名無しさん :04/12/30 21:56:56
データはストリームに流すんだ
と心の中で100回唱えれば納得できる

746 名前:デフォルトの名無しさん :04/12/30 22:51:03
ロシア語で考えるんだ!
пиписка!!

747 名前:デフォルトの名無しさん :04/12/31 00:39:15
ズドラーストヴィーチェ!

748 名前:デフォルトの名無しさん :04/12/31 06:01:53
<<で出力ってそんなにまずいのか?
bit shiftと似て左に流れる=出力って分かりやすい気がするが
cout << 'string'; で標準出力に流れていくみたいな

ただ、<<がC++の最高の応用例と書かれていたり
最悪の応用例と書かれていたりかなり両極端だよな

749 名前:デフォルトの名無しさん :04/12/31 06:39:30
iostreamの演算子オーバーロードは間違いなく邪悪。

演算子の意味把握するのにいちいち連想ゲームさせるな

750 名前:デフォルトの名無しさん :04/12/31 06:42:01
lhs = rhs で左辺に代入されるから

 cout << "string";
 a_variable << cin;

が自然だと思うんだけどな…


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