我正在学习 C++ 的书包含如下示例:
const int numMembers = tuple_size<tupleType>::value;
还有这个:
vector <int>::iterator arrIterator = intArray.begin ();
在这两种情况下,我并不完全清楚如何使用范围解析运算符 (::)。在这些示例中,value 和 iterator 的值到底是如何分别确定的?
最佳答案
在这两种情况下,限定名称都用于命名类模板特化的成员。这可用于命名静态类成员。另外,一个typedef
或using
别名可以出现在类定义或类模板定义中,类型别名被视为类的成员。
std::tuple_size<tupleType>::value
是静态成员(指定元组类型中元素的数量)。 std::vector<int>::iterator
是成员类类型(并且该类型的对象可用于迭代 vector 的元素)。
例如:
template <typename T> class A
{
public:
static const int value = 3;
typedef int number_type;
using param_type = T;
using container_type = std::vector<T>;
};
int main() {
int a = A<int>::value; // a is initialized to 3
A<int>::number_type n = 0; // n is an int
A<int>::param_type p = 1; // p is an int
A<double>::param_type q = 2.5; // q is a double
A<double>::container_type v; // v is a std::vector<double>
}
(如示例所示,类模板的成员可以依赖于模板参数。)
关于c++ - STL中范围解析运算符的使用困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46886712/