C++进阶学习(二)字面量、noexcept

news/2023/6/9 19:17:12

三、字面量

  • 用户定义字面量是对字面量运算符""的重载,双引号后必须以_开头进行命名,重载时函数传入相应的参数类型,如字符串需传入字符串首地址及长度

void operator""_t(const char *str, size_t size)
{cout << str << endl;
}int main()
{cout << "---begin---" << endl;"hello world"_t;cout << "---end---" << endl;return 0;
}

输出结果:

---begin---
hello world
---end---

标准库中的字面量后可能不加_

int main()
{cout << "---begin---" << endl;using namespace literals;cout << "hello world"s << endl;cout << "---end---" << endl;return 0;
}

输出结果:

---begin---
hello world
---end---

*同样,我们还可以对数字类型进行定义

size_t operator""_i(size_t n)
{return n + 1;
}int main()
{cout << "---begin---" << endl;cout << 5_i << endl;cout << "---end---" << endl;return 0;
}

输出结果:

---begin---
6
---end---

但是,字面量运算符仅允许包括const char*, size_t, long double, unsigned long long int, char等在内的形参列表,而不包含常用的int, double等类型。


四、noexcept关键字

  • 异常说明符noexcept既可以用作说明符,也可以用作运算符

  • 当函数进行noexcept运算时,默认返回false,当函数被noexcept修饰时返回值为true

  • 作为说明符时,也可以通过noexcept(表达式)的方式进行指定

void func1()
{cout << "func1" << endl;
}void func2() noexcept
{cout << "func2" << endl;
}int main()
{cout << "---begin---" << endl;cout << noexcept(func1()) << endl;cout << noexcept(func2()) << endl;cout << "---end---" << endl;return 0;
}

输出结果:

---begin---
0
1
---end---

  • 不能仅通过异常说明的不同实现函数重载

void func()
{cout << "func" << endl;
}void func() noexcept
{cout << "func" << endl;
} 
// error: redefinition of 'void func()'

  • C++17起,noexcept会作为函数的一部分,指向不会抛出异常的函数指针可以隐式转换到可能会抛出异常的函数指针,反之则不行

void func1()
{cout << "func1" << endl;
}void func2() noexcept
{cout << "func2" << endl;
}int main()
{cout << "---begin---" << endl;// void (*ptr1)() noexcept = func1;  /*error*/void (*ptr)() = func2;cout << "---end---" << endl;return 0;
}

  • 作为运算符时,noexcept与typeid,sizeof,decltype,requires类似,其操作数都是不求值表达式,这些运算符都只会查询操作数的编译期性质

int main()
{cout << "---begin---" << endl;int i = 0;cout << noexcept(i++) << endl;cout << i << endl;cout << "---end---" << endl;return 0;
}

输出结果:

---begin---
1
0
---end---

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

大话uboot 移植

结合作者多年的移植经验&#xff0c;尽量简单的为大家描述一个uboot 的移植过程。希望通过描述&#xff0c;给初入移植行道的你带来美好的希望。接下来&#xff0c;我们通过以下几个方面来描述。 1. arm soc 的启动方式 在描述soc 前&#xff0c;我们先看下一个简单的arm soc:…

U-boot移植方法

环境&#xff1a; ubuntu 20.04 开发板&#xff1a;FS4412&#xff08;Cortex-A9&#xff09; u-boot版本&#xff1a;2013.01 u-boot启动选项&#xff1a; (1) SD卡启动 Bootloader 程序在sd卡启动 (2) EMMC启动 flash启动 BootLoader的程序在flash中 u-boot源码目…

java中io指的是什么,「Java基础知识」Java中的IO是指什么

原标题&#xff1a;「Java基础知识」Java中的IO是指什么I/O为input(输入)/ output(输出)的简称&#xff0c;在Java中input和output代表将数据从其他地方写入程序例如从文件中读取文件&#xff0c;将文件内容保存在程序内存中&#xff0c;output代表程序将数据输出到某些地方&am…

网络IO的理解

Unix/Linux系统下IO主要分为磁盘IO&#xff0c;网络IO&#xff0c;我今天主要说一下对网络IO的理解&#xff0c;网络IO主要是socket套接字的读(read)、写(write)&#xff0c;socket在Linux系统被抽象为流(stream)。 网络IO模型 在Unix/Linux系统下&#xff0c;IO分为两个不同…

STM32 IO 简介

STM32 IO 简介1.IO介绍2.仿真与下载1.IO介绍 STM32 的 IO 口可以由软件配置成如下 8 种模式&#xff1a; 1、 输入浮空 2、 输入上拉 3、 输入下拉 4、 模拟输入 5、 开漏输出 6、 推挽输出 7、 推挽式复用功能 8、 开漏复用功能 每个 IO 口可以自由编程&#xff0c; 但 IO 口…

java中io是什么_深入理解Java中的IO

深入理解Java中的IO转载自:http://blog.csdn.net/qq_25184739/article/details/51205186本文的目录视图如下&#xff1a;Java IO概要a.Java IO中常用的类b.Java流类的类结构图1.流的概念和作用2.Java IO所采用的模型 :3.IO流的分类4.Java IO流对象1.输入字节流InputStream2.输…

服务器磁盘IO是什么意思?SATA和固态硬盘的性能差异

服务器磁盘IO是什么意思&#xff1f;SATA和固态硬盘的性能差异服务器磁盘IO概念SATA和固态硬盘概念固态硬盘&#xff08;SSD&#xff09;的优点与不足一、固态硬盘的优点A、数据存取速度快B、经久耐用、防震抗摔C、工作静音D、体积小、重量轻二、固态硬盘的不足A、成本过高B、标…