【C++11特性篇】盘点C++11中三种简化声明的方式【auto】【decltype】【nullptr】(3)
2023-12-16 18:36:41
前言
大家好吖,欢迎来到 YY 滴C++系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁
主要内容含:
欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!
目录
一.auto&范围for
- 在C++98中auto是一个存储类型 的说明符,表明变量是局部自动存储类型 ,但是局部域中定义局部的变量默认就是自动存储类型,所以auto就没什么价值了。
- C++11中废弃auto原来的用法,将其用于实现自动类型推断。这样要求必须进行显示初始化 ,让编译器将定义对象的类型设置为初始化值的类型。
- 在C++中常与【范围for】搭配使用
int main()
{
int i = 10;
auto p = &i;
auto pf = malloc;
//auto x; 不能单独用
}
int main()
{
vector<int> v1 = { 1,2,3,4,54 };
for (auto e : v2)//范围for遍历
{
cout << e << " ";
}
cout << endl;
}
二.decltype——类型相关
【1】typeid()——只能看(打印)类型,但不能用
- typeid 推出可以推出参数是什么类型,但是只能看不能用
typeid(pf).name()
int main()
{
int i = 10;
auto p = &i;
auto pf = malloc;
cout << typeid(p).name() << endl;
cout << typeid(pf).name() << endl;
}
【2】decltype——推出对象的类型后:(1)再定义变量(2)或者作为模板实参
- 关键字decltype将变量的类型声明为表达式指定的类型
有以下两种主要用法:
- 单纯先定义一个变量出现
- 作为模板实参
int main()
{
auto pf = malloc;
auto pf1 = pf;
// decltype推出对象的类型,再定义变量,或者作为模板实参
// 单纯先定义一个变量出现
decltype(pf) pf2;
//作为模板实参
B<decltype(pf)> bb1;
//作为模板实参
const int x = 1;
double y = 2.2;
B<decltype(x* y)> bb2;
}
三.nullptr——表示空指针
- 由于C++中NULL被定义成字面量0,因为0既能指针常量,又能表示整形常量。 这样就可能回带来一些问题,比如下图所示
int main()
{
int* p = NULL; // int* p = 0; NULL被隐式类型转换成0
func(NULL); // func(0);
return 0;
}
- 所以出于清晰和安全的角度考虑,C++11中新增了nullptr,用于表示空指针
文章来源:https://blog.csdn.net/YYDsis/article/details/134376490
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!