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 に答える