c++11--保证稳定性和兼容性

保证稳定性和兼容性

1.变长参数宏定义及__VA_ARGS__
C99中,可使用变长参数空定义,即在宏定义参数列表最后一个参数为省略号。
预定义宏__VA_ARGS__可在宏定义实现部分替换省略号代表的内容。

#include <stdio.h>
#define LOG(...) {\
    fprintf(stderr, "%s:Line %d:\t", __FILE__, __LINE__);\
    fprintf(stderr, __VA_ARGS__);\
    fprintf(stderr, "\n");\
}

int main()
{
    int x = 3;
    LOG("x=%d", x);
    return 0;
}

2.final与override
final可使得类型指定相应的虚函数对派生类来说不可被继续重载。

#include <iostream>

class B
{
public:
    virtual void fun() final
    {
        printf("Base_fun()\n");
    }
};

class D1 : public B
{
public:
    void fun() // err
    {
        printf("D_fun()\n");
    }
};

class D2 :public B
{
};

class DD : public D2
{
public:
    void fun() // err
    {
        printf("DD_fun()\n");
    }
};

int main()
{
}

被final修饰的虚函数,无法在直接派生类和间接派生类被重载。

override可使得类型定义的函数必须是基类某个虚函数的重载时才可通过编译。

#include <iostream>

class B
{
public:
    virtual void fun()
    {

    }
};

class D : public B
{
public:
    void fun() override
    {

    }

    void fun(int) override // err
    {

    }
};

int main()
{
    return 0;
}

类型中被override修饰的函数,编译器将检查,确保此函数重载了直接基类或间接基类的某个虚函数时,方可编译通过。

通用为本,专用为末

1.委托构造

#include <iostream>
using namespace std;
class Base
{
public:
    Base(char c){
        cout << "Base_" << c << endl;
    }
};

class DCExcept{
public:
    DCExcept(double d)
        try:DCExcept(1, d){
            cout << "Run the body." << endl;
        }
        catch(...){
            cout << "caught exception." << endl;
        }
private:
    DCExcept(int i, double d):b('b')
    {
        cout << "going to throw!" << endl;
    }

    int type;
    double data;
    Base b;
};

int main()
{
    DCExcept a(1.2);
    return 0;
}

在这里插入图片描述

新标志支持委托构造上述DCExcept(double d)是委托构造函数, DCExcept(int i, double d)是委托构造的目标构造函数。
关于委托构造注意点:
(1). 委托构造函数初始化列表除了指定目标构造函数的委托信息,不可包含其他任何信息。这样保证类的初始化只通过目标构造函数执行一次。
(2). 触发委托构造函数时的执行顺序为:
a.通过目标构造函数完成构造阶段,执行目标构造的函数体。
b.执行委托构造的函数体。
c.采用委托构造时,支持上述用try修饰目标构造函数。这样可像上述在委托构造中添加catch语句来捕获目标构造中可能抛出的异常。

2.union类型
c++11中union类型中允许出现自定义类型成员,标准库类型成员。

#include <iostream>

class B 
{
public:
    B(){
        printf("B()\n");
    }

    B(int i){
        printf("B(int)\n");
    }
    
    B(const B&){
        printf("B(const&)\n");
    }

    int i;
};

class A {
public:
    A(int i)
    {
        printf("A(int)\n");
    }

    ~A()
    {

    }

    // union类型特点在于只分配内存,不执行构造过程。
    // 其他c++类型通过new动态得到对象时,执行内存分配,对象构造两个过程。
    union 
    {
        int n;
        B b;
    };
};


int main()
{
    A a(1);
    return 0;
}

在这里插入图片描述
值得注意的是union对象在动态构造阶段,只是分配了内存,不触发union对象的构造。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/253828.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RTD2513A RTD2513BA 1VGA+2HDMI转双通道1080P LVDS 显示驱动芯片介绍

转载&#xff1a; 易显LCD显示方案设计www.rtddisplay.com

基于Java+Swingt学生信息管理系统

基于JavaSwing学生信息管理系统 一、系统介绍二、功能展示四、其他系统实现五、获取源码 一、系统介绍 1.用户登陆&#xff1a;在帮助按钮处&#xff0c;可以查看登陆账号及密码&#xff1a; 账号admin,密码123456 在未输入的情况下&#xff0c;会提示用户名不能为空&#xff…

git 切换远程地址分支 推送到指定地址分支 版本回退

切换远程地址 1、切换远程仓库地址&#xff1a; 方式一&#xff1a;修改远程仓库地址 【git remote set-url origin URL】 更换远程仓库地址&#xff0c;URL为新地址。 git remote set-url https://gitee.com/xxss/omj_gateway.git 方式二&#xff1a;先删除远程仓库地址&…

正点原子驱动开发BUG(一)--SPI无法正常通信

目录 一、问题描述二、讲该问题的解决方案三、imx6ull的spi适配器驱动程序控制片选分析3.1 设备icm20608的驱动程序分析3.2 imx的spi适配器的驱动程序分析 四、BUG修复测试五、其他问题 一、问题描述 使用正点的im6ull开发板进行spi通信驱动开发实验的时候&#xff0c;主机无法…

Redis Set类型

集合类型也是保存多个字符串类型的元素的&#xff0c;但和列表类型不同的是&#xff0c;集合中 1&#xff09;元素之间是无序的 2&#xff09;元素不允许重复 一个集合中最多可以存储2的32次方个元素。Redis 除了支持集合内的增删查改操作&#xff0c;同时还支持多个集合取交…

【ZYNQ学习】PL第一课

