C++11新特性(也称c++2.0)

news2024/11/16 15:59:34

目录

1.输出C++版本:cout << __cplusplus << endl;

2.Uniform Initialization(一致性初始化)

3.initializer_list(形参)

4.explicit

5.for循环的新用法

6.default和delete


1.输出C++版本:cout << __cplusplus << endl;

#include <iostream>

int main()
{ 
	cout << __cplusplus << endl;
	system("pause");
	return 0;
}

老版的话会输出199711,支持c++11的话会输出201103

注:visual studio要手动打开c++11,在“解决方案资源管理器”右键自己的项目, 如“侯捷C++”(是总项目,不是项目中的某一头文件或源文件),按一下操作

【右击项目】–【选择属性】–【C/C++】–【语言】–【C++语言标准】,选择想要的标准即可

visual studio2019以上才支持C++11(好像是)

2.Uniform Initialization(一致性初始化)

C++在定义容器时,有的使用小括号,有的使用中括号,有的使用大括号,C++11及以后,统一使用大括号

#include <iostream>
#include <vector>
#include <complex>
using namespace std;

int values[] { 1,2,3 };
vector<int> v { 1,2,3 };
vector<string> cities {"beijing","shanghai","guangzhou"};
complex<double> c { 4.0, 3.0 };  //等价于 complex<double> c(4.0, 3.0);

3.initializer_list(形参)

如果函数的实参类型都相同 ,但个数不确定,使用initializer_list做形参,后面跟数据类型,如int,string等,initializer_list好像相当于链表

void printX(initializer_list<int> v1)
{
	for (auto p = v1.begin(); p != v1.end(); ++p) {
		cout << *p << typeid(p).name()  << endl;	
	}
}

printX({1,2,3}); //函数调用

4.explicit

 explicit 是一个关键字,用于修饰类的构造函数。当一个构造函数被声明为 explicit 时,它指定该构造函数不能用于隐式类型转换。这意味着在使用该构造函数创建对象时,必须使用显式的方式,而不能依赖于隐式的类型转换。

#include <iostream>

class MyClass {
public:
    explicit MyClass(int x) {
        value = x;
    }

    void printValue() {
        std::cout << "Value: " << value << std::endl;
    }

private:
    int value;
};

int main() {
    // 使用 explicit 构造函数的显式方式创建对象
    MyClass obj1(10);
    obj1.printValue();

    // 下面这行代码将会导致编译错误,因为构造函数是 explicit 的
    // MyClass obj2 = 20;  // 错误:不能进行隐式类型转换

    // 必须使用显式方式
    MyClass obj3 = MyClass(20);
    obj3.printValue();

    return 0;
}

5.for循环的新用法

for(decl : coll){   // decl为声明,coll为容器
    statement
}

示例1
for (int i : {1, 2, 3}) {
	cout << i << endl;
}

示例2
vector<string> v1{ "beijing","shanghai","guangzhou" };
for (auto s : v1) {
	cout << s << endl;
}

6.default和delete

 default:在类中,如果你自行定义了一个构造函数,那么编译器就不会再给你一个默认的构造函数了,如果你在默认的构造函数上强制加上=default,就可以重新获得并使用默认的构造函数

delete:关键字用于禁用某个特殊成员函数。通过在声明中使用 delete,你可以阻止编译器生成相应的函数,或者禁止使用某个函数。

class MyClass {
public:
    // 显式使用默认构造函数
    MyClass() = default;

    // 使用默认的拷贝构造函数
    MyClass(const MyClass&) = default;

    // 使用默认的析构函数
    ~MyClass() = default;
};


class NonCopyableClass {
public:
    // 禁用拷贝构造函数
    NonCopyableClass(const NonCopyableClass&) = delete;

    // 禁用拷贝赋值运算符
    NonCopyableClass& operator=(const NonCopyableClass&) = delete;
};

7.Alias Template(模板化名)

      模板化名,就是给模板起别名,使用using关键字,这个别名就代表那个容器,这个别名是支持传入参数的,即容器要放的数据类型,define和typedef不能代替模板化名,因为他们不支持传参

template <typename T>
using Vec = vector<T, allocator<T>>;  //allocator<T>为分配器,一般可以省略
Vec<int> v1{2,3,5};

 8.模板模板参数

模板中的参数类型T也可以是模板,如下:

template <typename T,template<class,T> class Container>
class my_class {
    ...
};

 模板中的某个参数是模板,上图中第二行尖括号里的class后面的T省略了。当模板中的第二个参数是与第一个参数有关时,如上图,第二个参数是类模板,此时模板化名就派上用场了

