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编译器中国开发团队共同撰写,权威性毋庸置疑.系统.深 ...
随机推荐
- Meilisearch 安装和使用教程
如今搜索功能已成为几乎所有应用不可或缺的一部分.无论是电商平台.内容管理系统,还是企业内部知识库,用户都期待能够快速.准确地找到他们需要的信息.然而,传统的搜索解决方案往往面临着诸多挑战:响应速度慢. ...
- ENVI无缝镶嵌、拼接栅格数据的方法
本文介绍基于ENVI软件,利用"Seamless Mosaic"工具实现栅格遥感影像无缝镶嵌的操作. 在遥感图像镶嵌拼接:ENVI的Pixel Based Mosaicki ...
- VulnHub - breach系列:breach-2.1
VulnHub - breach系列:breach-2.1 靶机描述 Breach 2.0 是多部分系列中的第二部分,是一项 boot2root/CTF 挑战,旨在展示真实场景,沿途充满了曲折和恶作剧 ...
- AOP面向切面编程@Aspect 注解用法
AOP简介 AOP为Aspect Oriented Programming 的缩写,意为"面向切面编程",通过预编译方式和运行预期动态代理实现程序功能的统一维护的一种技术.AOP是 ...
- Java-Session服务器端会话技术
Session 概念:服务器端会话技术,在一次对话的多次请求间共享数据,将数据保存在服务器端的对象中.HttpSession 快速入门: 获取Session对象 * HttpSession sessi ...
- SQL Server 锁(LOCK)大全
一.锁(LOCK)知识及应用 1.1 锁的基础知识 在任何多用户的数据库中,必须有一套用于数据修改的一致的规则.对于真正的事务处理型数据库,当两个不同的进程试图同时修改同一份数据时,数据库管理系统(D ...
- ABC350
A link 把最后三位取成数字,判断是否小于\(349\),大于\(1\),不等于\(316\). 点击查看代码 #include<bits/stdc++.h> using namesp ...
- 从零开始写 Docker(十九)---增加 cgroup v2 支持
本文为从零开始写 Docker 系列第十九篇,添加对 cgroup v2 的支持. 完整代码见:https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 d ...
- [SDR] GNU Radio 系列教程 —— GNU Radio TX PDU (发送数据包操作)的基础知识(超全)
目录 1 PDU 概述 2 Demo 详解 2.1 Random PDU Generator 2.2 Async CRC32 2.3 Protocol Formatter (Async) 2.4 将 ...
- openeuler linux内核4.19安装(centos 同理)
linux内核安装: 安装内核步骤 下载相应内核版本[我这里用的是linux-4.19.90.tar.gz] 下载网址:https://mirrors.edge.kernel.org/pub/linu ...