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


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

C++相談室 part30
501 名前:デフォルトの名無しさん :04/05/20 16:23
>それはお前の中だけだろう。

お前何言ってる?
C++はよりよいCを目指して作られた処理系ってこと知らないのか?

502 名前:デフォルトの名無しさん :04/05/20 16:25
>>500
アフォかお前。
Cの標準ライブラリをincludeしたときにwarning出すぐらい簡単だと
言ってるんだよ。自前のファイルのincludeをハネル必要なんかないだろうが。

503 名前:デフォルトの名無しさん :04/05/20 16:27
>>501
目指して作られた事と、実際にC++がCのスーパーセットであることに相関関係はないぞ。

504 名前:デフォルトの名無しさん :04/05/20 16:29
>>502
C++の処理系がCのヘッダファイルを「わざわざ」認識して警告する必要があるのか?
アフォとか言う前に、プリプロセッサの仕事を良く考え直してみろ。
取り込んだヘッダがC++の文法と矛盾していなければ問題なくコンパイルできて何が悪い?

505 名前:デフォルトの名無しさん :04/05/20 16:29
>目指して作られた事と、実際にC++がCのスーパーセットであることに相関関係はないぞ。

頭悪いなお前。言ってることのロジックが成り立ってないこともわからんのか?

506 名前:デフォルトの名無しさん :04/05/20 16:31
>>505
はぁ。


507 名前:デフォルトの名無しさん :04/05/20 16:32
>取り込んだヘッダがC++の文法と矛盾していなければ問題なくコンパイルできて何が悪い?
全く問題ないよ。だから使うことに何の問題もない。
お前、考えてから書き込めや。

508 名前:デフォルトの名無しさん :04/05/20 16:35
>>504
>C++の処理系がCのヘッダファイルを「わざわざ」認識して警告する必要があるのか?
全くないよ。

509 名前:デフォルトの名無しさん :04/05/20 16:35
すげぇ、まだやってたんだ。
お前ら、全員馬鹿だってば。
いいかんげんにヤメレ!

510 名前:デフォルトの名無しさん :04/05/20 16:36
基本的にC++はCとは基本的に別の言語であって、
C++の言語仕様には、Cとの多くの共通点があるだけ。

>>507
使う事に問題があるなんて誰も言ってないだろうが。
Cのstdio.hを使うのならそれはC++スレの範疇ではないと言ってるだけだ。
C++は決してCを包括しているわけではない。

511 名前:デフォルトの名無しさん :04/05/20 16:39
だれか、これは何をしたいのか教えてくれ。
何でやたらキャストばかり・・・
int main(){
int y[] = {1,2,3,4,5,6,7,8,9,10};
int *ip;
long L1;
long L2;

L1 = (long)y;
cin >> L2;
ip = (int*)(L1 + (L2 * sizeof(int)));
printf("%d\n",*ip);

return 0;
}

512 名前:デフォルトの名無しさん :04/05/20 16:40
あと、sizeof(int)をかける理由はいったいなに?

513 名前:デフォルトの名無しさん :04/05/20 16:41
いや違う。
C++はCを包括している。

514 名前:デフォルトの名無しさん :04/05/20 16:45
>>510

基本的にC++はCの完全なるスーパーセットであって、
C++の言語仕様は、Cを完全に包含していなければならない。


515 名前:デフォルトの名無しさん :04/05/20 16:47
>>514
頭が古いですね。

516 名前:デフォルトの名無しさん :04/05/20 16:48
>>511
それが意図しているのは多分、
int main(){
int y[] = {1,2,3,4,5,6,7,8,9,10};
int *ip;
long L2;

cin >> L2;
ip = y + L2;
printf("%d\n", *ip);

return 0;
}

つまり、入力された数に1を足して表示する。

517 名前:デフォルトの名無しさん :04/05/20 16:48
>>511
y[i] = *(y + i)
を確かめたいんじゃないの?

518 名前:デフォルトの名無しさん :04/05/20 16:49
>>514
そんなこと、どこに書いてあった?

519 名前:デフォルトの名無しさん :04/05/20 16:49
おお。いい具体例が出てきた。
>>507
>>511にこんなキャストはCのキャストだからCスレに行けと言うのか?
それともcinさえあればC++スレでOKなのかい?

520 名前:デフォルトの名無しさん :04/05/20 16:57
C++はC言語を継承する言語であり、若干の例外を除いてCをサブセットとしてサポートしている。

521 名前:デフォルトの名無しさん :04/05/20 16:58
>>512
int *でポインタ演算をする代わりに、longにキャストして、ポインタ演算の真似事をして、
再びint *にキャストしている。
ポインタの中身が通常の整数であるような実装では、ポインタの中身はバイトのアドレスで、
intの配列の要素を指しているポインタの数値にsizeof(int)分だけ足せば
その配列の次の要素を指すようになる。だから、
L2 * sizeof(int)
を足せば、L2個先の要素を指すようになる。
但し、上に書いたことは規格で保障されてはいない。
実際、ポインタをlongにキャストして再び元に戻すと値が失われる処理系があると思う。

522 名前:デフォルトの名無しさん :04/05/20 16:58
stdint.hとか_ComplexとかもいつのまにかC++の言語仕様になってそうだなw

523 名前:デフォルトの名無しさん :04/05/20 17:00
>>520
それが「C++はCとは別の言語だが、Cとの共通点を多く含む仕様」って物なんだよ
ISO C++はCとは別の言語。
仕様に重複個所があったとしても、それぞれCの要件、C++の要件で別物なの。

524 名前:デフォルトの名無しさん :04/05/20 17:02
若干の例外を除けばC++はCのスーパーセットである。
--- 中略---
C++とCの間のすべての違いはコンパイラによって診断できる。



525 名前:デフォルトの名無しさん :04/05/20 17:05
>>523
お前の頭はスでもはいってるのか?
>ISO C++はCとは別の言語。
当たり前。C++はCのスーパーセット。

526 名前:デフォルトの名無しさん :04/05/20 17:09
つーかCスレでもC++スレでもなく宿題スレ行けよ

527 名前:デフォルトの名無しさん :04/05/20 17:11
>>524
C++コンパイラがエラーなり警告なり出さない書式はすべてC++と認めて構わないってことだな。

528 名前:デフォルトの名無しさん :04/05/20 17:13
>>511
いっそこういうのは
gcc version 3.2.3 (mingw)にて想定どうりの動作確認
#include <iostream>
void hello(){
    std::cout << "hello world\n";
}
void f(){
    long p;
    *(&p+2)=reinterpret_cast<long>(&hello);
    std::cout << "f\n";
}
int main(){
    f();
    std::cout << "after f\n";
    return 0;
}


529 名前:デフォルトの名無しさん :04/05/20 17:14
>>525
> 当たり前。C++はCのスーパーセット。
頭が古いですね。

530 名前:デフォルトの名無しさん :04/05/20 17:15
>>525
おまえは文字定数の型の違いを知らないのか?
暗黙のintを知らないのか?
整数とポインタ間の暗黙の変換を知らないのか?
_Complexや"%lf"を知らないのか?

>>526
宿題スレに馬鹿な議論を持ち込もうとせんでくれ。

531 名前:デフォルトの名無しさん :04/05/20 17:17
>>530
おまえはちょっと冷静になれ。
元質問の>>459を宿題スレでやれってこったろ。

532 名前:デフォルトの名無しさん :04/05/20 17:20
元はといえば>>459が逆切れして煽ったのが悪い

533 名前:デフォルトの名無しさん :04/05/20 17:21
>おまえは文字定数の型の違いを知らないのか?
>暗黙のintを知らないのか?
>整数とポインタ間の暗黙の変換を知らないのか?
>_Complexや"%lf"を知らないのか?
はぁ?それを知ってることに対してお前は何を言いたいんだ?
_Complexは知らんな。

534 名前:デフォルトの名無しさん :04/05/20 17:25
厨の逆切れにまんまと乗せられたこの人たちっていったい・・・

535 名前:デフォルトの名無しさん :04/05/20 17:25
言っとくが>>459ははじめにファイルリードのリスト示しただけで、それ以降
絡んでないのだが。同一人物と思ってる時点でお笑いだな。

536 名前:デフォルトの名無しさん :04/05/20 17:27
>>535
おまえが459かよ。取りあえずは責任とって氏んでくれ。

537 名前:デフォルトの名無しさん :04/05/20 17:28
>>535
本当だ、IPを確認したら別人だったよ!

538 名前:デフォルトの名無しさん :04/05/20 17:30
>>537
ふーん。そのIP晒してくれよ。

539 名前:デフォルトの名無しさん :04/05/20 17:32
何このスレ

540 名前:デフォルトの名無しさん :04/05/20 17:33
つかぬことをお聞きしますが
仮想アドレス空間でのコード領域においてメインルーチンは先頭に配置されるますよね
従って、関数名の「main」はメインルーチンの実行コードを指すポインタなんですかね?
それに付随して、他のサブルーチン内でmain()を呼び出すことは出来ますでしょうか?

541 名前:デフォルトの名無しさん :04/05/20 17:38
関数名はinline展開されてなければ実行アドレスを指すものと解釈できる。
main()を呼び出すことも可能だが、それはよくない書き方。

542 名前:デフォルトの名無しさん :04/05/20 17:45
98年のC++に対してC99の仕様持ち出してどうすんの?

543 名前:デフォルトの名無しさん :04/05/20 17:53
>>541
サンクス。
「main」も関数ポインタと理解して良かったんですね

544 名前:デフォルトの名無しさん :04/05/20 17:56
>>「main」も関数ポインタと理解して良かったんですね
それは違うよ。ポインタとして扱いたければ関数へのポインタを宣言して
main()を指すようにすれば。ただし、君がやろうとしてることは恐らく正しい
コーディング法ではないと思うけど。

545 名前:デフォルトの名無しさん :04/05/20 17:57
mainは呼んじゃダメ、とか規格になかった?

546 名前:デフォルトの名無しさん :04/05/20 17:58
>>543
もうちょっと素直に「main()も関数なんですね」と言え。

547 名前:デフォルトの名無しさん :04/05/20 18:02
int main(); //前方宣言

int funcx()
{
int (*f)();
f = main;

f();
}

int main()
{
 //実体

funcx();
}

無限ループになるよ。

548 名前:デフォルトの名無しさん :04/05/20 18:04
関数ポインタというと少し表現がアレでしたが
要は、mainがメインルーチンの関数名(先頭アドレス)としてソース上で表現されている
ということを確認したかったんです

549 名前:デフォルトの名無しさん :04/05/20 18:08
-Sつけてアセンブルコード見ればすぐわかるよ。

550 名前:デフォルトの名無しさん :04/05/20 18:13
,codファイルをエディタで開くのってどうやるんですか

551 名前:デフォルトの名無しさん :04/05/20 18:15
>vi file.cod

552 名前:デフォルトの名無しさん :04/05/20 18:18
重ね重ねサンクス

553 名前:デフォルトの名無しさん :04/05/20 18:22
>>547
それがなんなの?

554 名前:デフォルトの名無しさん :04/05/20 18:26
基底ケース無い再帰呼び出しだな

555 名前:デフォルトの名無しさん :04/05/20 18:29
typeidさえあればdynamic_castはなくてもいい。

556 名前:デフォルトの名無しさん :04/05/20 18:31
>>553
>>544に書いたことを>>547に書いたんだが、なんか問題でもあるのか?

557 名前:デフォルトの名無しさん :04/05/21 06:49
>>527
C++標準に存在しないstdio.hとか使ったソースを持ってきたら
実装依存だから専用スレへ誘導するべきだな。


558 名前:デフォルトの名無しさん :04/05/21 09:22
動的多次元配列(boostのmulti_arrayに配列の大きさをリサイズする機能がついた物)を
使いたいんですけど、そういった物が使えるライブラリはないでしょうか?

559 名前:デフォルトの名無しさん :04/05/21 11:19
テンプレートを使用したクラスで宣言部と実装部を別々のファイルに記述することはできないのでしょうか?
(宣言部のファイルで#include "source.cpp"とかはなしで)

実装部を別ファイルにするとリンカがエラーを吐いてくれるので‥‥


560 名前:デフォルトの名無しさん :04/05/21 11:33
>>559
exportを使える環境以外では無理。

561 名前:デフォルトの名無しさん :04/05/21 11:33
>>557
いや、ここでやったらいいよ。

562 名前:デフォルトの名無しさん :04/05/21 11:36
>>559
export

563 名前:デフォルトの名無しさん :04/05/21 11:38
>>561
Cのヘッダだけは良しとする合理的理由が説明されてない
てことはunistd.hとかwindows.hもありだな。
ホント何でもありなんだな、C++スレは。



564 名前:デフォルトの名無しさん :04/05/21 11:46
Cの規格にwindows.hがあるそうです。

565 名前:デフォルトの名無しさん :04/05/21 11:48
>>563
>>561の行間嫁。一行だけどな。

566 名前:559 :04/05/21 11:51
>解説
>export キーワードは将来の実装用に予約済みですが,このリリースでは効果を持ちません。

orz

567 名前:デフォルトの名無しさん :04/05/21 12:21
exportが使えるコンパイラ(フロントエンド)はcomeau以外まだ無いのかな。
comeauはちょっと手が出しにくいなあ。
注文書にクレカの表裏のコピー添付してサイン入れてfaxか郵送しろってのが・・。

568 名前:デフォルトの名無しさん :04/05/21 12:35
>>564
そりゃ初耳だ。C++の規格にはCが含まれていると言う事か。

569 名前:デフォルトの名無しさん :04/05/21 12:40
>>568
もういいって。

570 名前:名無しさん@Vim%Chalice :04/05/21 13:18
>>558
http://www.boost.org/libs/multi_array/doc/reference.html#synopsis
boost::multi_array は resize 出来るぞ

571 名前:デフォルトの名無しさん :04/05/21 14:36
>>559
> テンプレートを使用したクラスで宣言部と実装部を別々のファイルに記述することはできないのでしょうか?
> (宣言部のファイルで#include "source.cpp"とかはなしで)
>
> 実装部を別ファイルにするとリンカがエラーを吐いてくれるので‥‥
私はg++(3.3.3)を使っているのですが,
テンプレート引数に与える型が限られている場合,
例えば,以下のようにクラステンプレートAがあって,
テンプレート引数としてintとfloatでしか実体化しない場合には,
$ cat a.h
template <typename T> struct A {A ();};
$ cat a.cpp
#include "a.h"
#include <iostream>
template <typename T> A <T>::A () {
std::cout << typeid (T).name () << std::endl;
}
template class A <int>;
template class A <float>;
$ cat test.cpp
#include "a.h"
int main () {
A <int> a0;
A <float> a1;
return 0;
}
なんてことをしてます.
これって,仕様としてはOKなのでしょうか? gcc以外のみなさん,これ動きます?


572 名前:558 :04/05/21 14:43
>>570
あ、そうなんですか。
翻訳されたところしか読んでなくて、てっきりreshapeしかないと思い込んでいました。
どうも失礼しました。

573 名前:デフォルトの名無しさん :04/05/21 14:52
>>571
規格上はOK。

574 名前:571 :04/05/21 14:59
>>573
> 規格上はOK。
あっ,どうも.そうですか.安心しました.


575 名前:デフォルトの名無しさん :04/05/21 15:27
コンパイルできるんですが、正しく出力されません
STLport使ってるんですがそれが原因でしょうか?
#include <iostream>
int main()
{
  using namespace std;
  wchar_t s[] = L"波浪";
  wcout << s << endl;
  return 0;
}

576 名前:デフォルトの名無しさん :04/05/21 15:29
>>575 locale

今のSTLPortでもimbueしてやんないとだめかもしれない。
http://www.tietew.jp/cppll/archive/1484

577 名前:デフォルトの名無しさん :04/05/21 15:31
>>575
STLportは知らんが、VC7.1だと
setlocale(LC_ALL, "Japanese_Japan.932" );
こういうのが要るが、そのへんはどうか

578 名前:575 :04/05/21 15:57
wcout.imbue(std::locale("japanese"))
を加えたら正しく出力できました
setlocale(LC_ALL, "Japanese_Japan.932" );
はだめでした。Japanese_Japan.20932とかもだめでした
ありがとうございました



579 名前:デフォルトの名無しさん :04/05/21 19:29
iostream のロケールは、C の setlocale に影響されないのでは?
C++ 使っている場合、setlocale よりも、locale::global を使ったほうがいい。

580 名前:デフォルトの名無しさん :04/05/22 07:18
unsigned int uInt = 0xFFFFFFFF;

があり、これを int として解釈したい場合、

static_cast<int>(uInt);
reinterpret_cast<int&>(uInt);

とすると -1 になり同じ結果が得られますが、用法としてはどちらが正しいのでしょうか。
或いはどちらも正しい?

581 名前:デフォルトの名無しさん :04/05/22 07:28
どっちも正しい。
再解釈だけが目的ならstatic_cast

582 名前:デフォルトの名無しさん :04/05/22 07:52
ありがと。
未だに static と reinterpret の区別が曖昧なもので。
もう一回勉強してみます。

583 名前:デフォルトの名無しさん :04/05/22 07:58
reinterpret_cast は、アーキテクチャ依存になるような危険な変換を行うときに
最後の手段として使う物だす

584 名前:デフォルトの名無しさん :04/05/22 08:01
static_castは指定された型になるように変換
reinterpret_castはビットパターンをそのままコピー

585 名前:デフォルトの名無しさん :04/05/22 11:01
>583
変換元の値が、変換先の整数型の上限を超えている場合は、そもそも実装依存だよ。
static_cast 使おうが reinterpret_cast 使おうが。

> 4.7 Integral conversions
> 3 If the destination type is signed, the value is unchanged if it can be represented in
> the destination type (and bitfield width); otherwise, the value is implementationdefined.

586 名前:デフォルトの名無しさん :04/05/22 13:17
lexical_castは文字列と数値の相互変換

え・・・?およびでない?

587 名前:デフォルトの名無しさん :04/05/22 16:15
>>585
ふーんimplementationdefinedだったのか。undefinedだと思っていた。
くそー手元に規格票がなくて調べようがない・・・

588 名前:デフォルトの名無しさん :04/05/22 16:32
例えば
struct A {
char str[10];
int b;
int c;
} ;
という構造体で渡されてくるデータがあるとします。
これを以下のような型へのポインタを引数に取る関数(この中は
事情があって手を入れられない)に渡したいのですが、
struct B {
int b;
int c;
} ;

この場合、struct B b1;を作りそこに対応メンバーをコピーして
から渡す方法がありますが、参照でコピーせずにやりたいのですが
うまくいきません。どうやったら良いでしょうか?


589 名前:デフォルトの名無しさん :04/05/22 16:40
>>588

struct A : B
{
char str[10];
};


590 名前:デフォルトの名無しさん :04/05/22 16:44
>>588
無理。きれいな方法はない。
おそらくAの設計ミス。

どうしてもやるなら、
struct A {
char str[10];
B b;
};

物理的なレイアウトに
制約がなければ
struct A : B {
char str[10];
};

これは保証なし
struct C {
char str[10];
B b;
};
union {
A a;
C c;
};


591 名前:デフォルトの名無しさん :04/05/22 16:46
>>588
reinterpret_cast< B* >( reinterpret_cast< char* >( &a ) + offsetof( A , b ) )
とりあえず動くものはできるかもしれないけど、激しくおすすめできない。
int ふたつくらいならコピーしてしまう方がいい。

592 名前:588 :04/05/22 16:55
>>589-591
なるほどやはり参照で逃げるのは無理のようですね。
引数の渡し方にばかり目がいき、>>589を忘れてました。
これが一番本質的な解決策ですね。どうもありがとうございました。


593 名前:デフォルトの名無しさん :04/05/22 16:58
なんだ。Aは変更しても良かったのか。

594 名前:デフォルトの名無しさん :04/05/22 21:59
dynamic_castっていまいちわからないのですが、
どういうときに使うのでしょうか?

595 名前:デフォルトの名無しさん :04/05/22 22:06

http://www.fides.dti.ne.jp/~oka-t/cpplab-cast.html

596 名前:デフォルトの名無しさん :04/05/22 22:08
>>594


597 名前:デフォルトの名無しさん :04/05/22 22:08
>>594多相的な仮想基底クラスを継承している派生クラスのインスタンスの部分オブジェクトを指し示している仮想基底クラスのインスタンスへのポインタをダウンキャストするとき

598 名前:デフォルトの名無しさん :04/05/22 22:15
javaでコレクションクラスから要素を取り出す時に
なんか気持ちの悪いキャストをするだろ?アレ

599 名前:594 :04/05/22 22:21
レスどうも。
う〜む、どうも俺には難しいなぁ。
いちおう基底→派生の変換で、なおかつ基底クラスが仮想関数
をもっていなけりゃいけないってことですが、何の役に立つのかな。
static_castでもできそうな・・・。

600 名前:デフォルトの名無しさん :04/05/22 22:23
>>599
実行時にチェックしてくれる。

601 名前:594 :04/05/22 22:28
実行時チェックということですが、ということはstatic_castの方が
危険があると・・・しかし、そもそも何をもってキャスト成功・失敗が
分岐するのでしょうか。


602 名前:デフォルトの名無しさん :04/05/22 22:29
>>599
dynamicだから実行時に行うんだよ。当たり前だけど

それ以外のキャストはコンパイル時に決定するだろ

603 名前:デフォルトの名無しさん :04/05/22 22:32
知りたいのはC++での有用な使い道ってことだろ

604 名前:デフォルトの名無しさん :04/05/22 22:44
>603
俺が最近使ったのは、スクリプト言語を実装したとき。スクリプト言語側は
C++ ほど豊富な型情報を持たせなかったので、スクリプトにポインタを
渡した段階で基底クラス型のポインタに。

で、受け取ったポインタを元の型に復元するときに dynamic_cast してた。

605 名前:デフォルトの名無しさん :04/05/22 22:47
>>601
> 何をもってキャスト成功・失敗が分岐するのでしょうか。

ポインタのキャストが失敗すればヌル。
参照のキャストが失敗すればbad_cast。

606 名前:594 :04/05/22 23:59
なんとなくわかってきました。ありがとうございました。
あとは自分でつめてみます。

607 名前:デフォルトの名無しさん :04/05/23 10:34
>>587
安いんだから、買っとけ。

608 名前:デフォルトの名無しさん :04/05/23 21:28
GoF本のstateパターンの使用を検討しています。
何かの本にはvirtual関数はバーチャルテーブル見る分遅いと書いてあった気がします。
virtual関数を使用せずstateパターンと同じような効果を得られるお勧めのパターンがあったら教えてください。


609 名前:デフォルトの名無しさん :04/05/23 21:37
>>608
速度は計測してから判断せよ。ただ、目安としては
vtableは相当速度に厳しいとき以外はまったく問題にならないから安心しろ

610 名前:デフォルトの名無しさん :04/05/23 21:53
おお。為になる御意見サンクス。


611 名前:デフォルトの名無しさん :04/05/23 23:21
>608
switch - case だってジャンプテーブル持つことになるから、本質的に
変わらんよ。

それと状態遷移に関しては、入退場動作をどうするか、複合状態(状態の
ネスト)をどうするかの方が大きな問題。複合状態を全く扱わないってのも
一手だが、複雑になってくると破綻しがち。

612 名前:デフォルトの名無しさん :04/05/23 23:37
そこで boost::fsm ですよ。

613 名前:デフォルトの名無しさん :04/05/23 23:46
>>608

速度については>>609,>>611の言うとおり。
「何かの本にはコンパイラはアセンブラより遅いとあった気がします」
といってるのと同じだよ。

普通にプログラムを組む場合、バーチャルテーブルなんかより
自分自身がつくりあげるアルゴリズムの方がよっぽど速度に
影響を与えていることが多い。


614 名前:デフォルトの名無しさん :04/05/24 00:35
dynamic_castで参照のキャストが失敗したときに
bad_cast例外が出るなんて知らなかったYO!
どこに書いてあるんだYO!!!

615 名前:デフォルトの名無しさん :04/05/24 00:51
てかいったいどこに書いていないんだよ。

616 名前:デフォルトの名無しさん :04/05/24 00:54
VS.NETをインストールしたらcl.exeでコマンドラインからコンパイル
できないのですが、なぜですか?



617 名前:デフォルトの名無しさん :04/05/24 00:54
>>614
こことか。
http://www.google.co.jp/search?hl=ja&q=dynamic_cast+bad_cast&lr=lang_ja

例外でなかったら、他にどうなると思ってたんだ?

618 名前:デフォルトの名無しさん :04/05/24 00:57
>>617
NULLの詰まった参照

619 名前:デフォルトの名無しさん :04/05/24 01:06
>>618
そんなもん、言語仕様上には存在しない。
ヌルポインタをデリファレンスした時点で未定義。

620 名前:デフォルトの名無しさん :04/05/24 15:12
WinプログラムですべてC++で記述してる椰子ってどのくらいいるの。
おれば、C++はエンジン部分のdllを作ることしか使ってない。てか、使えない。
GUIの部分はC#に頼りきり。C++でやろうとしたんだけど、難しすぎてあきらめた。

621 名前:デフォルトの名無しさん :04/05/24 16:43
ノシ

622 名前:デフォルトの名無しさん :04/05/24 17:03
ノシ

623 名前:デフォルトの名無しさん :04/05/24 17:06
C++でGUI作りなんてペンギンが100m走やるようなもんだ

624 名前:デフォルトの名無しさん :04/05/24 17:15
かわいいじゃないの

625 名前:デフォルトの名無しさん :04/05/24 17:18
わざわざペンギンを選ぶのは、なんか狙ったの?

626 名前:デフォルトの名無しさん :04/05/24 17:47
>>620
普通は自作か他作のGUIライブラリを使います。C#なんて使いません。

627 名前:デフォルトの名無しさん :04/05/24 18:00
>>620
普通はVBかC#を使います。C++なんて使いません。

628 名前:デフォルトの名無しさん :04/05/24 18:17
>>626
よっぽど暇なんだね。

629 名前:デフォルトの名無しさん :04/05/24 18:20
そこでFOXですよ

630 名前:デフォルトの名無しさん :04/05/24 18:35
そこで notus ですよ

631 名前:デフォルトの名無しさん :04/05/24 18:44
そこでCUIですよ

632 名前:デフォルトの名無しさん :04/05/24 19:02
Fox っていうとSH3プロジェクトなんだが。

633 名前:デフォルトの名無しさん :04/05/24 19:07
それはよかったですね

634 名前:デフォルトの名無しさん :04/05/24 21:08
MFCでがりがり作ってますが、何か?

635 名前:デフォルトの名無しさん :04/05/24 21:26
時代はWTL

636 名前:デフォルトの名無しさん :04/05/24 21:28
C++Builder>>>>>>>>>>>>>>VC++

637 名前:デフォルトの名無しさん :04/05/24 21:42
時代はOTL

638 名前:デフォルトの名無しさん :04/05/24 21:51
http://otl.sourceforge.net/

639 名前:デフォルトの名無しさん :04/05/24 23:20
wxWidgetsをどうぞ
【GUIライブラリ】wxWindowsでのひょーん
http://pc5.2ch.net/test/read.cgi/tech/1052186697/


640 名前:デフォルトの名無しさん :04/05/24 23:27
おまいら内容ないのセコいプログラムを派手な総天然色の画面で誤魔化そうなんて(ry

641 名前:デフォルトの名無しさん :04/05/24 23:38
stateパターンでひとつ
状態Aの処理内で状態Aから状態Bに切り替えたくなったのですが
どうすればいいのでしょうか。そもそもAはBがあることすら知らないのですが

642 名前:デフォルトの名無しさん :04/05/24 23:40
Observer作って管理汁

643 名前:デフォルトの名無しさん :04/05/25 02:18
クラスのメンバ関数の中で、struct sigaction の
void (*sa_handler)(int); に、同じクラスの別のメンバ関数
を登録したいのですが、コンパイラに型が違うと怒られて
弾かれてしまいます。こういう場合は、どうやってセット
するんでしょうか。

644 名前:デフォルトの名無しさん :04/05/25 02:54
>>643
class内でstatic void foo(int bar);なるメンバ関数なら登録できると思われ。
staticじゃないメンバ関数は呼び出し手順が違うので登録できないかと。

645 名前:デフォルトの名無しさん :04/05/25 03:01
C++って、Cを知らないとできないの?
先にC言語勉強したほうがいい?

646 名前:デフォルトの名無しさん :04/05/25 03:04
Yes

647 名前:デフォルトの名無しさん :04/05/25 03:22
>>645
C++からでいいでしょ。
Cのライブラリもどうせ覚えなあかんけど、それを最初に済ましておく必然性も無いような。

648 名前:デフォルトの名無しさん :04/05/25 04:05
C++の説明が、Cの基本的な知識(文法など)の習得を前提にしているので、
そういったところを知らない(C/C++を初めて触るというレベル)というのであれば
Cを勉強したほうがいいんでないの?


649 名前:デフォルトの名無しさん :04/05/25 04:35
>Cのライブラリもどうせ覚えなあかんけど
ライブラリの勉強なんかしてどうすんの
Cやるときにでもライブラリなんて後回しでいいよ。

650 名前:デフォルトの名無しさん :04/05/25 04:36
malloc,free
はC++やる上で必須だろ?

651 名前:デフォルトの名無しさん :04/05/25 04:38
プリプロセッサのディープな使い方も是非やりこんでないと

652 名前:デフォルトの名無しさん :04/05/25 04:42
>>648
同意。

>>650
new delete でいいじゃん。

653 名前:デフォルトの名無しさん :04/05/25 05:18
ポインタは必須だな。
int *((*)f())[]

654 名前:デフォルトの名無しさん :04/05/25 05:20
リスト構造ぐらいすらすら書けるようになってからC++ やりゃいいんじゃない?

655 名前:デフォルトの名無しさん :04/05/25 05:23
アセンブルコードが大体予測できるようにならないとしょーもないC++プログラマ
になることは間違いない

656 名前:デフォルトの名無しさん :04/05/25 05:26
C++はCとは別な言語だからやる意味はない。

657 名前:デフォルトの名無しさん :04/05/25 05:32
Cからはじめるより
C#まず勉強してGCに慣れ親しんでから
C++やるのがいいと思うよ。
ちょうど
オートマに慣れてからミッション運転する感じかな。

658 名前:デフォルトの名無しさん :04/05/25 05:35
>>657
C#?
http://www.kmonos.net/alang/d
やっぱDだろ?DからはじめてC++

659 名前:デフォルトの名無しさん :04/05/25 07:41
>>657
オートマにもミッションはありますが何か。

660 名前:デフォルトの名無しさん :04/05/25 08:43
いや、JavaをはじめてからC++だな。

661 名前:デフォルトの名無しさん :04/05/25 08:59
Javaの前にJavaScriptだろ。

662 名前:デフォルトの名無しさん :04/05/25 09:00
C+ASMやってからがいいなあ

自動変数がスコープを抜けるとデストラクタが呼ばれるとかいうのを
asmレベルで確認できるぐらいじゃないと
わけわからんところで躓く気がする

663 名前:デフォルトの名無しさん :04/05/25 10:24
>>659
マニュアルと言いたかったんだろう

664 名前:デフォルトの名無しさん :04/05/25 13:11
オートマ(C#)で鳴らすと同時に、車の内部構造(ASM)も勉強しる。

665 名前:デフォルトの名無しさん :04/05/25 13:14
Cからはじめるより
emacs lispまず勉強してGCに慣れ親しんでから
C++やるのがいいと思うよ。
ちょうど
オートマに慣れてからミッション運転する感じかな。

666 名前:デフォルトの名無しさん :04/05/25 13:20
ウンコする人間(C#)は下水道(ASM)がどうなっているか知る必要はない。
そういう汚れ仕事はそれ専用の人間に任せればいいのさ。

667 名前:デフォルトの名無しさん :04/05/25 14:34
Cからはじめるより
Eiffelまず勉強してGCに慣れ親しんでから
C++やるのがいいと思うよ。
ちょうど
オートマに慣れてからミッション運転する感じかな。

668 名前:デフォルトの名無しさん :04/05/25 14:37
C++でエンジン作って、
Cでラッピングして__stdcall でエクスポートするdll作って、
C#でそれをインポートしてGUI作る
ってのが効率のいいWindowsアプリ作りの作法ってことでいい?

669 名前:デフォルトの名無しさん :04/05/25 14:52
C++でエンジンをCOM形式で作ってDelphiでそれを利用するのがいいんじゃないか

670 名前:デフォルトの名無しさん :04/05/25 14:55
車を運転する者から言わせてもらうと、
>オートマに慣れてからミッション運転する感じかな。
つまり、エンストしまくりだし、全く使いこなせないってことですね。

671 名前:デフォルトの名無しさん :04/05/25 15:46
C++で基底クラスのデストラクタにvirtualをつけると
なぜ適切にデストラクタが呼び出されるのか理解に詰まってるので教えてください。

たとえば以下のような基底クラスと派生クラスがあったコードの場合

class CParent {
int m_nSize;
public:
CParent(int nSize =0) : m_nSize(nSize) {}
~CParent(){}
};
class CChild : public CParent {
int* m_lpnData;
public:
CChild(int nSize =0) : CParent(nSize), m_lpnData(new int [nSize]){}
~CChild(){ delete [] m_lpnData; }
};
int main() {
CParent* p =new CChild(10);
delete p;
return 0;
}

このようにするとpがCParentのポインタのためCChildのデストラクタが呼ばれないのはわかります。
しかし、ここでCParentのデストラクタにvirtualを付加すると、なぜCChildのデストラクタから適切に
呼ばれるのでしょうか。
virutalは派生クラスで関数をオーバーライドするときに使うものだと理解しています。
関数がオーバーライドされている場合は、ポインタが基底クラスのものでも実行時型が
派生クラスのものであれば、派生クラスのオーバーライドした関数が呼ばれるのはわかります。
しかし、関数をオーバーライドしていない場合は基底クラスの関数が呼ばれると思います。
このコードの場合、派生クラスでは基底クラスのデストラクタをオーバーライドしているわけではないですし、
デストラクタの名前ももちろん違うのに、なぜCChildのデストラクタが呼ばれるのでしょうか?

672 名前:671 :04/05/25 15:57
結局こんな風になるのではないかと考えてしまっています。

@delete p; が実行される。
ApはCParentのポインタなので、~CParent()を実行しに行く。
Bpの指す実行時型はCChildなので、CChildに~CParent()がオーバーライドされてないか見に行く。
CCChildにオーバーライドされた~CParent()が見つからないので、CParentの~CParent()を実行する。

673 名前:デフォルトの名無しさん :04/05/25 16:12
>>671
関数のオーバーライドと同じだ。

674 名前:デフォルトの名無しさん :04/05/25 16:15
エンジン作りはトヨタには無理だな

675 名前:671 :04/05/25 16:29
>>673
関数のオーバーライドは
名前も返り値も引数も同じ関数が必要なんじゃないですか?

676 名前:デフォルトの名無しさん :04/05/25 16:32
デストラクタは関数じゃないし。

677 名前:デフォルトの名無しさん :04/05/25 16:39
>>671
仮想デストラクタにするということは、デストラクタのポインタを持つということだ。
だから、delete p で、CParentのデストラクタではなく、ポインタが指すデストラクタ、
すなわちCChildのデストラクタが呼び出される。
仮想デストラクタになってなければ、delete pはCParentのデストラクタしか呼べない。
わかった?

678 名前:671 :04/05/25 18:45
>>676
デストラクタはインスタンスが開放されるときに呼ばれる
関数と本などには書いてありましたよ

>>677
ではポインタの指す実行時型のデストラクタから呼びに行くというのは
deleteの仕様ということになるのでしょうか?
なんとなくわかりました

679 名前:デフォルトの名無しさん :04/05/25 18:46
ほんとにC知らなくてもC++できるの?

680 名前:デフォルトの名無しさん :04/05/25 18:56
>>678
うーん、本当にわかったのかなぁ。
deleteの仕様云々は関係ないんだけどな。結果的にそれはdeleteのときに起こるわけだけど。
デストラクタが呼ばれる、それは仮想か否かという、極めてシンプルな話なんだよな。

>>679
Cを知らなくてもC++を習得することは出来る。

681 名前:デフォルトの名無しさん :04/05/25 19:14
>>679
俺はCを飛ばして一気にC++に行ったよ。
しかもPerlから。

682 名前:デフォルトの名無しさん :04/05/25 19:20
>>679
それって昔からある議論だね。たしかにC++からでもOKだが、
昔は多くのC++書籍がCの知識前提のような書き方だったからなぁ。
Cの標準ライブラリは使うことあるんじゃないかな。
それぐらい覚えれば大丈夫か?

683 名前:デフォルトの名無しさん :04/05/25 19:29
>>682
裏を返せば、入門書の問題ってことでしょ。
Cの標準ライブラリも「使える」というだけで、使う必要はない。
はっきり言って、目標がC++なら、Cから覚えるのは遠回り。
ちょっとした練習プログラムだって、わざわざprintf使うより、
いきなり coutでいいでしょ。scanfにいたっては、勘弁してよ状態だし。

684 名前:デフォルトの名無しさん :04/05/25 20:08
その後、どう説明すればわかりやすいか、いろいろ考えてみた。

>ではポインタの指す実行時型のデストラクタから呼びに行くというのは

いやいや、pがCParentのポインタである以上、あくまでCParentのデストラクタを呼び出そうとする。
ところが、CParentのデストラクタを仮想にしておくと、デストラクタのありかはインスタンスをみてね、となるわけ。
で、みてみると、pが指していたのは実はCChildクラスのインスタンスだったので、
なんとCChildのデストラクタを指しているわけですよ。

さて、ここで基本的な前提知識として、CChildはCParentの派生クラスなので、CChildのデストラクタは、
CParentのデストラクタを呼び出します。これは仮想にしてるかどうかとは関係の無い話。

めでたしめでたし。

685 名前:デフォルトの名無しさん :04/05/25 20:18
Cの標準使わないって、assertとかmath系とか
C++の機能にあるんでしょうか?

686 名前:デフォルトの名無しさん :04/05/25 20:24
>>685
ライブラリに機能もへったくれもないが。
>>683の揚げ足取りですか? だからといって、「Cから学べ」にはならんでしょ。
if文はCの機能だから〜、なんて言う奴いないよね。

687 名前:デフォルトの名無しさん :04/05/25 21:09
>>681
ナカーマ。

688 名前:デフォルトの名無しさん :04/05/25 21:33
>>686
別に揚げ足取りというわけではないが、Cから学ぶ学ばないに
対してではなく、C標準ライブラリを使う必要はないと
きっぱり言ってることに対して、聞いただけ。自分はC++
標準ライブラリ、まだよく把握してないんで。

689 名前:デフォルトの名無しさん :04/05/25 22:14
>scanfにいたっては、勘弁してよ状態だし。
まともなCプログラマはscanfなんて使わない。

690 名前:デフォルトの名無しさん :04/05/25 23:18
素人Cプログラマはscanfなんて使えない。

691 名前:デフォルトの名無しさん :04/05/25 23:21
関数をブランドで判断してるテキトー野郎にプロもアマもないだろ

692 名前:デフォルトの名無しさん :04/05/25 23:22
特にこの板でまともな批判ができた香具師は皆無

693 名前:デフォルトの名無しさん :04/05/25 23:56
>>688
そうだよなあ、

 全 く

必要ないと、断言できるのかできないのか
俺様もぜひ拝聴してみたいものだ (ケケケ

694 名前:デフォルトの名無しさん :04/05/26 00:02
こっちにも現れたのか。

695 名前:デフォルトの名無しさん :04/05/26 00:06
結論:VC++でコンパイルできればなんでもいい。

696 名前:デフォルトの名無しさん :04/05/26 02:01
>>695
うむ。

697 名前:デフォルトの名無しさん :04/05/26 02:08
g++ -ansi -pedantic -Wall
で警告もエラーもでなければなんでもいい。

698 名前:デフォルトの名無しさん :04/05/26 03:45
オメコウィルス作りたいんですが

699 名前:デフォルトの名無しさん :04/05/26 13:02
非常に簡単なソフトでプラグイン対応のものを実装したいのですが,
プラグイン対応のソフトを実装する為に有用な資料等を御存知ありませんか?

現在はDLLを追加する度に,ソフト本体に修正を加える必要があります.
これを設計から見直して,プラグイン形式とゆーか本体には一切修正を加えずに機能拡張をしたいのです.


700 名前:デフォルトの名無しさん :04/05/26 13:24
>>699
SPI_API.TXTは?


701 名前:デフォルトの名無しさん :04/05/26 13:38
例えばアーカイバとかなら、まずDLLをロードする。
そのDLL内の決まった名前の関数で、対象のファイルが
自分のサポートしている形式かをチェック。
サポートしてなければ次のDLLを読み込んで、
そのDLL内の同じ名前の関数でチェック。
サポートしてるDLLが見付かれば、そいつで圧縮とか展開とか。
DLLの検索方法は決まったフォルダ内のDLLを全検索とか、
特別にそれ用に決めた拡張子を使って判別するとか。
って辺りが単純な方法。

702 名前:699 :04/05/26 14:32
>>700
DLL側の知識も重要ですが,如何せん私にはレベルが高すぎました…

>>701
なるほど.
分かり易い説明,有難う御座います.

ところでDLLを用いた拡張コンポーネントと,ネットワークによる分散は共存可能なものでしょうか?
具体的にはDLLにて拡張コンポーネントを読み込み,実行はネットワーク上の別の計算機で行う状況です.
また(実現の可能性は取り敢えず考えずに)ネットワーク上のDLLを読み込んで,分散処理といった処理は可能なのでしょうか?

DLLの動的なロードはなんとかなりそうですが,前述の分散に関しては検索キーワードが思いつきません…
御力をもう少し貸して頂けませんか?


703 名前:デフォルトの名無しさん :04/05/26 15:11
単にコードがどこにあるか、というだけの問題じゃないか?

704 名前:デフォルトの名無しさん :04/05/26 15:14
自作板絡みだけど、なんか面白いコードが出てたので貼り。
unionのこの使い方、どうなんですか?

void swap (unsigned char *c);
int main(int argc, char* argv[])
{
 static union{
 unsigned short iPort;
 union {
  unsigned char cPort[2];
  };
 };
 iPort=0xFFEE;
 printf("[変換前:%X:" ,iPort);
 swap(cPort);
 printf( "変換後:%X%X]\n",cPort[0],cPort[1]);
 return (0);
}

void swap (unsigned char *c){
 unsigned char tmp;
 tmp = c[0];
 c[0] = c[1];
 c[1] = tmp;
}

705 名前:デフォルトの名無しさん :04/05/26 15:16
RPC/RMI的なことをやりたいんだとは思うが、お前の力量じゃ無理だからやめとけったほうがいいか?
それ以前にDLLだのはいい加減スレ違いなんだが。

706 名前:デフォルトの名無しさん :04/05/26 15:19
Linuxでマルチスレッドアプリケーションを作ってるんだけど、
なんか途中でプロセスが死ぬ。
しかも何も出力されないから原因がわからないし、
どのスレッドがエラーしてるのかもわからない。

こういう時ってなんかうまくデバッグする方法ない?



707 名前:デフォルトの名無しさん :04/05/26 15:21
>>704
htons/ntohs?

708 名前:デフォルトの名無しさん :04/05/26 15:46
>>704,707
実はネットワーク系ライブラリ関数のhtons()等より、
直接バイトシフトしたマクロやインライン関数の方が実行速度が速かったりする。
是非、お試しあれ。

709 名前:デフォルトの名無しさん :04/05/26 15:46
>>704
無名 union 変数か・・・alias みたいな感じ。
ファイルやバイト列等のバイナリのデータをパースして適切なな型に変換して、
ってときに型変換オペレータを省略できるね。


710 名前:デフォルトの名無しさん :04/05/26 15:49
>>706
coreは出てないの?

711 名前:デフォルトの名無しさん :04/05/26 15:55
>>706
とりあえずgdb使え。話はそれからだ。

712 名前:デフォルトの名無しさん :04/05/26 15:58
>>706
ない。
マルチスレッドプログラムを対話デバッグしようとする行為自体が無謀&無駄。

>>710の指摘しているように、coreからあぼーと位置を特定することは出来るけど、
結局は場当たり的な解析になりがち。
この問題が解決しても、いずれ他にあぼーとされる箇所が現れることでしょう。
多くの開発者は自前のトレース関数・トレースマクロを使ってトレースしている。
素直に通常のデバッグをあきらめて、トレース出力関数の作成に勤しんだ方が建設的だと思うね。

713 名前:712 :04/05/26 16:00
>>711
釣りはヤメレ(w

714 名前:デフォルトの名無しさん :04/05/26 16:01
>>704
union {
  unsigned char cPort[2];
  };
これの意味がわからんのだが、どういう意味があるの?

715 名前:699 :04/05/26 16:04
>>703
確かに.

>>705
そうですね,RMI,Horb的な感じです.
スレ違いですか,申し訳ない.

いろいろと有難う御座いました.


716 名前:デフォルトの名無しさん :04/05/26 17:23
CUIでテトリスを作ってるんですが
ブロックが動くたびに新しい画面を改ページで再描写していると
プレイが長引くと画面がスクロールしまくってDOS画面が
重くなりそうで心配です。
CUIで一旦表示した画面(文字をならべて作った二元配列)を
一旦消してその場に新しい画面を再描写する方法はないでしょうか
TELNETのCUI上で普通にアニメーションしているテトリスを
むかしやったことがあるのですが、いったいどうやってるんでしょうかね

717 名前:デフォルトの名無しさん :04/05/26 17:28
OSと処理系はなんだ?

718 名前:デフォルトの名無しさん :04/05/26 17:32
>>716
完全にスレ違いじゃないか。

719 名前:デフォルトの名無しさん :04/05/26 17:38
>>716
エスケープシーケンスとかで変更部分だけ書き換えれば良い。
テトリスなら、変更部分はほとんど矩形とみなせるので楽だろう。

つーかここはC++相談室ですぜ、旦那。

720 名前:デフォルトの名無しさん :04/05/26 17:42
コンストラクタで例えば

MyClass::MyClass():
my_int(10),my_int(20)
{
}

なんていうメンバ変数の初期化の仕方ってどうよ?
こんな書き方していいっていう本見たことないんだが。

721 名前:デフォルトの名無しさん :04/05/26 17:45
VC++をコンパイラに使って、簡単な実験プログラムをMFC使用せずに
ネットのソースや猫でもわかるを見て試行錯誤してるのですが。
現在作ろうとしてるのが初めてDialogをメインでCreateWindowなどを使わない方法なのですが、
どうもDialogリソースにクラス名を入れると起動後すぐに終了したり、
WM_KEYUPなどのウィンドウメッセージが反応しないなどの壁にぶつかってます。
特に後者はどのようにしたら解決出来るでしょうか?WM_COMMANDなどは正常に反応します。

Window生成したソースだとちゃんとWM_KEYUPなど動いてくれます。
いまいち生成されたWindowとリソースエディタで作ったDialogの違いが分かってないようです。
Dialogを、この生成されたWindowのようには扱えないのでしょうか。
どうかご教授よろしくお願いします。

722 名前:デフォルトの名無しさん :04/05/26 17:46
MFC専用スレGirl

723 名前:デフォルトの名無しさん :04/05/26 17:52
>>720
そりゃ、持ってる本が悪い。
そう書くべきなのだ。

724 名前:デフォルトの名無しさん :04/05/26 17:54
>>720
Effective C++ 買え

725 名前:720 :04/05/26 17:56
>>723 , >>724
そうか。そうだったのか。オレが悪かった。
EffectiveC++持ってるけど、ちょっとしか読んでない。

726 名前:デフォルトの名無しさん :04/05/26 18:06
>>704
C++だとこの記述でもインスタンス出来るんでしょうか?

727 名前:デフォルトの名無しさん :04/05/26 21:20
>>726
はじめて知ったけど、無問題らしい。
http://black.sakura.ne.jp/~third/programming/cpp/cpp44.html


728 名前:デフォルトの名無しさん :04/05/26 21:25
>>727
ちょっと待てよ、初めて知ったって・・・。
C++を勉強してなかったのか?
URL示してまで答えるほどのことでもないぞ。

729 名前:デフォルトの名無しさん :04/05/26 21:27
つーか、見辛いだけで使う必要が無い。

730 名前:デフォルトの名無しさん :04/05/26 21:27
最適化で実行時にメモリ上に存在しなくなるのか?ということを
きいているのではないの

731 名前:デフォルトの名無しさん :04/05/26 22:05
>>729 同意
無名共用体の用途が全然わからない。

>>730
参照がなければコンパイラによって消え去ってしまうよう運命にあるような。


732 名前:デフォルトの名無しさん :04/05/26 22:17
>>731
全然わからないなどと開き直るな。
教えてくださいと言え。

733 名前:デフォルトの名無しさん :04/05/26 22:19
教えて下さい。おながいします。m(_ _)m

734 名前:731 :04/05/26 23:22
>>732
だれがお前ごときに教えを乞うかよ。ボケ。だまってろ。
ぶち殺されたいか?

735 名前:デフォルトの名無しさん :04/05/27 00:11
>>734
通報しますた

736 名前:デフォルトの名無しさん :04/05/27 00:29
>>734
なんだ、おまいも使い道わからんのじゃないか(w

737 名前:デフォルトの名無しさん :04/05/27 00:32
>>732-736 自演ご苦労

738 名前:デフォルトの名無しさん :04/05/27 01:00
>>723
>そう書くべきなのだ。

え?
コンストラクタが複数種ある場合など、
いちいちあのようなメンバ変数初期化コードを書くのはウザイと思うなぁ。

739 名前:デフォルトの名無しさん :04/05/27 01:04
>>738
代入ならウザくないのか?
値を設定しないのも問題外だろ。

740 名前:デフォルトの名無しさん :04/05/27 01:07
初期化→代入が気にならない、参照メンバが無いとかなら気にする必要は無いけど
普通は>>723 の通りにすべきだろ。

741 名前:721 :04/05/27 01:31
>>722
MFCを「使用せずに」とのことですけど。。

742 名前:デフォルトの名無しさん :04/05/27 01:51
Win32質問箱

743 名前:721 :04/05/27 02:02
ありがとうございます。そちらで移動させていただきます。m(_ _)m

744 名前:デフォルトの名無しさん :04/05/27 02:46
my_intを二回初期化して何が嬉しいのか分からん。

>>739
代入だと、init( void )を一発書いておいて、複数のコンストラクタから呼べばいいよね?

745 名前:デフォルトの名無しさん :04/05/27 02:52
>>744
EffectiveC++嫁

746 名前:デフォルトの名無しさん :04/05/27 03:03
何章?


747 名前:デフォルトの名無しさん :04/05/27 03:04
>>745
EffectiveC++読んだことあるけど、
コンストラクタ内での代入が駄目だって記述とかあったか?

748 名前:デフォルトの名無しさん :04/05/27 03:11
>>747
お前はバカかアホのどっちかだ。どうせ読んだの表紙だけだろ。
http://www.google.com/search?hl=ja&ie=UTF-8&safe=off&q=Effective+C%2B%2B+%E4%BB%A3%E5%85%A5%E3%82%88%E3%82%8A%E3%82%82%E5%88%9D%E6%9C%9F%E5%8C%96%E3%82%92%E4%BD%BF%E3%81%8A%E3%81%86&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja


749 名前:744 :04/05/27 03:20
書き方が悪かったが、俺は初期化派ね。コンストラクタで代入などせんよ。

んな事より、my_intを2回初期化しているのに突っ込みが無いのは何で?

750 名前:デフォルトの名無しさん :04/05/27 03:22
単に初期化子の例を挙げたかっただけだろ。
それくらい読み取れ。


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