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


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

C++相談室 part33
751 名前:デフォルトの名無しさん :04/08/04 20:00
>>747
>deleteもいらないし。

構築成功した場合に使うdeleteは、使えないという特殊な前提ですね・・・。

752 名前:デフォルトの名無しさん :04/08/04 20:02
?使えないって?
構築されたら使えばよいだけの話では…

753 名前:デフォルトの名無しさん :04/08/04 20:03
>>743
Initで例外を投げても同じ事

754 名前:743 :04/08/04 20:05
Init も使いますよ。初期化処理を派生クラスで
カスタマイズしたいときなど。コンストラクタでは
仮想関数呼び出せないので。

755 名前:デフォルトの名無しさん :04/08/04 20:06
>>752
obj* p=new obj();
p->init();
delete obj;

obj* p;
try { p-new obj(); } catch(const exception&) {}
delete obj;
とかやろうとしてるんだろう

756 名前:743 :04/08/04 20:07
× 仮想関数呼び出せないので
○ 派生クラスの仮想関数を呼び出せないので

757 名前:デフォルトの名無しさん :04/08/04 20:07
delete p;だな

758 名前:743 :04/08/04 20:08
>>755
その場合は
Obj* p = NULL;
としておくだけでいいのでは?

759 名前:デフォルトの名無しさん :04/08/04 20:12
つーかスマートポインタ使えよ

760 名前:デフォルトの名無しさん :04/08/04 20:13
deleteなんて持ち出したアホがその台詞言うなよ

761 名前:743 :04/08/04 20:14
まあアホでも何でもいいですけど。
言うほど面倒くさくもないんじゃないですかね。

762 名前:デフォルトの名無しさん :04/08/04 20:21
いつまでつまらん例外の話題でひっぱるんだろう…

763 名前:デフォルトの名無しさん :04/08/04 20:22
もっとましなネタが出るまで

764 名前:デフォルトの名無しさん :04/08/04 20:33
auto_ptrって役に立つのですか?

765 名前:デフォルトの名無しさん :04/08/04 20:35
わざわざscoped_ptr使うくらいならauto_ptrで済ませりゃ良い

766 名前:デフォルトの名無しさん :04/08/04 20:43
>>563の発言は過激だが、ある意味当たってる希ガス。

767 名前:デフォルトの名無しさん :04/08/04 20:51
そして、具体的なことは何も言わないのもいつもどおり

768 名前:デフォルトの名無しさん :04/08/04 21:04
>>767
具体的も何も、他人の作ったクラスを使ってみりゃいい。
その他人の作った仕様の奴隷になった気分を味わえる。
具体例をクレクレ言うのは実戦経験が浅いだけかと。

769 名前:デフォルトの名無しさん :04/08/04 21:05


770 名前:デフォルトの名無しさん :04/08/04 21:07
>>768
あのー・・・
もしかして「俺ライブラリ」みたいなの作ったりするタイプの人ですか?

771 名前:デフォルトの名無しさん :04/08/04 21:08
STLもboostも他人が作ったもんだがバリバリ使っておる。
便利である。

772 名前:デフォルトの名無しさん :04/08/04 21:18
>>770
普通作るでしょ。ライブラリと呼ぶかどうかは別として。
コピペ用の汎用ソースとか。
これなしに、何が蓄積されていくわけ?
で、突き詰めてくと要らないものも判ってくる。

773 名前:デフォルトの名無しさん :04/08/04 21:24
まだ続けますか

774 名前:デフォルトの名無しさん :04/08/04 21:25
>>768
だから、あんたは実戦経験が豊富なんだろ?
実戦経験足りない俺に具体例を提示してくれよ。
どうしてのらりくらりと核心から逃げるんだ?

他人のクラス使ってもその結論が出せないんだけど、
それは実戦経験が足りないからなんだろ?
実戦経験が足りないのにまた人様のクラス使っても同じことだって。

563以外の人間のほとんどが実戦経験たりなくて、
563だけが正しい結論を出しているなんてとても状況信じがたいだろう。
普通は少数派が間違っているものだ。
そうではないと言い張るなら、563自身の結論とやらを語って聞かせるべきでないのか?


775 名前:デフォルトの名無しさん :04/08/04 21:26
>>773
Doom3の割れ厨が不愉快だから、このスレで気分転換してた。
正直すまんかった。今は反省している。

776 名前:デフォルトの名無しさん :04/08/04 21:29
他人が作ったライブラリを使うと奴隷になったような気分になるという、
そういう性分なんじゃないの? 適正の問題になってくるかと。

777 名前:デフォルトの名無しさん :04/08/04 21:30
実践を語るなら、正しい方法とやらは多くの人間に認知されている手段であるはずだけど、
そこに触れないって事は、やっぱり一人で完結してる趣味グラマなんだろな。

778 名前:デフォルトの名無しさん :04/08/04 21:33
他人が作ったOSのAPIごときに振り回されて奴隷になったような気分にはならんのだろうか。

779 名前:デフォルトの名無しさん :04/08/04 21:42
>>777
わかってる人間はわざわざこんなくだらない話題に参加してない

780 名前:デフォルトの名無しさん :04/08/04 21:43
>>772
そういった「俺ライブラリ」が無駄に再生産されないで済むように、
標準ライブラリやら boost やら MFC やら ATL やら WTL があるわけで・・・

>>778
こういう人は I/O ポート直叩きですよ。んで「このチップの仕様腐ってる。
はぁ?割り込み?オーバーヘッドありすぎ。ポーリングで十分」とか言ふの。

781 名前:デフォルトの名無しさん :04/08/04 21:52
>>778
他人が作ったA○tiveDirect○ryに振り回されて奴隷になったような気分でつ。

782 名前:768 :04/08/04 21:53
>>778
なるよ。もちろん。
MFC、ATL、WTL、boostだけで十分にウンザリ。
これに加えて独自クラスで独自の例外スローされたらたまらんよ。

783 名前:デフォルトの名無しさん :04/08/04 21:54
>>782
なんでこの仕事してんの?

784 名前:デフォルトの名無しさん :04/08/04 21:55
そのうち「他人の作った言語仕様に振り回されて〜」でC++を卒業すると。
とっとと出てってくて。

785 名前:768 :04/08/04 22:00
自分と次元の異なる存在に振り回されるのは仕方ないでしょ。法人とか団体とか。
で、他のPGの半端な設計を喜んで受け入れるわけ、藻前ら?

786 名前:デフォルトの名無しさん :04/08/04 22:12
>>785
あるモノは使う。もはや一から自分で作っていて、期日通りにリリースできる
状況にはない。

いやほんとに、勘弁して下さいよ。最近の開発大規模化は……。

787 名前:デフォルトの名無しさん :04/08/04 22:17
まぁよく出来たライブラリ使う分には感動するが糞なライブラリ使ってると殺すって気になるな。
MFCとかCOMとか。同僚のしょぼい設計は却下
STLとかは感動した

788 名前:デフォルトの名無しさん :04/08/04 22:20
設計が腐ったライブラリは例外投げようが投げまいが腐ってることに変わりはないだろ。

789 名前:デフォルトの名無しさん :04/08/04 22:21
>MFCとかCOMとか
どちらも、かの会社のだな

790 名前:デフォルトの名無しさん :04/08/04 22:23
むしかえすようだが、500あたりで話してた奴は例外を基本としてる関数書き換えれば問題解決じゃないの?

791 名前:デフォルトの名無しさん :04/08/04 22:24
漏れなら設計方針に多少何アリでも、機能をそこそこちゃんと提供していて
そこそこ枯れてれば、なんでもありがたく使っちゃうよ。

そーいう意味では MS の Win32API と称される肥大化を続ける dll 群とか
COM 関連コンポーネントなんか最高。
WebBrowser、XMLパーサ/DOM、文字コード推定/変換、etc。

792 名前:デフォルトの名無しさん :04/08/04 22:37
>文字コード推定/変換
これの名前おせーて

793 名前:デフォルトの名無しさん :04/08/04 22:45
> そこそこ枯れてれば
真にプロなら、これ重要だって知ってるよな。

794 名前:デフォルトの名無しさん :04/08/04 22:47
>>790
それは、自分のプログラムのせいでPCが落ちたときに、
Windowsが不安定じゃなくなればいいとか言うのと同じだ。

795 名前:デフォルトの名無しさん :04/08/04 22:57
>>655
例外は投げないということか。
ライブラリユーザ(ひいてはアプリユーザ)にどこが悪いのか知らせることを
放棄しちゃうんだね。
xpathっぽいもの作って例外クラスに格納するとか答えてくれるかと
思ったんだがな。


796 名前:デフォルトの名無しさん :04/08/04 22:58
プロとか関係なしに、枯れてる方がいいに決まってる

797 名前:デフォルトの名無しさん :04/08/04 23:05
枯れてることを望むのがプロ

798 名前:デフォルトの名無しさん :04/08/04 23:06
いやいやいやいや、アマだって枯れてるのを望みますって!

799 名前:デフォルトの名無しさん :04/08/04 23:08
>>789
だから糞って言っただけだろ。

COMなんて、あの時代であれ以上の言語非依存バイナリ互換フレームワーク
なんて存在しないし、糞とか言うもんじゃねーもん。
OLEとかのCOMで実装されたライブラリに糞なものはあったかもしれないけどな。

800 名前:デフォルトの名無しさん :04/08/04 23:13
789だが、なんでそんな勢いで突っかかられるのか分からん。

801 名前:デフォルトの名無しさん :04/08/04 23:29
>>800
明確な理由なく貶すからだろ。てかM$信者なんだろ・・・

802 名前:デフォルトの名無しさん :04/08/04 23:35
んな程度でファビョんなよ。

803 名前:デフォルトの名無しさん :04/08/04 23:40
MS信者なんているのか?
アンチ・アンチMSなら良くみるが。

804 名前:デフォルトの名無しさん :04/08/04 23:41
要するに他人が作ったのは、その癖を理解して手足のように使いこなせるようになるまでに時間が必要ってことだろ。
その価値があるかどうかは別問題として。

805 名前:デフォルトの名無しさん :04/08/04 23:42
そんなに他人の作ったもの毛嫌いするなら、使う事を考慮するなっつの。
標準ライブラリとOSのツールキットしか触るなよ、タコ。 

806 名前:デフォルトの名無しさん :04/08/04 23:45
何の話してたんだっけ

807 名前:デフォルトの名無しさん :04/08/04 23:53
プリンに醤油をかけると何味になるか?じゃなかったっけ?

808 名前:デフォルトの名無しさん :04/08/04 23:59
えと、いちご味のばななだろ。

809 名前:デフォルトの名無しさん :04/08/04 23:59
アボガドに醤油をかけるとトロのアジがするとか?

810 名前:デフォルトの名無しさん :04/08/05 00:03
アボガドにトロをかけるとアボガドロのアジがするとか?


811 名前:デフォルトの名無しさん :04/08/05 00:06
>>808
プリンに醤油をかけるとバナナになるのか??

812 名前:デフォルトの名無しさん :04/08/05 00:11
落ちる気配がなさそうにないのでそろそろ寝まつ。

813 名前:デフォルトの名無しさん :04/08/05 00:22
そんな時には例外スロー

