使用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;
}
回答
您得到结果的原因0是decltype(*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