这段代码在 C++ 中合法吗?
我刚刚发现,当涉及到模板时,此代码会在 g++ 3.4.2 中编译,并且除非不调用 m() ,否则可以正常工作:
template <typename T>
class C
{
T e;
public:
C(): e(0) {};
void m()
{
e = 0;
};
};
现在可以创建并使用实例,
C<const int> c;
直到不调用 cm()
为止没有编译错误,但这合法吗?
I just found that when it comes to templates this code compiles in g++ 3.4.2 and works unless m() is not called:
template <typename T>
class C
{
T e;
public:
C(): e(0) {};
void m()
{
e = 0;
};
};
Now one may create and use instance
C<const int> c;
Until c.m()
is not called there are no compile errors but is this legal?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
是的,这是合法的。模板规范是,在实例化方法之前,它并不存在,因此不会被编译器检查。以下是规范中的相关内容:
Yes, this is legal. The template specification is that until a method is instantiated, it doesn't exist and therefor is not checked by the compiler. Here's the relevant bit from the spec: