typeof()和decltype()的使用

 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

C++ – Difference between decltype and typeof

C++ typeof vs decltype

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值