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新特性(二):语言特性的更多相关文章

  1. C++11新特性总结 (二)

    1. 范围for语句 C++11 引入了一种更为简单的for语句,这种for语句可以很方便的遍历容器或其他序列的所有元素 vector<int> vec = {1,2,3,4,5,6}; ...

  2. C++11新特性总结 (一)

    1. 概述 最近在看C++ Primer5 刚好看到一半,总结一下C++11里面确实加了很多新东西,如果没有任何了解,别说自己写了,看别人写的代码估计都会有些吃力.C++ Primer5是学习C++1 ...

  3. [转载] C++11新特性

    C++11标准发布已有一段时间了, 维基百科上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的维基百科看起来非常费劲,而中文版维基百 ...

  4. 在C++98基础上学习C++11新特性

    自己一直用的是C++98规范来编程,对于C++11只闻其名却没用过其特性.近期因为工作的需要,需要掌握C++11的一些特性,所以查阅了一些C++11资料.因为自己有C++98的基础,所以从C++98过 ...

  5. C++ 11学习和掌握 ——《深入理解C++ 11:C++11新特性解析和应用》读书笔记(一)

    因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出 ...

  6. 【C++11】30分钟了解C++11新特性

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 什么是C++11 C++11是曾经被叫做C+ ...

  7. C++11新特性——The C++ standard library, 2nd Edition 笔记(一)

    前言 这是我阅读<The C++ standard library, 2nd Edition>所做读书笔记的第一篇.这个系列基本上会以一章一篇的节奏来写,少数以C++03为主的章节会和其它 ...

  8. C++11新特性之一——Lambda表达式

    C++11新特性总结可以参考:http://www.cnblogs.com/pzhfei/archive/2013/03/02/CPP_new_feature.html#section_6.8 C++ ...

  9. LINQ体验(2)——C# 3.0新语言特性和改进(上篇)

    整体来说.Visual Studio 2008和.NET 3.5是建立在.NET2.0核心的基础之上,.NET2.0核心本身将不再变化(假设不了解.NET2.0的朋友,请參看MSDN或者一些经典的书籍 ...

  10. c++学习书籍推荐《深入理解C++11 C++11新特性解析与应用》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <深入理解C++11:C++11新特性解析与应用>编辑推荐:C++标准委员会成员和IBM XL编译器中国开发团队共同撰写,权威性毋庸置疑.系统.深 ...

随机推荐

  1. 构建高可用性、高性能和可扩展的Zabbix Server架构

    简介 本教程讲解了一下如何设计构建一个高性能.高可靠.高扩展的Zabbix 监控集群. 架构图 架构图PDF下载: https://songxwn.com/file/Zabbix_HA.pdf Pig ...

  2. 从 Dict 转到 Dataclass

    从 dataclass 转到 dict 可以用 asdict 函数 , 反向转换的时候 就比较困难. 不用外部的包的情况下, 提供一种思路. def mask(v, d): #v 是 dict 数据, ...

  3. P9576 题解

    赛时没仔细想,赛后才发现并不难. 将 \(l,r\) 与 \(l',r'\) 是否相交分开讨论. 假若不相交,那么 \(l',r' < l\) 或者 \(l',r' > r\) 并且 \( ...

  4. ubuntu22 python2 pyinstaller 打包报错:'NoneType' object has no attribute 'groups'

    前言 最近有个需求,需要在 ubnutu22 上使用 pyinstaller 打包一个python2 的文件. 中间遇到了一些问题: pip2 install pyinstaller 报错 解决方案: ...

  5. SpringBoot 对接美团闪购,检验签名,获取推送订单参数,text转json

    接口文档地址 订单推送(已确定订单):https://open-shangou.meituan.com/home/docDetail/177 签名算法:https://opendj.meituan.c ...

  6. js 获取年、月、周、当前日期第几周、这月有那几周

    查看当前日期是第几周:https://wannianli.tianqi.com/today/zhou/ //获取完整的日期 var date=new Date; var y = date.getFul ...

  7. 小程序-浅谈云函数获取数据和云数据库api获取数据的区别

    区别:在于条数的限制,云数据库api获取数据限制20条以内,云函数限制100条以内 index.wxml <button bindtap="shujukuget">数据 ...

  8. 利用opencv库使用Python将视频逐帧转为图片

    做成型的语义分割软件需要,写了一个,在博客记录一下 import cv2 def video2pic(videoFile, outputFile): vc = cv2.VideoCapture(vid ...

  9. 从基础到高级应用,详解用Python实现容器化和微服务架构

    本文分享自华为云社区<Python微服务与容器化实践详解[从基础到高级应用]>,作者: 柠檬味拥抱. Python中的容器化和微服务架构实践 在现代软件开发中,容器化和微服务架构已经成为主 ...

  10. [oeasy]python0091_仙童公司_八叛逆_intel_8080_altair8800_牛郎星

    编码进化 个人电脑 计算机 通过电话网络 进行连接 极客 利用技术 做一些有趣的尝试 极客文化 是 认真研究技术的 文化 计算机 不再是 高校和研究机构高墙里面的 神秘事物 而是 生活中常见的 家用电 ...