C++11特性-易用性改进
创始人
2024-03-20 19:43:21
0

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<

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

    //避免转义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\\sdfkgjyhk\dsfg\dfsgf\dsrfgdrf";string strR = R"(dsfhkdsfklhjdsklfhjsdsdfkgjyhkdsfgdfsgfdsrfgdrf)";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 
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; //errorMyEnum3 flag = MyEnum3::OK; //使用时必须加上作用域//可以指定成员变量类型enum class MyEnum3 :char{ OK, Error };enum struct MyEnum4 :int{ OK, Error };

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...