[英]Why is it legal in C++ to call a constructor of a primitive type?
為什么以下代碼在 C++ 中是合法的?
bool a(false);
我的意思是, T a(VALUE)
應該調用構造函數,對嗎? 我想它沒有被解析為函數聲明。 但是bool
是普通類型,它沒有構造函數。 或者是嗎?
如果相關,我正在使用 Visual Studio 2012。
盡管bool
是一種原始類型,因此沒有構造函數,但語言設計者引入了統一的初始化語法,既適用於原始類型,也適用於類。 這大大簡化了模板代碼的編寫,因為您可以繼續使用
T tVar(initialVal);
不知道模板類型參數T
是否為原始類型的語法。 這對模板設計者來說是一個非常顯着的好處,因為他們不再需要從原始與類的角度考慮模板類型參數。
這只是初始化 POD 類型並具有與構造函數(甚至是復制構造函數)類似的行為的有效語法。
例如,以下內容是有效的:
bool a(false);
bool b(a);
bool c = bool(); // initializes to false
需要注意的一件有趣的事情是,在
int main(int argc, const char *argv[])
{
bool f();
return 0;
}
f
是一個函數聲明!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.