使用std::extent获取数组的第二维

我正在尝试使用 获取二维数组的第二维std::extent,但将输出作为0.

#include <iostream>
#include <type_traits>


int32_t main(int32_t argc, char *argv[]) {
    int32_t arr[10][100];
    
    std::cout << "first dim: " << sizeof(arr) / sizeof(*arr) << std::endl;
    std::cout << "second dim: " << sizeof(*arr) / sizeof(**arr) << std::endl;
    
    std::cout << "rank: " << std::rank<decltype(arr)>{} << std::endl;
    std::cout << "first dim: " << std::extent<decltype(arr)>{} << std::endl;
    std::cout << "second dim: " << std::extent<decltype(*arr)>{} << std::endl;
    
    return EXIT_SUCCESS;
}

回答

您得到结果的原因0decltype(*arr)具有 type int32_t(&)[100],它是对数组类型的引用std::extent退货0,除非你通过它正是数组类型。

您可以通过删除这样的引用来获得预期的结果:

std::extent<std::remove_reference_t<decltype(*arr)>>{}  // 100

这是一个演示。

  • compilers that support only c++11 standard can use `std::extent<std::remove_reference<decltype(*arr)>::type>{}`

回答

要获得第二维,请使用以下命令:

std::cout << "second dim: " << std::extent<decltype(arr),1>{} << std::endl; 
                                                   //    ^ second dimension !

  • I have to admit that I don't understand why the original doesn't work. Just thought this is better an answer than a comment

以上是使用std::extent获取数组的第二维的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>