gpt4 book ai didi

c++ - 带有 std::ref 参数的 std::tie 和 std::make_tuple 有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 21:50:40 26 4
gpt4 key购买 nike

写表达式有语义上的区别

std::tie( x, y, z )

还有下面的表达式?

std::make_tuple( std::ref(x), std::ref(y), std::ref(z) )

如果有,有什么区别?

顺便说一句,这个问题和 What is the difference between assigning to std::tie and tuple of references? 不一样。因为引用元组不是通过 std::ref 创建的,而是通过显式指定类型来创建的。

最佳答案

这两个表达式之间几乎没有功能上的区别。 tie()只是更短,而 make_tuple()更通用。


根据[tuple.creation], make_tuple 确实:

template<class... Types>
constexpr tuple<VTypes...> make_tuple(Types&&... t);

Let Ui be decay_t<Ti> for each Ti in Types. Then each Vi in VTypes is X& if Ui equals reference_wrapper<X>, otherwise Vi is Ui.

因此 std::make_tuple( std::ref(x), std::ref(y), std::ref(z) )产生一个std::tuple<X&, Y&, Z&> .

另一方面, tie 确实:

template<class... Types>
constexpr tuple<Types&...> tie(Types&... t) noexcept;

Returns: tuple<Types&...>(t...). When an argument in t is ignore, assigning any value to the corresponding tuple element has no effect.

因此,std::tie(x, y, z)也会产生 std::tuple<X&, Y&, Z&> .


除了一个edge case .

关于c++ - 带有 std::ref 参数的 std::tie 和 std::make_tuple 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36839648/

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