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未定义的错误。标准中的单一定义规则只要求定义使用的元素。在您的特定情况下,您的程序中没有任何内容使用 Foo::Bar,因此该程序不需要该定义。

于 2013-04-11T19:26:38.583 回答
3

这将链接,因为没有对 Foo::Bar 的未完成引用,并且不需要对其进行定义。如果您实际上尝试进行诸如 f.bar() 之类的调用,它会给您带来错误。

于 2013-04-11T19:27:07.787 回答
3

没有链接器错误,因为所有依赖项都已解决。

一旦你调用了这个方法Bar()并且没有定义它,你就会得到一个链接器错误。因为那时您引用Bar()并且链接器无法解决它。

于 2013-04-11T19:27:30.170 回答