[C++]了解内置类型升级
内置类型升级
- 1.调用模板T时,为什么可以使用T()类型的匿名对象来传参
- 2.内置类型被升级成为类后的使用事项
1.调用模板T时,为什么可以使用T()类型的匿名对象来传参
- 当我们在定义或声明一个函数时,如果想使用模板T类型的默认构造(例如使用string或vector的默认构造)
可以选择如此传参
void Func(const T& val = T())
- 第一次见这段代码,会提出一个问题:如果T是int或char等内置类型时,
int()/char()
的类型是否能通过编译?
答案是可以
int i = 0;
int j = int();(默认构造)
int k = int(1):(非默认构造)
- 从这里就能看出,C++的内置类型已经被升级成为了类类型
2.内置类型被升级成为类后的使用事项
int i;
int j();
int k(5);
- 我们知道,当我们要创建一个实例化对象时,如果是类类型,(例如string)那么是不能采用
string a();
这种风格的创建,因为编译器无法判断a是对象还是函数 - 但是我们再看
int j();
编译器虽然没有报错,但也没有创建j这个对象,事实上,这是一个函数声明,声明一个返回int类型且无参数的函数j - 对于i和k,如果上下文没有歧义,基本都是解释为初始化