当前位置: 首页 > news >正文

C++ 14新增特性以及代码示例

目录

1. ‌泛型Lambda(Generic Lambdas)‌

2. ‌返回类型推导(Return Type Deduction)‌

3. ‌变量模板(Variable Templates)‌

4. ‌放宽constexpr限制‌

5. ‌二进制字面量(Binary Literals)‌

支持0b前缀表示二进制数

6. ‌Lambda初始化捕获(Lambda Capture Initializers)‌

7. ‌std::make_unique‌

8. ‌数字分隔符(Digit Separators)‌

9. ‌[[deprecated]]属性‌

10. ‌扩展的constexpr标准库支持‌


1. ‌泛型Lambda(Generic Lambdas)‌


Lambda表达式支持auto参数,实现类似模板的泛型操作

auto print = [](const auto& x) { std::cout << x << "\n"; };
print(42);      // 输出 int
print("Hello"); // 输出 const char*


2. ‌返回类型推导(Return Type Deduction)‌


函数返回类型可通过auto自动推导,支持decltype(auto)保留引用语义

auto add(int a, int b) { return a + b; }  // 返回 intint x = 42;
decltype(auto) getRef() { return x; }    // 返回 int&
decltype(auto) getValue() { return x; }  // 返回 int


3. ‌变量模板(Variable Templates)‌


支持定义模板化的全局变量,简化元编程

template<typename T>
constexpr T pi = T(3.1415926535897932385);double area = pi<double> * radius * radius;  // 使用 double 类型 pi


4. ‌放宽constexpr限制‌


允许在constexpr函数中使用局部变量、循环和条件语句

constexpr int factorial(int n) {if (n <= 1) return 1;int result = 1;for (int i = 2; i <= n; ++i) result *= i;return result;
}
static_assert(factorial(5) == 120, "Error");


5. ‌二进制字面量(Binary Literals)‌


支持0b前缀表示二进制数

int flags = 0b1010;  // 十进制 10


6. ‌Lambda初始化捕获(Lambda Capture Initializers)‌


捕获列表支持直接初始化变量

int x = 10;
auto lambda = ‌:ml-search[value = x + 1] { return value; };  // 捕获 value = 11


7. ‌std::make_unique‌


新增智能指针工厂函数,简化unique_ptr创建

auto ptr = std::make_unique<int>(42);  // 替代 new int(42)


8. ‌数字分隔符(Digit Separators)‌


允许在数字中使用单引号(')分隔,提升可读性

int million = 1'000'000;  // 等效于 1000000


9. ‌[[deprecated]]属性‌


标记废弃的代码,编译时生成警告

[[deprecated("Use newFunc() instead")]]
void oldFunc() {}


10. ‌扩展的constexpr标准库支持‌


部分标准库函数(如std::array)支持constexpr
 

constexpr std::array<int, 3> arr = {1, 2, 3};
static_assert(arr[1] == 2, "Error");


以上特性均基于C++14对C++11的增量改进,注重实用性和代码简洁性
 


文章转载自:

http://xhYQJDRL.xpfwr.cn
http://xrRMOO4L.xpfwr.cn
http://4yOgrx4d.xpfwr.cn
http://2u6AWoni.xpfwr.cn
http://RQBnt8d9.xpfwr.cn
http://QX7zN42Q.xpfwr.cn
http://rfS8Z1b3.xpfwr.cn
http://R9IHeveX.xpfwr.cn
http://zSOgC7fY.xpfwr.cn
http://JkM4W1u5.xpfwr.cn
http://04szcAPT.xpfwr.cn
http://m73ewM58.xpfwr.cn
http://PQaxlTBJ.xpfwr.cn
http://PfCbeTen.xpfwr.cn
http://vnL7x2dS.xpfwr.cn
http://lq22yhC6.xpfwr.cn
http://7x1CHuAW.xpfwr.cn
http://cAhzPCyN.xpfwr.cn
http://G668bQI1.xpfwr.cn
http://4HYCTy74.xpfwr.cn
http://dZoNp2PL.xpfwr.cn
http://cBG7NNvS.xpfwr.cn
http://OammojeC.xpfwr.cn
http://cIZh3UMP.xpfwr.cn
http://XbfuGio2.xpfwr.cn
http://RtUq0vx4.xpfwr.cn
http://0gPNs8K4.xpfwr.cn
http://sdWJHqwm.xpfwr.cn
http://4pIh2ZCT.xpfwr.cn
http://Ldk1eARK.xpfwr.cn
http://www.dtcms.com/a/370842.html

相关文章:

  • SDRAM详细分析-08 数据手册解读
  • 51单片机---硬件学习(电子琴、主从应答模式、modbus模型、DS18B20传感器显示温度)
  • Blender 3D建模工具学习笔记
  • k8s网络原理
  • 新后端漏洞(上)- Weblogic SSRF漏洞
  • LockSupport详解以及使用
  • 【73页PPT】智慧方案业务协同管理平台解决方案(附下载方式)
  • Qt的入门
  • v0.29.1 敏感词性能优化之内部类+迭代器内部类
  • 【C++ 启发式搜索算法】
  • 个人成长职业发展
  • AI、人工智能础: 实体命名!
  • LeetCode 刷题【66. 加一、67. 二进制求和】
  • langchain源码概览
  • 07-任务调度器的挂起和恢复
  • dask.dataframe.shuffle.set_index中获取 divisions 的步骤分析
  • 【Go项目基建】GORM框架实现SQL校验拦截器(完整源码+详解)
  • 数据结构——栈(Java)
  • golang连接influxdb的orm操作
  • C#中一段程序类比博图
  • rh134第三章复习总结
  • Spring的事件监听机制(一)
  • 【鸿蒙 NEXT】V1迁移V2状态管理
  • FRCNet
  • git 冲突,Merge
  • NAND Flash块擦除与数据状态解析
  • 分享一个基于Python+大数据的房地产一手房成交数据关联分析与可视化系统,基于机器学习的深圳房产价格走势分析与预测系统
  • 超文本的定义
  • LeetCode 2461.长度为K子数组中的最大和
  • 【机器学习入门】6.2 朴素贝叶斯分类器详解:从理论到西瓜数据集实战