聲明瞭沒有參數的構造函數。它可以被視爲默認的構造函數嗎?如果沒有參數的構造函數裏面沒有語句,它會是默認的還是空的構造函數?空的和默認的構件是相同的還是不同的?
回答
您應該區分術語默認構造函數和顯式默認構造函數。根據C++標準(12.1構造)
4一類X A默認的構造是類X的一個構造 可以不帶參數被調用。
從這個定義例如,它遵循一般情況下默認構造函數可能有參數。而且,相同的構造函數可以是默認構造函數和非默認構造函數。
請看下面的例子
讓我們假設你定義一個類構造函數帶有一個參數
struct A
{
A(int);
};
到現在爲止它是不是默認construtor。你可能不會寫例如
A a1;
編譯器會發出錯誤。但是你可以寫
A a1(10);
那麼這個定義A1後有一個默認的參數
A::A(int = 0) {}
構造函數的定義,現在的構造已經成爲一個默認的構造函數,你可以寫
A a2;
整個例子看起來像
#include <iostream>
struct A
{
A(int);
};
//A a1; - compilation error
A a1(10);
A::A(int = 0) {}
A a2; // O'k
int main()
{
return 0;
}
顯式默認構造函數是一個用關鍵字定義的構造函數,默認爲。顯式默認構造函數可能沒有默認參數。 這裏是默認
struct A
{
A() = default;
};
一個默認的構造函數是明確的例子使被拖欠可能沒有參數的默認構造函數。
至於這個你的問題
,如果不帶參數的構造函數內部沒有語句將它 是默認或空的構造?
那麼在C++標準中沒有空構造函數這樣的術語。然而,默認的默認構造函數看起來與用戶定義的具有空主體的默認構造函數的方式相同。從C++標準(12.1構造,段#5)
的隱式定義的默認的構造執行集的類的 初始化將由用戶編寫 默認構造該類沒有進行ctor-initializer(12.6.2) 和一個空的複合語句。
考慮到由編譯器隱式定義和顯式用戶定義的空正文拷貝構造函數之間存在很大差異。我描述了它 here雖然它是用俄語寫的,但我認爲你可以使用瀏覽器或網頁(例如谷歌)服務翻譯英文翻譯。
從C++ 11標準N3376 12.1/5
一類X A默認的構造是類X的一個構造 可以不帶參數被調用。如果沒有用戶聲明 構造函數X類,無參數的構造函數是 隱含聲明爲默認(8.4)
所以不帶任何參數(聲明或不聲明)構造函數是默認構造函數。
是的,因爲默認構造函數是一個可以不帶參數調用的構造函數。
在參照標準C++
yes it will be default constructor.
constructor with no arguments will be treated as default constructor.
當一個對象被創建時沒有任何參數,它會調用默認的構造函數。通常它是沒有參數的構造函數,但並非總是如此。
class FOO
{
int i;
public:
FOO(int iVal = 10)
{
i = iVal;
}
};
在上述情況下,具有默認參數的構造函數是默認構造函數。
空構造函數不算什麼。可能是你試圖確保沒有成員變量被初始化。
- 1. 它是不同的默認會話命名空間中的'默認'和'默認'?
- 2. 浮點數組,float []和double []是不同的,還是相同的?
- 3. 不同的執行時間還是相同的不同選項?
- 4. 默認構造函數是好還是壞?的Checkstyle和PMD是相反這裏
- 5. 比較默認還是空的?
- 6. 這兩個查詢是相同還是相同的輸出?
- 7. '功能依賴'和'正常化'是相同還是不同?
- 8. asp.net和c#.net webform有什麼不同?是相同還是不同?
- 9. 默認是相對於文檔的絕對定位還是...?
- 10. asp.net中的Webconfig與多個用戶相同還是不同?
- 11. X86或X64上的AppID!不同還是相同?
- 12. 列表是相同的但不相同?
- 13. nsurlconnection默認是什麼?同步還是異步?
- 14. 相同的字符串是不同的
- 15. 爲什麼不同結構大小的輸出是相同的?
- 16. buildozer - 使用不同的python版本(不是默認的2.7.2)
- 17. MATLAB - 如何比較兩個對象是相同還是不同
- 18. php - 真的還是真的不同?
- 19. 默認情況下,WPF中的所有操作是同步還是異步?
- 20. ASP.Net中的默認Web服務調用是同步還是異步?
- 21. 不同的默認和HTML選擇
- 22. 網站和移動應用的登錄API應該相同還是不同?
- 23. 比較兩個臨時表中的值是相同還是不同
- 24. 默認是python的JSON庫部分還是外部包。 simplejson是一個不同於Json的包
- 25. VARIABLES和CLASSES中的引用行爲(通過引用形成) - 它們是不同的還是相同的?
- 26. Javamail是異步的還是同步的?
- 27. SELECT是同步的還是異步的?
- 28. curl_easy_perform()是同步的還是異步的?
- 29. 發佈相同軟件的不同版本,你應該分叉還是分支?
- 30. 聲明是更好還是相同?
如果您沒有明確定義默認構造函數,則C++編譯器會生成一個隱式構造函數。但是,使用C++ 11時,您也可以防止這種隱式生成的默認構造函數。請查看http://en.cppreference.com/w/cpp/language/default_constructor上的「已隱式聲明的默認構造函數」部分。 – Deniz
@Deniz是的,我知道,默認的構造函數可以被定義爲刪除,但是,它與問題沒有關係。 – ForEveR
額外的信息不會傷害任何人,我認爲(特別是當提到C++ 11時)。 – Deniz