簡體   English   中英

為什么std :: tuple會分解為rvalue引用

[英]Why does std::tuple decompose into rvalue references

為什么std :: tuple會分解成右值引用?

#include <tuple>

template <typename, typename> struct same_type;
template <typename T> struct same_type<T, T> {};

void foo() {
  std::tuple tuple(1, 'a', 2.3, true);
  auto[i, c, d, b] = tuple;
  same_type<decltype(i), int &&>{};
  same_type<decltype(c), char &&>{};
  same_type<decltype(d), double &&>{};
  same_type<decltype(b), bool &&>{};
}

使用gcc trunk編譯時沒有錯誤。 我本來期望普通類型,例如

same_type<decltype(i), int>{};

實例

GCC錯誤。 應用於結構化綁定的decltype返回引用的類型 ,對於類似元組的情況,它是std::tuple_element返回的確切類型。 換句話說,語言在這里非常努力地隱藏這些實際上是引用的事實。

[dcl.type.simple] / 4

對於表達式e ,由decltype(e)表示的類型定義如下:

  • 如果e是未命名的id-expression,命名結構化綁定([dcl.struct.bind]),則decltype(e)是結構化綁定聲明規范中給出的引用類型;
  • [...]

[dcl.struct.bind] / 3

否則,如果表達式std::tuple_size<E>::value是一個格式良好的整型常量表達式[...]給定由std::tuple_element<i, E>::type指定的類型Ti ,每個vi是用初始化程序初始化的“引用到Ti ”類型的變量,如果初始化程序是左值,則引用是左值引用,否則是引用左值引用; 引用的類型是Ti

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM