我正在學習C++,並在學習構造函數的使用時遇到此問題。考慮下面的代碼片段:構造函數與賦值運算符
#include <string>
#include <iostream>
using namespace std;
class Foo
{
public:
Foo() { m_ = 0; cout << "default ctor called." << endl; }
Foo(int a) { m_ = 1; cout << "int ctor called." << endl; }
Foo(string str) { m_ = 2; cout << "str ctor called." << endl; }
Foo(Foo& f)
{
cout << "copy ctor called." << endl;
m_ = f.m_;
}
Foo& operator=(string str)
{
cout << "= operator called." << endl;
m_ = 3;
return *this;
}
int m_;
};
int main()
{
Foo f1 = 100;
cout << f1.m_ << endl;
Foo f2 = "ya";
cout << f2.m_ << endl;
Foo f3("ha");
cout << f3.m_ << endl;
f1 = "hee";
cout << f1.m_ << endl;
Foo f4 = Foo();
cout << f4.m_ << endl;
return 0;
}
我意識到
Foo f1 = 100;
Foo f2 = "ya";
實際調用構造函數,就好像我做
Foo f1(100);
Foo f2("ya");
我無法找到任何這相關的解釋。任何人都可以解釋一下這裏發生了什麼? 以下線程接近我的,但並不完全回答我的問題。 C++ Object Instantiation vs Assignment
你的C++教科書對這個主題有什麼要說的? –
初始化與賦值不同。 – user0042