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


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

C++相談室 part22
251 名前:202 :03/08/14 17:59
>>246
ありがとう。。。

252 名前:デフォルトの名無しさん :03/08/14 19:42
>>247
class benki {
 static const int unko=0xF00D;
};

定食になりますた


253 名前:デフォルトの名無しさん :03/08/14 20:06
>>252
Scatologyパターンってやつですね

254 名前:デフォルトの名無しさん :03/08/14 21:20
>>253
ヤヤウケタ

255 名前:デフォルトの名無しさん :03/08/14 22:29
C++超初心者なのですがよろしくお願いいたします。m(__)m
関数を実装するのに
func(CPoint* pPoint)
とポインタで実装するか
func(CPoint& Point)
と参照を使って実装するか迷うのですが
どういう風に使い分ければいいのでしょうか。

256 名前:直リン :03/08/14 22:29
http://homepage.mac.com/maki170001/

257 名前:デフォルトの名無しさん :03/08/14 22:34
>>255
いろいろ流派があるんだけど、大きく分けると2派。

1. NULL が来る可能性がある場合のみポインタで後は参照。
2. 関数内部で値を書き換えるならポインタ、そうでないなら参照
 (呼び出し側で、値渡しと明らかに区別が付くように)

俺は 1 の方。


258 名前:255 :03/08/14 22:50
>>257
レスありがとうございます!
あっ、ヌルポインタが来る場合があるのですね。
MFCを勉強しているのですが、たいていポインタで渡して
いるのでなんでだろうと思ったのですが、積極的に
参照を使ってもいいんですね。納得です!

259 名前:デフォルトの名無しさん :03/08/14 22:56
>>258
MFC ってもうかなり古いから、
MFC の設計方針はあんまり当てにならんよ。


260 名前:デフォルトの名無しさん :03/08/14 23:14
まあ、古いから駄目と言うわけでもないんだが、
折れは特別な理由がない限りはほとんどポインタ。
最悪、仕様変更があったときでも対応しやすいし。
(賛否があるのはわかった上でね。)

261 名前:デフォルトの名無しさん :03/08/15 06:48
おれは>>257のでいくと2かな。
だからint unko(const hoge& hage)とかしかつかったことないなぁ。


262 名前:デフォルトの名無しさん :03/08/15 07:05
俺はオブジェクト指向上の要素としてのクラスは全部ポインタ経由だな。
つか、どうせ生成〜保持〜破棄とポインタで扱うことがほとんどだから、
いちいち関数の引数に渡すときにデリファレンスするのも馬鹿らしいって
理由なんだが。

263 名前:デフォルトの名無しさん :03/08/15 07:34
値で多態ができる仕組みが欲しい。
RTIを駆使すれば実装できるんじゃないかねえ

264 名前:247 :03/08/15 08:54
>>250-252
コンパイル時に置き換えてくれるの?

265 名前:デフォルトの名無しさん :03/08/15 09:21
実際にどうなるかなど気にしない方がいい

266 名前:デフォルトの名無しさん :03/08/15 10:15
ある1つのクラス内でしか使わない定数ってどんな風に定義してる?
1. static const int unko = 100;
2. const int unko;(初期化リストで初期化)
3. enum { unko = 100, };
4. クラス外でconst int unko = 100;
5. #define unko 100
6. 憧れのあの子はウンコなんてしない

267 名前:デフォルトの名無しさん :03/08/15 10:17
>>266
お前、「6. 憧れのあの子はウンコなんてしない 」と書きたかっただけだろ?

268 名前:266 :03/08/15 10:20
>>267
いや、いたって真面目な質問です。
6. は定数なんて使わないって意味。

269 名前:デフォルトの名無しさん :03/08/15 10:47
1. static const int unko = 100;
3. enum { unko = 100, };

これ以外は機血画位

270 名前:デフォルトの名無しさん :03/08/15 10:49
特に4と5はな。


271 名前:デフォルトの名無しさん :03/08/15 11:05
2はクラス内定数じゃない気が

272 名前:266 :03/08/15 11:21
ごめん、今まで4の基地外だった。
他人様のソース見る限りでは1は少数派かな?
って事で3で逝きます。

273 名前:デフォルトの名無しさん :03/08/15 11:43
>>266
4.はcppファイルの方に書くんでしょ?
それならよく使う。
ヘッダファイルを汚さない手を他に思いつかないんだよね。

274 名前:デフォルトの名無しさん :03/08/15 12:02
>>273
cpp内で継承クラス作って、そこに書けばいいのでは?

275 名前:デフォルトの名無しさん :03/08/15 12:03
>>272
272 みんな好き好んで 3 を使ってるわけじゃない。
ほんとは 1 にしたいけど、古いコンパイラ(VC6 のとか)は
1 を定数として認識してくれないから。
(固定長の配列の宣言とかに使えない)

>>273
cpp ファイル内で使いたいんなら static つけてファイル内スコープに。


276 名前:デフォルトの名無しさん :03/08/15 12:05
リンケージ

277 名前:デフォルトの名無しさん :03/08/15 12:07
>>275
4.2 -1-
"The use of the static keyword is deprecated when declaring objects in namespace scope."

278 名前:デフォルトの名無しさん :03/08/15 12:14
今から借りてきたあの本を根性で前ページスキャンします。

279 名前:デフォルトの名無しさん :03/08/15 12:20
>277
それがどう関係するのか教えてください。
namespaceスコープではなくclassスコープの話をしているのだと認識していました。


280 名前:デフォルトの名無しさん :03/08/15 12:26
>>272
テンプレートとも相性抜群だからおいらも 3 をお薦めしとくよ。

281 名前:266 :03/08/15 13:04
共有するソースなら3を、そうでなければ1を。
状況に応じて4を使い分ければいいかな?

所で文字列定数ってどうしてる?
クラス外で const char* unko = "もりもり";
これは逝って良し?

282 名前:デフォルトの名無しさん :03/08/15 13:39
どんなプログラムかによってどんな手段がいいかは変わってくる。

フォーマルにやる必要がある場合は、面倒くさいけど
文字列定数に関してはそれだけをひとつのファイルに
まとめたりするのがベスト。

おちゃらかでいい場合はリテラル文字列をその場で直埋め。

