C++14的一些新特性

news/2024/9/19 20:40:31/文章来源:https://www.cnblogs.com/xcywt/p/18418780

记录一些C++14的一些特性:

 

函数返回值类型推导:

C++14对函数返回类型推导规则做了优化:

#include <iostream>using namespace std;auto func(int i) {return i;
}int main() {cout << func(4) << endl;return 0;
}

返回值类型推导也可以用在模板中:

#include <iostream>
using namespace std;template<typename T> auto func(T t) { return t; }int main() {cout << func(4) << endl;cout << func(3.4) << endl;return 0;
}

注意

函数内如果有多个return语句,它们必须返回相同的类型,否则编译失败

如果return语句返回初始化列表,返回值类型推导也会失败

如果函数是虚函数,不能使用返回值类型推导

返回类型推导可以用在前向声明中,但是在使用它们之前,翻译单元中必须能够得到函数定义

返回类型推导可以用在递归函数中,但是递归调用必须以至少一个返回语句作为先导,以便编译器推导出返回类型。

auto sum(int i) {if (i == 1)return i;              // return intelsereturn sum(i - 1) + i; // ok
}

 

lambda参数auto:

在C++11中,lambda表达式参数需要使用具体的类型声明:

auto f = [] (int a) { return a; }

在C++14中,对此进行优化,lambda表达式参数可以直接是auto:

auto f = [] (auto a) { return a; };
cout << f(1) << endl;
cout << f(2.3f) << endl;

 

 

变量模板

C++14支持变量模板:

template<class T>
constexpr T pi = T(3.1415926535897932385L);int main() {cout << pi<int> << endl; // 3cout << pi<double> << endl; // 3.14159return 0;
}

 

别名模板:

C++14也支持别名模板:

template<typename T, typename U>
struct A {T t;U u;
};template<typename T>
using B = A<T, int>;int main() {B<double> b;b.t = 10;b.u = 20;cout << b.t << endl;cout << b.u << endl;return 0;
}

 

 

constexpr的限制:

C++14相较于C++11对constexpr减少了一些限制:

C++11中constexpr函数可以使用递归,在C++14中可以使用局部变量和循环

constexpr int factorial(int n) { // C++14 和 C++11均可return n <= 1 ? 1 : (n * factorial(n - 1));
}

在C++14中可以这样做:

constexpr int factorial(int n) { // C++11中不可,C++14中可以int ret = 0;for (int i = 0; i < n; ++i) {ret += i;}return ret;
}

C++11中constexpr函数必须必须把所有东西都放在一个单独的return语句中,而constexpr则无此限制:

constexpr int func(bool flag) { // C++14 和 C++11均可return 0;
}

在C++14中可以这样:

constexpr int func(bool flag) { // C++11中不可,C++14中可以if (flag) return 1;else return 0;
}

 

二进制字面量与整形字面量分隔符:

C++14引入了二进制字面量,也引入了分隔符,防止看起来眼花

int a = 0b0001'0011'1010;
double b = 3.14'1234'1234'1234;

 

std::make_unique

我们都知道C++11中有std::make_shared,却没有std::make_unique,在C++14已经改善。

struct A {};
std::unique_ptr<A> ptr = std::make_unique<A>();

 

std::quoted:

C++14引入std::quoted用于给字符串添加双引号,直接看代码:

int main() {string str = "hello world";cout << str << endl;cout << std::quoted(str) << endl;return 0;
}

输出:

~/test$ g++ test.cc -std=c++14
~/test$ ./a.out
hello world
"hello world"

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《鸿蒙/Harmony | 开发日志》选择文件或拍照功能

鸿蒙系统提供无需用户授权的文件选择API,支持照片、视频和文件分类选择,具备临时只读权限,优化了安全性和用户体验。鸿蒙选择文件或拍照的功能,有直接可以用的 API,而且和Android相比,最大的好处,是不需要向用户索要文件权限。 不需要索要权限的原因是,鸿蒙的权限改动升…

EF使用

EF命令使用问题描述: PM> Add-Migration InitialCreate Add-Migration : 无法将“Add-Migration”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 1 + Add-Migration InitialCr…

hackmyvm Hades5变量劫持提权

