C11新特性随记心得

        本文使用clions这款IDE,从https://github.com/google/googletest/tree/main/googletest下载googletest,放在clions文件中,包含头文件:

#include "gtest/gtest.h"

        以下全是基于googletest所做的单元测试,如果对于googletest中断言不清楚的请参考:

https://blog.youkuaiyun.com/weixin_42227520/article/details/107060073

那么继续了,首先要记录的是:

1)auto,decltype 

        在写作过程中,我发现decltype这个对于函数返回不能是void的空类型,

TEST(autoTest, test01){
    int i = 10;
    auto a = i;//这里a为int类型
    auto &b = i;//b为 int&
    auto *c = &i;//c为int*
    //推导数组
    int d[10] = {0};
    auto f = d;//f为int*    f指向数组首个地址

    //这里需要区分顶层const与底层const
    const int _x = 1;
    auto _y = _x;//这里_x中const为顶层const,因此_y为int类型
    auto _z = &_x;//这里对_x取地址是一种底层const,这里的类型为const int*
    const auto _m = _x;//可以看出也是一种顶层const,auto->int
}

int func(){return 0;}
TEST(decltype, test01){
    decltype(func()) i;//推导i为int
    int x = 0;
    decltype(x) y;
    decltype(x + y) z;//同理
}

        深入理解返回值后置类型语法就是为了解决函数返回值类型依赖于参数但是却难以确定返回值类型:

template<class T, class U>//返回值后置类型语法,
//我感觉这个玩意儿在Lambda表达式也出现了,不知道是不是一样的,
auto add(T t, U u) ->decltpye(t + u) {
    return t + u;
}
TEST(posttype, test01){
    auto _add = add(1,2);
    decltype(add(1,2)) _add1;//_add1为int类型

    //在c14中提出了decltype(auto)的使用方式,我感觉没什么用,。。
    decltype(auto) _add2 = add(1,3);
    //如果读者不知道如何输出上述类型,可将_add2等等视为变量
    std::cout << _add2 << std::endl;
}

        作为程序员,对于复杂类型可以使用auto图个方便,但是为了代码的可读性,还是尽量使用原本的类型,当然在clions编译器中,使用auto关键词会在其后显示类型,还不错吧,请看图1。

图1 clions编译器

        那么继续下一个东东,刚才不提到Lambda表达式吗?那就先说说看:

2)Lambda表达式

        在https

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值