簡體   English   中英

為什么在 C++ 中調用原始類型的構造函數是合法的?

[英]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是一個函數聲明!

這與任何其他原始類型沒有什么不同,例如

int a(5);

原始類型沒有構造函數,您調用的是直接初始化

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM