【问题标题】:How to determine the type of an array element?如何确定数组元素的类型?
【发布时间】:2014-04-20 01:41:56
【问题描述】:

我无法获取元素的类型。此解决方案返回对元素类型的引用。

int arr[] = { 0, 1, 2, 3, 4, 5 };
using arrElemType = decltype(*arr);
vector<arrElemType> vec(std::cbegin(arr), std::cend(arr));

【问题讨论】:

标签: c++ arrays c++11 vector


【解决方案1】:

试试下面的

using arrElemType = std::remove_reference<decltype( *arr )>::type;

typedef std::remove_reference<decltype( *arr )>::type arrElemType;

您需要包含标题&lt;type_traits&gt;

【讨论】:

  • @user2198121:只是因为它碰巧通过其他一些标头间接包含在内。你不应该依赖它。
  • 如果我打算存储它,我会一路走下去std::decay
【解决方案2】:

C++11 及以上的标准方式是使用std::remove_all_extents

#include <type_traits>

int arr[] = { 0, 1, 2, 3, 4, 5 };
using arrElemType = std::remove_all_extents<decltype(arr)>::type;
vector<arrElemType> vec(std::cbegin(arr), std::cend(arr));

【讨论】:

    【解决方案3】:

    如果为元素定义了+ 运算符:

    int arr[] = { 0, 1, 2, 3, 4, 5 };
    using arrElemType = decltype(+arr[0]); // + is the key
    vector<arrElemType> vec(std::cbegin(arr), std::cend(arr));
    
    • 不需要&lt;type_traits&gt; 标头。
    • +arr[0] 表达式变为 prvalue,decltype 推导出为 T。
    • decltype(arr[0]) 给出的 T& 在这里是不可取的。
    • 数组元素不能在 decltype 中访问,所以使用 arr[1000] 没关系。

    查看compiler explorer上的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 2011-11-19
      • 2010-09-20
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多