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

目录

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

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

3.initializer_list(形参)

4.explicit

5.for循环的新用法

6.default和delete

7.Alias Template(模板化名)

8.模板模板参数

9.Type Alias(类型化名)

10.using的用法

11. 关键字 noexcept,override,final


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,编译器会报错来提醒我们。

虚函数 参考:C++虚函数详解-CSDN博客

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

12.decltype

让编译器根据表达式推断出类型

int x = 5;
decltype(x) y = 10; // 使用 decltype 获取 x 的类型,并将其应用于变量 y

map<string,float> coll;
decltype(coll)::value_type elem;    //等价于 map<string,float>::value_type elem;
注:每个容器都有value_type

与auto区别: decltype是C++11新增的一个关键字,和auto的功能一样,用来在编译时期进行自动类型推导。引入decltype是因为auto并不适用于所有的自动类型推导场景,在某些特殊情况下auto用起来很不方便,甚至压根无法使用。

auto varName=value;
decltype(exp) varName=value;

1. auto根据=右边的初始值推导出变量的类型,decltype根据exp表达式推导出变量的类型,跟=右边的value没有关系
2.auto要求变量必须初始化,这是因为auto根据变量的初始值来推导变量类型的,如果不初始化,变量的类型也就无法推导,而decltype不要求,因此可以写成如下形式  

decltype(exp) varName;

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

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

相关文章

Linux ssh 实现远程免密登录

一、背景 我搭建了一个 zookeeper 集群&#xff0c;写了一个 shell 脚本来控制集群的启动和关闭&#xff0c;但是我发现每次我执行 shell 脚本的时候&#xff0c;都需要我输入各个服务器的密码才可以运行&#xff0c;感觉很麻烦。shell 脚本里面连接其他服务器用的就是 ssh 的方…

HarmonOS 日期选择组件(DatePicker)

本文 我们一起来看基础组件中的 DatePicker 这就是 日程开发中的日期组件 他可以创建一个日期的范围 并创建一个日期的滑动选择器 这里 我们先写一个组件的骨架 Entry Component struct Index {build() {Row() {Column() {}.width(100%)}.height(100%)} }然后 我们先在Column组…

Redis:原理速成+项目实战——Redis实战5(互斥锁、逻辑过期解决缓存击穿问题)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;Redis&#xff1a;原理速成项目实战——Redis实战4&#xff08;解决Redis缓存穿透、雪崩、击穿&#xff09; &#x1f4da;订阅专…

想学习云计算么?教你如何免费白嫖微软和AWS的云资源一年

在这个数字化飞速发展的时代&#xff0c;云计算已成为IT行业的未来趋势。作为一名渴望进步的IT专业人员&#xff0c;掌握云计算不仅意味着技能的提升&#xff0c;更是升职加薪、拓宽职业道路的重要跳板。这里教你如何免费利用微软Azure和亚马逊AWS的云资源&#xff0c;为期一年…

oracle11范围表空间实例

1.表分区&#xff1a;范围分区&#xff0c;散列分区&#xff0c;列表分区&#xff0c;组合分区&#xff0c;inetrval分区 范围分区&#xff1a;商品零售表&#xff0c;按照销售日期所在的季度创建4个分区 --先建立表空间&#xff1a;临时表空间是不可以存放数据的&#xff0c;…

Python——数据类型转换

# 将数字类型转换成字符串 num_str str(111) print(type(num_str), num_str) \# 将浮点类型转换成字符串 float_str str(12.34) print(type(float_str), float_str) # 将字符串转变成数字 num int("234") print(type(num)) # 将字符串转变成浮点型 num2 float(&q…

Java学习笔记-day05-响应式编程初探-自定义实现Reactive Streams规范

最近在学响应式编程&#xff0c;这里先记录下&#xff0c;响应式编程的一些基础内容 1.名词解释 Reactive Streams、Reactor、WebFlux以及响应式编程之间存在密切的关系&#xff0c;它们共同构成了在Java生态系统中处理异步和响应式编程的一系列工具和框架。 Reactive Streams…

12.8-1.8

2023.12.8 redis容器 docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf redis.conf不存在&#xff0c;需先在宿主机创建该目录下文件&#xff0c…

知识点整理[(GraphGeo)RELATED WORK]

2 RELATED WORK 2.1 IP Geolocation 问题一:IP定位预测方法之一:Data mining-based methods 回答: 依赖于在公开的资源中挖掘位置线索来对目标IP(target IP)进行地理定位。其中一些数据分析了来自与IP相关的数据库,如WHOIS数据库和DNS的数据。 (1)例如,Moore等…

