3
4

2 に答える 2

17

aではありませんint: パラメータを持たず、 を返す関数ですint。関数宣言であるためa、ローカル変数でもなく、「デフォルト値」を持ちません。

関数を定義せずに (挿入式でそのアドレスを取得することによって)使用aしようとしているため、プログラムの形式が正しくありません。したがって、1 つの定義規則に違反します。

aプログラムで定義する1と、関数のアドレスがaに変換されるため、 が出力されboolます。パラメーターoperator<<を持つオーバーロードはbool、関数ポインターの引数の型に最適です。

[注: aVisual C++ で定義してコンパイルすると、 ではなく、関数のアドレスが出力されます1。これは (私が思うに) Visual C++ では関数ポインターを暗黙的に に変換できるためvoid*、パラメーターoperator<<を持つオーバーロードがvoid const*関数ポインターの引数の型に最適であるためです。言語拡張機能を無効にしてコンパイルすると ( /Za)、boolパラメーターを含むオーバーロードが期待どおりに選択されます。]

于 2012-08-01T03:00:14.053 に答える
4

James McNellisがあなたがintを宣言していないと言っているように、あなたは関数を宣言しているのです。

ただし、次のようなデフォルト値で初期化されたintを取得できます。

int i = int();

また、デフォルト値は1ではなく0です。

std::cout << "this prints '0': " << int() << '\n';

C ++ 11では、均一な初期化を使用できます。

int i {};

中括弧は、括弧のように関数宣言の一部と混同されることはありません。

于 2012-08-01T04:22:00.420 に答える