1
#include <iostream>

using namespace std;

class test{
public:
    test() { cout<<"CTOR"<<endl; }
    ~test() { cout<<"DTOR"<<endl; }
};

int main()
{
 test testObj();
 cout<<"HERE"<<endl;

} 

出力:

HERE

コンパイラは「test testObj();」という行をスキップし、残りを警告付きでコンパイルし、実行すると出力が生成されます。警告は、VC++ 2008 で「プロトタイプ関数が呼び出されませんでした (変数定義が意図されていましたか?)」です。エラーがスローされないのはなぜですか?

4

3 に答える 3

8

エラーではないからです。

あなたのコードは、最も厄介な解析に違反しています(要約test testObj();すると、変数を定義せず、関数を宣言します)。

于 2012-07-08T21:08:30.947 に答える
3

簡単に言えば、宣言したような関数を宣言するのはエラーではないからです。ただし、警告は十分に役立つはずです。

于 2012-07-08T21:08:52.833 に答える
1

Main のコンストラクター呼び出しから () を削除します。

int main()
{
    test testObj;
    cout<<"HERE"<<endl;
} 
于 2012-07-08T21:10:15.850 に答える