C++11新特性(二):语言特性
C++11新特性
nullptr空指针
nullptr空指针的使用可以规避掉以往设置为NULL的风险。NULL在编译器中常常被设置为0或者其它数字,此时判断指针是否为NULL,即判断指针类型是否能够等于整型值,并不安全。
int *p = nullptr;
强类型枚举
强类型枚举不能隐式转换为int类型,可以指定底层类型,如果未指定底层类型,会自动默认为int类型。只能通过类型名访问,是因为成员作用域局限在类型中,并不公开。
// 强类型枚举
enum class HttpState:uint32_t{
HTTP_OK, // private
HTTP_BAD
};
using State = HttpState;
State state = State::HTTP_OK;
constexpr声明
constexpr会告诉编译器在编译时对其进行优化,所以会在编译时即计算完。因此禁止调用函数(发生在运行时)。
constexpr int Add(int a, int b)
{
return a + b;
}
int main(){
int a =3, b = 4;
const int res = Add(a, b);
std::cout << res << std::endl;
}
属性
[[noreturn]]属性指明,函数不返回值。
委托构造
构造器能够调用其它构造器进行初始化。
class MyClass{
MyClass(int a) :val(a){}; // default private
MyClass() : MyClass(0){};
private:
int val;
}
用户定义语义
显式虚重载
override告知编译器,派生类会覆盖基类中的虚函数,避免发生签名不匹配和不存在相应虚函数。如果出错会报错。
// explict virtual override
class Base{
virtual void Add()=0;
};
class Derived final: public Base{
void Add() override{
};
};
Final限定符:限定的东西无法继承
告诉编译器,用于指示一个类不能被进一步继承,或者一个虚函数不能被子类覆盖。
// final修饰的虚函数无法覆盖
class Cat{
public:
virtual void showCatName() final{ // 限定不能被继承
/* 显示名字 */
}
};
class MyCat : public Cat{
void showCatName(){ // 不能继承父类,此时会编译报错
/* ... */
}
}
// final修饰的类无法继承
class Base final{
virtual void Add() = 0;
};
default函数
此修饰符用于告诉编译器为default修饰的函数生成默认函数, noexcept告诉编译器不要抛出异常,避免对象构建过程中抛出异常,假如构造函数抛出异常,其中有一些变量已经生成。那么此时对象无法构建成功,已经生成的变量则无法析构,会导致丢失内存。
class Myclass{
Myclass() noexcept = default; // 生成默认配置
};
deleted函数
此修饰符用于告诉编译器不要为delete生成默认的函数,使其无法被实例化和调用。可以完成禁止拷贝、禁止移动等功能。
class Myclass{
Myclass() noexcept = delete; // 生成默认配置
};
C++11新特性(二):语言特性的更多相关文章
- C++11新特性总结 (二)
1. 范围for语句 C++11 引入了一种更为简单的for语句,这种for语句可以很方便的遍历容器或其他序列的所有元素 vector<int> vec = {1,2,3,4,5,6}; ...
- C++11新特性总结 (一)
1. 概述 最近在看C++ Primer5 刚好看到一半,总结一下C++11里面确实加了很多新东西,如果没有任何了解,别说自己写了,看别人写的代码估计都会有些吃力.C++ Primer5是学习C++1 ...
- [转载] C++11新特性
C++11标准发布已有一段时间了, 维基百科上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的维基百科看起来非常费劲,而中文版维基百 ...
- 在C++98基础上学习C++11新特性
自己一直用的是C++98规范来编程,对于C++11只闻其名却没用过其特性.近期因为工作的需要,需要掌握C++11的一些特性,所以查阅了一些C++11资料.因为自己有C++98的基础,所以从C++98过 ...
- C++ 11学习和掌握 ——《深入理解C++ 11:C++11新特性解析和应用》读书笔记(一)
因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出 ...
- 【C++11】30分钟了解C++11新特性
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 什么是C++11 C++11是曾经被叫做C+ ...
- C++11新特性——The C++ standard library, 2nd Edition 笔记(一)
前言 这是我阅读<The C++ standard library, 2nd Edition>所做读书笔记的第一篇.这个系列基本上会以一章一篇的节奏来写,少数以C++03为主的章节会和其它 ...
- C++11新特性之一——Lambda表达式
C++11新特性总结可以参考:http://www.cnblogs.com/pzhfei/archive/2013/03/02/CPP_new_feature.html#section_6.8 C++ ...
- LINQ体验(2)——C# 3.0新语言特性和改进(上篇)
整体来说.Visual Studio 2008和.NET 3.5是建立在.NET2.0核心的基础之上,.NET2.0核心本身将不再变化(假设不了解.NET2.0的朋友,请參看MSDN或者一些经典的书籍 ...
- c++学习书籍推荐《深入理解C++11 C++11新特性解析与应用》下载
百度云及其他网盘下载地址:点我 编辑推荐 <深入理解C++11:C++11新特性解析与应用>编辑推荐:C++标准委员会成员和IBM XL编译器中国开发团队共同撰写,权威性毋庸置疑.系统.深 ...
随机推荐
- 在Linux中使用crontab
背景 虽然不是专业运维,但是在嵌入式开发中还是需要懂一点的.部门内部搞服务器最厉害的就是我了,汗. 参考: https://blog.csdn.net/longgeaisisi/article/det ...
- mermaid语法画图
mermaid 脚本语言 graph TB 从上到下 graph BT 从下到上 graph RL 从右到左 graph LR 从左到右 graph LR; A001-->B001; graph ...
- SQLServer统计采集数据库相关信息
在MS Sql Server中可以能过以下的方法查询出磁盘空间的使用情况及各数据库数据文件及日志文件的大小及使用利用率: 1.查询各个磁盘分区的剩余空间:Exec master.dbo.xp_fixe ...
- h5使用js拉起微信支付
近期,业务需求对接了微信支付,做个总结.web网页想要拉起微信支付,有两种方法: H5下单支付 , JSAPI支付 .首先纯前端做不了微信支付,必须配合后端才能通过微信的下单请求.接下来说说这两种方法 ...
- Python爬取小说+Servlet+C3P0+MVC构建小说api
一.摘要: 使用python爬取网络小说数据存入数据库,利用C3P0数据库连接池获取数据库数据,采用MVC三层架构对数据库数据进行操作,输出JSON格式数据到前端页面 二.内容: 1.gitee外链消 ...
- MViT:性能杠杠的多尺度ViT | ICCV 2021
论文提出了多尺度视觉Transformer模型MViT,将多尺度层级特征的基本概念与Transformer模型联系起来,在逐层扩展特征复杂度同时降低特征的分辨率.在视频识别和图像分类的任务中,MViT ...
- Django 处理http请求之中间件
Django处理http请求之中间件 by:授客 QQ:1033553122 欢迎加入全国软件测试交流QQ群:7156436 测试环境 Win7 Django 1.11 自定义中间件 中间件" ...
- Vue 根据鼠标悬停目标元素上方显示、隐藏指定元素交互实现
Vue 根据鼠标悬停目标元素上方显示.隐藏指定元素交互实现 By:授客 QQ:1033553122 开发环境 win10 element-ui "2.13.1" vue &qu ...
- 全网最好看的单细胞umap图绘制教程
全网最好看的单细胞umap图绘制教程 作者按 大家或许都曾被Nature, Science上的单细胞umap图吸引过,不免心生崇拜.在这里,我们将介绍一种简单方便的顶刊级umap图可视化 全文字数|预 ...
- gist.github.com 无法访问解决办法,亲测永远有效!
1.打开https://www.ipaddress.com/,输入gist.github.com获取IP地址 2.ping 此ip地址,可以访问 3.将IP地址写入Hosts文件,140.82.113 ...