#include<iostream>
using namespace std;
class Foo {
void Bar( void ) const ;
};
int main()
{
Foo f;
cout<<sizeof(f)<<endl;
}
我在 g++ 上运行它,它没有给我任何编译错误。此外,它执行了正确的 o/p 1。但我期待,链接过程中的错误。这个编译器依赖吗?
我只能想象你期望得到一个Foo::Bar
未定义的错误。标准中的单一定义规则只要求定义使用的元素。在您的特定情况下,您的程序中没有任何内容使用 Foo::Bar
,因此该程序不需要该定义。
这将链接,因为没有对 Foo::Bar 的未完成引用,并且不需要对其进行定义。如果您实际上尝试进行诸如 f.bar() 之类的调用,它会给您带来错误。
没有链接器错误,因为所有依赖项都已解决。
一旦你调用了这个方法Bar()
并且没有定义它,你就会得到一个链接器错误。因为那时您引用Bar()
并且链接器无法解决它。