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)
and get<1>(x)
是编译时生成的两个不同的函数,并返回不同的类型。编译器实际上生成了两个函数,它们将被破坏成类似的东西
int get_tuple_int_string_int_0(x)
and
string get_tuple_int_string_int_1(x)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)