c++ - STL中范围解析运算符的使用困惑

标签 c++ stl

我正在学习 C++ 的书包含如下示例:

const int numMembers = tuple_size<tupleType>::value;

还有这个:

vector <int>::iterator arrIterator = intArray.begin ();

在这两种情况下,我并不完全清楚如何使用范围解析运算符 (::)。在这些示例中,value 和 iterator 的值到底是如何分别确定的?

最佳答案

在这两种情况下,限定名称都用于命名类模板特化的成员。这可用于命名静态类成员。另外,一个typedefusing别名可以出现在类定义或类模板定义中,类型别名被视为类的成员。

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/

相关文章:

返回不可变指针 vector 的函数的 C++ 语法

c++ - C++ 中具有不止一种排序方法的 STL 容器

c++ - 对容器中所有元素的成员函数结果求和的最佳方法是什么?

c++ - 推断模板参数类型、模板类与模板函数

c++ - 包括 "winmain.h"与 <windows.h>

c++ - 范围解析运算符之前/之后的空格

c++ - 随后迭代多个标准容器

C++ 使用 default_random_engine 在循环中生成随机数

c++ - 如果

C++:无法为 Vertex 对象创建哈希函数