由于明显的原因,以下代码无法编译,即 Foo 正在尝试访问 Bar 的私有成员。但是,如果您取消注释/注释标记的行,使 Foo 成为模板,它会编译并输出 42。我在这里缺少什么?为什么这有效?在我看来不应该。
感谢您的帮助。
#include <iostream>
class Bar {
private:
static const int x = 42;
};
//template <int> // uncomment me
struct Foo {
static const int i = Bar::x;
};
int main(int argc, char* argv[]) {
std::cout << Foo::i << std::endl; // comment me
//std::cout << Foo<0>::i << std::endl; // uncomment me
}
如果您看到此行为,则这是编译器错误。
Comeau Online 和 Visual C++ 2010 都拒绝该代码,因为该代码无效Bar::x
无法访问。 g++ 4.1.2 错误地接受无效代码(有人需要使用更高版本进行测试以查看它是否已修复;这是我在这台笔记本电脑上拥有的唯一版本)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)