814 名前:デフォルトの名無しさん :04/08/05 00:22
>>551
std::ifstream ifs(filename);
ifs.exceptions(std::badbit|std::failbit);

これでオープン失敗してれば例外が飛びます。
さらに、以降 ifs に対する操作で何か失敗すれば即例外が飛びます。
ただしデストラクタにクローズを任せた場合、クローズの失敗で例外は飛びません。

ただ、型はすべて std::ios::failure ですし、 what() の内容は
今まで試した処理系での結果を見るに期待できないので、
的確なエラーメッセージを要する場面ではこれだけで済ませるわけにはいかないでしょう。
それでも、テストプログラムなどで失敗後のプログラム継続を防止したいだけなら重宝します。

願わくば、各iostream実装は、もっと what() に情報を詰めて欲しいです。
strerror(errno) とか、VC++なら FormatMessage() の結果とか、
catchしたタイミングで errno や GetLastError() に実際の原因が入っている保証が無いので、
自前でやったとしても不安が残ります。

815 名前:デフォルトの名無しさん :04/08/05 00:27
そういえば、例外発生中のデストラクタで例外を発生させることが出来ないわけですが、
例外発生中かどうかを判断する関数とかってありますか?

816 名前:デフォルトの名無しさん :04/08/05 00:45
>>815
std::uncaught_exception()
ただし、以下のリンク先を理解せずに使うことは許しません。
http://www.gotw.ca/gotw/047.htm

817 名前:デフォルトの名無しさん :04/08/05 00:48
つーか、例外中かどうか判断するのは別にいいけど
デストラクタで例外投げるのは禁じ手だったような。

818 名前:デフォルトの名無しさん :04/08/05 01:02
C++例外について批判的なみなさんは、↓から始まるコラムを読まれることをお勧めします。
http://www.microsoft.com/japan/msdn/library/ja/jpdndeepc/htm/deep051099.asp

第 1 部〜第 17 部までの間に筆者自身の意見が揺れているのが面白いですが、
そのせいで部分的に読むと大変な誤解をする可能性もある危険な文書です。
是非通して読んでみてください。

819 名前:デフォルトの名無しさん :04/08/05 01:14
uncaught_exception();

820 名前:デフォルトの名無しさん :04/08/05 04:02
クラス例外スローマンセー厨は大人しくなったな。
クラス例外は使いこなすのに結構骨が折れる。
というより、実用的に作られてないと使う人がかなり悲惨。

821 名前:デフォルトの名無しさん :04/08/05 04:29
逆のロートルもおとなしくなったな

822 名前:デフォルトの名無しさん :04/08/05 06:52
カレーにウンコをかけると、ウンコ味のカレーになる

823 名前:デフォルトの名無しさん :04/08/05 07:03
>>820
クラス例外って言葉はブーム?
クラス例外に醤油かけると何味だっけ?

824 名前:デフォルトの名無しさん :04/08/05 09:55
>>817
いや、例外発生中じゃなければいいわけで、815の言ってることは正しいんだけど、無理だと思うよ。
だからデストラクタで例外投げるなって言われてるわけだし。

825 名前:デフォルトの名無しさん :04/08/05 10:20
class C {
T *p1, p2;
public:
C() : p1(new T), p2(new T) {}
~C() { delete p1; delete p2; }
};

p2(new T) が例外を出したら p1はメモリリークする?
もしそうならnewで初期化するのはやってはいけない?

826 名前:825 :04/08/05 10:37
>>818に書いてあったわ。

827 名前:デフォルトの名無しさん :04/08/05 10:42
>>825
する。

そのためにfunction-tryブロック(って名前でいいんだっけ?)があるけど、多くの処理系で未対応。
解決法としては、
・初期化子じゃなくて代入文を使う(ダサいけど)
・生ポインタをメンバに持つんじゃなくて、std::auto_ptrなどにする
などがいいんじゃないでしょうか。

828 名前:デフォルトの名無しさん :04/08/05 10:42
うーん。
スレの性質上、例外処理の挙動について語り合うのは価値のあることだけど、
その事と実用とはまた別のものだな。
昨日は、混同する馬鹿が暴れてたみたいだな。乙

829 名前:デフォルトの名無しさん :04/08/05 10:44
>>825
あと、細かいけど、

> T *p1, p2;

T *p1, *p2;
だよね?

830 名前:デフォルトの名無しさん :04/08/05 10:52
うん

831 名前:デフォルトの名無しさん :04/08/05 11:52
今日は静かだなぁ。

832 名前:デフォルトの名無しさん :04/08/05 11:58
嵐の前の

833 名前:デフォルトの名無しさん :04/08/05 12:10
V6

834 名前:デフォルトの名無しさん :04/08/05 12:30
アボ「カ」ド

835 名前:デフォルトの名無しさん :04/08/05 13:04
アボガド の検索結果 約 56,800 件中 1 - 50 件目 (0.33 秒)
アボカド の検索結果 約 53,800 件中 1 - 50 件目 (0.19 秒)

836 名前:デフォルトの名無しさん :04/08/05 13:34
カドルト

837 名前:デフォルトの名無しさん :04/08/05 13:38
\モウ/    \ね/  \ アボカド /  \ 馬 /  \ 鹿 /  \ カト /
                                    ∩   ∩
                                    | つ  ⊂|
    ∩;;;∩                      ∧ノ~       ! ,'っ _c,!
  (Y;;;;;;;;;;ヽノ)               ヽ      ミ| ・  \    ⊂/  ・  \
   i;;;;;;;;;;゚;;;゚ヽ           γ⌒^ヽ    ミ|   ... '_)   | __,,▼    ∫
