簡體   English   中英

int 1的默認值是?

[英]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.

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