当我将类作为模板时,为什么会编译?

时间:2013-10-09 07:14:07

标签: c++ templates

我故意错误地使用点和箭头操作符,但是当我决定将类作为模板时,我很困惑为什么会编译。

编译:

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() {

}

2 个答案:

答案 0 :(得分:4)

如果未实例化模板,则不会完全检查模板的正确性。它们仅检查语法。 this.x虽然在语义上不正确(因为this不是,并且不能是支持该操作的类型),但语法上仍然是正确的。

答案 1 :(得分:1)

它编译,因为在您使用模板之前不会检查模板。如果您尝试在main()中执行某些有用的操作,则会出现编译错误。