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

news2024/9/19 10:53:28

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.用户指定的字面量(自定义后缀)

        operator"" xxx

3.指针空值类型-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*

4.常量-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断言、循环等

                4.使用前必须先定义

                5.几乎只有一个return语句(极少数除外)

//常量表达式函数
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)

        常量表达式的为类的构造函数时,函数体必须为空;必须使用常量表达式来给初始化列表赋值

5.静态断言static_assert

        C语言的assert在运行阶段,对断言进行检查。条件为真,执行程序;条件为假,执行about()

        C++的static_assert在编辑阶段对断言进行检查。

6.noexcept修饰符

        代表函数不能抛出异常,抛出异常就报错(使用noexcept答题throw())

//函数不能抛出异常,抛出异常则报错
void test_noexcept1() throw() {
	//throw 2;
}

//函数不能抛出异常,抛出异常则报错
//C++11用noexcept代替throw()
void test_noexcept() noexcept {
	//throw 1;
}

7.强类型枚举

        在enum后面加struct或者class修饰,使用时必须加上作用域;并且可以指定成员变量的类型

	//一般枚举
	enum MyEnum{OK,Error};
	//“test_enum::OK” : 重定义;以前的定义是“枚举数”
	//enum MyEnum1{OK,Error};

	//强类型枚举
	//在enum后面加struct或者class修饰

	enum class MyEnum3 { OK, Error };
	enum struct MyEnum4{OK,Error};

	//使用时必须指定哪个作用域
	//MyEnum3 flag = OK; //error
	MyEnum3 flag = MyEnum3::OK; //使用时必须加上作用域

	//可以指定成员变量类型
	enum class MyEnum3 :char{ OK, Error };
	enum struct MyEnum4 :int{ OK, Error };

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

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

相关文章

总体设计阶段复习