在这个目录下有个./uid的程序分别运行./uid 和 id 发现我们在 uid一行是有不一样的我们猜测 在./uid里面他先用chown把我们的 uid改写成了anthea 然后运行id 然后再把我们的uid改回andromeda 那么我们怎么拿到这个anthea的权限呢这里就需要用到变量劫持的思想 如果我们把 id 这…

SPDIF接口介绍

SPDIF接口介绍 S/PDIF接口规范详解 S/PDIF是sony和philips在80年代为一般家用器材所定制出来的一种数字讯号传输接口,基本上是以AES/EBU(也称AES3)专业用数字接口为参考然后做了一些小变动而成的家用版本。 可以使用成本较低的硬件来实现数字讯号传输。为了定制一个统一的接口…

通过 NSSM 把 FastAPI+Celery+Flower 注册成 3个Windos 服务

通过 NSSM 把 FastAPI+Celery+Flower 注册成 3个Windos 服务 什么是 nssm? 是一个服务封装程序,它可以将普通exe程序封装成服务,实现开机自启动,同类型的工具还有微软自己的srvany,不过nssm更加简单易用,并且功能强大。nssm官网 nssm 常用命令 nssm install servername /…

zblogPHP后台时一切正常,但登出后再次登录提示“错误原因:登录失败;帐户和密码都是对的

当使用 Z-Blog PHP 后台时,如果登出后再次登录提示“错误原因:登录失败”,即使确认账户和密码输入正确,可能的原因包括 cookie 问题、缓存问题、数据库问题或配置问题等。以下是一些排查和解决此类问题的方法: 1. 清除浏览器缓存和 cookie问题描述:浏览器缓存或 cookie 可…

想成为Admineloper?Salesforce全新职业解析,机会就在眼前!

每个Salesforce管理员在思考自己的职业生涯时,可能都会想到:下一步是往架构师,或者开发,还是咨询的方向发展。无论哪种职业规划,都需要培养新的技能。 由于角色职责、团队、客户需求等的变化,许多管理员在晋升之前就开始培养这种新技能。管理员可能需要学习Apex或利用现有…

zblog静态分类目录访问出现403错误

当使用 Z-Blog 静态化分类目录后出现 403 错误,这通常意味着服务器拒绝了访问请求,可能是由于权限设置不当、Web 服务器配置错误或其他安全限制导致的。以下是针对不同情况的一些常见解决方案。 1. 检查文件和目录权限问题描述:文件或目录权限设置不正确可能导致 403 错误。…

zblog建站设置静态化以后网页出现403错误

当使用 Z-Blog 建站并设置了静态化后,如果遇到 403 错误,这通常表示服务器拒绝了请求,可能是由于权限设置不当、Web 服务器配置错误或其他安全限制导致的。以下是针对不同 Web 服务器(如 Apache 和 Nginx)的一些常见解决方案。 对于 Apache 服务器 1. 检查文件和目录权限问…

代码随想录算法训练营,9月18日 | 77.组合,216.组合总和III,17.电话号码的字母组合

回溯算法理论基础: 1.回溯是递归的副产品,有递归就有回溯。 2.回溯的本质是穷举,想让回溯法高效些,可以加一些剪枝的操作 3.组合问题:N个数里面按一定规则找出k个数的集合 切割问题:一个字符串按一定规则有几种切割方式 子集问题:一个N个数的集合里有多少符合条件的子集…

火山引擎数智平台:高性能ChatBI的技术解读和落地实践

导读:大模型能力的发展和成熟,催生出新一代智能化 BI—— ChatBI,即通过自然语言处理(NLP)与大型语言模型(LLMs)的结合,极大简化数据分析过程,提高效率并降低分析门槛。火山引擎数智平台旗下智能数据洞察产品 DataWind 近期上线 ChatBI 能力,提供智能修复、多语法适用…

zblog php404页面,图文详解zblogphp如何自定义404错误页面?zblogphp设置404的方法

在 Z-Blog PHP 中自定义 404 错误页面是一个相对简单的过程。以下是详细的步骤,帮助你完成自定义 404 页面的工作。 1. 创建 404 页面模板 步骤 1:创建 404 页面模板文件在你的 Z-Blog PHP 主题目录下创建一个名为 404.php 的文件。 打开这个文件并编写你的 404 页面模板代码…