/;;;;;;\;;;;'⌒)          /::::::::::::::ヽ   ミ| (,,゚Д゚)    |・ (,,゚Д゚)   (,,゚Д゚)
 )|;;;;;;;;(,,゚Д゚)    (⌒)(⌒)  /.:::::::::(,,゚Д゚)    | (ノ  |)     | (ノ  |)  ⊂三つ: つ ババンバ
ι|;;;;;;;つ ;;;/つ   ( ・Å・)  i::::::(ノDole|)   |  馬 |      |・・ .鹿 |      ||||||||   バン
  ヽ..;;;;;;;;/  γ⌒ ( ゚Д゚))  ゙、:::::::::::::ノ    人.._,,,,ノ     ι・,,__,ノ     |  |     バン
    U"U  乂_) UU      U"U       U"U       U"U      U"U :y=-( ゚д゚)・∵;; バーン

838 名前:デフォルトの名無しさん :04/08/05 14:27
アボカド 【avocado】

クスノキ科の常緑高木。中米原産。果実は黒緑色または緑色の
洋梨形または楕円形で,中に大きな種子が 1 個ある。果肉は
黄緑色のチーズ状で,脂肪・タンパク質を含み,生食される。
ワニナシ。
〔アボガドとするのは正しくない〕



839 名前:デフォルトの名無しさん :04/08/05 14:30
ドナルド

840 名前:デフォルトの名無しさん :04/08/05 18:03
class C{};
struct S{ S( ... ); };
sizeof( S( C() ) );

とすると、 C() が 関数値 C、引数 void の関数とみなされ、S() の C++ スタイルのキャストとみなされてしまいます。
S のコンストラクタの引数に C を渡すように認識させたいのですが、どうすれば良いでしょうか?

841 名前:デフォルトの名無しさん :04/08/05 18:14
>>840
sizeof (S((C())));
または
sizeof (S(C::C()));

842 名前:デフォルトの名無しさん :04/08/05 18:20
主旨から外れるが
sizeofなら型名だけでいいのではないか。

843 名前:デフォルトの名無しさん :04/08/05 18:26
実はテンプレートで複雑なコンパイルタイム演算が発行されるとか。

844 名前:デフォルトの名無しさん :04/08/05 18:34
>>840
sizeof S(C())

845 名前:デフォルトの名無しさん :04/08/05 18:39
>>844
うお!
なんかちょっと感動

846 名前:デフォルトの名無しさん :04/08/05 18:40
>>844
sizeof(SCO)に見える

847 名前:デフォルトの名無しさん :04/08/05 19:03
なんだかこのスレッドの方が問題を解決してくれそうな予感がします。
1ヶ月位経ちますが、InternetExplorerのボタンを押したり、URLを押したりすると
エラーが出てこの様な英文が表示されるのです・・・。

Microsoft Visual C++ Runtime Library
Buffer overrun detected!

A buffer overrun has been detected which has corrupted
the program's internal state.The program cannot safely
continue execution and must now be termineted.

です・・。この相談を他のサイト等で2回投稿したのですが、
スルーされるばかりで・・・。誰にも分らない程ヤバイのかと思っていました・・。
OSはWindows Meです。
分かる方いましたら解決法を教えてください。お願いいたします。

848 名前:デフォルトの名無しさん :04/08/05 19:06
再インスコ

849 名前:847 :04/08/05 19:10
度々すみません。
英文の最後の単語は

×・・・・termineted
○・・・・terminated

でした。

850 名前:デフォルトの名無しさん :04/08/05 19:12
再インスコ

851 名前:デフォルトの名無しさん :04/08/05 19:12
だから再インスコしろつってんだろ
スレ違いな上下らなぇことでスレ消費すんなボケ

852 名前:デフォルトの名無しさん :04/08/05 19:14
再インスコってなんですか・・・
初心者で分からないです・・・すみません。

853 名前:デフォルトの名無しさん :04/08/05 19:16
あのぅ、C++相談室ってどこですか?
なんか間違えちゃったみたいで…

854 名前:デフォルトの名無しさん :04/08/05 19:26
>>847
http://pc5.2ch.net/win/ ここは行ってみた?

855 名前:847 :04/08/05 19:36
>>854
レスありがとうございます。
行ってはみたのですが、レスはしてないです・・。
私はスレ違いの事を書いてしまっているのですか?
すみませんでした。 英文の中に「C++」と書いてあったので・・・・
ご迷惑おかけしました。

856 名前:デフォルトの名無しさん :04/08/05 20:04
>>847
それって普通、キミのプログラムがどっか頓珍漢なメモリ領域に書き込んでぶっ壊しているってことだよ。
例えば、128バイトしかヒープメモリーを確保していないバッファに256バイト書き込んでいるとか。
対処法は、キミのプログラムのバグを取るしかない。

857 名前:デフォルトの名無しさん :04/08/05 20:06
人生をシャットダウンすれば無問題

858 名前:デフォルトの名無しさん :04/08/05 20:15
>>856
「キミのプログラム」なんか存在しないんだと思う

859 名前:デフォルトの名無しさん :04/08/05 20:20
とりあえず常駐プログラム全部切ってから、IEを操作してみては。
VC++で作った、バグの残ったアプリを一月前にインスコしたって
ことなんではなかろうか。どっちにしてもC++の話題ではないな・・・。

860 名前:デフォルトの名無しさん :04/08/05 23:38
「C++のクラス = 構造体」
ってことでOKですか?

861 名前:デフォルトの名無しさん :04/08/05 23:39
???
じゃあクラスと構造体が二個ある意味って何よ

862 名前:デフォルトの名無しさん :04/08/05 23:40
>>861
Cとの互換性のため

863 名前:デフォルトの名無しさん :04/08/05 23:41
むしろC++の構造体=クラスの劣化版
じゃないの?

864 名前:デフォルトの名無しさん :04/08/05 23:45
劣化してないよ。

865 名前:デフォルトの名無しさん :04/08/05 23:48
structにclassの機能を付与したのは
例によって付与しないデメリットが思いつかないという
思い付きによって決められた糞仕様なんだよ。

866 名前:デフォルトの名無しさん :04/08/05 23:54
>>865
そうか。思いつきだったのか。別にCのstructの機能そのままでも
良かったような気もしたりしてたんだよな。
デフォルトのアクセス制限が違うだけなんだもん。

867 名前:デフォルトの名無しさん :04/08/05 23:55
ファンクタを簡単に書くためだろ

868 名前:デフォルトの名無しさん :04/08/06 00:00
つーか、classがデフォルトprivateなのもあんま意味ないよな。

869 名前:デフォルトの名無しさん :04/08/06 00:01
カプセル化しないバカを減らすためだろ

870 名前:デフォルトの名無しさん :04/08/06 00:03
>>867
それだ!

871 名前:デフォルトの名無しさん :04/08/06 00:03
interfaceもそうだけどあとからstructの性質を利用しただけだろ

872 名前:デフォルトの名無しさん :04/08/06 02:00
すいません、
空のフォルダを削除するにはどうしたらいいのでしょうか?
googleで検索してもなかなか見つからず、
やっとサンプルコードが見つかったと思ったら、ないヘッダがインクルードしてあって
結局分かりませんでした。

873 名前:デフォルトの名無しさん :04/08/06 02:01
標準C++にはありません

874 名前:デフォルトの名無しさん :04/08/06 02:03
ファイルシステムの操作は,環境依存。
自分の環境スレ逝け。

875 名前:872 :04/08/06 02:06
>>874
環境ということは・・・
えーと・・・
BCC使ってるのでBCCスレということですね。

分かりました。
BCCスレで聞いてきます。

876 名前:デフォルトの名無しさん :04/08/06 02:10
天然

877 名前:デフォルトの名無しさん :04/08/06 03:30
removeで消えるんじゃねーの?
BCCはしらんけど

878 名前:デフォルトの名無しさん :04/08/06 08:02
消えるかもしれないが、消えないかもしれない。

879 名前:デフォルトの名無しさん :04/08/06 11:35
>>878
くだらん

880 名前:デフォルトの名無しさん :04/08/06 11:43
DOSのコマンド呼び出しちゃえば?
rdだっけ。

881 名前:デフォルトの名無しさん :04/08/06 12:31
class A
{
 int d;
 A() : d(0) {}
};
はできるけど

class B
{
 char s[16];
 B() :s(0) {}
};
はできないよね。
コンストラクタで配列を初期化したい時はどうすればいいの?

882 名前:デフォルトの名無しさん :04/08/06 12:32
newしろ

883 名前:デフォルトの名無しさん :04/08/06 12:33
newすると0フィルされるの?

884 名前:デフォルトの名無しさん :04/08/06 12:34
>>881
残念ながら、できない。
C++の仕様の穴と言われております。

でも、配列なんて滅多に使わないしなぁ。

885 名前:デフォルトの名無しさん :04/08/06 12:35
>>881
つーか暮らす定義の中に書かなけりゃいい

886 名前:デフォルトの名無しさん :04/08/06 12:37
std::memset(s, 0, sizeof(s));
ただ0のバイナリイメージが0じゃない環境では
うまくいかない希ガス。なので漏れは for で回してる。

887 名前:デフォルトの名無しさん :04/08/06 12:39
std::fill使えばいいやん

888 名前:886 :04/08/06 12:42
Σ(゚Д゚)…!!

889 名前:デフォルトの名無しさん :04/08/06 12:48
>>886-887
それは初期化じゃなくて代入


890 名前:デフォルトの名無しさん :04/08/06 12:50
では std::vector ということで

891 名前:デフォルトの名無しさん :04/08/06 12:52
char[16]にMD5とか格納したい時にわざわざ
vector作るの?

892 名前:デフォルトの名無しさん :04/08/06 12:53
char なら std::string で。だめ?

893 名前:デフォルトの名無しさん :04/08/06 12:54
std::stringってバイナリ格納してもいいの?

894 名前:デフォルトの名無しさん :04/08/06 12:54
char[16]よりはvectorがいい

895 名前:デフォルトの名無しさん :04/08/06 12:56
腹くくって素直にstd::fill()しる

896 名前:デフォルトの名無しさん :04/08/06 12:56
>>893
いいよ。

正直char s[16]は突っ込むところじゃないと思う。

897 名前:デフォルトの名無しさん :04/08/06 12:57
標準関数使ってる人はなに作ってるの?

