C++11特性-其他特性

news2024/9/19 10:48:06

1.字符串的原始字面量

        表达式:R"xxx(原始字符串)xxx"或者R"(原始字符串)",xxx要写的话,必须一样

	//两种申明形式
    string a = "aaa";//没有转义的时候就是原始字面量
	string b = R"aaa(bbb)aaa";//申明为R"xxx()xxx"
	string c = R"(ccc)";//申明为R"()"
	string d = R"aaaa(ddd)aaaa";//申明为R"xxx()xxx"
	cout << a<<b<<c<<d << endl;

        意义:避免字符串中有转义字符时出现转义的问题,解决字符串过长(字符串写在多行中)而不想使用连接字符(\)的问题

    //避免转义
	string str = "hello\word\ttt";
	string strR = R"(hello\word\ttt)";
	cout << str << endl<< strR << endl;
	string  str2 = "hello\\word\\ttt";
	cout << str2 << endl;
    //解决字符串过长(字符串写在多行中)而不想使用连接字符(\)的问题
	string str = "dsfhk\
		dsfklhj\
		dsklfhjsd\
		<sd>\
		sdfkgjyhk\
		dsfg\
		dfsgf\
		dsrfgdrf";
	string strR = R"(dsfhk
		dsfklhj
		dsklfhjsd
		<sd>
		sdfkgjyhk
		dsfg
		dfsgf
		dsrfgdrf)";

		cout << str << endl << strR << endl;

2.指针空值类型-nullptr

        在C程序中,NULL表示(void*)0;在C++程序中,NULL表示0

void func(int a) {
	cout << "func(int a)" << endl;
}

void func(char* a) {
	cout << "func(char* a)" << endl;
}

//调用
func(10);
func(NULL);
func(nullptr);

          C++中void*不能隐式转换成其他类型的指针

    void* a = NULL;//NULL为0或者void *
	int* b = NULL;//NULL为0或者void *
	double* c = NULL;//NULL为0或者void *
	char* d = NULL;//NULL为0或者void *

         nullptr不能匹配类型;可以隐式的匹配指针类型,不能匹配类型。

	void* ptr = nullptr;//nullptr隐式转成void*
	int* test2 = nullptr;//nullptr隐式转成int*
	double* test3 = nullptr;//nullptr隐式转成double*
	char* test4 = nullptr;//nullptr隐式转成char*

3.常量-constexpr

        c11之前的const有两个意思,修饰常量与变量只读

        constexpr修饰常量表达式

        常量变达式:多个常量(值不变)组成,且在编译过程中得到计算结果的表达式,达到提高程序执行效率的结果

        定义常量const与constexpr是等价的,们都在编译过程得到结果

    //定义常量时,const与constexpr是等价的
	const int c = 33;//常量达表式
	const int d = c + 1;//常量达表式

	constexpr int h = 45;//常量达表式
	constexpr int k = h + 3453;//常量达表式

        对于C++内置数据类型可以使用constexpr修饰,使用class与struct自定义的数据类型不能使用constexpr修饰

        常量表达式函数:constexpr修饰函数返回值的函数(普通函数、类成员\构造函数、模板函数)

        常量表达式函数要求:

                1.函数必须有返回值且返回值必须是常量表达式

                2.函数使用前必须有对应的定义语句

                3.整个函数体,不能出现常量表达式之外的语句(return除外)不能出现如using、typedef、static_assert断言、循环等

//常量表达式函数
constexpr int funConstexpr3() {
	constexpr int a = 9;//a为常量
	return a;
}

//constexpr修饰模板函数,会根据传入参数类型确定是否为常量表达式函数
template <typename TT>
constexpr TT display(TT t) {
	return t;
}

//constexpr修饰构造函数,函数体必须为空.初始化必须为成员初始化列表
class MyClass3
{
public:
	constexpr MyClass3():h(67) {}

	int h;
};

        在C++中建议把const与constexpr区分(即表示“只读”使用const,"常量"使用constexpr)

4.final

        final可以修饰函数与类,放在函数或者累后面。

        final修饰函数时,只能修饰虚函数(阻止子类重写父类的这个函数)

        final修饰类时,防止类被继承(派生子类)

        virtual不能与final同时出现

5.override

        保证派生类中申明的重写函数与基类中的虚函数有相同的函数名,同时明确会重写基类的虚函数,保证重写虚函数的正确性。