Transformer架构的局限已凸显,被取代还有多久?

江山代有才人出&#xff0c;各领风骚数百年。这句话无论是放在古往今来的人类身上&#xff0c;还是放在当今人工智能领域的大模型之上&#xff0c;都是最贴切不过的。无论是一个时代的伟人&#xff0c;还是统治一个领域的技术&#xff0c;最终都会有新的挑战者将其替代。Transf…

2024-01-09 Android.mk 根据c文件名插入特定的宏定义,我这里用于定义log LOG_TAG 标签

一、在Android的构建系统中&#xff0c;使用Android.mk构建脚本可以根据特定需求来定义宏。如果你想根据C文件的名称来插入特定的宏定义&#xff0c;可以使用条件语句检查文件名&#xff0c;并相应地设置宏。 在Android的构建系统中&#xff0c;使用Android.mk构建脚本可以根据…

解决uni-app小程序获取路由及路由参数

代码: this.id = this.$route.query.id;错误信息: 解决方案: // 获取query对象// #ifdef H5this.id = this.$route

《MLCC电容失效模式揭秘:机械、热、电裂纹分析及预防》

Q&#xff1a;MLCC电容是什么结构的呢&#xff1f; A&#xff1a;多层陶瓷电容器是由印好电极&#xff08;内电极&#xff09;的陶瓷介质膜片以错位的方式叠合起来&#xff0c;经过一次性高温烧结形成陶瓷芯片&#xff0c;再在芯片的两端封上金属层&#xff08;外电极&#xf…

IPv6路由协议---IPv6动态路由(OSPFv3-3)

OSPFv3使用Link-local地址 OSPFv3是运行在IPv6上的路由协议,同样使用链路本地地址来维持邻居,同步LSA数据库。除Vlink外的所有OSPFv3接口都使用链路本地地址作为源地址及下一跳来发送OSPFv3报文,带来的好处: 不需要配置IPv6全局地址,就可以得到OSPFv3拓扑,实现拓扑与地址…

HarmonyOS应用开发者基础认证考试

判断题 1.Ability是系统调度应用的最小单元,是能够完成一个独立功能的组件。一个应用可以包含一个或多个Ability。 正确(True) 2.所有使用Component修饰的自定义组件都支持onPageShow,onBackPress和onPageHide生命周期函数。 错误(False) 3.每调用一次router.pushUrl()方法,…

SAM-Track online / offline配置

segment anything model&#xff08;SAM&#xff09;是Meta于2023年4月5日发布的分割基础模型。SAM 允许分割任何对象而无需微调。 可以在这里尝试SAM模型的效果。 分割效果这么好&#xff0c;都忍不住想用SAM来做场景的语义分割&#xff0c;realtime与否先放在一边&#xff0c…

oracle19c容器数据库rman备份特性-----性能优化(三)

目录 冗余备份片 1.备份的时候指定 2.rman配置中设定 归档备份&#xff08;将备份集保留&#xff09; 二级备份&#xff08;将备份文件保留&#xff09; 1.备份闪回恢复区的恢复文件 2.备份所有恢复文件 recovery catalog database 1.創建recovery catalog 2.创建VPC…

Vscode设置git账户密码(不需要每次都输入)

在Vscode提交项目代码或者拉取代码的时候&#xff0c;如果每次都需要输入git的账户密码&#xff0c;那么就在终端输入&#xff1a; git config --global credential.helper store 命令 然后执行git pull 提示输入用户密码后&#xff0c;就会缓存&#xff1b; ※注&#xff1a;如…

今日实践 — 附加数据库/重定向失败如何解决?

WMS数据库与重定向 前言正文如何建立数据库连接&#xff1f;第一步&#xff1a;打开SSMS&#xff0c;右击数据库&#xff0c;点击附加第二步&#xff1a;点击添加第三步&#xff1a;找到自己的数据库文件&#xff0c;点击确定按钮第四步&#xff1a;若有多个数据库&#xff0c;…

BEV+Transformer感知架构共识下,传感器「火药味」再升级

高阶智能驾驶战火愈演愈烈&#xff0c;正带动感知方案卷入新一轮军备竞赛。 根据高工智能汽车研究院最新发布数据显示&#xff0c;2023年1-9月&#xff0c;中国市场&#xff08;不含进出口&#xff09;乘用车前装标配&#xff08;软硬件&#xff09;NOA交付新车37.73万辆&…