変数初期化時の代入では、コンストラクタと代入演算子のどちらが呼ばれるのか気になったので、実験してみた。
#include <iostream> using namespace std; #define DEBUG(s) do { cerr << (s) << endl; } while(false); class Foo { private: int i; public: Foo(); Foo(int i); Foo &operator=(int i); int value(); }; Foo::Foo() { DEBUG("Foo::Foo()"); } Foo::Foo(int i) : i(i) { DEBUG("Foo::Foo(int i)"); } Foo &Foo::operator=(int i) { DEBUG("Foo &Foo::operator=(int i)"); this->i = i; return *this; } int Foo::value() { return this->i; } int main() { Foo foo = 100; cout << foo.value() << endl; foo = 200; cout << foo.value() << endl; }
初期化時の代入はコンストラクタを呼ぶ…と。
~/cpp$ g++ foo.cpp -o foo && ./foo
Foo::Foo(int i)
100
Foo &Foo::operator=(int i)
200