1

C と C++ で異なる動作を提供するはずのこのコードがわかりません (C と C++の両方で有効なコードを、各言語でコンパイルすると異なる動作を生成できますか? )

#include <stdio.h>

struct f { };

int main() {
    f();
}

int f() {
    return printf("hello");
}

C++ で f() を呼び出せるのはなぜですか? それはデフォルトのコンストラクターですか (ちなみにわかりませんが、別の「暗黙的な」コンストラクターはありますか?)。f() 関数を呼び出していない C++ では..

4

2 に答える 2

2

C++ では、式T()where Tis a type は、値が初期化されたテンポラリの作成です。これは、一般的なコンストラクターの呼び出しとは異なることに注意してください (特に、POD 型の場合は異なります)。

于 2012-10-16T23:19:07.573 に答える
2

他のコンストラクターを定義しない限り、すべてのクラスには暗黙的なデフォルト コンストラクターがあります。クラスのこの定義f:

struct f { };

以下と同等です。

struct f { 
    f() = default;
    // same for copy constructors, move constructors, destructor, etc
};

はい、メイン内では、値を初期化しています(またはデフォルトの初期化、ここでは同じです)、 type のオブジェクトですf

なぜ関数を呼び出さないのかというとf、内部mainには利用可能な関数の宣言も定義もありませfん。指定された唯一の可視シンボルfは、上記で定義された構造体です。

于 2012-10-16T22:43:29.537 に答える