2008-05-20から1日間の記事一覧

コピーコンストラクタ

C++

代入ではコピーコンストラクタは呼ばれない、と。 代入は演算子のオーバーロードで操作するのかな? #include <iostream> using namespace std; class Foo { int i; public: Foo(int i) : i(i) { cout << "constructor: " << i << "\n"; } Foo(const Foo &foo) { cout <</iostream>…

コピーコンストラクタで初期化子

C++

使えた。 #include <iostream> using namespace std; class Foo { int i; public: Foo(int i) : i(i) { cout << "constructor: " << i << "\n"; } Foo(const Foo &foo) : i(foo.i) { cout << "copy constructor: " << i << "<-" << foo.i << "\n"; i = foo.i; } int ge</iostream>…

デフォルト引数

C++

デフォルト引数に仮引数は使えない、と。 #include <iostream> using namespace std; void func(int a, int b = a) { cout << a + b << "\n"; } int main() { func(10); return 0; } foo.cpp:5: error: `a' was not declared in this scope</iostream>

デフォルト引数は宣言か実体のどちらかに書く

C++

両方書いたらエラーになった。 宣言に書いておいたほうが無難かなぁ… #include <iostream> using namespace std; class Foo { private: int i; public: void set_i(int i = 100); int get_i(); }; void Foo::set_i(int i /*= 100*/) { this->i = i; } int Foo::get_i()</iostream>…

prototype.js: bindで部分適用

Function#bind()で部分適用できることを同僚に教えもらった。 ちまちまと使ってみているが、イベントリスナの登録時にElementを関連付けられるのがちょっと気に入っている。 var element = $('foo'); element.observe('click', function(foo, event) { // 「…

無名のオブジェクトを返す

C++

たぶんNRVOが効いてるはず。 #include <iostream> using namespace std; class Foo { private: int i; public: Foo(int i); }; Foo::Foo(int i) : i(i) {} Foo func() { return Foo(100); } int main() { Foo foo = func(); cout << &foo << "\n"; return 0; }</iostream>

演算子のオーバーロード: 参照を引数に取る

C++

参照を戻すことはできなかったけど、引数を参照にすることはできた。 ふつーどっちを使うんだろう? #include <iostream> using namespace std; class Foo { private: int i; public: Foo(int i); //Foo operator+(Foo foo); Foo operator+(Foo &foo); int get_i(); };</iostream>…