tuple <int, string, int> x=make_tuple(1, "anukul", 100);
cout << x[0]; //1
cout << get<0>(x); //2
2 作品。 1 没有。
为什么会这样?
从 Lounge C++ 我了解到,这可能是因为编译器不知道该索引处存储的数据类型。 但这对我来说没有多大意义,因为编译器可以只查找该元组的声明并确定数据类型,或者在通过索引访问其他数据结构的元素时执行其他任何操作。
最佳答案
因为 [] 是一个运算符(名为 operator[]
),因此是一个成员函数,并且在运行时被调用。
虽然获取元组项是一种模板机制,但它必须在编译时解决。这意味着这只能通过 <> 模板语法来完成。
为了更好地理解,一个元组可以存储不同的类型。模板函数可能会根据传递的索引返回不同的类型,因为这是在编译时解决的。 无论传递的参数的值是什么,operator[] 都必须返回一个唯一的类型。因此无法实现元组功能。
get<0>(x)
和 get<1>(x)
是在编译时生成的两个不同的函数,并返回不同的类型。编译器实际上生成了两个函数,它们将被修改为类似
int get_tuple_int_string_int_0(x)
和
string get_tuple_int_string_int_1(x)
关于c++ - 为什么我们不能通过索引访问元组的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32606464/