我有一個C++初始化的令人討厭的經驗,我試圖看看是否有一個現實世界的例子證明編譯器沒有警告。爲什麼?從未初始化的父類成員隱式初始化
以下代碼編譯正確,但foo和bar會使用uninit值(我從未初始化的父類假定)進行初始化。編譯器,g ++和VS都不會發出任何警告。 我當然被告知,將成員公開並且不裝飾它們是不好的行爲。但是,我認爲編譯器可能會發現這種不一致,並且至少在最高警告級別發出警告,因爲我看不到任何此類代碼的應用程序。
#include <iostream>
using namespace std;
class base_class {
public:
int foo;
int bar;
base_class(int foo,int bar):
foo(foo),bar(bar)
{}
};
class derived_class: public base_class {
public:
derived_class(int Foo, int Bar):
base_class(foo,bar)
{
int a = Foo * Bar;
a++;
cout << foo << " " << bar << endl;
}
};
int main()
{
derived_class *buzz = new derived_class(1,2);
buzz->print();
}
你應該調整代碼示例,它不會編譯自第9行的引用Foo和Bar(注意大寫),它們應該是什麼? – stijn 2010-06-21 08:43:39
foo初始化爲1,bar初始化爲2.什麼是不一致? – Sjoerd 2010-06-21 08:46:39
嘗試將您的構造函數參數重命名爲與成員名稱不同。 – 2010-06-21 08:46:59