【发布时间】:2017-05-14 00:22:51
【问题描述】:
在 c++ 中,未指定作为函数调用参数提供的表达式的求值顺序。 当我使用 std::apply 时,是否可以保证在元组的元素上按顺序调用该函数? 我有一个案例,首先将函数应用于元组的第一个元素,然后是第二个,然后是第三个,......
作为反例:
template <class Tuple, size_t... Is>
void function(Tuple t, std::index_sequence<Is...>) {
some_func( my_func(get<Is>(t))... );
}
不保证对元组的每个元素调用 my_func 的顺序。
【问题讨论】:
-
“按顺序调用”是什么意思?它不是为每个元组元素单独调用的;它被称为 once,以元组元素作为参数。
-
@BenVoigt:在我看来,提问者希望
std::apply(f, std::make_tuple(1, 2))打电话给f(1)和f(2),而不是f(1, 2)。 -
@user2357112:我认为 John 打算使用一个花括号初始化器列表,其中评估的顺序 有保证,调用
my_func,然后需要@ 987654327@ 以获取作为some_func的许多参数传递的支撑初始化器列表。 -
约翰,
my_func的返回类型是否对所有输入类型都相同? -
没有。我的意思是对 tule 中的不同类型调用重载函数。重载的函数返回与参数相同的类型。