"template <> int line<0>::operator[](int y) const" 是做什么的?

What does "template <> int line<0>::operator[](int y) const" do?

#include <bits/stdc++.h>
using namespace std;

constexpr int mod = 1e9 + 7, maxn = 2e6;
int N, M, p[1 << 10], buf[maxn];

template <bool t> struct line {
    int *v;
    int operator[](int y) const;
};       

template <> int line<0>::operator[](int y) const { return v[y]; }
template <> int line<1>::operator[](int y) const { return v[M * y]; }



这个运算符是什么东西?它是一个函数吗?如果是那么为什么它后面有方括号和“const”? 还有这些模板的意思吗?我假设它执行其中之一 取决于 t 的值(真或假)'

What is this operator thing? Is it a function? If it is then why does it have square brackets

您将 operator[] 声明为名为 line 的 class 模板的成员函数。通过提供这个,我们说我们 重载 operator[] 我们的 class 模板 line(实际上是针对特定的 class 类型将被实例化)。


why does it have const after it

const表示这个operator[]成员函数是一个const成员函数。这意味着我们不允许更改此成员函数内的 non-static non-mutable 数据成员。


Also do these template things mean?

假设您正在询问 template<> 正如问题标题所暗示的那样,这意味着您正在 明确(完全)专门化 成员函数 operator[] 对于不同的 class-template 个参数 01.


可以在任何 good C++ books.

中找到更多详细信息

另请参阅Why should I not #include <bits/stdc++.h>?