这节课讲什么&#xff1f; 这节课的名字本来是想写为LED&#xff0c;但这一课里除了LED也有按键&#xff0c;又想换为GPIO控制&#xff0c;但关于PL的GPIO控制&#xff0c;不应该这么草率和简单&#xff0c;而且这一课有很多和ZYNQ或者PL关联性不强的东西要说。 所以我写了删删…

基于AT89C52单片机的计算器设计与仿真

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/88637995?spm1001.2014.3001.5503 源码获取 B 源码仿真图课程设计51 摘 要 计算器一般是指“电子计算器”,能进行数学运算的手持机器&#xff0c;拥有集成电路芯…

UE4 去除重复纹理

如果直接连的话&#xff0c;效果如下&#xff1a; 就存在很多重复的纹理&#xff0c;如何解决这个问题呢&#xff1f; 将同一个纹理&#xff0c;用不同的Tilling&#xff0c;将Noise进行Lerp两者之间&#xff0c;为什么要这么做呢&#xff1f;因为用一个做清晰纹理&#xff0c;…

适用于 Windows 和 Mac 的 10 款最佳照片恢复软件(免费和付费)

丢失照片很容易。这里点击错误&#xff0c;那里贴错标签的 SD 卡&#xff0c;然后噗的一声&#xff0c;一切都消失了。值得庆幸的是&#xff0c;在技术领域&#xff0c;你可以纠正一些错误。其中包括删除数据或格式化错误的存储设备。 那么&#xff0c;让我们看看可用于从 SD …

人工智能与自动驾驶:智能出行时代的未来之路

一、前言 首先&#xff0c;我们先来说下什么是人工智能&#xff0c;人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;是一门研究如何使计算机系统能够模拟、仿真人类智能的技术和科学领域。它涉及构建智能代理&#xff0c;使其能够感知环境、理解和…

Unity中URP下的菲涅尔效果实现(个性化修改)

文章目录 前言一、我们修正一下上篇文章中&#xff0c;可能遗留的Bug1、N向量 变为 单位向量2、使颜色范围在合理区间 二、实现菲涅尔效果强弱可自定义调节三、修改菲涅尔效果颜色1、在属性面板定义颜色属性2、在常量缓冲区申明该参数3、在片元着色器中&#xff0c;用颜色和菲涅…

【日积月累】Mysql性能优化

目录 【日积月累】Mysql性能优化 1.前言2.MySql性能优化的主要方面2.1硬件和操作系统成面优化2.2架构设计层优化&#xff08;表结构&#xff09;2.3程序配置优化2.5表结构及索引优化2.4sql执行优化 3.总结4.参考 文章所属专区 积月累 1.前言 MySQL是一种常用的开源关系型数据…

【PHP入门】1.1-PHP初步语法

-PHP语法初步- PHP是一种运行在服务器端的脚本语言&#xff0c;可以嵌入到HTML中。 1.1.1PHP代码标记 在PHP历史发展中&#xff0c;可以使用多种标记来区分PHP脚本 ASP标记&#xff1a; <% php代码 %>短标记&#xff1a; <? Php代码 ?>&#xff0c;以上两种…

【TB作品】51单片机 实物+仿真-电子拔河游戏_亚博 BST-M51

代码工程。 http://dt4.8tupian.net/2/28880a66b12880.pg3这段代码是用于一个数字拔河游戏的嵌入式系统&#xff0c;采用了基于8051架构的单片机&#xff0c;使用Keil C51编译器。 主要功能包括&#xff1a; 数码管显示&#xff1a;使用了四个数码管&#xff08;通过P2的控制…

从零开始在Linux服务器配置并运行YOLO8+Web项目

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。 &#x1f34e;个人主页&#xff1a;Meteors.的博客 &#x1f49e;当前专栏&#xff1a; 神经网络&#xff08;随缘更新&#xff09; ✨特色…

js基础入门

先来一点js基础&#xff0c;其实js大部分的时候都在处理对象或者数组。 对象四个基本操作&#xff1a;增删改查 掌握元素的增删改查&#xff0c;了解如何拷贝&#xff0c;深拷贝和浅拷贝的区别。详情见代码 <script>//创建对象一共有三种赋值声明的语法let obj{} //赋值…

Ps:动作 - 基础篇

Ps 中的动作 Action可以让你自动、连续地完成多个操作&#xff0c;包括基础的调色、复杂的合成等。对于经常要执行的任务&#xff0c;使用动作&#xff0c;可大大提高工作效率。 Ps菜单&#xff1a;窗口/动作 Window/Action 快捷键&#xff1a;Alt F9 ◆ ◆ ◆ 认识动作面板…

如何用Python向图像中加入噪声

我们在做机器视觉项目的过程中&#xff0c;有的时候需要向图像中加入噪声。Pytorch本身不支持类似的功能&#xff0c;如果自己写的话&#xff0c;不但麻烦&#xff0c;而且容易出错。好在skimage支持这个功能。代码如下&#xff1a; import skimage import matplotlib.pyplot …

web之CSS悬停效果页面设计

参考小米商城的“手机”页面&#xff0c;做出一个“手机”的标签&#xff0c;实现当鼠标悬停在“手机”上时&#xff0c;出现手机系列菜单&#xff1b;当鼠标移走时&#xff0c;菜单页面消失的效果&#xff01; 参考图&#xff1a; 实现代码&#xff1a; <!DOCTYPE html&g…

机器学习笔记 - 时间序列分析基础概念解释

一、简述 时间序列分析是一种统计方法,可检查定期收集的数据点以揭示潜在的模式。该技术与各个行业高度相关,因为它可以根据历史数据做出决策和预测。通过了解过去并预测未来,时间序列分析在金融、医疗保健、能源、供应链管理、天气预报、营销等领域发挥着至关重要的作用。 …