283 名前:デフォルトの名無しさん :03/08/15 15:09
const char * const unko = "もりもり";

じゃねぇーの?

284 名前:山崎 渉 :03/08/15 15:15
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン

285 名前:デフォルトの名無しさん :03/08/15 17:16
age

286 名前:デフォルトの名無しさん :03/08/15 19:45
あげ

287 名前:デフォルトの名無しさん :03/08/16 10:07
>>281
static const char unko[];
をクラス内に作って、
.cpp 内で const char Unko::unko[] = "もりもり";
と初期化。

288 名前:デフォルトの名無しさん :03/08/16 11:16
>おちゃらかでいい場合はリテラル文字列をその場で直埋め。

ファイルかリソースだな

289 名前:デフォルトの名無しさん :03/08/16 11:19
>>288
多言語化しやすいしな。

290 名前:デフォルトの名無しさん :03/08/16 11:44
>>288
お前はたった数十行規模のプログラムでもそんなことするのか?
まぁ、止めはせんが。

291 名前:デフォルトの名無しさん :03/08/16 11:45
>289
YAGNI

292 名前:まりりんまんそん :03/08/16 16:19
先輩の皆様、膣問させてください。m(__)m
{
 int *i;
 float *f;
 double *d;

 i = new int;
 f = new float;
 d = new double;

 //何らかの処理

 delete d,f,i; // ←ココ
}

最後の行のdelete文はi,f,dの指す3つの領域をすべて正しく解放しますか?
それとも、

delete d;delete f;delete i;

のようにちゃんとばらばらに記述しないといけませんか?
bcc32でコンパイルしてみてるんですが、いずれもエラーはでません。
ちゅか、メモリが解放されたかどうかのチェックのしかたがわからないよ、ママン。('・c_・` )

293 名前:デフォルトの名無しさん :03/08/16 16:24
>>292
deleteされるのはiだけ。
,演算子(コンマ演算子)を調べるべし。

294 名前:デフォルトの名無しさん :03/08/16 16:26
> delete d,f,i; // ←ココ
ダメ。 これだと d の指す領域しか開放されない。
(delete d), f, i;
http://www.microsoft.com/japan/developer/library/vclang/_pluslang_c.2b2b_.operators.htm

295 名前:デフォルトの名無しさん :03/08/16 16:32
>>292
> ちゅか、メモリが解放されたかどうかのチェックのしかたがわからないよ、ママン。('・c_・` )
Borland の C++Builder を買えば
http://www.borland.co.jp/cppbuilder/papers/codeguard/index.html
とかでチェックできるけど。free版だとなさそうな気がする。

296 名前:まりりんまんそん :03/08/16 16:39
>>293-294
サンクスです。マンコ^h^h^hコンマ演算子、調べてみます。

>>295
今のところ適当なループを書いてクラッシュするまでまわしたりしてますが・・・。
そうですか、ありませんか・・・。;_;

回答ありがとうございました。m(__)m

297 名前:デフォルトの名無しさん :03/08/16 16:43
デストラクタが呼ばれた時に何らかの情報を出力するクラスを作って試せばいいじゃない。

298 名前:293 :03/08/16 17:18
ごめんなさい。虚偽を書きました。
294氏が正しい。

299 名前:デフォルトの名無しさん :03/08/16 17:35
似たような落とし穴にこんなのがある。
ttp://www.tietew.jp/cppll/archive/8838 (後半部分)

300 名前:デフォルトの名無しさん :03/08/16 22:05

コーポレイトソフトウェアていうサポセンの馬鹿が
PGに喧嘩売ってます。

http://money.2ch.net/test/read.cgi/haken/1057486349/287

腹立ちました。
みんなでやっつけにいこう。

301 名前:デフォルトの名無しさん :03/08/16 22:22
んなことで所構わず貼って回るなよな。

302 名前:デフォルトの名無しさん :03/08/16 22:25
C++勉強中の者ですが、マクロがいまいち理解できません。
宣言した名前に数字や命令などを入れるんですよね?
それで後から書き換える時に楽にできる、と。

そこで疑問なのですが、例えば数字を入れる場合で、
普通に変数でやる場合と何か違いはあるんですか?
命令を入れる場合でも、普通に関数でやれば良いような・・・

あと、C++とC#を比較するとどの辺が違いますかね?

303 名前:まりりんまんそん :03/08/16 22:30
>>302
マクロは「単なる文字列である」ことが重要。

例えば
#define M男 鞭で叩かれ蝋燭で熱せられることに喜びを見出す者。雄
と定義すると、
コンパイル時にソースコード中の「M男」という文字列が
「鞭で叩かれ蝋燭で熱せられることに喜びを見出す者。雄」に置き換わる。
単にテキストが置換されるだけなので、
どんな文字の定義も許される。
逆にいうと、置換された結果が正しいプログラム文であるかどうかは、
プログラマが保証しなければならない。

・・・たしか、こんな感じ。

304 名前:デフォルトの名無しさん :03/08/16 22:37
>>302
マクロはC言語からのレガシー(遺産)で、昔は const や inline なんかがなかったのよ。
だからいまなら const や inline なんかでやるようなことを全部マクロでやってたわけ。
だから const や inline なんかでできることでマクロを使うの避けましょう。

まぁ、よくわかんなかったら今はとりあえずマクロは他に打つ手が無い時の最後の手段だってことだけ覚えとけ。

305 名前:デフォルトの名無しさん :03/08/16 22:39
どんな例だYO!!w

306 名前:デフォルトの名無しさん :03/08/16 23:17
// マクロの簡単な罠ドゾー

#define TAX 1.0+0.05
void main(){
printf("1000*TAX=%.0f", 1000*TAX);
}

307 名前:デフォルトの名無しさん :03/08/16 23:34
const, inline, template, ... などを駆使すれば、
マクロが必要になることってのはあんまりない。
まぁ、完全になくなるってことはないけど。

308 名前:デフォルトの名無しさん :03/08/16 23:39
class fusianasan {
void putchar();
};


309 名前:デフォルトの名無しさん :03/08/16 23:39
マクロはALGOL60で言うところのcall by nameによる呼び出しを実現していると
考えることができる。

普通のC++の関数の呼び出しは call by value である。
ただし、仮引数が参照の場合は call by reference(参照渡し) である。


310 名前:春は来ない :03/08/17 00:31
それは、それは、空を越えて〜 やがて、やがて、迎えに来る〜♪

311 名前:デフォルトの名無しさん :03/08/17 04:29
クラスのstaticな関数はインライン展開されるのでしょうか?
コンパイラ依存であれば、VisualC++ 2003 について
教えて欲しいです。

312 名前:デフォルトの名無しさん :03/08/17 04:54
インライン展開を期待する書き方(クラス定義内に書くかinline指定する)をしており、
コンパイラがインライン展開可能な関数であればインラインになる。

コンパイラにも依存するが
関数自体にも依存するので一概には言えない。

313 名前:デフォルトの名無しさん :03/08/17 06:32
>>311
インライン展開される【保証があるか】
インライン展開される【場合があるか】
どっちが知りたいんだ?

前者なら
http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?lang=jp&bunsyoId=ISO%2FIEC+14882%3A1998&dantaiCd=ISO&status=1&pageNo=0

後者ならアセンブラ嫁

314 名前:デフォルトの名無しさん :03/08/17 06:36
インライン展開に関係ありそうなことと、なさそうなことを考えてみれ。
・再帰
・関数ポインタ
・リンケージの種類

315 名前:311 :03/08/17 07:19
>>312-314
どうもありがとうございました。

316 名前:デフォルトの名無しさん :03/08/17 16:36
それほど多くを知らないせいか、そこら辺のフリーソース見ても、
例外処理をしているものは、ほとんど皆無です。

趣味グラムくらいでは、例外処理って、あまり有用じゃないのでしょうか?

317 名前:デフォルトの名無しさん :03/08/17 16:51
>>316
んなこたない。
けどC++の例外クラスは腐ってるから簡単お手軽に使う気はあまりしないよ。
せめてエラーの原因をstringで持たせりゃいいのに。

318 名前:デフォルトの名無しさん :03/08/17 16:59
>>317
はぁ?
stringで持たせるクラスを派生させればいいだけじゃ?

319 名前:316 :03/08/17 17:03
プロとアマの違いは、エラー処理の厳密さだ!と指摘され、ショックのあまり気がふれ
例外処理でコードを埋めようとしたところ、あまりの例のなさに、がっかりしてたとこでした。

>>317
レスありがとうございます。やっぱり使いづらいのですね。
stringなら簡潔でよかですねぇ。処理の流れを分けて、
可読性を高めるはずなのに、かえってシンプルじゃ無くなったりで…。

どっかで綺麗に実装してるコード例とかないかなぁ…。

320 名前:デフォルトの名無しさん :03/08/17 17:04
それよりstringを投(ry

321 名前:316 :03/08/17 17:05
ぉぅ、書いてる間に…

>>318
なるほどなるほど、やはり皆さんそれぞれ独自に
自分用例外クラスを設けてるんでしょうか。

322 名前:デフォルトの名無しさん :03/08/17 17:07
例外ってC言語のsetjmp,longjmpに相当するぐらいの負荷があるのでしょうか?

323 名前:デフォルトの名無しさん :03/08/17 17:11
C++の例外クラスってこれだもんな・・・
始めてみたときハァ?って思ったよ。
class exception {

public:
exception () throw();
exception (const exception&) throw();
exception& operator= (const exception&) throw();
virtual ~exception () throw();
virtual const char* what () const throw();
};

まともな例外クラスとはこういうものを言うんだよ。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemexceptionmemberstopic.asp

324 名前:316 :03/08/17 17:33
>>323
うーーむ、すいません。熱心に読んでは見たのですが
使い方が良く分からなくて….NETが無いと駄目なのかな…。

なんとなく、すごそうだってのは良く分かりました。

325 名前:デフォルトの名無しさん :03/08/17 17:36
>>323
ハァ? それと同じようなモン派生させてそれ使えばいいだろ。何度も言わせんな馬鹿。

326 名前:316 :03/08/17 17:50
>>325
レス番違うけど、俺へのレスかな…すんません、もう何がなにやら。

327 名前:316 :03/08/17 17:52
あまり長引いても迷惑ですし、まだしばらくは分相応に
返り値でエラーチェックに戻ります…レスありがとうございました

328 名前:デフォルトの名無しさん :03/08/17 17:57
レス番違うく無いけどね



329 名前:デフォルトの名無しさん :03/08/17 18:12
厨房用例外クラス

class Error
{
 std::string message;
public:
 Error(std::string msg): message(msg){}
 std::string const &Message(){ return message; }
 static void Check(bool exp, std::string message){
  if(!exp) throw Error(message);
 }
};

int main(int argc, char* argv[])
{
 int n = 0;
 try{
  Error::Check(n==3, "n==0でなければならない");
 }catch(Error &e){
  std::cout << "ERROR:" << e.Message() << std::endl;
 }
 return 0;
}

330 名前:デフォルトの名無しさん :03/08/17 18:16
assertで十分

331 名前:デフォルトの名無しさん :03/08/17 18:32
>>322について誰か知りませんか?

332 名前:デフォルトの名無しさん :03/08/17 18:33
>>331
自分でasmファイル吐くコンパイルオプション付けて調べてみたらどうですか?

333 名前:デフォルトの名無しさん :03/08/17 18:35
>>332
知らないならだまっててね

334 名前:デフォルトの名無しさん :03/08/17 18:38
チンカス

335 名前:デフォルトの名無しさん :03/08/17 18:39
プ

336 名前:デフォルトの名無しさん :03/08/17 18:39
↓以下厨の煽りあい

337 名前:デフォルトの名無しさん :03/08/17 18:40
asmも分からないのに速度なんて気にしてる時点で厨丸出し

338 名前:デフォルトの名無しさん :03/08/17 18:42
てかさぁ、質問されたこと以外のことを書き込んでる時点で荒らしじゃね?

339 名前:デフォルトの名無しさん :03/08/17 18:44
夏全開

340 名前:デフォルトの名無しさん :03/08/17 18:47
                   _,,,,,.........,,,,__
                 /:;:;:;:;:;:;:;:;:;:;:;:;:;,丶
..    さっさと教えれ…  /:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;.,ヽ
                 i' ' ' ' ' ' ' ' 'i;:;:;:;:;:;:;:;:;.,|
    ,.-‐¬ ̄-、¨¬‐、  |\,. 、/  L:;:;:;:;:;:;.;.l
   ////""`'""''ヽソ-‐l=・= =・=  ヽ:;/¨iノヽ、
  //////」  -=== }  |         ,ノ./lllll/、
  i//ノソ,._______,.""'  '".i,  l `_       ./lllll/  ヽ
  ヽ彡i.6 ̄ ̄i.,__ノ⌒i.,_ノ ..::ゝ.,_____,,,...- /llllllll/    ヽ
  /ヽ ゝ'    ,rti.l.l.l.、)ゝノlllllllllゝ.,__,ノlllllllllllllソ     .}
⌒`ヽ、ヽ li       ./ヽllllllllllllllllllllllllllllllllllllllliゝ /    /
、   V ヽ ゝ  _,......__ ノノ  ヽllllllllllllllllllllllllllllllllli/    ./
丶、,.、,ヽ     ミ三   ` ¬ ‐‐---‐¬ ¨ ̄
        ((   ̄ ̄ ¨¬‐- ..,_
          l 川 |

341 名前:デフォルトの名無しさん :03/08/17 18:53
あーあ、役に立たねぇ板だな。時間損した。

342 名前:デフォルトの名無しさん :03/08/17 18:56
>>341
使うのが難しい板ですからね。
質問者のレベルによっては何の役にも立たないんですよ。

343 名前:デフォルトの名無しさん :03/08/17 18:59
>>341
只なんだよ、只。
乞食根性は仕方ないが
少しは隠せ、恥を知れ。

344 名前:デフォルトの名無しさん :03/08/17 19:03
おみやげ。

技術系メーリングリストで質問するときのパターン・ランゲージ
http://www.hyuki.com/writing/techask.html
真・技術系メーリングリスト FAQ
http://www.geocities.co.jp/SiliconValley/5656/

メーリングリストを掲示板に置き換えても通用するから読んでね。

345 名前:↑↑↑↑↑↑↑↑ :03/08/17 19:07
ブラクラ

346 名前:デフォルトの名無しさん :03/08/17 19:37
ところで、>>322について誰か知りませんか?


347 名前:デフォルトの名無しさん :03/08/17 19:41
>>346
ある
# 人に聞くよりプログラム書いて時間計れ!

348 名前:デフォルトの名無しさん :03/08/17 19:41
>>347
知らないならだまっててね

349 名前:デフォルトの名無しさん :03/08/17 19:43
チンカス

350 名前:デフォルトの名無しさん :03/08/17 19:43
無限ループの予感!

351 名前:デフォルトの名無しさん :03/08/17 19:47
while (true) {
 ところで、>>322について誰か知りませんか?
 自分で調べてみたら?
 知らないならだまっててね
 チンカス
}

352 名前:デフォルトの名無しさん :03/08/17 19:52
#ってなに
C#って単語を時々きくけど。

353 名前:デフォルトの名無しさん :03/08/17 19:53
>>348は騙りかJava厨、C#厨だと思うが
アセンブラで見るか、それがわからなきゃ
簡単なベンチマークぐらい書けよ。つーか、レベル低杉。

# >>352は釣りと見た。

354 名前:322 :03/08/17 20:00
うう、すいません・・・つまらない質問してしまって・・・
私は322以降発言していないのですが・・・
私のせいでなんかスレが荒れてしまって本当に申し訳ない・・・


話は変わるのですが、>>322のレスについて誰かご存知の方はいらっしゃいませんか?

355 名前:デフォルトの名無しさん :03/08/17 20:07
>>354
謝らなくていいから>>353が言っていることを無視するな

356 名前:デフォルトの名無しさん :03/08/17 20:07
今日C++を始めたんですが、
BCC5.5で

/////////////////////////
#include <iostream.h>
int main(void)
{
cout << "test002";

return 0;
}
/////////////////////////
をコンパイルすると、

/////////////////////////
致命的エラー F1003 c:\(省略)\include\stdcomp.h 5: erroe 指令: Must use C++ for STDCONP.h
/////////////////////////

と、表示されコンパイルできないんですが、、、

ちなみに堀越一雄著「決定版初めてのC++」を参考にしています。
著者が使用しているg++コンパイラじゃないと使えないんでしょうか?
それともiostream.hが入ってないだけ?

お願いします。

357 名前:デフォルトの名無しさん :03/08/17 20:08
理論抜きでいきなりベンチとったりアセンブラソース眺める奴は馬鹿。

358 名前:322 :03/08/17 20:08
>>355
知らないならズボンのチャックを閉じていてください。

359 名前:デフォルトの名無しさん :03/08/17 20:12
>>356
拡張子がcppになっていないとか

360 名前:デフォルトの名無しさん :03/08/17 20:12
>>356
本古すぎ

361 名前:デフォルトの名無しさん :03/08/17 20:16
オブジェクトのアンワインドの分だけ例外が遅い。

362 名前:デフォルトの名無しさん :03/08/17 20:20
>>357
アセンブラのソース眺めれば理論が分かるだろ

363 名前:デフォルトの名無しさん :03/08/17 20:22
>>359
拡張子は「c」になってます。
>>360
図書館でC++関連の本を探したらコレしかなかったんで・・・。

364 名前:356 :03/08/17 20:22
>>357
コレ、私です。

365 名前:356 :03/08/17 20:23
>>363-364
失礼こっちでした。
焦りすぎ、、、

366 名前:デフォルトの名無しさん :03/08/17 20:25
>>365
拡張子cppにして本屋にいって本を買ってきなさい

367 名前:356 :03/08/17 20:34
>>366
あっ!
出来ました!
ありがとうございます・・・。

何度もスイマセンが
独習用として買う場合のお勧めを教えて下さいませんか?
値段は安ければ文句無いですがひとまず保留として、
C++初心者分かりやすいのをお願いします。

368 名前:デフォルトの名無しさん :03/08/17 20:38
なんでできるんだろ
.hつけるとstd::がいらなくなる???

369 名前:デフォルトの名無しさん :03/08/17 20:43
>>367
ttp://www5c.biglobe.ne.jp/~ecb/cpp/cpp00.html

所々間違いもあるっぽいがとりあえずこのへんでもみとけ。

370 名前:デフォルトの名無しさん :03/08/17 20:44
>>368
.h 付きのヘッダは namespace std が無かった頃の負の遺産なので。

371 名前:356 :03/08/17 20:47
>>369
参考になりました。
ありがとうございます。

372 名前:デフォルトの名無しさん :03/08/17 20:47
一般的には .h 付きのヘッダは推奨ではないが、
移植性を考えると現状では .h 付きのヘッダのほうがよかったりする。


373 名前:デフォルトの名無しさん :03/08/17 21:00
>>372 んなこたぁない。

374 名前:デフォルトの名無しさん :03/08/17 21:22
C++本気でマスターしようとするなら、本代は最低2万はかかるよねぇ

375 名前:デフォルトの名無しさん :03/08/17 21:23
>>374
最近はネットですむけどね。


376 名前:デフォルトの名無しさん :03/08/17 21:33
>>374
英語が読めれば、ネットで読みきれないほどの記事があふれてる。本要らない。

377 名前:デフォルトの名無しさん :03/08/17 21:36
>>354
だから
「ある」
ってさっき言ったじゃん


378 名前:デフォルトの名無しさん :03/08/17 21:37
>>370
わしの使っている本にはusing namespaceに関する表記がまったくないのですが、
なんかいいサイトを知りませぬか?;q;

379 名前:デフォルトの名無しさん :03/08/17 21:47
>>373
.h 付きでないヘッダに対応している処理系を対応し始めたバージョンを併記して
5つ以上リストアップしてくれ。それができないならそんなこと言うな。
できたら負けを認めよう。

380 名前:デフォルトの名無しさん :03/08/17 21:55
C++勉強中です。
とあるクラスでひとつのメンバ関数をconstにしたら、連鎖的に書き換える必要がでてきて、
最終的に全てのメンバ関数がconstになり、全てのメンバ変数がmutableになりました。
これってたぶん使い方を誤ってますよね。
mutableの効果的な使用法を解説しているサイトはありませんでしょうか?

381 名前:373 :03/08/17 21:57
>>379
めんどくさい。STLport使えよ。

382 名前:デフォルトの名無しさん :03/08/17 22:00
>>380
mutable使わない方向でお願いします。

383 名前:デフォルトの名無しさん :03/08/17 22:02
>>381
STLportって printf とか C 言語のときからの標準関数も含んでるの?

384 名前:デフォルトの名無しさん :03/08/17 22:04
mutable を使う例としては参照カウントぐらいで、
それ以外で mutable を使うことは滅多にない。

385 名前:デフォルトの名無しさん :03/08/17 22:05
>最終的に全てのメンバ関数がconstになり、全てのメンバ変数がmutableになりました。

意味なし。最強

386 名前:381 :03/08/17 22:06
>>383
ごめん、聞かれてる意味がわからない。

387 名前:デフォルトの名無しさん :03/08/17 22:07
VC7.1でSTLPortって使えるの?

388 名前:デフォルトの名無しさん :03/08/17 22:07
通報しました

389 名前:380 :03/08/17 22:08
>>382 >>384
ありがとうございます。
しばらくは mutable は存在しないものとして学習を進めていくことにします。

390 名前:380 :03/08/17 22:10
>>385
やっぱり・・・。そんな気はしたんですよね。

391 名前:デフォルトの名無しさん :03/08/17 22:11
メンバ変数を変更するメンバ関数ではconstを付けるな

メンバ変数を見るだけのメンバ関数にはconstを付けろ

392 名前:デフォルトの名無しさん :03/08/17 22:12
メンバ変数を見るだけのメンバ関数なのにiteratorで舐め回すとエラーが出ます。

393 名前:デフォルトの名無しさん :03/08/17 22:15
>>392
const_iteratorでも?

394 名前:デフォルトの名無しさん :03/08/17 22:15
>>392
const_iteratorにしる。

395 名前:デフォルトの名無しさん :03/08/17 22:16
>>392
const_iteratorじゃだめ?

396 名前:デフォルトの名無しさん :03/08/17 22:17
>>379
> .h 付きでないヘッダに対応している処理系を対応し始めたバージョンを併記して
> 5つ以上リストアップしてくれ。それができないならそんなこと言うな。

知らんが、今後シェア最大になるであろう Visual Studio .NET 2003 には .h 付きヘッダが
含まれていないのだが。それでも .h を入れた方が移植性が高いと思うのか?

397 名前:デフォルトの名無しさん :03/08/17 22:20
C++って一貫して一貫性がないな。

398 名前:デフォルトの名無しさん :03/08/17 22:21
322と名乗っている教えて君に【無礼者】のレッテルを貼る
教授または先輩に見放された理由がよくわかる

399 名前:デフォルトの名無しさん :03/08/17 22:22
それは一貫性だな。

400 名前:デフォルトの名無しさん :03/08/17 22:23
>>396
それは今後の話だろ?
現状では同じ VC でも未だにバージョン6が主流。

401 名前:デフォルトの名無しさん :03/08/17 22:25
>>400
で、だから.hつけるのかね?

402 名前:デフォルトの名無しさん :03/08/17 22:26
メタ一貫性だろ

403 名前:デフォルトの名無しさん :03/08/17 22:27
>>396
まじ!?
じゃあCのソースをコンパイルできないじゃん。

404 名前:デフォルトの名無しさん :03/08/17 22:31
>>403
無いのはiosteam.hとかだろ。たぶん。
Cでコンパイルすればいいんだしさ。どうせ。

405 名前:デフォルトの名無しさん :03/08/17 22:33
>>401
.h 付きじゃないとダメな処理系の時にはどうしてるの?
#if をいちいち使ってるの?

406 名前:デフォルトの名無しさん :03/08/17 22:36
>>405
.h 付きだとダメな処理系の時にはどうしてるの?
#if をいちいち使ってるの?

407 名前:デフォルトの名無しさん :03/08/17 22:39
>>406
そんな処理系使ったことないある。
そんな処理系、実際どれくらいあるの?

408 名前:デフォルトの名無しさん :03/08/17 22:42
.h月じゃないと駄目な処理系に出くわしたら
泣く泣く自分で.h付かないヘッダ作って、中で.h付きのファイルをincludeしてください

409 名前:デフォルトの名無しさん :03/08/17 22:45
>>408
で、.h 付きだとダメな処理系ってどれくらいあるの?

410 名前:デフォルトの名無しさん :03/08/17 22:51
>>409
VC++.NET 2003

411 名前:デフォルトの名無しさん :03/08/17 22:53
>>410
それだけなの?

412 名前:デフォルトの名無しさん :03/08/17 22:54
gccでも最近のバージョンは警告出す。

413 名前:デフォルトの名無しさん :03/08/17 22:55
>>412
コンパイルは通るんでしょ?

414 名前:デフォルトの名無しさん :03/08/17 22:56
>>411
67%のシェアをほこる処理系ですが

415 名前:デフォルトの名無しさん :03/08/17 22:59
>>414
旧バージョン含めたらでしょ

416 名前:デフォルトの名無しさん :03/08/17 23:00
>>414
それはどこが公表してるどういう数字?
できたらソースきぼんぬ。

417 名前:デフォルトの名無しさん :03/08/17 23:01
ウザ

418 名前:デフォルトの名無しさん :03/08/17 23:03
>>414
VC++.NET 2002は .h付きもサポートされてるよ。
で、その67%のシェアって、2003のシェアじゃないよな。

419 名前:デフォルトの名無しさん :03/08/17 23:06
.hつけなきゃいけない処理系って何?

420 名前:デフォルトの名無しさん :03/08/17 23:08
ttp://www.trickpalace.net/cgi-bin/cppll/enq.cgi?mode=enquete&number=5

母数が少ないからあんまりあてにはならんけど、
そんなに現状と激しい差はないと思われる。

421 名前:デフォルトの名無しさん :03/08/17 23:09
http://www.trickpalace.net/cgi-bin/cppll/enq.cgi?mode=enquete&number=5

422 名前:デフォルトの名無しさん :03/08/17 23:20
>>419
VC6。
あと、最近のバージョンなら大丈夫だと思うが CodeWarrior も。

423 名前:デフォルトの名無しさん :03/08/17 23:26
VC++6.0にiostreamとか入っているよ?

424 名前:デフォルトの名無しさん :03/08/17 23:31
stdio がアウト。( cstdio なら大丈夫 )

425 名前:デフォルトの名無しさん :03/08/17 23:31
ハードリンクも作れない低脳どもが

426 名前:デフォルトの名無しさん :03/08/17 23:33
あと付け加えとくと VC6 は cstdio にしても
標準関数が std 名前空間に入ってくれないから意味が無い。

427 名前:デフォルトの名無しさん :03/08/17 23:34
>>425
そんなもの必要ありませんがなにか?


428 名前:デフォルトの名無しさん :03/08/17 23:34
>>424
何それ? いやマジで。cstdioは知ってるぞ。

429 名前:デフォルトの名無しさん :03/08/17 23:38
// VCだとアウト
#include <stdio>

int main() {
  printf("hoge\n");
  return 0;
}

430 名前:デフォルトの名無しさん :03/08/17 23:38
とりあえず、「STLPortを入れて.hを抜いとく」のがいいんかな。

431 名前:デフォルトの名無しさん :03/08/17 23:41
VC7.1にSTLPort入れるとエラー出るよ

432 名前:デフォルトの名無しさん :03/08/17 23:42
>>430
STLportって printf とか C 言語のときからの標準関数も含んでるの?

以下ループ・・・

433 名前:デフォルトの名無しさん :03/08/17 23:48
>printf とか C 言語のときからの標準関数
は処理系依存の物が沢山あるからそういうことはないよ
処理系で用意されているオリジナルのヘッダを読み込むだけの
同名のヘッダは用意されているけど

434 名前:デフォルトの名無しさん :03/08/17 23:48
429 名前:デフォルトの名無しさん[sage] 投稿日:03/08/17 23:38
// VCだとアウト
#include <stdio>

int main() {
printf("hoge\n");
return 0;
}

435 名前:デフォルトの名無しさん :03/08/17 23:49
>>433
例えば stdio.h をインクルードしてるだけの stdio があるってことですか?

436 名前:デフォルトの名無しさん :03/08/17 23:51
>>435
stdio.hもcstdioもある

437 名前:デフォルトの名無しさん :03/08/17 23:54
>>436
そうなんだ、知らなかったよ。情報ありがとう。

でも >>431 によると STLport を使う事で問題が
万事解決ってわけでもなさそうですね。

438 名前:デフォルトの名無しさん :03/08/17 23:55
>>429
> #include <stdio>
そりゃアウトだろう。

439 名前:デフォルトの名無しさん :03/08/18 00:00
初めて見たよ

440 名前:デフォルトの名無しさん :03/08/18 00:11
>>435>>436 は、微妙に話がかみ合ってない。(cの一文字)
で、>>424>>429は、無視でよろしいですか?

441 名前:デフォルトの名無しさん :03/08/18 00:20
>>422
デマはよせ。VC++ は 4.2 から <iostream> を持っとる。

>>440
> で、>>424>>429は、無視でよろしいですか?
>>403とかも無視でよろしいと思う。

442 名前:デフォルトの名無しさん :03/08/18 00:26
結局、 >>372 が諸悪の根源か?

443 名前:デフォルトの名無しさん :03/08/18 00:48
で、結局のところどういうことなの?
.h 付きだとダメな処理系は VC++.NET 2003 オンリーで、
.h 無しだとダメな処理系は?

444 名前:デフォルトの名無しさん :03/08/18 00:54
>>443
>.h 付きだとダメな処理系は VC++.NET 2003 オンリー
これが正しいわけだが。つーか規格嫁。

445 名前:デフォルトの名無しさん :03/08/18 00:57
>>444
なんだその噛み合ってないレスは

446 名前:デフォルトの名無しさん :03/08/18 00:58
>>444
規格も大切だが移植性の話してるんだから
現状がどうなっているかは重要。
規格にしたがったからって実際に現実の移植性が
いいかとは別問題。

447 名前:デフォルトの名無しさん :03/08/18 01:00
>>446
で、きみは.hつけるのかね?

448 名前:デフォルトの名無しさん :03/08/18 01:03
>>447
その参考にする為に訊いてるんだから
つけているかつけていないか別問題だろ。
頭悪いなぁ。

449 名前:デフォルトの名無しさん :03/08/18 01:07
>>448
規格は一つ。
現実問題は処理系の数だけある。
どっちに依るかは使う処理系によって自ずと決まろう。

450 名前:デフォルトの名無しさん :03/08/18 01:10
規格にすがる気持ちは無いけど、一定の拠り所はほしいよな。

451 名前:デフォルトの名無しさん :03/08/18 01:12
規格規格逝ってる香具師はANSIC++規格に100%準拠したコンパイラが出るまで、
C++を使わないで下さい。

452 名前:デフォルトの名無しさん :03/08/18 01:13
>>450
そうそう。規格通りに実装されてなければ意味をなさないし、
実際問題、まだ全てが規格通りに実装されるわけでもないんだし。

453 名前:デフォルトの名無しさん :03/08/18 01:14
移植性移植性逝ってる香具師はembedded系のC++コンパイラサブセットでも通るコードだけ書いて下さい。

454 名前:デフォルトの名無しさん :03/08/18 01:16
>>453
実際にそれを使う奴は他の処理系でも意識してコード書くだろ。
特に共通で使えそうなコードならなおさら。

455 名前:デフォルトの名無しさん :03/08/18 01:18
要するにだ、今の規格は現場のニーズを満たしていないと。現場のニーズは
規格化するにはあまりにも多岐にわたっていると。そういうことだな?

456 名前:デフォルトの名無しさん :03/08/18 01:19
拠り所が欲しい奴は↓に従え。

まず規格通り .h 無し。
エラーが出るようなら STLport を検討。

それでダメなら .h を足して、対応する std:: の使用を変更する。
このとき、移植性が必要なソースなら処理系で定義済みの
プリプロセッサシンボルで .h の追加、namespaceの変更をスイッチ可能にしておく。

それでだめなら諦めて実装を変える。
このとき、移植性が必要なソースなら処理系で定義済みの以下略

457 名前:322 :03/08/18 01:20
プププ 流石低能ばかりがいるスレですね。

458 名前:デフォルトの名無しさん :03/08/18 01:21
>>457
また来やがったなw

459 名前:デフォルトの名無しさん :03/08/18 01:24
ttp://www.tietew.jp/cppll/archive/121

460 名前:322 :03/08/18 02:19
ああっ、なんてレベルが高いスレッドなんだ。これじゃ誰もついていけない。
2ちゃんねるも捨てたもんじゃないな。まだこんなレベルが高いスレッドが
あるんだもんな。しかし、ここに書き込んでいる連中は相当なレベルの高さ
だよなぁ。これじゃ、こんなにレスがつくのも当たり前だよ。本当に322の
レベルは高いと思うけど、それについて行ける奴も凄いな。まったく尊敬
するよ。おれもみんなを見習ってレベルの高い人間になれるように精進する。
そして、みんなについて行けるような立派なプログラマになるよ。まだ見習い
だけど3ヶ月後の俺を見ていてくれよ。みんなをアッと言わせるプログラマに
なるからさ。その時まで、みんなもレベルが高いのを持続してくれよな。
ほんと、2ちゃんねるに来て幸せだよ、オレは幸せものだなぁ。


461 名前:デフォルトの名無しさん :03/08/18 02:22
>>460
長文オツカレー、だけどみんなもう飽きちゃってんだよねぇ…。

462 名前:1 :03/08/18 02:29
//Basic.h
class Basic {
public:
int b;
Basic() {b=10;}
};

//C1.h
#include "Basic.h"
class C1 : public Basic {
public:
int cc1;
C1() {cc1 = 1;}
};

//C2.h
#include "Basic.h"
class C2 : public Basic {
public:
int cc2;
C2() {cc2 = 2;}
};


463 名前:2 :03/08/18 02:29
//Main.cpp
#include <iostream>
#include "C1.h"
#include "C2.h"
using namespace std;

int main(int argc, char** argv) {
C1 c1;
C2 c2;
cout << "c1.cc1=" << c1.cc1<<"c1.b="<< c1.b;
cout << "c2.cc2=" << c2.cc2 <<"c2.b="<< c2.b;
return 0;
}

%c++ Main.cpp
In file included from C2.h:1,
from Main.cpp:3:
Basic.h:2: redefinition of `class Basic'
Basic.h:2: previous definition of `class Basic'

となってしまいます。どうしたらよいのでしょうか?

464 名前:デフォルトの名無しさん :03/08/18 02:31
とりあえずインクルードガード

465 名前:322 :03/08/18 02:47
>>461
コピペにマジレスオツカレー、だけど俺も飽きてんだよねぇ・・・どうしよう・・・

466 名前:デフォルトの名無しさん :03/08/18 02:51
>>465
とりあえず、話を聞いてくれる友達を作れw

467 名前:デフォルトの名無しさん :03/08/18 03:10
>>464
できましたー。蟻が・。
こんなのに、何時間もかけてたなんて…鬱。

468 名前:デフォルトの名無しさん :03/08/18 12:31
標準では
ネットワークサポートしてないのでしょうか?(C or C++)
VCなのですが、sys/socket.hなどが見つかりません。


469 名前:デフォルトの名無しさん :03/08/18 12:33
>>468
Winsockなんてのがあるよ。でも、あまり期待しないでね。

470 名前:デフォルトの名無しさん :03/08/18 12:41
ネットワークは、標準にはならないと思うよ。
ネットワークが不要な環境や不可能な環境もあるわけで、
ネットワークがCやC++の標準になってしまうと、そういう環境では
非標準のコンパイラしか供給できなくなる。

471 名前:デフォルトの名無しさん :03/08/18 13:16
GUIは、標準にはならないと思うよ。
GUIが不要な環境や不可能な環境もあるわけで、
GUIがCやC++の標準になってしまうと、そういう環境では
非標準のコンパイラしか供給できなくなる。

472 名前:デフォルトの名無しさん :03/08/18 13:47
STLは、標準にはならないと思うよ。
STLが不要な環境や不可能な環境もあるわけで、
STLがCやC++の標準になってしまうと、そういう環境では
非標準のコンパイラしか供給できなくなる。


473 名前:デフォルトの名無しさん :03/08/18 14:35
>>469-470
とりあえずOSで用意されたものを使うことにしました。
ありがとうございました。




474 名前:デフォルトの名無しさん :03/08/18 14:46
一気にレスを読んで、例外に関する話が出てきたけど、
http://www.cuj.com/documents/s=8250/cujcexp2106alexandr/
で紹介されている Enforce を使ってみてはどうかと思う。
実際に使ってみると Log とる時にすごく便利。

何気に std::runtime_error を std::string で実装している環境向けなので、
STLport では使えなかったりするが。


475 名前:デフォルトの名無しさん :03/08/18 17:44
>424 >429
それは、c++の規格通り。

476 名前:デフォルトの名無しさん :03/08/18 17:54
(unsigned int)aは、
coutで変数を表示したりする時に一時的に内容をint型に変更するって理解で合ってますか?

477 名前:デフォルトの名無しさん :03/08/18 18:04
aの型は変わらない

478 名前:デフォルトの名無しさん :03/08/18 18:35
>>476
a を usigned int として解釈する、
もしくは a から usigned int の一時変数を作成することを意味する。

479 名前:デフォルトの名無しさん :03/08/18 18:55
VC++で.h付きのと.h無しのとを混ぜるのはやめような。
どっちをincludeするかで使われるライブラリが異なる。

480 名前:デフォルトの名無しさん :03/08/18 20:09
>>476
a の値を unsigned int に変換した値を得るだけ。
a 自身に変化は無い。
-a が a の値の符号を逆転させた値を得るだけで
a 自身に変化が無いのと同じように。

481 名前:デフォルトの名無しさん :03/08/18 22:24
Javaをあまり知らないので聞きたいのですが、
C++のSTLみたいなgeneric programmingってJavaでそのまま使えます?

482 名前:デフォルトの名無しさん :03/08/18 22:34
>>481
ダウンキャストの嵐でよければ、現状でもそれなりには、
container/iterator/algorithm ... みたいなものはある。

けど、もっとマシな Generics は JDK 1.5 に期待せよ。
http://objectclub.esm.co.jp/JavaGenerics/

483 名前:デフォルトの名無しさん :03/08/18 22:39
>>482
ありがとう。かなり参考になった。

484 名前: ◆uDXNh2HK82 :03/08/18 23:41
Microsoft Visual C++ .NETとBorland C++Builder 6のどちらを買ったほうがいいですか?
使用目的はC++の勉強や趣味にしたいと思っていますが、本格的なアプリケーション作成も十分出来るなどの点を踏まえて教えて下さい。

485 名前:デフォルトの名無しさん :03/08/18 23:56
>>484
VC .NET 2003 にしとけ。
Borland はもう結構長いことバージョンアップしてないし。

486 名前:デフォルトの名無しさん :03/08/19 00:08
>>484
.NET Frameworkかcygwinでまずは遊ぶのがいいよ。
金出したからといってプログラミングができるようになるわけじゃない。
書籍に金をかける方がいい。

487 名前:デフォルトの名無しさん :03/08/19 00:13
IDE無しじゃ学習効率は大幅にダウンする。
書籍以前の問題だな。

488 名前: ◆uDXNh2HK82 :03/08/19 00:30
>>484です。
C++の勉強と書きましたが、GUIの勉強に近いです。
C++の書籍は購入し、Linuxも持っているので標準入出力、反復、条件分岐、ポインタなどはある程度出来ます。
GUIをやろうとするとなんか調子が悪いし、Windowsなどでフリーで提供されているソフトよりもわかりづらい部分もあるので、Windowsでの開発環境を買ってみたいと思いました。
WindowsのAPIも利用したいです。
でもCUIならgccはとてもいいです。

489 名前:デフォルトの名無しさん :03/08/19 00:35
抽象クラスのコンストラクタはpublicでOKでしょうか?

490 名前:デフォルトの名無しさん :03/08/19 00:40
>>489
純粋仮想関数をもってないならprotectedにしとくといいよ。

491 名前:デフォルトの名無しさん :03/08/19 00:40
privateにしていいの?

492 名前:489 :03/08/19 00:46
えと、抽象クラスということで、pure virtualありです。
> 純粋仮想関数をもってないならprotected
は何故なのでしょうか? おしえていただけると嬉しいです。


493 名前:デフォルトの名無しさん :03/08/19 00:52
>>492
Abstract not_implemented;
って感じに抽象クラスのインスタンスを作ってもエラーにならないから。

494 名前:489 :03/08/19 00:54
ああ、なるほど。サブクラスでoverrideしなくてもいいけど、
抽象クラスそのものをインスタンス化してもらっちゃ嫌だと
いうことですね。ありがとうございます。


495 名前:デフォルトの名無しさん :03/08/19 01:23
>>491
全然OK。
そういう設計もある。

496 名前:デフォルトの名無しさん :03/08/19 03:20
教えてください。
int i=15 * 6 * 0.7; // 62
int i=15 * 0.7 * 6; // 63
で前者は62に後者は63になるのですが
これは一体なんなんでしょうか?


497 名前:デフォルトの名無しさん :03/08/19 04:02
C++に関係あるんでしょうか


498 名前:デフォルトの名無しさん :03/08/19 04:05
http://www.google.co.jp/search?q=%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0+%E8%AA%A4%E5%B7%AE&ie=UTF-8&oe=UTF-8&hl=ja&lr=lang_ja
http://www.google.co.jp/search?num=30&hl=ja&ie=UTF-8&oe=UTF-8&c2coff=1&q=%E6%BC%94%E7%AE%97%E5%AD%90+%E5%84%AA%E5%85%88%E9%A0%86%E4%BD%8D+%E7%B5%90%E5%90%88&lr=lang_ja

499 名前:496 :03/08/19 04:28
>>498
ありがとうTT

500 名前:デフォルトの名無しさん :03/08/19 06:40
質問です。
プログラムの実行中に、関数を動的に書き換えたいと考えています。
そこで、オリジナルの関数を宣言した時、
その関数のポインタを得ることは出来ますが
関数の終端を得るにはどうすればよいでしょうか?
(この「終端」はアセンブラ命令でいうretの位置だと捉えてください)


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