6.模板的优化        

        1.模板的右尖括号>>

                C11模板的多个右尖括号需要一个空格符fun<A<> >,之前连在一起是右移操作符

                C11特性优化了这个fun<A<>>

        2.模板的默认参数

                函数模板能添加模板参数         template <typename T = int>

         模板参数的优先级(从高到低):

                1.显示指定参数类型

                2.使用推导的参数类型

                3.默认的模板参数类型

                4.没有默认也不能推导除参数类型,则会报错

7.using与typedef

        using与typedef定义类型的别名,不会创建新的类型

        定义基础类型一样

typedef int int111;//typedef 旧的类型名 新的类型名(别名)
using int222 = int;//using 新的类型名(别名)= 旧的类型名 

        定义函数指针时,using更直观

typedef int(*funcc)(int, string);
using funccc = int(*)(int, string);//可读性

        定义模板时,using能直接使用,typedef需要在定义外套一个类或者结构体

template <typename T>
//typedef ds<int, T>  Ds;
//使用typedef时,需要使用class或者struct外包一层
struct MyStruct1
{
	typedef map<int,T>  Ds;
};

template <typename T>
using Um = map<int, T>;

8.基于范围的for循环

        基于范围的for循环只访问一次后面的对象,多次遍历

        使用迭代器模式的for循环多次判断边界,可以动态操作便利的对象

//vt:表达式、数组、容器、初始化列表

//&可以提高效率,修改原容器的值
for (auto& it : vt) {
	cout << it++ << " ";
}
//只读
for (const auto& it : vt) {
	cout << it << " ";
}

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

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

相关文章

Ansible最佳实践之 AWX 作业创建和启动

写在前面 分享一些 AWX 作业创建和启动的笔记博文内容涉及&#xff1a; 创建作业模板涉及相关参数&#xff0c;作业模板角色配置介绍运行作业模板并测试的Demo 食用方式&#xff1a; 需要了解 Ansible理解不足小伙伴帮忙指正 傍晚时分&#xff0c;你坐在屋檐下&#xff0c;看着…

Js逆向教程20-Hook基础

Js逆向教程19-Hook基础 一、jshook Hook就是在这些流程任意环节插入自己的代码&#xff0c;让浏览器先执行自己的代码 然后再执行原本网站的 hook在以下流程中可以做的事情&#xff1a; 1.1 html流程 联机服务器&#xff1a;获取ip地址&#xff0c;ws获取参数拿回资源&…

IntelliJ IDEA 2022.3正式发布,配置云同步支持Redis好用到炸

本文已被https://yourbatman.cn收录&#xff1b;女娲Knife-Initializr工程可公开访问啦&#xff1b;程序员专用网盘https://wangpan.yourbatman.cn&#xff1b;技术专栏源代码大本营&#xff1a;https://github.com/yourbatman/tech-column-learning&#xff1b;公号后台回复“…

【iOS】AFNetworking

AFNetworking是MAC/iOS为了简化网络操作设计的一套网络框架&#xff0c;专注与网络数据传输 &#xff0c;以及网络中多线程的处理&#xff0c;只需要简单几步就可以完成网络请求任务。 小说明 ANF的特性&#xff1a; 登录传参数时 , 传递 字典 即可 .( 键名为参数名 , 键值为…

【网络层】IP组播(多播)、硬件组播、IGMP、组播路由选择协议、移动IP、路由器详解、路由表和路由转发

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录IP多播----只给有相同需求的路由器传信息以看视频为例-----组播路由器支持--------运行组播协议的路由器IP组播地址------多播组的设备都有一个组播组IP地址---------一群共同需求主机的相同标识-------看直…

数据安全事故频发以及防范措施

误删除事故 最近在和IT群友的聊天中得知&#xff0c;一个小伙因为看错了一个语句&#xff0c;直接将生产数据库中所有数据全部删除了&#xff0c;并且该库在设计的时候虽然做了备份&#xff0c;但在运行过程中因某些原因把备份关闭了。 传统数据运维模式 受到科技制裁的原…

opencv c++ 霍夫直线检测

目的&#xff1a;在进行图像边缘提取后&#xff0c;将数据从平面坐标转换到极坐标空间&#xff0c;即完成了直线的信息提取。 1、原理 平面坐标系&#xff1a;通过之间的斜率k和截距b来确定一条直线。y kxb 极坐标系&#xff1a;通过半径r、角度θ来确定一条直线。r xcosθ …

计算机毕业设计基于Springboot+vue口腔牙科诊所管理系统

项目介绍 口腔卫生是关系民生的一个重要问题。口腔健康会直接影响全身的健康&#xff0c;口腔基本常见的有龋齿&#xff0c;牙周炎等问题&#xff0c;而且人类的牙齿只有2次更换周期&#xff0c;一旦牙齿彻底完成更换终生将不再更换&#xff0c;所以越来越多的人开始关系口腔问…

C++中的多态和虚函数及多态原理

定义 多态&#xff1a;事物的一种形态&#xff0c;在不同的子类中表现为多种形态&#xff0c;就称为多态&#xff1b; 分类 多态分为静态和动态多态 静态多态包括运算符重载和函数重载&#xff0c;复用函数名&#xff1b; 动态多态包括虚函数派生类&#xff1b; 区别&…

【Flask框架】——03 应用程序的参数加载

目录1.从配置对象中加载2.从配置文件中加载3.从环境变量中加载4.从Pycharm中的运行时设置环境变量的方式加载5.企业项目开发常用的方式应用程序配置参数设置的是一个Web应用工程的相关信息&#xff0c;比如&#xff1a; 数据库的连接信息 日志的配置信息 自定义的配置信息 ……

【苹果家庭推源码】利用新的Alloc Replication方法建立一个对象

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…

[Database] 脏读、幻读这些都是什么?事务隔离级别又是什么?MySQL数据库的事务隔离级别都有哪些?

文章目录前言事务隔离级别三种数据不一致问题1. 脏读2. 不可重复读3. 幻读不可重复读 vs 幻读四种事务隔离级别1. READ UNCOMMITTED2. READ COMMITTED3. REPEATABLE READ4. SERIALIZABLE不同事务隔离级别会面临的问题不同隔离事务级别的使用率排名实战查看事务隔离级别更改事务…

linux篇【11】:计算机网络—网络基础

目录 一.网络基础 1.认识 "协议" 2.协议分层 &#xff08;1&#xff09;软件分层 &#xff08;2&#xff09;协议分层 3.OSI七层模型 4.TCP/IP五层(或四层)模型 5.网络和操作系统之间的关系 6.数据包的封装(封包)和解包&#xff0c;分用 &#xff08;1&…

四、文件管理(一)文件系统基础

目录 1.1文件的基本概念 1.2文件控制块和索引结点 1.3文件的操作 1.4文件保护 1.5文件的逻辑结构 1.5.1无结构文件&#xff08;流式文件&#xff09; 1.5.2有结构文件&#xff08;记录式文件&#xff09; 1.5.2.1顺序文件 1.5.2.2索引文件 1.5.2.3索引顺序文件 1.5…

数据库之架构

一、数据库架构原则 高可用 高性能 一致性 扩展性 二、常见的架构方案 方案一&#xff1a;主备架构&#xff0c;只有主库提供读写服务&#xff0c;备库冗余作故障转移用 jdbc:mysql://vip:3306/xxdb 1、高可用分析&#xff1a;高可用&#xff0c;主库挂了&#xff0c;kee…

[ vulhub漏洞复现篇 ] Apache Solr RemoteStreaming 文件读取与SSRF漏洞 (CVE-2021-27905)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

C++11特性-易用性改进

1.字符串的原始字面量 表达式&#xff1a;R"xxx&#xff08;原始字符串&#xff09;xxx"或者R"(原始字符串)"&#xff0c;xxx要写的话&#xff0c;必须一样 //两种申明形式string a "aaa";//没有转义的时候就是原始字面量string b R"aaa(…

总体设计阶段复习

总体设计总体设计(概要设计/初步设计):确定系统模块及相互关系,划分程序,文件,数据库,文档等物理元素设计原理:启发规则图形工具:面向数据流设计方法(SD)总体设计(概要设计/初步设计):确定系统模块及相互关系,划分程序,文件,数据库,文档等物理元素 系统设计阶段 数据流图分析方…

一篇五分生信临床模型预测文章代码复现——Figure 4-6 临床模型构建(六)

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

FineReport智能数据图表- 文本域控件

1. 概述 1.1 版本 报表服务器版本 11.0 1.2 应用场景 1.2.1 填报控件 填报报表中可以通过该控件输入多行文本信息&#xff0c;录入填报的数据&#xff0c;如下图所示&#xff1a; 1.2.2 参数控件 参数面板处可以通过该控件输入多行文本信息&#xff0c;键入查询参数&#…