9.Type Alias(类型化名)

 类型化名,就是给类型起了一个别名,使用using关键字,此时完全等价于typedef,如下图左上角,都代表指向函数的指针,右下角都代表T为value_type类型 

10.using的用法

c++中using主要有三大用法

第一类 用在打开标准库 如 using namespace std;
第二类 如下图我们类中的成员属性是Base中的,后面类中再出现此属性,就不用写Base::
第三类 就是我们刚才讲的模板化名和类型化名

11. 关键字 noexcept,override,final

 1.noexcept():用在函数或成员函数后面,如果后面括号里的东西为真的话,此函数不会报错,如果省略括号,表示没有条件,此函数不会报错

2.override,final

override(重写):放在函数后面,告诉我们是重写这个函数,而不是重新定义一个函数

如下图,我们在父类中Base中有一个虚函数vfunc,我们在子类Derived1中想要重写这个虚函数,但是不小心把float写成了int,此时是重新定义了一个虚函数vfunc,相当于函数重载,但当我们后面加上override,如类Derived2中,告诉编译器我们是重写虚函数,此时如果不小心写错,如把float写成int,编译器会报错来提醒我们。

final:写在类后面,这个类是继承体中的最后一个,不能有别的类来继承他;写在成员函数后面,该成员函数不能被继承,但是该成员函数所在的类可以被继承

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python selenium find_element()示例详解

selenium有以下定位方式&#xff1a; 1 2 3 4 5 6 7 8 driver.find_element_by_id(‘id) driver.find_element_by_xpath(xpath) driver.find_element_by_link_text(link_text) driver.find_element_by_partial_link_text(partial_link_text) driver.find_element_by_name(name…

Java中SpringBoot组件集成接入【Knife4j接口文档(swagger增强)】

Java中SpringBoot组件集成接入【Knife4j接口文档】 1.Knife4j介绍2.maven依赖3.配置类4.常用注解使用1.实体类及属性(@ApiModel和@ApiModelProperty)2.控制类及方法(@Api、@ApiOperation、@ApiImplicitParam、 @ApiResponses)3.@ApiOperationSupport注解未生效的解决方法5.…

联盛德-安全物联网芯片w800

联盛德-安全物联网芯片w800 前言一、w800简介&#xff1f;芯片外观 总结 前言 本文介绍w800的基本信息&#xff0c;详细规格&#xff0c;后续有时间会介绍如何适配openharmony的过程。 一、w800简介&#xff1f; W800 芯片是一款安全 IoT Wi-Fi/蓝牙 双模 SoC 芯片。支持 2.…

Tracert 与 Ping 程序设计与实现(2024)

1.题目描述 了解 Tracert 程序的实现原理&#xff0c;并调试通过。然后参考 Tracert 程序和计算机网络教材 4.4.2 节&#xff0c; 计算机网络 课程设计指导书 2 编写一个 Ping 程序&#xff0c;并能测试本局域网的所有机器是否在线&#xff0c;运行界面如下图所示的 QuickPing …

Three.js 纹理贴图的实现

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 纹理贴图简介 当我们创建一个网格时&#xff0c;比如我们不起眼的立…

跨境电商进化论:从B2C到C2M的创新商业模式

跨境电商在过去几年中经历了巨大的变革&#xff0c;从传统的B2C模式逐渐演变为创新的C2M模式&#xff0c;为全球商业带来了新的商业范式。本文将探讨跨境电商的发展历程&#xff0c;着重分析C2M模式的涌现&#xff0c;以及它如何重新定义了消费者和制造商之间的关系&#xff0c…

字节8年经验之谈!一文从0到1带你入门接口测试【建议收藏】

扫盲内容&#xff1a; 1.为什么要做接口测试&#xff1f; 2.怎样做接口测试&#xff1f; 3.接口测测试点是什么&#xff1f; 4.接口测试都要掌握哪些知识&#xff1f; 5.其他相关知识&#xff1f; 一.为什么要做接口测试&#xff1f; ①.越底层发现bug&#xff0c;它的修复…

香港证监会最新公告:投资虚拟资产的基金应遵守哪些规定?

撰文&#xff1a;Sean&#xff0c;Techub News 点击查看TechubNews原文链接 12 月 22 日&#xff0c;香港证监会发布了「关于香港证监会授权基金投资虚拟资产的通函」和「有关中介人的虚拟资产相关活动的联合通函」&#xff0c;在「关于香港证监会授权基金投资虚拟资产的通函…

求求你,别再乱用@Transactional了

求求你&#xff0c;别再乱用Transactional了 文章目录 &#x1f50a;先看个问题&#x1f4d5;情况1情况1结果 &#x1f5a5;️情况2情况2结果 &#x1f4dc; 情况三情况3结果 &#x1f4d8;情况4情况4结果 &#x1f516;先说结论情况1结果情况2结果情况3结果情况4结果&#x1f…

春晖团队开展“爱心陪伴.读书会”主题 活动在蟠龙社区

在共青团桐梓县委的指导下&#xff0c;桐梓县春晖行动志愿者协会“伙伴计划”项目团队连续2天和青少年小朋友一起在燎原镇蟠龙社区的乡村复兴少年宫组织开展“爱心陪伴.读书会”主题活动。 1月6日&#xff0c;志愿者们提前到活动场地&#xff0c;将团中央发放的报刊书籍、益智玩…

Qt之基本数据类型

Qt 基本数据类型定义在#include <QtGlobal>中&#xff0c;如表下表所示。 (1)打开Qt Creator&#xff0c;新建一个控制台项目&#xff0c;项目名为test。 (2)在 main.cpp 中输入如下代码: #include <QCoreApplication> #include <QtGlobal> int main(int…

selenium3+python3环境搭建

1、首先安装火狐浏览器 有单独文章分享怎么安装 2、搭建python环境 安装python&#xff0c;安装的时候把path选好&#xff0c;就不用自己在配置&#xff0c;安装方法有单独文档分享 安装好以后cmd打开输入python查看是否配置好 3、安装pip 一般python会默认带一个&#x…

大模型日报-20240109

在大模型&#xff08;LLM&#xff09;爆发的当下&#xff0c;我们能不能把不同的模型搭建起来&#xff0c;起到 11>2 的效果&#xff1f; https://mp.weixin.qq.com/s/_V228WbPr3WKhBtIs7icZQ 如今的大语言模型&#xff08;LLM&#xff09;仿佛一个全能战士&#xff0c;能进…

创建springBoot模块没有目录结构

我用2023版的idea创建模块的时候会出现一些奇奇怪怪的错误&#xff0c;有时候没有项目目录结构&#xff0c;有时候项目的的目录都是普通文件。接下来简单介绍下解决方案。 选择有问题的模块&#xff0c;点击&#x1f197;即可。

Umbraco:从产品介绍到实战应用

一、产品介绍 Umbraco是一个开源的内容管理系统&#xff08;CMS&#xff09;&#xff0c;以其灵活性和可扩展性而闻名。Umbraco允许开发人员根据需要定制系统&#xff0c;同时为非技术人员提供了一个直观的界面来管理网站内容。Umbraco诞生于丹麦&#xff0c;经过多年的发展&a…

软件测试概念及分类整理汇总

前言 测试小伙伴在谈论软件测试分类&#xff0c;五花八门的分类&#xff0c;眼花缭乱。因为将各个维度划分的内容都整到一块了&#xff0c;在加上各自不同的见解与补充&#xff0c;各种冲突...... Findyou我经过多年测试总结基本定为4类测试(最多5类&#xff0c;自动化或者兼容…

three.js实现雷达扫描效果(纹理贴图)

three.js实现雷达扫描效果&#xff08;纹理贴图&#xff09; 图例 步骤 创建两个平面&#xff0c;分别纹理贴图&#xff0c;底图模型.add&#xff08;光波模型&#xff09;关闭材质的深度测试光波旋转 代码 <template><div class"app"><div ref&q…

从零开发短视频电商 Tesseract OCR 的 Java 拓展库 javacpp-presets

文章目录 简介添加依赖识别示例示例一 识别本地图片示例二 识别图像中的各个组件&#xff08;比如文本行&#xff0c;单词&#xff0c;或单个字符&#xff09;示例三 使用迭代器遍历识别结果及其选择项示例四 方向和脚本检测示例五 结果迭代器示例六 设置引擎、页面分割模式、语…

从零学Java - String类

Java String类 文章目录 Java String类1 String1.1 常用两种创建方式1.2 比较两种创建方式1.3 字符串不可变性1.4 面试题 2 常用方法2.1 练习 3 可变字符串3.1 常用方法3.2 验证StringBuilder的高效性3.3 练习3.4 面试题: 4 正则表达式4.1 元字符4.2 其他字符4.2.1 预定义字符4…

创新百喻,综合性思维和分析性思维

创新百喻&#xff0c;综合性思维和分析性思维 不知道您注意没有&#xff0c;在创新中&#xff0c;人们的思维方式是不一样的&#xff0c;有综合性思维和分析性思维之分。总的来说&#xff0c;综合性思维适合创造原来没有的事物&#xff0c;而分析性思维擅长改进和提高&#xf…