Thursday 28 May 2009

Effective C++ 第3版

すみません。まだ、読んでませんでした。2006年なのに。第2版とまったく内容違うし。第2版持っている人は「時代遅れ」判子でも押しておいてください。

学生が、Open Scene Graph の(だめだめな)C++ ソースのエラーを持って来るのだが、さっぱりわからない。

class Box {
Box(osg::Node node,vector3f &x,vector3f &y);
}

Box::Box(osg::Node node,vector3f &x,vector3f &y) {
....
}

....
Box b = new Box(n,vector3f(0,0,0),vector3f(0,0,0));

良さそうに見えるんですけど。Xcode って note とかは出すが、エラーメッセージが意味不明。
Warning: matching candidate Box(osg::Node ,vector3f &,vector3f &);
わかりません。

取り敢えず、

vector3f v1(0,0,0);
vector3f v2(0,0,0);
Box b = new Box(n,v1,v2);

としてみる。これは動く。reference でないとダメなのか。なるほど。

そこで、 Effective C++ 第3版を見ると、

値渡しでなく const 参照渡しにする

と書いてある。そうか!

class Box {
Box(osg::Node node,const vector3f &x,const vector3f &y);
}

Box::Box(osg::Node node,const vector3f &x,const vector3f &y) {
....
}

....
Box b = new Box(n,vector3f(0,0,0),vector3f(0,0,0));

なら通るようです。まぁ、確かに、気持ちは理解できる。でも一時変数ぐらい自動で作っても良いんじゃないか?

もう、この Brain Damaged な C++ とは付き合いたくない...

No comments: