gpt4 book ai didi

c++ - std::make_tuple 和右值引用

转载 作者:行者123 更新时间:2023-12-01 14:47:15 26 4
gpt4 key购买 nike

如下所示,为什么这里的“vv”不是右值引用?这里“v”的类型是右值引用,根据decltype的推理规则, decltype右值引用(不是纯右值)的类型应该是右值引用的类型,对吗?

int main(int argc, char **argv) {
int x{};
const auto [v] = std::make_tuple<int&&>(std::move(x)); // v -> const int &&;
decltype(v) vv = 10; // vv -> const int;
return 0;
}

最佳答案

发生是因为 std::make_tuple<int&&>返回 std::tuple<int> .来自 cppreference :

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

For each Ti in Types..., the corresponding type Vi in VTypes... isstd::decay<Ti>::type unless application of std::decay results instd::reference_wrapper<X> for some type X, in which case the deducedtype is X&.


如果您使用 std::tuple而不是 std::make_tuple - 它按您的预期工作。
这是 code to play .

关于c++ - std::make_tuple 和右值引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63076502/

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