[英]Is the default value of int 1?
從這個問題中學習后,在C ++ 中可以將變量的名稱放在括號中
我試過這個程序:
#include <iostream>
int main()
{
int (a)();
std::cout << "if this works then deafult value of int should be " << a << std::endl;
return 0;
}
並獲得'如果這個工作的輸出然后int的deafult值應為1'
那么, 這是真的嗎?
編輯::
閱讀@詹姆斯mcnellis答案當我試圖分配一個值后a
,它提供了一個錯誤的功能分配“詮釋一個()” 。
所以現在很清楚,這里的a
是函數而不是變量。
a
不是int
:它是一個沒有參數並返回int
的函數。 因為它是一個函數聲明,所以a
也不是局部變量,並且它沒有“默認值”。
該程序格式錯誤,因為您從未定義函數a
但您嘗試使用它(通過在插入表達式中獲取其地址)。 因此它違反了一個定義規則。
如果在程序中定義a
,將打印1
因為函數a
的地址將轉換為bool
:具有bool
參數的operator<<
overload是函數指針參數類型的最佳匹配。
[注:如果你定義a
和使用Visual C ++編譯,將打印的功能,而不是地址1
。 這是(我認為)因為Visual C ++允許函數指針隱式轉換為void*
,然后具有void const*
參數的operator<<
overload是函數指針參數類型的最佳匹配。 如果在禁用語言擴展名( /Za
)的情況下進行編譯,則將按預期選擇帶有bool
參數的重載。
正如James McNellis所說你沒有宣布一個int,你就是在聲明一個函數。
但是,您可以使用如下默認值初始化int:
int i = int();
並且默認值不是1,它是0。
std::cout << "this prints '0': " << int() << '\n';
在C ++ 11中,您可以使用統一初始化:
int i {};
花括號不會像括號那樣混淆功能聲明的一部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.