Example:
// can't forward declare with class Foo::Bar
// actual class
class Foo
{
public:
class Bar // or enum Bar
{
}
};
我承认当前的 C++ 标准不允许这样做,但我无法想出一个不允许这样做的充分理由,特别是对于 C++0x,我们现在可以转发声明枚举。我想反对它的一个论点是,如果我们转发声明嵌套类,而该类最终是私有的,那么它是不允许的。但这与在命名空间中向前声明一个类,然后将其声明为外部类的嵌套类没有太大不同。编译器只会给出一个错误(也许先前声明行中的错误消息与此声明不匹配)。
那么为什么真的不允许呢?
换句话说(作者 James McNellis),“为什么类 Foo::Bar; 不允许在不提供 Foo 或 Bar 定义的情况下?”
** 鉴于 C++ 标准委员会认识到通过在 C++0x 中引入枚举的前向声明来使用前向声明来减少依赖性和编译时间的好处,这肯定是同一件事的一部分,不是吗?
它不在语言中的原因很简单,就是没有人提出关于如何将其包含在语言中的好建议。功能不包括其本身,必须有人将其写下来并解释其优点并且没有(或非常小的)缺点。
不向前声明枚举的论点(enum x;
)只是编译器在看到有多少值之前无法为枚举变量选择正确的大小。这个问题通过允许解决you来决定编译器(enum x : int;
)。在进入标准之前,这也已被实施并证明可以正常工作。
See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)