c++、同じ名前の関数でこの場合どっちが使われるのかわからない。
以下のコードなのですがtemplateの方の関数でreturn sunto<n - 1>();
とありますがそれはtempalte<int n>
のほうの関数をまた使ってるのでしょうか。一方template<>
のほうはどこで利用されるのでしょうか?template<>
関数をコメントにするとint array3
のほうでエラーになります。 coutでいつ使われてるか確認しようとしましたがエラーになるので使えませんでした。名前が同じなので混乱しています、解説をお願いしたいです。
template<int n> constexpr int sunto() {
return n + sunto<n - 1>();
}
template<> constexpr int sunto<0>(){
//cout << "template<>を使用\n";
return 0;
}
int array3[sunto<3>()];
int main() {
size_t t = sizeof(array3);
for (size_t i = 0; i < t; i++) {
cout << i<<'\n';
}
cout << t;
_getch();
return 0;
}