test.cpp
#include<iostream>
#include<type_traits>
using namespace std;
int main(int argc,char* argv[])
{
float *data = new float[100];
for(size_t i = 0;i < 100;++i)
data[i] = i;
cout<<"1.use decltype"<<endl;
float af[10];
auto newD = reinterpret_cast<decltype(af)*> (data);
for (size_t i = 0;i < 10;++i)
{
const auto &[d1,d2,d3,d4,d5,d6,d7,d8,d9,d10] = newD[i];
cout<<"d1:"<<d1<<"d2:"<<d2<<"d3:"<<d3<<"d4:"<<d4<<"d5:"<<d5;
cout<<"d6:"<<d6<<"d7:"<<d7<<"d8:"<<d8<<"d9:"<<d9<<"d10:"<<d10<<endl;
}
cout<<"-----------------------------"<<endl;
cout<<"2.use __typeof__()"<<endl;
auto newd = reinterpret_cast<__typeof__(float[10])*>(data);
for (size_t i = 0;i < 10;++i)
{
const auto &[d1,d2,d3,d4,d5,d6,d7,d8,d9,d10] = newd[i];
cout<<"d1:"<<d1<<"d2:"<<d2<<"d3:"<<d3<<"d4:"<<d4<<"d5:"<<d5;
cout<<"d6:"<<d6<<"d7:"<<d7<<"d8:"<<d8<<"d9:"<<d9<<"d10:"<<d10<<endl;
}
delete[] data;
data = nullptr;
return 0;
}
编译
g++ -o test test.cpp
报警告
加编译参数
g++ -o test test.cpp -std=c++1z
运行输出为:
1.use decltype
d1:0d2:1d3:2d4:3d5:4d6:5d7:6d8:7d9:8d10:9
d1:10d2:11d3:12d4:13d5:14d6:15d7:16d8:17d9:18d10:19
d1:20d2:21d3:22d4:23d5:24d6:25d7:26d8:27d9:28d10:29
d1:30d2:31d3:32d4:33d5:34d6:35d7:36d8:37d9:38d10:39
d1:40d2:41d3:42d4:43d5:44d6:45d7:46d8:47d9:48d10:49
d1:50d2:51d3:52d4:53d5:54d6:55d7:56d8:57d9:58d10:59
d1:60d2:61d3:62d4:63d5:64d6:65d7:66d8:67d9:68d10:69
d1:70d2:71d3:72d4:73d5:74d6:75d7:76d8:77d9:78d10:79
d1:80d2:81d3:82d4:83d5:84d6:85d7:86d8:87d9:88d10:89
d1:90d2:91d3:92d4:93d5:94d6:95d7:96d8:97d9:98d10:99
-----------------------------
2.use __typeof__()
d1:0d2:1d3:2d4:3d5:4d6:5d7:6d8:7d9:8d10:9
d1:10d2:11d3:12d4:13d5:14d6:15d7:16d8:17d9:18d10:19
d1:20d2:21d3:22d4:23d5:24d6:25d7:26d8:27d9:28d10:29
d1:30d2:31d3:32d4:33d5:34d6:35d7:36d8:37d9:38d10:39
d1:40d2:41d3:42d4:43d5:44d6:45d7:46d8:47d9:48d10:49
d1:50d2:51d3:52d4:53d5:54d6:55d7:56d8:57d9:58d10:59
d1:60d2:61d3:62d4:63d5:64d6:65d7:66d8:67d9:68d10:69
d1:70d2:71d3:72d4:73d5:74d6:75d7:76d8:77d9:78d10:79
d1:80d2:81d3:82d4:83d5:84d6:85d7:86d8:87d9:88d10:89
d1:90d2:91d3:92d4:93d5:94d6:95d7:96d8:97d9:98d10:99
我的环境使用typeof()编译不过,才改用__typeof__()。见Typeof (Using the GNU Compiler Collection (GCC))
有关typeof()和decltype()的区别见如下链接:
Difference between decltype and typeof? - Stack Overflow