首页 > 编程语言 >C++11新特性(二):语言特性

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

时间:2024-08-24 09:49:27浏览次数:8  
标签:11 函数 int void Add C++ 编译器 特性 class

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; // 生成默认配置
};

标签:11,函数,int,void,Add,C++,编译器,特性,class
From: https://www.cnblogs.com/solicit/p/18377416

相关文章

  • C++学习笔记----4、用C++进行程序设计(五)---- 非复合与继承关系
        在考虑类之间到底是什么关系时,要首先考虑一下是否真的有关系。不要搞有罪推定,直接问犯了什么罪,要先看是否是犯罪行为。不要让你对面向对象的设计的热情转变为大量不需要的类或者继承的类的关系中。    有一个大家都容易陷入的怪圈就是在现实世界中很明显......
  • dotnet X11 多次调用 XPutImage 是否能做到渲染同步
    本文将告诉大家我在麒麟系统和统信系统以及分别搭配飞腾和兆芯处理器的设备上,使用连续的XPutImage方法推送界面,测试是否能够在一次渲染内完成。测试结论是不能做到渲染同步本文的核心测试代码如下XPutImage(display,handle,gc,refxImage,@event.ExposeEvent.x,@......
  • C++基础干货笔记!
    目录一、C++的第一个程序:二、命名空间namespace:1.namespace的定义:2.namespace的使用三、C++输入与输出四、缺省参数 定义与注意:五、函数重载六、引用1.引用的概念2.引用的特性3.const引用 4.引用和指针的关系六、inline1.概念与使用事项:七、nullptr概念:......
  • (2024最新毕设合集)德阳香树园游泳馆管理系统-50428|可做计算机毕业设计JAVA、PHP、爬虫
    德阳香树园游泳馆管理系统的设计与实现摘 要本文介绍了德阳香树园游泳馆管理系统的设计与实现。该系统采用B/S模式,使用Java语言开发,借助SSM框架和MySQL数据库进行后台支持。此外,还结合微信小程序框架Uniapp进行开发,以提供更便捷的用户体验。德阳香树园游泳馆管理系统旨在......
  • C#/asp.net-智能制造业ERP系统-89973(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP
    C#(asp.net)智能制造业ERP系统摘 要随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用C#技术建设智能制造业ERP系统。本设计主要实现集人性化、高效率......
  • 【最新原创毕设】基于SpringBoot的新高考志愿填报辅助系统+35190(免费领源码)可做计算机
    目 录摘要1绪论1.1研究背景1.2 研究意义1.3论文结构与章节安排2系统分析2.1可行性分析2.2系统流程分析2.2.1登录流程2.2.2数据删除流程2.3 系统功能分析2.4系统用例分析2.5本章小结3 系统总体设计3.1系统架构设计3.2系统功能模块......
  • Java小白一文带你回顾复习Java中的三大特性
    封装封装就是把抽象出的数据(属性)和对数据的操作(方法)封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(方法),才能对数据进行操作。实现步骤将属性进行私有化private提供一个公共的set方法,用于对属性判断并赋值publicvoidsetXXX(类型参数){ 属性=......
  • P6348 [PA2011] Journeys 题解
    Description一个星球上有\(n\)个国家和许多双向道路,国家用\(1\simn\)编号。但是道路实在太多了,不能用通常的方法表示。于是我们以如下方式表示道路:\((a,b),(c,d)\)表示,对于任意两个国家\(x,y\),如果\(a\lex\leb,c\ley\led\),那么在\(x,y\)之间有一条道路。首都位于......
  • 【C++ Primer Plus习题】3.6
    问题:解答:#include<iostream>usingnamespacestd;intmain(){ floatmiles=0; floatgallons=0; floatgallon=0; cout<<"请输入驱车里程(单位为英里):"; cin>>miles; cout<<"请输入使用的汽油量(单位为加仑):"; cin>>g......
  • C++ 构造函数/析构函数中调用虚函数的情况简单测试
    #include<string>#include<iostream>usingnamespacestd;namespace{classAnimal{public:Animal(){cout<<"基类调用虚函数…"<<endl;cout<<GetInfo()<<e......