3

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

编译:

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

}
4

2 回答 2

4

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

于 2013-10-09T07:17:31.743 回答
1

它可以编译,因为在您使用它之前不会检查模板。如果你尝试在你的 中做一些有用的事情main(),它会给你一个编译错误。

于 2013-10-09T07:20:02.307 回答