4
#include<iostream>
using namespace std;
class Foo {
void Bar( void ) const ;
};
int main()
{
  Foo f;
  cout<<sizeof(f)<<endl;
}

これを g++ で実行しましたが、コンパイル エラーは発生しませんでした。また、正しい o/p 1 を指定して実行しました。しかし、リンク中にエラーが発生することを期待していました。このコンパイラは依存していますか?

4

3 に答える 3

11

Foo::Barが定義されていないため、エラーが発生することを期待していたとしか想像できません。標準の 1 つの定義規則では、使用される要素を定義することのみが必要です。あなたの特定のケースでは、あなたのプログラムでは何も使用 Foo::Barしないので、プログラムはその定義を必要としません。

于 2013-04-11T19:26:38.583 に答える
3

すべての依存関係が解決されるため、リンカー エラーはありません。

Bar()メソッドを呼び出して定義しないとすぐに、リンカー エラーが発生します。その後、参照するBar()と、リンカーはそれを解決できないためです。

于 2013-04-11T19:27:30.170 に答える
3

Foo::Bar への未解決の参照がなく、その定義が必要ないため、これはリンクします。f.bar() などの呼び出しを実際に行おうとすると、エラーが発生します。

于 2013-04-11T19:27:07.787 に答える