回答
class A
{
public:
// Or use A()=default for C++11
A(){}
A(int v):m_value(v){}
private:
int m_value;
};
int main()
{
A a; // Without default ctor ==>> error C2512: 'A' : no appropriate default constructor available
return 0;
}
隱含的默認構造函數消失。你仍然可以編寫另一個默認的構造函數,一個不帶任何參數或只帶有缺省值的參數;這只是編譯器沒有爲你做的。
沒有理由不能爲類A
寫一個空的構造函數,並採用每個值的默認值。也許不是最好的主意,但它可以做到。
A() {/* empty */}
正如評論指出的,如果你正在使用C++ 11你也可以使用新的default keyword給你什麼,如果它做的「默認」
A() = default;
編譯器將有前C++ 11
class MyClass
{
public:
MyClass(int x, int y) {}
MyClass() {}
};
或C++ 11
class MyClass
{
public:
MyClass(int x, int y) {}
MyClass() = default;
};
你可以根據自己的喜好編寫儘可能多的構造函數,但是避免讓你的類感到困惑。
+1後記建議。 –
struct S {
S(int) {} // non-default constructor that suppresses the implicit default constructor
S() = default; // bring the default constructor back
};
請注意,有兩種使用「默認」的意義。從某種意義上說,它有一個默認的構造函數,它具有一個簽名,以便在「默認構造」中使用它。
其次,在默認情況下,實現將與編譯器爲隱式聲明的構造函數自動生成的內容匹配。
通過給出構造函數的默認參數,可以使您的類缺省構造(第一種意義上的缺省構造)。
struct S {
S(int = 10) {}
};
雖然= default
用來明確要求默認實現(默認的第二個含義)。
假設你的編譯器實現了= default
,使用它通常優於S() {}
,原因很多。類定義中的= default
會生成一個非用戶提供的構造函數,它具有多個效果。
- 用戶提供的特殊成員函數從未瑣碎
- 用戶提供的構造不夠格從一種聚合一種類型。
- 值初始化包括零初始化類型與非用戶提供的默認構造函數
- 默認const對象的初始化是不允許的類型,而用戶提供的默認構造函數
偶爾有人可能會想由於這些效果之一而由用戶提供的功能。它仍然可以通過使用它的類定義之外使用= default
:
struct S {
S();
};
S::S() = default;
以上提供的編譯器的默認實現,但仍算作用戶提供的默認構造函數。另外,這可以用來保持ABI的穩定性;在後面的點= default
可以被替換爲另一個定義,而不需要重新編譯構造對象的所有代碼,而使用內聯默認構造函數時將需要該對象。
- 1. 正在編寫一個默認的構造函數嗎?
- 2. C++,默認構造函數
- 3. C++一個類的默認構造函數調用另一個類的另一個默認構造函數
- 4. C++如何寫一個構造函數?
- 5. 重寫默認的構造函數
- 6. 從另一個構造函數調用默認構造函數
- 7. 在C++中創建一個默認構造函數
- 8. 如何用C++編寫構造函數?
- 9. 默認構造函數與正常構造函數的類C++
- 10. C++編譯器如何合成默認拷貝構造函數
- 11. C++默認的拷貝構造函數
- 12. 瞭解默認的構造函數C++
- 13. 如何編寫一個Objective-C的便利構造函數
- 14. C++構造函數調用默認構造函數
- 15. C++中隱式默認構造函數的默認值
- 16. 如果我在默認構造函數中放置一個參數,但給參數一個默認值,它是否仍然是一個默認構造函數?
- 17. 如何讓編譯器在C++中創建默認的構造函數?
- 18. 默認構造函數C++錯誤
- 19. 未找到C++默認構造函數
- 20. C++默認拷貝構造函數
- 21. 默認構造函數C++頭和cpp
- 22. 默認構造函數C++格式
- 23. 類默認構造函數
- 24. 默認構造函數
- 25. 非默認構造函數
- 26. constexpr默認構造函數
- 27. 非默認構造函數
- 28. 定義一個內聯的默認構造函數C++
- 29. 統一使用默認構造函數和參數化構造函數c#
- 30. 如何與出默認的構造函數另一個類
'= dafault' .... –
@LuchianGrigore *'default' – zch
什麼'dafault'我剛讀?!? – Casey