我正在尝试使用 获取二维数组的第二维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;
}
Run Code Online (Sandbox Code Playgroud)
您得到结果的原因0是decltype(*arr)具有 type int32_t(&)[100],它是对数组类型的引用。std::extent退货0,除非你通过它正是数组类型。
您可以通过删除这样的引用来获得预期的结果:
std::extent<std::remove_reference_t<decltype(*arr)>>{} // 100
Run Code Online (Sandbox Code Playgroud)
这是一个演示。
要获得第二维,请使用以下命令:
std::cout << "second dim: " << std::extent<decltype(arr),1>{} << std::endl;
// ^ second dimension !
Run Code Online (Sandbox Code Playgroud)