本文使用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表达式吗?那就先说说看: