>>950 >> (a += b) += c;
でもそれって int とか基本型では保証されてないって聞いた覚えがあるぞ。気のせいか?
const CTest& operator=(const CTest& t)
const CTest& operator=(const CTest& t) const
なんつって
状態を変更するからoperator=() constはありえない
956 :
デフォルトの名無しさん:02/05/19 09:45
//例外をthrowできない関数
void Test1() throw()
{
throw 1;//Error!
}
//例外をthrowできる関数
void Test2 throw(...)
{
throw "Test2";//Ok
}
//例外をthrowできる
void Test3() throw(int)
{
throw 1;//Ok
}
throwについて調べてるんですが、
末尾につけるthrow(...),throw()は、
プログラムのミスを避けるためのものだと思うのですが、
使わないと最適化への影響や何らかの弊害があるのでしょうか?
よろしくお願いします。
class C{};
C obj_c(); //これでデフォルトコンストラクタ呼んでたと思ってた
>>956 帰ってくる例外の型を特定するための機能だよね。
959 :
デフォルトの名無しさん:02/05/19 10:06
>>958 void Test4() throw(unsigned int)
{
throw 4;
}
void TestCatch1();
{
try{
Test2();
Test3();
Test4();
}
catch(int){//型がわかる
//Test2
}
catch(unsigned int){//型がわかる
//Test4
}
}
TestCatch2() throw()
{
try{
TestCatch1();
}
catch(...){//残り
//Test3
}
}
あいまいさを解決できるということですね。納得できました。
そういうわけでもないんだが。
呼び出し側が捕捉すべき例外を明示するための機能。
throw(unsigned int)と指定されていれば、
throw floatは成立し得ない(プログラムが落とされる
>>952 気のせいだろ。というか、その程度、ちょっとコンパイラで
確認すればいい話じゃないのか?
> (a += b) += c;
このコードは、VC6SP5 , bcc5.5.1 , gcc2.95.3-6 で
コンパイルが通って、なおかつ期待通りに計算されてたぞ。
ただ、ついでに確認した
http://www.digitalmars.com/の コンパイラだと、コンパイルが通ってくれなかったな。
このコンパイラがヘヴォなだけだと思うんだが…。
本格的に確認したければ、プロ言C++を見るしか。
>>953>>954 operator=()の戻り値をconstにはするな、とEffective C++に
書いてある。理由は、Scott Meyersお得意の『intのように振舞え』
だったけど。
Exceptional C++にもconstにはするな、と書いてある。こっちの理由は、
STLのコンテナに入れられなくなるから、だ。
そういうわけで、constを付けちゃいけない。
>>960 throwする側が仕様以外の例外を返さないようにする保険のようなもんじゃないの?
>>962 する側じゃなくて、される側のために用意してあるもんなんだが
>>963 まぁ、お互いのためだ。
出す側が未定義の例外投げればコンパイルエラーになるし、出される側も飛んでくる型が特定できる。
965 :
デフォルトの名無しさん:02/05/19 10:23
もし同じ型の例外が複数きたときはどうすればいいんでしょうか?
>>965 その例外の値(intとか)クラスメンバ(Exception.typeみたいな)で判断するべし。
>>964 コンパイルエラーにはならないっしょ。例外仕様が指定されていないライブラリのために。
>>965 言ってる意味がわからん。例外は、投げるときは必ずひとつのはずだが。
uncaught_exceptionがサポートされてない処理系(VCとか)で
スタックに確保したオブジェクトのデストラクタがthrowするとか。
>>969 例外のためのアンワインド中に、スタック上のオブジェクトのデストラクタが
さらに例外を投げた場合って意味か?
その場合はいきなりプログラムがあぼーんじゃなかったっけ。
だからデストラクタでは例外を投げるなよ、といろんな本に書いてあるのでは。
971 :
デフォルトの名無しさん:02/05/19 12:10
>>957 えっ?違うの・・・?
# ネタじゃありません・・・
ていうか
もう痔スレ立てますよ?
>>972 おっと、いつのまに1000間近か…よろしく
v(^・^)v
グッシッシ
v(^・^)v
v(^・^)v
v(^・^)v
v(^・^)v
v(^・^)v
(゚Д゚) 何見てんだゴルァ!!
(゚Д゚) 何見てんだゴルァ!!
(゚Д゚) 何見てんだゴルァ!!
(゚Д゚) 何見てんだゴルァ!!
(゚Д゚) 何見てんだゴルァ!!
(゚Д゚) 何見てんだゴルァ!!
(゚Д゚) 何見てんだゴルァ!!
(゚Д゚) 何見てんだゴルァ!!
(゚Д゚) 何見てんだゴルァ!!
v(^・^)v
Boost 感動した。よくやった。
997
1000 トルナラ イマノウチ
キタ━━(゚∀゚)━( ゚∀)━( ゚)━( )━(゚ )━(∀゚ )━(゚∀゚)━━!!!!!
v(^・^)v
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。