gpt4 book ai didi

c++ - 为什么我们不能通过索引访问元组的元素?

转载 作者:IT老高 更新时间:2023-10-28 22:06:36 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com