2 に答える
aではありませんint: パラメータを持たず、 を返す関数ですint。関数宣言であるためa、ローカル変数でもなく、「デフォルト値」を持ちません。
関数を定義せずに (挿入式でそのアドレスを取得することによって)使用aしようとしているため、プログラムの形式が正しくありません。したがって、1 つの定義規則に違反します。
aプログラムで定義する1と、関数のアドレスがaに変換されるため、 が出力されboolます。パラメーターoperator<<を持つオーバーロードはbool、関数ポインターの引数の型に最適です。
[注: aVisual C++ で定義してコンパイルすると、 ではなく、関数のアドレスが出力されます1。これは (私が思うに) Visual C++ では関数ポインターを暗黙的に に変換できるためvoid*、パラメーターoperator<<を持つオーバーロードがvoid const*関数ポインターの引数の型に最適であるためです。言語拡張機能を無効にしてコンパイルすると ( /Za)、boolパラメーターを含むオーバーロードが期待どおりに選択されます。]
James McNellisがあなたがintを宣言していないと言っているように、あなたは関数を宣言しているのです。
ただし、次のようなデフォルト値で初期化されたintを取得できます。
int i = int();
また、デフォルト値は1ではなく0です。
std::cout << "this prints '0': " << int() << '\n';
C ++ 11では、均一な初期化を使用できます。
int i {};
中括弧は、括弧のように関数宣言の一部と混同されることはありません。