898 名前:デフォルトの名無しさん :04/08/06 13:08
for( int j = 0; j < 1000; j++ ){
try{
throw j;
}
catch(int z){
}
100回目で落ちます。なぜ?


899 名前:デフォルトの名無しさん :04/08/06 13:10
環境書けよ。
あと普通のクラスthrowした場合は?

900 名前:デフォルトの名無しさん :04/08/06 13:15
>>881
char []の0 fillなら初期化に頼らずに、
コンストラクタ本体での代入で十分じゃないですか?

901 名前:デフォルトの名無しさん :04/08/06 13:19
>>900
0でいいなら、なにもしなくても0じゃなかったっけ?

902 名前:デフォルトの名無しさん :04/08/06 13:21
>>901
まともなOOPLならその通り

903 名前:デフォルトの名無しさん :04/08/06 13:34
>>898
中括弧の数が合わないが

904 名前:デフォルトの名無しさん :04/08/06 13:40
時々あるが、質問者の「バイナリ」の意味がわからんな。

905 名前:898 :04/08/06 13:47
失礼しました。
for( int j = 0; j < 1000; j++ ){
 try{
  throw j;
  TXOwl::Raise(""); // どちらか
 }
  catch(...){
 }
}
BorlandC++5.02J
WindowsXP
です。
どちらでも101回目で落ちます。なぜ?
よろしくお願いします。

906 名前:デフォルトの名無しさん :04/08/06 14:07
>>905
「落ちる」と言ってもいろいろあるんだけど。
具体的に。

907 名前:デフォルトの名無しさん :04/08/06 14:09
>>905
コンパイラ最新のにしてみたら。
あとTXOwl::Raiseが悪さしてるとはないんだよね。

908 名前:デフォルトの名無しさん :04/08/06 14:12
今年の夏もひとり。
自分のために夏休みは使うかな。

909 名前:デフォルトの名無しさん :04/08/06 14:12

誤爆してスマソ


910 名前:898 :04/08/06 14:56
>>906
ライブラリの中っぽい
0x77E33887 の pop si
でデバッガが止まります。スタックのエラーですかね?

>>907
throw 1; でも throw ""; でも同じ結果です。
コンパイラの更新ですか。ふぅ。


911 名前:デフォルトの名無しさん :04/08/06 20:24
配列が100しか用意してないから
初期化しないといけない

912 名前:デフォルトの名無しさん :04/08/07 09:30


913 名前:デフォルトの名無しさん :04/08/07 17:50
VC.NET 2003 で
int f() throw( int ){ ... }
ってやると
warning C4290: C++ の例外の指定は無視されます。関数が __declspec(nothrow) でないことのみ表示されます。
と出るのですが、これはどういう意味なのでしょうか?

914 名前:デフォルトの名無しさん :04/08/07 17:50
こんぱいらオプションに何か付けないとでるよ

915 名前:デフォルトの名無しさん :04/08/07 18:02
例外の指定は throw() 以外はサポートしてないということじゃない?

916 名前:デフォルトの名無しさん :04/08/07 18:14
warning C4290: C++ exception specification ignored except to indicate a function is not __declspec(nothrow).

indicateが「表示する」に訳されて怪しい日本語を醸し出している模様。

917 名前:デフォルトの名無しさん :04/08/07 18:23
文句があるなら 2005 買えや貧民どもが! by ゲイツ
ってことか

918 名前:デフォルトの名無しさん :04/08/07 19:34
>>913
こんな糞訳が許されていいのか?! (w
勝手に文を二つに分けてるし。except toくらい訳せよ。

919 名前:デフォルトの名無しさん :04/08/07 19:50
警告 C4290: C++例外指定は関数が __declspec(nothrow) ではないと示すことを除いて無視されます。

これでいいかな?

920 名前:デフォルトの名無しさん :04/08/07 19:54
でも 2005 で直る保証はどこにもないのか_| ̄|○

921 名前:デフォルトの名無しさん :04/08/07 19:55
わけたほうがわかりやすいじゃねーか

922 名前:デフォルトの名無しさん :04/08/07 20:19
>>919
示す場合を除いて

>>915の表現が分かりやすいがな。

923 名前:デフォルトの名無しさん :04/08/07 20:21
「テンプレートパラメタを減少できませんでした」よりはまし。

924 名前:デフォルトの名無しさん :04/08/07 20:45
>>922
原文が "to indicate a function is __declspec(nothrow)" ならそれで納得いくんだが。

925 名前:デフォルトの名無しさん :04/08/07 20:55
>>924
いや、>>922は、
__declspec(nothrow) ではないと示す場合を除いて
のつもりです。

926 名前:デフォルトの名無しさん :04/08/07 20:55
__declspec(nothrow) ではないことを示す場合を除いて
か…


927 名前:デフォルトの名無しさん :04/08/07 22:04
そもそも
__declspec(nothrow)
自体がわかりにくい

928 名前:デフォルトの名無しさん :04/08/07 22:21
nothrow
でない
を除いて

だもんな…
さらに訳は間違ってる…

929 名前:デフォルトの名無しさん :04/08/08 14:20
唐突ですがポインタを直接やり取りする場合と比べて
ポインタへの参照をやり取りするメリットってどんなものがありますか?

930 名前:デフォルトの名無しさん :04/08/08 14:28
>>929
いくつかの違いがあるが、どれもメリットにもデメリットにもなり得る。
自分で判断すべき。

931 名前:デフォルトの名無しさん :04/08/08 14:57
>>930
レスどうもです。
どこぞのサイトにポインタ渡しをする奴なんてとんでもない
みたいな表現がしてあったので
何が何でも参照で受け渡しするべきなのかと思ってました。
例えば、

void func(int*& rp);

int * p;
func(p);
は無論OKで
int a[10];
func(a);
はエラーになるので
func((int *&)a);
とやるとコンパイルは通るけど希望の動作はしてくれません。
これがただのポインタだったら簡単にいくので
今のところデメリットしか浮かばないです。

例えばどんな場合にメリットになりますか?


932 名前:デフォルトの名無しさん :04/08/08 15:10
それとこれとは別だ

933 名前:デフォルトの名無しさん :04/08/08 15:15
>>929
例えばある関数にポインタを渡して、その内容を変更してもらいたいとき、
ポインタへのポインタだと

func(&p);

として呼び出さなければならないし、呼び出し先では

void func(int** p)
{
 *p = hoge;
}

と書かなければならないが、ポインタのリファレンスなら

func(p);

呼び出し先では

void func(int*& p)
{
p = hoge;
}

とすっきりした感じになるだろう。欠点はこの裏返しでポインタの
リファレンスと宣言した事を覚えておかないと呼び出し先でポインタの
内容を変えられたりして「およよ」と思う事がある事とか。そんな所かな。

934 名前:デフォルトの名無しさん :04/08/08 15:16
>>931
整数をそのまま渡すか参照で渡すかというのと同じような違いですよ。

935 名前:デフォルトの名無しさん :04/08/08 15:20
>>931
そのサイトどこですか?
たぶんあなたが曲解してるだけです。

936 名前:デフォルトの名無しさん :04/08/08 15:30
>>933
丁寧なレスありがとうございます。
よく分かりました。

>>934
なるほど、つまりはそういうことなんですね。
納得しました。

>>935
以前ググっている最中にチラ見したサイトなんで
URLは失念してしまったのですが、
ポインタ渡しは不要だ、ぐらいの勢いだったと思います。
私の読み方が浅かったのかも知れません。
それと知人からポインタは推奨されないし
いっさい使わずに組めるし、そうしたほうが良いらしい
という話を聞いたもので。
でもその知人は初心者でいきなりC#を勉強中だったようで
今思うとC++の話ではなかったのだと思います。


937 名前:デフォルトの名無しさん :04/08/08 16:03
>>936
ものごとの理由を考えずに題目を信じるようなプログラマは要らない。

938 名前:デフォルトの名無しさん :04/08/08 16:05
あなたに必要とされたい訳ではないからご安心をw

939 名前:デフォルトの名無しさん :04/08/08 16:07
>>938 自分で>>937の言うようなプログラマだと自覚してるのか?

940 名前:デフォルトの名無しさん :04/08/08 16:11
NULL が渡る可能性があるなら参照はムリだし、整数を参照で渡すとオーバーヘッドで逆に遅くなる

>>938
氏ね

941 名前:デフォルトの名無しさん :04/08/08 16:15
参照渡しって不要だろ?
ポインタ渡しでポインタ書き換えちゃうアフォを避けるための機能でしかない。


942 名前:デフォルトの名無しさん :04/08/08 16:30
ポインタ渡ししてポインタを書き換えても何も問題は無いわけだが

943 名前:デフォルトの名無しさん :04/08/08 16:32
>>941
禿同。
あと p->func() とか *p とか書けないほど無精な香具師のための機能だね。

944 名前:デフォルトの名無しさん :04/08/08 16:33
>>937
一応理由を考えた上なんですけど
もしや自分では考えが及ばないサムシングがあるのかなぁって
思ったんですが>933>934でそうではなかったんだ、と
使用目的に関してよく納得しました。
皆さんどうもありがとうございました。


945 名前:デフォルトの名無しさん :04/08/08 16:34
値渡しと参照渡し
ポインタ渡しと参照渡し
2つの対比をごっちゃにしてはいけない。

946 名前:デフォルトの名無しさん :04/08/08 16:37
>>944
理由を考えた上で「何が何でも参照で受け渡しするべき」なんて思うようでは意味が無い。

947 名前:デフォルトの名無しさん :04/08/08 16:41
>>941
演算子多重定義には必須。

948 名前:デフォルトの名無しさん :04/08/08 16:43
参照渡しが無いと演算子オーバーロードやコピーコンストラクタ、
catchの構文が不恰好になる。
値渡しとconst参照渡しで高性能な方を選べる。
参照の利点はそのくらいかな。
個人的には非const参照は嫌い。

949 名前:デフォルトの名無しさん :04/08/08 16:54
非const参照は、戻り値などに使う

950 名前:デフォルトの名無しさん :04/08/08 16:56
戻り値に参照ってそんなに使うか?
operator= くらいしかあんま思いつかん

951 名前:デフォルトの名無しさん :04/08/08 17:11
istream/ostream周りでは非const参照が大活躍してるな。

952 名前:デフォルトの名無しさん :04/08/08 17:14
operator []

953 名前:デフォルトの名無しさん :04/08/08 18:14
#defineで下のようなことをやりたいのですが、これはコンパイルエラーになります。

#define AAA() #define BBB 128
AAA() // #define BBB 128 に置き換わるようにしたい

上記のようなことは不可能なのでしょうか?

954 名前:デフォルトの名無しさん :04/08/08 18:17
>>953
不可能。#includeを使えば似たような事は出来る。

955 名前:デフォルトの名無しさん :04/08/08 20:09
>>943
> 禿同。
> あと p->func() とか *p とか書けないほど無精な香具師のための機能だね。
void foo(const std::string& s);

foo("hoge");
で呼びたくないのか..


956 名前:デフォルトの名無しさん :04/08/08 20:45
このスレで解かったことは、CからC++に移った人は、参照とか例外とかが使えないということ。
必要性より有用性の問題であるのに、なぜか、Cと同じ流儀でこうやればいい、となってしまう。

957 名前:デフォルトの名無しさん :04/08/08 20:49
いやいやこのスレだけ見て語られてもねぇ ^ ^ ;

958 名前:デフォルトの名無しさん :04/08/08 20:51
ダメなやつは何をやってもダメなんだよ!

959 名前:デフォルトの名無しさん :04/08/08 20:53
gotoを使ったエラー処理の必要が無くなるから例外処理は積極的に使うよ。
ただ、参照は不慣れなこともあって自分から積極的に使ってはいない。

960 名前:デフォルトの名無しさん :04/08/08 20:55
* が入りまくってると見にくいしな


961 名前:デフォルトの名無しさん :04/08/08 21:21
コンパイラファイアウォールイディオムって何ですか?

962 名前:デフォルトの名無しさん :04/08/08 21:25
>>961
Exceptional C++買え。自分への投資を惜しむな。

963 名前:デフォルトの名無しさん :04/08/08 21:26
>>958
お前がその典型的な例だな。

964 名前:デフォルトの名無しさん :04/08/08 21:34
>>961
Google先生に聞いてみれば十分。本なんか要らない。

965 名前:デフォルトの名無しさん :04/08/08 21:46
C++の設計の仕方でMFCのような
メンバー関数の中を書くだけでアプリケーションが出来るのは
どうやって作れば出来ますか?

966 名前:デフォルトの名無しさん :04/08/08 21:47
>>962
投資惜しまないけどC++の知識って他の言語に乗り換えた瞬間死滅しそうだな。

967 名前:デフォルトの名無しさん :04/08/08 21:47
>>964
でもCOMは本が無いと正直なところきついね

968 名前:デフォルトの名無しさん :04/08/08 22:20
pimplイディオムでそれらしききものが見つかったのですが、これはコンパイラファイアウォールイディオムと同じものでしょうか?

969 名前:デフォルトの名無しさん :04/08/08 22:38
そうだよ。

970 名前:デフォルトの名無しさん :04/08/08 22:56
ありがとうございます

実は Exceptional C++ の P96 を読んでて分からなくて聞いてみたんですが、
この本の第四章に詳しく書いてあるんですね _| ̄|○

灯台もと暗しでした

971 名前:デフォルトの名無しさん :04/08/08 23:06
>>964
この貧乏人めが!

972 名前:デフォルトの名無しさん :04/08/08 23:36
>964
ぐーぐる先生に頼ってると聞いた事あると意味わからない人になりますよ

973 名前:デフォルトの名無しさん :04/08/08 23:50
>>972の書き込みの意味がわからないが、恐らく自己紹介をしてるんだろう。

974 名前:972 :04/08/09 00:05
スマン自分で見てもよくわからん...
言葉だけ知ってても意味分からない人になるって意味をいいたかったんだよ

975 名前:デフォルトの名無しさん :04/08/09 00:19
×言葉だけ知ってても意味分からない人になるって意味を〜
○言葉だけ知ってても意味を知らない人間になるって事を〜

976 名前:デフォルトの名無しさん :04/08/09 02:09
>>959
関数内で完結するならやっぱりgoto使うな、オレの場合は。

977 名前:デフォルトの名無しさん :04/08/09 03:40
gotoって関数内({}内)だけで有効だから、
うまく使えばすごく便利で処理も見やすくなる。


978 名前:デフォルトの名無しさん :04/08/09 04:44
>>977
gotoを好んで使うようになると、ズルズルとスコープ拡大(行数増加)する傾向がある。
結果として、ローカル変数の管理が難しくなる。

979 名前:デフォルトの名無しさん :04/08/09 05:20
管理しなきゃいけないほどローカル変数がたくさんあるならそうだろうな(w

980 名前:デフォルトの名無しさん :04/08/09 07:27
>>977
throw-catchを使ってみては?
>>953
プリプロセッサでさまざまなことやるならboost::preprocessorを
ミニ言語となっているぐらい強力。
日本語訳のもあるけどSequences関連の高階マクロとかが乗ってないのでリファレンスは本家で見た方がいいかな。



981 名前:デフォルトの名無しさん :04/08/09 08:40
>>980
バカじゃねーのw
gotoを使わないことを目標にしてどうするw
絶対gotoを使ってはだめだとか思ってる思考停止バカは他人と接するな

982 名前:デフォルトの名無しさん :04/08/09 08:51
>>981
> gotoを使わないことを目標にしてどうするw
誰もそんなことは言ってないですねw
興奮しすぎて、脳内の仮想敵と実在の名無しの区別がつかなくなったんですか?

もうちょっと落ち着いて下さい。ただでさえ頭わるいんだからw

983 名前:デフォルトの名無しさん :04/08/09 08:55
(・∀・)ニヤニヤ

984 名前:デフォルトの名無しさん :04/08/09 08:56
グウの音も出なくなったら
とりあえずニヤニヤ

985 名前:983 :04/08/09 08:59
>>984
ごめんなさい。私は第三者です。
ちょっかい出してすいませんでした。

986 名前:デフォルトの名無しさん :04/08/09 09:01
センスの欠片も無いその場しのぎの反応。
ダメだこりゃ( ´,_ゝ`)

987 名前:981 :04/08/09 09:03
  ヘ( `Д)ノ  モーコネーヨ ウワァァァン!!
≡ ( ┐ノ
:。;  /

988 名前:デフォルトの名無しさん :04/08/09 09:05
実行効率が悪い

989 名前:デフォルトの名無しさん :04/08/09 09:09
例外でやることに何の意味がある?

990 名前:デフォルトの名無しさん :04/08/09 09:21
C++らしくなる

991 名前:デフォルトの名無しさん :04/08/09 09:26
gotoは使っていないきれいなソースですと主張できる

992 名前:デフォルトの名無しさん :04/08/09 09:56
実行速度が重要な場合は例外を避けることもある。

993 名前:デフォルトの名無しさん :04/08/09 09:58
で、C++だからといって、例外を使わないコードを拒否することは思考停止。
C++はそういった設計も許容する懐の深い言語だ。

994 名前:デフォルトの名無しさん :04/08/09 09:59
>>993
懐が深いというか、なんでもありというか、節操がないというか。
でも、好きです。

995 名前:デフォルトの名無しさん :04/08/09 10:01
懐が深すぎると思うこともしばしばあるけどな・・・

996 名前:デフォルトの名無しさん :04/08/09 10:38
記念カキコ v(^-^*)

997 名前:デフォルトの名無しさん :04/08/09 10:40


998 名前:デフォルトの名無しさん :04/08/09 10:40
C++は時代遅れ

999 名前:デフォルトの名無しさん :04/08/09 10:41
STLつかうと一気に実行ファイルサイズが10倍に?!

1000 名前:デフォルトの名無しさん :04/08/09 10:42
>>999
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。

>>1000
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。




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