我故意错误地使用点和箭头操作符,但是当我决定将类作为模板时,我很困惑为什么会编译。
编译:
template <class B>
struct Boss {
bool operator==( Boss & other ) {
return this.x == other -> x;
}
};
int main() {
}
不编译:
struct Boss {
bool operator==( Boss & other ) {
return this.x == other -> x;
}
};
int main() {
}
答案 0 :(得分:4)
如果未实例化模板,则不会完全检查模板的正确性。它们仅检查语法。 this.x
虽然在语义上不正确(因为this
不是,并且不能是支持该操作的类型),但语法上仍然是正确的。
答案 1 :(得分:1)
它编译,因为在您使用模板之前不会检查模板。如果您尝试在main()
中执行某些有用的操作,则会出现编译错误。