首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

C++11新特性(二):语言特性

编程知识
2024年08月24日 08:44

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; // 生成默认配置
};
From:https://www.cnblogs.com/solicit/p/18377416
本文地址: http://www.shuzixingkong.net/article/1394
0评论
提交 加载更多评论
其他文章 索引的使用
5年之后 祺源开发Java开发的时候才有使用索引的感觉。索引 面试中是十分频繁地被问到。索引分为聚簇索引和非聚簇索引。 古至今,人类都是 文盲到文明的演变过程。书籍的使用,文字的发明和记载信息。当文字量一大,翻阅查找起来就越困难。把相似的东西放 一起,使用标签标记存放,找起来更快。 索引和ID的概念
如何在 Nuxt 中动态设置页面布局
title: 如何在 Nuxt 中动态设置页面布局 date: 2024/8/24 updated: 2024/8/24 author: cmdragon excerpt: 摘要:本文介绍如何在Nuxt框架中通过设置setPageLayout函数动态调整页面布局,包括安装Nuxt、创建不同布局文件及
如何在 Nuxt 中动态设置页面布局 如何在 Nuxt 中动态设置页面布局
Tesla 开发者 API 指南:BLE 发送车辆命令
前言 特斯拉提供两种与汽车通信的方式。一种是使用 API 通过互联网,另一种是使用 BLE 连接。BLE 连接有助于锁定和解锁汽车的最重要部分之一,即使汽车和手机或任何其他兼容 BLE 的钥匙扣上没有网络连接。这在两种主要用例中很有帮助,即使在互联网非常不稳定的情况下也是如此。 离开汽车时锁好车 当
Tesla 开发者 API 指南:BLE  发送车辆命令
004.MinIO-DirectPV分布式存储部署
MinIO部署介绍 部署概述 Kubernetes hostpath、local和本地静态配置都存在需要事先在node节点准备好可用的块存储或文件系统,例如对插入的硬盘,或者磁盘阵列做分区格式化,文件系统则需提前创建好Kubernetes即将利用的挂载目录,并且两种方法都会有亲和性限制,无法做到让K
004.MinIO-DirectPV分布式存储部署 004.MinIO-DirectPV分布式存储部署 004.MinIO-DirectPV分布式存储部署
从网友探秘 《黑神话:悟空》 的脚本说说C#
《黑神话:悟空》千呼万唤始出来。在正式发售后不到24小时,Steam在线玩家峰值突破222万,在Steam所有游戏在线玩家历史峰值中排名第二。第一拨玩家纷纷晒出好评,称这款现象级产品正式开启国产3A游戏(3A 俗称:大量的资源、大量的金钱和大量的时间)元年,黑神话悟空是国内首款3A游戏,画面剧情都很
从网友探秘 《黑神话:悟空》 的脚本说说C#
折腾 Quickwit,Rust 编写的分布式搜索引擎(专为从对象存储中实现亚秒级搜索而设计)
什么是 Quickwit? Quickwit 是首个能在云端存储上直接执行复杂的搜索与分析查询的引擎,并且具有亚秒级延迟。它借助 Rust 语言和分离计算与存储的架构设计,旨在实现资源高效利用、易于操作以及能够扩展到 PB 级数据量。 Quickwit 非常适合日志管理、分布式追踪以及通常为不可变数
折腾 Quickwit,Rust 编写的分布式搜索引擎(专为从对象存储中实现亚秒级搜索而设计) 折腾 Quickwit,Rust 编写的分布式搜索引擎(专为从对象存储中实现亚秒级搜索而设计)
线性dp:最长公共子串
最长公共子串 本文讲解的题与leetcode718.最长重复子数组,题意一模一样,阅读完本文以后可以去挑战这题。 力扣链接 题目叙述: 给定两个字符串,输出其最长公共子串的长度。 输入 ABACCB AACCAB 输出 3 解释 最长公共子串是ACC,其长度为3。 与最长公共子序列的区别 公共子串:
线性dp:最长公共子串
Go 互斥锁 Mutex 源码分析(二)
原创文章,欢迎转载,转载请注明出处,谢谢。 0. 前言 在 Go 互斥锁 Mutex 源码分析(一) 一文中分析了互斥锁的结构和基本的抢占互斥锁的场景。在学习锁的过程中,看的不少文章是基于锁的状态解释的,个人经验来看,从锁的状态出发容易陷入细节,了解锁的状态转换过一段时间就忘,难以做到真正的理解。想
Go 互斥锁 Mutex 源码分析(二) Go 互斥锁 Mutex 源码分析(二) Go 互斥锁 Mutex 源码分析(二)