总体设计总体设计(概要设计/初步设计):确定系统模块及相互关系,划分程序,文件,数据库,文档等物理元素设计原理:启发规则图形工具:面向数据流设计方法(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;键入查询参数&#…

【车载开发系列】UDS诊断---安全访问服务($0x27)

【车载开发系列】UDS诊断—安全访问服务($0x27) UDS诊断---安全访问服务($0x27【车载开发系列】UDS诊断---安全访问服务($0x27)一.概念定义二.安全控制过程三.报文格式1&#xff09;请求种子2&#xff09;发送密钥3&#xff09;否定响应四.否定响应码列表五.参数定义六.注意事项…

JavaScript基础学习

文章目录什么是JavaScriptJavaScript 运行过程JvaScript 的组成JavaScript的三种书写模式行内式内嵌式外部式JavaScript的输出输出方式输入: prompt输出: alert输出: console.logJavaScript的一些基础语法变量的使用如何理解JS的动态类型&#xff08;弱类型&#xff09;基本数据…

SSM整合:mybatis层-P17

首先构建新的项目。 MYSQL&#xff1a; 在mysql中创建我们需要的表 CREATE DATABASE ssmbuild;USE ssmbuild;DROP TABLE IF EXISTS books;CREATE TABLE books ( bookID INT(10) NOT NULL AUTO_INCREMENT COMMENT 书id, bookName VARCHAR(100) NOT NULL COMMENT 书名, bookCo…

【深入浅出Spring原理及实战】「IOC容器初始化」彻底让你明白和理解运行原理和源码流程

前言介绍 本篇文章篇幅较大&#xff0c;希望读者可以慢慢阅读&#xff0c;建议收藏&#xff0c;分多次阅读学习。 学习源码的过程当中&#xff0c;有几点建议&#xff1a; 一定要学会抓重点&#xff0c;归纳核心类、核心方法、核心步骤&#xff1b; 分析源码我们不需要太过于纠…

MongoDB 存储引擎

简单回顾 上次我们说到了关于 mongodb 的集群&#xff0c;分为主从集群和分片集群&#xff0c;对于分片集群中的分片这里需要注意如下几点&#xff0c;一起来回顾一下&#xff1a; 对于热点数据某些分片键&#xff08;分片键是集合中每个文档中存在的索引字段或复合索引字段&a…

qt历史数据管理模块(模块化程序)功能块复制直接使用不冲突

一、前言 qt对历史数据管理部分个人总结的模块化程序&#xff0c;直接按照步骤复制粘贴程序&#xff0c;直接实现历史数据管理功能&#xff0c;无需花费脑筋在理清各个思路&#xff0c;适合快速编写组装程序 二、环境 windows qt5.7 sqlite3 三、正文 建议参照前文&…

【uni-app】uni-app之云开发uniCloud跨全栈开发笔记总结,包括一个 schema自动生成代码小案例(附详细截图)

1- 前言 本文主要讲解如何使用uni-app 和 uniCloud 云开发&#xff0c;实现小案例&#xff0c;不需要后端&#xff0c;来实现全栈开发。 2- 概念 2.1 什么是uni-app uni-app 是一个使用Vue.js开发所有前端应用的框架&#xff0c;开发者编写一套代码&#xff0c;可发布到iOS、…

对信息系统生命周期各阶段进行风险评估的要点汇总

概述 风险评估应贯穿于评估对象生命周期 各阶段中。评估对象生命周期各阶段中涉及的风险评估原则和方法昆一致的&#xff0c;但由干各阶段实施内容对象、安全需求不同.使得风险评估的对象、目的、要求等各方面也有所不同。在规划设计阶段&#xff0c;通过风险评估以确定评估对…

pytorch笔记(九)转置卷积、膨胀卷积

Transposed Convolution (转置卷积) 别名:Fractionally Strided Convolution (小数步长的卷积)、Deconvolution(逆/反卷积) 作用:upsampling(上采样) 模拟: PS:不是恢复原始值(因为一般情况下矩阵不可逆,无法等式左右两边同乘矩阵的逆得到原始矩阵) 转置卷积的…

为什么分布式系统这么火?

做Java的升职空间有限&#xff0c;可以说如果不想一辈子做程序员&#xff0c;只能往其他方向进行拓展&#xff0c;比如做到产品经理之类的或者技术总监。 可如果还是想做和技术相关的职业&#xff0c;那么架构师是很好的一步。 可是要如何做一名优秀的架构师呢&#xff1f; …

每天五分钟机器学习:经典的机器学习PCA的核心——特征分解技术

本节重点 本节我们将学习特征分解,特征分解是矩阵分析中非常重要的概念,它也可以应用到PCA算法中,本节先讲解什么是特征分解,然后讲解特征分解在PCA算法中的应用。 数学知识准备 如上所示是方差的定义,方差是度量一组数据的分散程度 如上所示是方差的定义,协方差是…

BSP板机支持包、linux启动分析、ARM裸机编程

文章目录一、BSP二、驱动驱动的基本要素三、启动分析1.uboot2.uboot的作用3.uboot相关命令关键的内容&#xff1a;1&#xff09;bootargs&#xff0c;启动参数2&#xff09;启动命令3&#xff09;修改启动延时时间4&#xff09;复位开发板5&#xff09;修改本地IP地址6&#xf…

Matlab群体智能优化算法之大鲹鱼优化算法(GTO)

Giant Trevally Optimizer : A Novel Metaheuristic Algorithm for Global Optimization and Challenging 一、灵感来源二、算法的初始化三、GTO的数学模型  Phase1&#xff1a;广泛搜索  Phase2&#xff1a;选择区域  Phase3&#xff1a;攻击四、流程图五、伪代码六、实…

[附源码]计算机毕业设计四川景区管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

SWT Table列自适应大小

要实现列自适应大小首先需要保证Table根据窗口拖动而改变大小。 Window中提供setShellStyle可以设置外壳样式。 构造一个新的自定义器对话框&#xff0c;在构造函数中添加setShellStyle(getShellStyle() | SWT.RESIZE);即可改变自定义对话框大小&#xff0c;如&#xff1a; ge…

[附源码]Python计算机毕业设计SSM教师教学质量评价系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

数据卷(Data Volumes)dockerfile

目录一、宿主机与容器之间的文件拷贝1、利用MySQL镜像安装MySQL服务2、从容器中拷贝文件到宿主机3、从宿主机拷贝文件到容器二、数据卷三、数据卷容器四、Dockerfile1、自定义centos&#xff0c;具备vim及ifconfig作用2、自定义tomcat8一、宿主机与容器之间的文件拷贝 1、利用…